COMPILATION LISTING OF SEGMENT gcos_mme_rout_ Compiled by: Multics PL/I Compiler, Release 28b, of April 11, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 09/09/83 1154.9 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* ******************************************************************************************* 12* ******************************************************************************************* 13* * 14* * 15* * M M E G E R O U T 16* * 17* * MME GEROUT enables a user program to send output to and receive input 18* * from a remote terminal and to request terminal type. 19* * 20* * The following operations are implemented - 21* * 22* * 3 (octal) - Direct Access Output 23* * 4 (octal) - Direct Access Output, Then Input 24* * 5 (octal) - User Program Inquiry to Terminal 25* * 6 (octal) - Program Requests Terminal Type 26* * 17 (octal) - Program Requests Line Disconnect 27* * 20 (octal) - Direct Access Current Line Status 28* * 29* * All operations not implemented fall into the categories of paper tape 30* * manipulation or line switching. 31* * 32* * Output is written to the stream "user_output" and input is read from 33* * the stream "user_input". Data is translated to and from the Multics 34* * standard data format. This allows the stream names to be associated 35* * with any type of device. The edited i/o mode is used for output to 36* * suppress escape printing. 37* * 38* * A terminal break is simulated by a QUIT followed by the command 39* * "program_interrupt". 40* * 41* * Direct access is established (if not already) on any correct call with 42* * operation code 3, 4, or 5. 43* * 44* * WRITTEN BY DAVID KAYDEN JANUARY 1974 45* * Modified by M. R. Jordan, October 1977 46* * Modified by A. N. Kepner, March 1978 to allow courtesy call i/o within cc routines 47* * 48* ******************************************************************************************* 49* ****************************************************************************************** */ 50 51 gcos_mme_rout_: proc (mcp, increment); 52 53 54 55 56 /* D E C L A R A T I O N S */ 57 58 59 60 1 1 /* BEGIN INCLUDE FILE gcos_ext_stat_.incl.pl1 */ 1 2 /* 1 3* Changes to gcos_ext_stat_ must be made here AND gcos_ext_stat_.cds 1 4**/ 1 5 /* July 77 (MRJ) Mike Jordan. */ 1 6 /* Change: Mel Wilson Oct 1979 for gtss compatibility (Bell Canada). */ 1 7 /* Change: A. N. Kepner, March, 1978 to allow courtesy call i/o within cc routines. */ 1 8 /* Change: Dave Ward 06/01/81 Reorganized to eliminate alm object (using cds). Use of like structures. */ 1 9 /* Change: Scott C. Akers 01/26/82 Add tape_buffer_size for GEINOS processing. */ 1 10 /* Change: Ron Barstad 83-08-02 Added activity_card_num for execution report */ 1 11 /* Increased size of statistics for 4js3 MMEs */ 1 12 1 13 dcl gcos_ext_stat_$abort_reason char(128) varying /* abort reason from gcos pgm */ ext; 1 14 dcl gcos_ext_stat_$abort_return label /* abort return point */ ext; 1 15 dcl gcos_ext_stat_$activity_card_num pic "9999" ext; /* card number defining current activity */ 1 16 dcl gcos_ext_stat_$activity_name char(8) /* name of activity to be run */ ext; 1 17 dcl gcos_ext_stat_$activity_start_time fixed bin(71) /* TOD start of activity */ ext; 1 18 dcl gcos_ext_stat_$card_num pic "9999" /* ordinal number of card in input stream */ ext; 1 19 dcl gcos_ext_stat_$dbs (36)bit(1) /* Debugging switch. */ ext; 1 20 dcl gcos_ext_stat_$default_nondollar char(2) /* filecode where nondollar cards go by default */ ext; 1 21 dcl gcos_ext_stat_$dir_rings (3) fixed bin(3) /* ring brackets for created catalogs */ ext; 1 22 dcl gcos_ext_stat_$dpno char(100) varying /* arguments for call to dpunch */ ext; 1 23 dcl gcos_ext_stat_$dpo char(100) varying /* arguments for call to dprint */ ext; 1 24 dcl gcos_ext_stat_$endfc char(2) /* endfc value for endcopy processing */ ext; 1 25 dcl gcos_ext_stat_$er ptr /* fib pointer for *er */ ext; 1 26 dcl gcos_ext_stat_$etc_filecode char(2) /* filecode where $ ETC cards should be written */ ext; 1 27 dcl gcos_ext_stat_$gcos_slave_area_seg ptr /* pointer to gcos slave area segment */ ext; 1 28 dcl gcos_ext_stat_$gf fixed bin(24)/* sw used by getfield rtn */ ext; 1 29 dcl gcos_ext_stat_$incode fixed bin(24) /* switches to control incode processing */ ext; 1 30 dcl gcos_ext_stat_$increment_hold fixed bin(24) /* Holds increment for courtesy call returns. */ ext; 1 31 dcl gcos_ext_stat_$initial_cpu_time fixed bin(71) /* vcu time at activity start */ ext; 1 32 dcl gcos_ext_stat_$input_segment_path char(168) varying /* pathname of input segment */ ext; 1 33 dcl gcos_ext_stat_$jcl_warnings fixed bin(24) /* number warnings issued processing control cards */ ext; 1 34 dcl gcos_ext_stat_$job_cpu_time fixed bin(71) /* cpu usage at job start */ ext; 1 35 dcl gcos_ext_stat_$job_id char(18) varying /* unique job id for file naming */ ext; 1 36 dcl gcos_ext_stat_$job_real_time fixed bin(71) /* job start time in microseconds */ ext; 1 37 dcl gcos_ext_stat_$last_mme fixed bin(24)/* number of last mme executed */ ext; 1 38 dcl gcos_ext_stat_$ldrss fixed bin(24) /* loader shared stg. */ ext; 1 39 dcl gcos_ext_stat_$max_activities fixed bin(24)/* max activities in a job */ ext; 1 40 dcl gcos_ext_stat_$max_mem fixed bin(19) /* maximum memory available to an activity */ ext; 1 41 dcl gcos_ext_stat_$mme_rtrn label /* where to return at activity end */ ext; 1 42 dcl gcos_ext_stat_$nondollar char(2) /* non-dollar card file code */ ext; 1 43 dcl gcos_ext_stat_$nongcos char(2) /* filecode where nongcos dollar cards go */ ext; 1 44 dcl gcos_ext_stat_$normal_return label /* nonlocal goto for normal termination */ ext; 1 45 dcl gcos_ext_stat_$patchfile_ptr ptr /* pointer to patchfile */ ext; 1 46 dcl gcos_ext_stat_$pathname_prefix char(168)var ext; 1 47 dcl gcos_ext_stat_$pch ptr /* pointer to fib for syspunch collector file */ ext; 1 48 dcl gcos_ext_stat_$pdir char(168) varying /* pathname of process directory */ ext; 1 49 dcl gcos_ext_stat_$prt ptr /* pointer to fib for sysprint collector file */ ext; 1 50 dcl gcos_ext_stat_$rs ptr /* pointer to fib for geload r* collector file */ ext; 1 51 dcl gcos_ext_stat_$saveseg_ptr ptr /* pointer to save segment used by save/restart */ ext; 1 52 dcl gcos_ext_stat_$save_dir char(168) varying /* pathname of temp save directory */ ext; 1 53 dcl gcos_ext_stat_$seg_rings (3) fixed bin(3) /* ring brackets for created files */ ext; 1 54 dcl gcos_ext_stat_$sig_ptr ptr /* saved pointer to signal_ */ ext; 1 55 dcl gcos_ext_stat_$skip_umc bit(1) ext; 1 56 dcl gcos_ext_stat_$snumb bit (30) aligned /* snumb of the current job */ ext; 1 57 dcl gcos_ext_stat_$sought_label char(8) /* Label from GOTO, IF, or WHEN card */ ext; 1 58 dcl gcos_ext_stat_$statistics (3*44) fixed bin(24) /* mme usage statistics- 3 per mme */ ext; 1 59 dcl gcos_ext_stat_$stop_code fixed bin(24) /* debugging, print results and stop. */ ext; 1 60 dcl gcos_ext_stat_$storage_limit fixed bin(19) /* activity storage limit */ ext; 1 61 dcl gcos_ext_stat_$sysout_limit fixed bin(35) /* sysout line limit */ ext; 1 62 dcl gcos_ext_stat_$sysout_lines fixed bin(35) /* sysout lines used */ ext; 1 63 dcl gcos_ext_stat_$system_free_pointer ptr /* pointer to area for allocating in ext; set by gcos */ ext; 1 64 dcl gcos_ext_stat_$tape_buffer_size fixed bin(35) external static; /* tape buffer size for GEINOS. */ 1 65 dcl gcos_ext_stat_$temp_dir char(168) varying /* pathname of directory to hold temp files */ ext; 1 66 dcl gcos_ext_stat_$temp_seg_ptr ptr ext; 1 67 dcl gcos_ext_stat_$termination_code bit (18) /* termination code from gcos_mme_bort_ */ ext; 1 68 dcl gcos_ext_stat_$time_limit fixed bin(71) /* activity time limit */ ext; 1 69 dcl gcos_ext_stat_$userid char(12) /* the USERID */ ext; 1 70 dcl gcos_ext_stat_$validation_level fixed bin(3) /* current ring of execution */ ext; 1 71 1 72 /* Courtesy Call Queue 1 73* A queue for courtesy call addresses which must be saved during 1 74* execution of courtesy call routines. A courtesy call address is 1 75* saved each time a MME GEROUT or MME GEINOS, which specifies a 1 76* courtesy call, is executed within a courtesy call routine. Each 1 77* time a MME GEENDC is executed a courtesy call address will be 1 78* removed from this FIFO queue and the corresponding courtesy call 1 79* routine executed until the queue is empty. The FIFO "queue" is 1 80* implemented in a circular fashion. "next_avail" points to the 1 81* next empty location in the queue. "next_out" points to the 1 82* entry in the queue which has been in the queue longest. When 1 83* entering or removing entries from the queue the appropriate index 1 84* is incremented modulo the length of the queue. By convention the 1 85* queue is empty when "next_avail" equals "next_out". A 1 86* second convention is that the queue is considered to overflow 1 87* during an attempt to add an entry to the queue which would force 1 88* "next_avail" to "catch up" with "next_out". This means that 1 89* the last empty position in the queue will never be used. 1 90**/ 1 91 1 92 dcl 1 gcos_ext_stat_$courtesy_call_control aligned ext 1 93 , 3 courtesy_call 1 94 , 4 hold like save_machine_conditions /* Mach. conds. restored on courtesy call returns. */ 1 95 , 4 next_avail fixed bin(24) /* next available empty location in cc_queue. */ 1 96 , 4 next_out fixed bin(24) /* next entry to remove from cc_queue. */ 1 97 , 4 queue (6) fixed bin(24) 1 98 ; 1 99 2 1 /* BEGIN INCLUDE FILE gcos_save_mc.incl.pl1 (Wardd Multics) 09/12/81 0905.9 mst Sat */ 2 2 2 3 /* Structure to isolate the definition of the size of the 2 4*space needed to store he machine conditions structure (mc). 2 5**/ 2 6 dcl 1 save_machine_conditions based 2 7 , 3 save_space bit(1728) 2 8 ; 2 9 2 10 /* END INCLUDE FILE gcos_save_mc.incl.pl1 */ 1 100 1 101 1 102 dcl 1 gcos_ext_stat_$fct aligned ext, 1 103 3 fct (40) like fct_entry; 3 1 /* BEGIN INCLUDE FILE gcos_fct_entry.incl.pl1 (Wardd Multics) 05/30/81 1758.6 mst Sat */ 3 2 3 3 dcl 1 fct_entry aligned based, 3 4 2 filecode char(2) aligned, /* file code (or blank) */ 3 5 /* flags */ 3 6 2 sysout bit(1) unaligned, /* 1=file is sysout or dac */ 3 7 2 dac bit(1) unaligned, /* 1=file is dac,0=file is sysout */ 3 8 2 pad bit(34) unaligned, /* unused */ 3 9 2 fibptr ptr aligned /* ptr to fib for this file */ 3 10 ; 3 11 3 12 /* END INCLUDE FILE gcos_fct_entry.incl.pl1 */ 1 104 1 105 1 106 dcl 1 gcos_ext_stat_$save_data aligned ext, 1 107 3 save_data like save_data_entry; 4 1 /* BEGIN INCLUDE FILE gcos_save_data_entry.incl.pl1 (Wardd Multics) 07/01/81 1339.9 mst Wed */ 4 2 /* Change: Dave Ward 07/01/81 include gcos_flags_. */ 4 3 /* Change: Dave Ward 09/10/81 fib changed to fibs & likened to fib. */ 4 4 4 5 dcl 1 save_data_entry aligned based 4 6 ,3 flgs like flags /* system wide flgs */ 4 7 ,3 actid char(8) /* activity no. and accnt i.d. */ 4 8 ,3 short_actid bit(36) aligned /* short form of activity id */ 4 9 ,3 ident char(60) /* holds ident info from snumb card */ 4 10 ,3 psw bit(36) aligned /* program switch word */ 4 11 ,3 last_execute_act_no fixed bin(24)/* activity number of last $ EXECUTE card in job */ 4 12 ,3 activity_no fixed bin(24)/* activity number */ 4 13 ,3 job_time_limit fixed bin(71) /* job time limit */ 4 14 ,3 job_sysout_limit fixed bin(24)/* job sysout line limit */ 4 15 ,3 sysout_queue (10) char(32) /* sysout queue */ 4 16 ,3 sysout_queue_media (10) fixed bin(24)/* medium (print,punch) of each file on queue */ 4 17 ,3 sqindex fixed bin(24)/* curr offset in sysout queue */ 4 18 ,3 pathname_prefix char(168)varying /* prefix for gcos cfdescs */ 4 19 ,3 skip_umc aligned bit(1) /* flag to tell if we should skip umc names */ 4 20 ,3 job_deck pointer /* pointer to seg holding canonicalized job deck */ 4 21 ,3 jd_size fixed bin(24)/* size in words of job deck */ 4 22 ,3 jd_position fixed bin(24) /* position of current block of job deck */ 4 23 ,3 jd_rem_block_len fixed bin(24)/* words remaining in current block of job deck */ 4 24 ,3 syot_dir char(168)varying /* pathname of directory to hold sysout files */ 4 25 ,3 fibs (40) like fib 4 26 ,3 param (32) char(57)varying /* parameters */ 4 27 ; 4 28 5 1 /* BEGIN INCLUDE FILE gcos_flags.incl.pl1 (Wardd Multics) 07/01/81 1344.7 mst Wed */ 5 2 /* Change: Mel Wilson 03/01/79 to add gtssflag & identflag */ 5 3 /* Change: Dave Ward 07/01/81 revised, mad apart of gcos_ext_stat_. */ 5 4 5 5 5 6 /* Declaration of Simulator Wide Flags */ 5 7 5 8 dcl 1 flags aligned based, 5 9 2 ( 5 10 pad1, /* no longer used */ 5 11 copy, /* 1=copy option on|0=off */ 5 12 snumb, /* 1=snumb card read|0=not */ 5 13 ident, /* 1=ident card read|0=not */ 5 14 activ, /* 1=activity being defined|0=not */ 5 15 cc, /* 1=courtesy call active|0=not */ 5 16 pad2, /* no longer used */ 5 17 cksum, /* 1=don't check checksums|0=do */ 5 18 pad3, /* no longer used */ 5 19 wrapup, /* 1=processing wrapup after abort */ 5 20 5 21 /* FOLLOWING ADDED AFTER MARCH 73 */ 5 22 5 23 nosave, /* 1=disable save/restart function,0=not */ 5 24 pad4, /* no longer used */ 5 25 gcos, /* 1=job deck segment in gcos file format */ 5 26 raw, /* 1=sysout punch files to be converted to raw bit strings */ 5 27 list, /* 1=sysout print files to be converted to ascii */ 5 28 brief, /* 1=print nothing but fatal error messages on terminal */ 5 29 debug, /* 1=give option to call debug before aborting */ 5 30 no_canonicalize, /* 1=do NOT canonicalize job deck */ 5 31 5 32 /* 18 bits into first word */ 5 33 5 34 pad5, /* no longer used */ 5 35 dpunch, /* 1=dpunch sysout punch files;0=don't */ 5 36 dprint, /* 1=dprint sysout print files,0=don't */ 5 37 userid, /* 1=userid card read,0=not */ 5 38 userlib, /* 1= -userlib ctl arg given, see gcos_gein_ */ 5 39 dstar, /* 1=current activity card written on d* */ 5 40 write_etc, /* 1 tells get_cc_field to write $ ETC cards on etc_filecode */ 5 41 prev_act_abort, /* turned on by abort and off by $ BREAK */ 5 42 this_act_abort, /* turned on by abort to select abort disp codes */ 5 43 abort_subact, /* 1=processing abort subactivity */ 5 44 dump, /* 1=dump option given on activity card */ 5 45 nondollar, /* 1=reading nondollar card deck in gein */ 5 46 endjob, /* 1=cc_endjob already called once in this job */ 5 47 abort_card, /* 1=the terminator for this activity was a $ ABORT card */ 5 48 truncate, /* 1=truncate option given:truncate long ascii input lines */ 5 49 continue, /* 1=continue option given:continue after nonfatal errors */ 5 50 rout, /* 1=gcos_mme_rout_ was called in this activity */ 5 51 seeking, /* 1=gein is looking for a label and/or terminator */ 5 52 5 53 /* end of first word */ 5 54 5 55 seeking_terminator, /* 1=gein is looking for a terminator */ 5 56 lower_case, /* 1=lower case print conversion wanted */ 5 57 no_bar, /* 1=do not run slave program in BAR mode */ 5 58 long, /* 1=print some lines from execution reort on terminal */ 5 59 endfc, /* 1=process endfc option on endcopy card */ 5 60 gtssflag, /* 1=update gtss_user_state_ during execution */ 5 61 identflag, /* 1= use $ident banner info for print & punch */ 5 62 spawnflag, /* 1= entry due to tss spawn */ 5 63 taskflag /* 1= entry due to tss drl task */ 5 64 ) bit(1) unal, 5 65 2 pad6 bit(27)unal 5 66 ; 5 67 5 68 /* END INCLUDE FILE gcos_flags.incl.pl1 */ 4 29 4 30 4 31 /* END INCLUDE FILE gcos_save_data_entry.incl.pl1 */ 1 108 1 109 6 1 /* BEGIN INCLUDE FILE gcos_file_info_block_.incl.pl1 DAK - APRIL 74 */ 6 2 6 3 /* Declaration of File Information Block (fib) 6 4* 6 5* Change: Mel Wilson 11/01/79 for gtss compatibility 6 6* Change: Dave Ward 05/20/81 *_file constants. 6 7* Change: Dave Ward 05/29/81 separated fct structures. 6 8* Change: Dave Ward 09/02/81 provision for tape density 6250, dens_hist 2 bits (not 3). 6 9**/ 6 10 dcl 1 fib aligned based (fibptr) /* fib structure */ 6 11 6 12 , 2 buffer ptr aligned /* pointer to current buffer (gcos_write_) */ 6 13 , 2 buffer_indx fixed bin /* Index to buffer in use. */ 6 14 , 2 stream char(8)unal /* stream name for attaching this file */ 6 15 , 2 pathnm char(168)unal /* pathname (for disk, print or punch files) */ 6 16 , 2 unique_file_id bit(36) /* multics unique segment id for file */ 6 17 , 2 indicators /* five words of flags */ 6 18 6 19 , 3 indicators_word_1 6 20 , 4 used bit(1) unal /* 1=fib used, 0=fib used */ 6 21 , 4 attached bit(1) unal /* 1=stream is attached */ 6 22 , 4 type bit(1) unal /* 1=random, 0=linked */ 6 23 , 4 perm bit(1) unal /* 1=permanent file, 0=not */ 6 24 , 4 print bit(1) unal /* 1=file type is printer */ 6 25 , 4 punch bit(1) unal /* 1=file type is punch */ 6 26 , 4 reader bit(1) unal /* 1=file type is card reader */ 6 27 , 4 tape bit(1) unal /* 1=file type is tape */ 6 28 , 4 console bit(1) unal /* 1=file type is console typewriter */ 6 29 , 4 read bit(1) unal /* 1=read access permitted */ 6 30 , 4 write bit(1) unal /* 1=write access permitted */ 6 31 , 4 null bit(1) unal /* 1=file is null */ 6 32 , 4 purge bit(1) unal /* 1=purge file at time on release */ 6 33 , 4 gein bit(1) unal /* 1 = this file contains data cards from the job deck */ 6 34 , 4 disp bit(2) unal /* disposition code: 6 35* 00 = dismount 6 36* 01 = release 6 37* 10 = save 6 38* 11 = continue */ 6 39 , 4 adisp bit(2) unal /* abort disp - same codes as disp */ 6 40 , 4 order bit(1) unal /* 1 = write, 0 = read or other */ 6 41 , 4 mode bit(2) unal /* tape i/o mode 6 42* 00 = binary 6 43* 01 = decimal 6 44* 10 = nine */ 6 45 , 4 tracks bit(2) unal /* tape request code: 6 46* 00 = installation default 6 47* 01 = 7 track 6 48* 10 = 9 track */ 6 49 , 4 density bit(4) unal /* tape density from $ TAPE card 6 50* 0000 = site standard high 6 51* 0001 = 200 bpi 6 52* 0010 = 556 bpi 6 53* 0100 = 800 bpi 6 54* 1001 = 1600 bpi 6 55* 1100 = 6250 bpi 6 56* 1111 = handler capable of any appropriate denisty */ 6 57 , 4 dens_hist bit(2) unal /* density history for MME GEFADD */ 6 58 , 4 forced_acl_flag bit(1) unal /* 1 => acl forced for gtss file (2.4) */ 6 59 , 4 fill bit(6) unal /* reserved for future use */ 6 60 , 3 indicators_word_2 6 61 , 4 plud bit(18) unal /* primary log unit designator */ 6 62 /* bcd channel and channel number */ 6 63 6 64 , 4 slud bit(18) unal /* secondary log. unit designator */ 6 65 /* bcd channel and channel number */ 6 66 , 3 indicators_word_3 6 67 , 4 serial_no bit(30) unal /* tape serial number */ 6 68 , 4 pad bit( 6) unal /* unused */ 6 69 , 3 indicators_word_4 6 70 , 4 tape_name bit(72) unal /* tape name */ 6 71 6 72 , 2 current fixed bin(21) /* current file position */ 6 73 , 2 last fixed bin(21) /* eof for sequential disk files */ 6 74 , 2 size fixed bin(24) /* offset of end of file in words */ 6 75 , 2 init_size fixed bin(24) /* file size at start of activity */ 6 76 , 2 init_posit fixed bin(24) /* file position at start of activity */ 6 77 , 2 iocount fixed bin(35) /* total no. of i/o operations */ 6 78 , 2 rec_len fixed bin(24) /* length of current record (gcos_write_) */ 6 79 , 2 command_count fixed bin(17) unal /* size of command table for device (gcos_mme_inos_) */ 6 80 , 2 command_index fixed bin(17) unal /* pointer to command table entry (gcos_mme_inos_) */ 6 81 , 2 error_retry fixed bin(17) unal /* error retry counter */ 6 82 , 2 seq_no fixed bin(17) unal /* tape reel sequence no */ 6 83 ; 6 84 dcl fibptr ptr /* pointer to current fib in gcos_ext_stat_ */; 6 85 6 86 /* File usage classification constants: */ 6 87 dcl linked_file bit(1)static int options(constant)init("0"b); 6 88 dcl random_file bit(1)static int options(constant)init("1"b); 6 89 dcl read_file bit(1)static int options(constant)init("0"b); 6 90 dcl write_file bit(1)static int options(constant)init("1"b); 6 91 6 92 /* END INCLUDE FILE gcos_file_info_block_.incl.pl1 */ 1 110 1 111 1 112 dcl 1 gcos_ext_stat_$mc like mc /* machine condition from abort or fault */ ext; 7 1 /* */ 7 2 /* BEGIN INCLUDE FILE mc.incl.pl1 Created Dec 72 for 6180 - WSS. */ 7 3 /* Modified 06/07/76 by Greenberg for mc.resignal */ 7 4 /* Modified 07/07/76 by Morris for fault register data */ 7 5 /* Modified 08/28/80 by J. A. Bush for the DPS8/70M CVPU */ 7 6 /* Modified '82 to make values constant */ 7 7 7 8 /* words 0-15 pointer registers */ 7 9 7 10 dcl mcp ptr; 7 11 7 12 dcl 1 mc based (mcp) aligned, 7 13 2 prs (0:7) ptr, /* POINTER REGISTERS */ 7 14 (2 regs, /* registers */ 7 15 3 x (0:7) bit (18), /* index registers */ 7 16 3 a bit (36), /* accumulator */ 7 17 3 q bit (36), /* q-register */ 7 18 3 e bit (8), /* exponent */ 7 19 3 pad1 bit (28), 7 20 3 t bit (27), /* timer register */ 7 21 3 pad2 bit (6), 7 22 3 ralr bit (3), /* ring alarm register */ 7 23 7 24 2 scu (0:7) bit (36), 7 25 7 26 2 mask bit (72), /* mem controller mask at time of fault */ 7 27 2 ips_temp bit (36), /* Temporary storage for IPS info */ 7 28 2 errcode fixed bin (35), /* fault handler's error code */ 7 29 2 fim_temp, 7 30 3 unique_index bit (18) unal, /* unique index for restarting faults */ 7 31 3 resignal bit (1) unal, /* recompute signal name with fcode below */ 7 32 3 fcode bit (17) unal, /* fault code used as index to FIM table and SCT */ 7 33 2 fault_reg bit (36), /* fault register */ 7 34 2 pad2 bit (1), 7 35 2 cpu_type fixed bin (2) unsigned, /* L68 = 0, DPS8/70M = 1 */ 7 36 2 ext_fault_reg bit (15), /* extended fault reg for DPS8/70M CPU */ 7 37 2 fault_time bit (54), /* time of fault */ 7 38 7 39 2 eis_info (0:7) bit (36)) unaligned; 7 40 7 41 7 42 dcl (apx fixed bin init (0), 7 43 abx fixed bin init (1), 7 44 bpx fixed bin init (2), 7 45 bbx fixed bin init (3), 7 46 lpx fixed bin init (4), 7 47 lbx fixed bin init (5), 7 48 spx fixed bin init (6), 7 49 sbx fixed bin init (7)) internal static options (constant); 7 50 7 51 7 52 7 53 7 54 dcl scup ptr; 7 55 7 56 dcl 1 scu based (scup) aligned, /* SCU DATA */ 7 57 7 58 7 59 /* WORD (0) */ 7 60 7 61 (2 ppr, /* PROCEDURE POINTER REGISTER */ 7 62 3 prr bit (3), /* procedure ring register */ 7 63 3 psr bit (15), /* procedure segment register */ 7 64 3 p bit (1), /* procedure privileged bit */ 7 65 7 66 2 apu, /* APPENDING UNIT STATUS */ 7 67 3 xsf bit (1), /* ext seg flag - IT modification */ 7 68 3 sdwm bit (1), /* match in SDW Ass. Mem. */ 7 69 3 sd_on bit (1), /* SDW Ass. Mem. ON */ 7 70 3 ptwm bit (1), /* match in PTW Ass. Mem. */ 7 71 3 pt_on bit (1), /* PTW Ass. Mem. ON */ 7 72 3 pi_ap bit (1), /* Instr Fetch or Append cycle */ 7 73 3 dsptw bit (1), /* Fetch of DSPTW */ 7 74 3 sdwnp bit (1), /* Fetch of SDW non paged */ 7 75 3 sdwp bit (1), /* Fetch of SDW paged */ 7 76 3 ptw bit (1), /* Fetch of PTW */ 7 77 3 ptw2 bit (1), /* Fetch of pre-paged PTW */ 7 78 3 fap bit (1), /* Fetch of final address paged */ 7 79 3 fanp bit (1), /* Fetch of final address non-paged */ 7 80 3 fabs bit (1), /* Fetch of final address absolute */ 7 81 7 82 2 fault_cntr bit (3), /* number of retrys of EIS instructions */ 7 83 7 84 7 85 /* WORD (1) */ 7 86 7 87 2 fd, /* FAULT DATA */ 7 88 3 iro bit (1), /* illegal ring order */ 7 89 3 oeb bit (1), /* out of execute bracket */ 7 90 3 e_off bit (1), /* no execute */ 7 91 3 orb bit (1), /* out of read bracket */ 7 92 3 r_off bit (1), /* no read */ 7 93 3 owb bit (1), /* out of write bracket */ 7 94 3 w_off bit (1), /* no write */ 7 95 3 no_ga bit (1), /* not a gate */ 7 96 3 ocb bit (1), /* out of call bracket */ 7 97 3 ocall bit (1), /* outward call */ 7 98 3 boc bit (1), /* bad outward call */ 7 99 3 inret bit (1), /* inward return */ 7 100 3 crt bit (1), /* cross ring transfer */ 7 101 3 ralr bit (1), /* ring alarm register */ 7 102 3 am_er bit (1), /* associative memory fault */ 7 103 3 oosb bit (1), /* out of segment bounds */ 7 104 3 paru bit (1), /* processor parity upper */ 7 105 3 parl bit (1), /* processor parity lower */ 7 106 3 onc_1 bit (1), /* op not complete type 1 */ 7 107 3 onc_2 bit (1), /* op not complete type 2 */ 7 108 7 109 2 port_stat, /* PORT STATUS */ 7 110 3 ial bit (4), /* illegal action lines */ 7 111 3 iac bit (3), /* illegal action channel */ 7 112 3 con_chan bit (3), /* connect channel */ 7 113 7 114 2 fi_num bit (5), /* (fault/interrupt) number */ 7 115 2 fi_flag bit (1), /* 1 => fault, 0 => interrupt */ 7 116 7 117 7 118 /* WORD (2) */ 7 119 7 120 2 tpr, /* TEMPORARY POINTER REGISTER */ 7 121 3 trr bit (3), /* temporary ring register */ 7 122 3 tsr bit (15), /* temporary segment register */ 7 123 7 124 2 pad2 bit (9), 7 125 7 126 2 cpu_no bit (3), /* CPU number */ 7 127 7 128 2 delta bit (6), /* tally modification DELTA */ 7 129 7 130 7 131 /* WORD (3) */ 7 132 7 133 2 word3 bit (18), 7 134 7 135 2 tsr_stat, /* TSR STATUS for 1,2,&3 word instructions */ 7 136 3 tsna, /* Word 1 status */ 7 137 4 prn bit (3), /* Word 1 PR number */ 7 138 4 prv bit (1), /* Word 1 PR valid bit */ 7 139 3 tsnb, /* Word 2 status */ 7 140 4 prn bit (3), /* Word 2 PR number */ 7 141 4 prv bit (1), /* Word 2 PR valid bit */ 7 142 3 tsnc, /* Word 3 status */ 7 143 4 prn bit (3), /* Word 3 PR number */ 7 144 4 prv bit (1), /* Word 3 PR valid bit */ 7 145 7 146 2 tpr_tbr bit (6), /* TPR.TBR field */ 7 147 7 148 7 149 /* WORD (4) */ 7 150 7 151 2 ilc bit (18), /* INSTRUCTION COUNTER */ 7 152 7 153 2 ir, /* INDICATOR REGISTERS */ 7 154 3 zero bit (1), /* zero indicator */ 7 155 3 neg bit (1), /* negative indicator */ 7 156 3 carry bit (1), /* carryry indicator */ 7 157 3 ovfl bit (1), /* overflow indicator */ 7 158 3 eovf bit (1), /* eponent overflow */ 7 159 3 eufl bit (1), /* exponent underflow */ 7 160 3 oflm bit (1), /* overflow mask */ 7 161 3 tro bit (1), /* tally runout */ 7 162 3 par bit (1), /* parity error */ 7 163 3 parm bit (1), /* parity mask */ 7 164 3 bm bit (1), /* ^bar mode */ 7 165 3 tru bit (1), /* truncation mode */ 7 166 3 mif bit (1), /* multi-word instruction mode */ 7 167 3 abs bit (1), /* absolute mode */ 7 168 3 pad bit (4), 7 169 7 170 7 171 /* WORD (5) */ 7 172 7 173 2 ca bit (18), /* COMPUTED ADDRESS */ 7 174 7 175 2 cu, /* CONTROL UNIT STATUS */ 7 176 3 rf bit (1), /* on first cycle of repeat instr */ 7 177 3 rpt bit (1), /* repeat instruction */ 7 178 3 rd bit (1), /* repeat double instruction */ 7 179 3 rl bit (1), /* repeat link instruciton */ 7 180 3 pot bit (1), /* IT modification */ 7 181 3 pon bit (1), /* return type instruction */ 7 182 3 xde bit (1), /* XDE from Even location */ 7 183 3 xdo bit (1), /* XDE from Odd location */ 7 184 3 poa bit (1), /* operation preparation */ 7 185 3 rfi bit (1), /* tells CPU to refetch instruction */ 7 186 3 its bit (1), /* ITS modification */ 7 187 3 if bit (1), /* fault occured during instruction fetch */ 7 188 7 189 2 cpu_tag bit (6)) unaligned, /* computed tag field */ 7 190 7 191 7 192 /* WORDS (6,7) */ 7 193 7 194 2 even_inst bit (36), /* even instruction of faulting pair */ 7 195 7 196 2 odd_inst bit (36); /* odd instruction of faulting pair */ 7 197 7 198 7 199 7 200 7 201 7 202 7 203 /* ALTERNATE SCU DECLARATION */ 7 204 7 205 7 206 dcl 1 scux based (scup) aligned, 7 207 7 208 (2 pad0 bit (36), 7 209 7 210 2 fd, /* GROUP II FAULT DATA */ 7 211 3 isn bit (1), /* illegal segment number */ 7 212 3 ioc bit (1), /* illegal op code */ 7 213 3 ia_am bit (1), /* illegal address - modifier */ 7 214 3 isp bit (1), /* illegal slave procedure */ 7 215 3 ipr bit (1), /* illegal procedure */ 7 216 3 nea bit (1), /* non existent address */ 7 217 3 oobb bit (1), /* out of bounds */ 7 218 3 pad bit (29), 7 219 7 220 2 pad2 bit (36), 7 221 7 222 2 pad3a bit (18), 7 223 7 224 2 tsr_stat (0:2), /* TSR STATUS as an ARRAY */ 7 225 3 prn bit (3), /* PR number */ 7 226 3 prv bit (1), /* PR valid bit */ 7 227 7 228 2 pad3b bit (6)) unaligned, 7 229 7 230 2 pad45 (0:1) bit (36), 7 231 7 232 2 instr (0:1) bit (36); /* Instruction ARRAY */ 7 233 7 234 7 235 7 236 /* END INCLUDE FILE mc.incl.pl1 */ 1 113 1 114 1 115 dcl 1 gcos_ext_stat_$gcos_gtss ext 1 116 , 3 gcos_gtss_ext 1 117 , 4 u_state_ptr ptr 1 118 , 4 snumb_index fixed bin(24) 1 119 , 4 home_path char(168) 1 120 ; 1 121 1 122 /* END INCLUDE FILE gcos_ext_stat_.incl.pl1 */ 61 62 63 /* External Entries */ 64 65 66 dcl continue_to_signal_ ext entry (fixed bin(35)); 67 dcl gcos_et_$bad_cc_ptr fixed bin(35) ext; 68 dcl gcos_et_$bad_mme_in_cc fixed bin(35) ext; 69 dcl gcos_et_$bad_rmt_station_id fixed bin(35) ext; 70 dcl gcos_et_$bad_rout_op_code fixed bin(35) ext; 71 dcl gcos_et_$bad_rout_pgm_id fixed bin(35) ext; 72 dcl gcos_et_$bad_status_ret_ptr fixed bin(35) ext; 73 dcl gcos_et_$invalid_dcw_ptr fixed bin(35) ext; 74 dcl gcos_et_$rmt_term_rec_size fixed bin(35) ext; 75 dcl gcos_mme_bort_$system ext entry options (variable); 76 dcl ioa_ ext entry options (variable); 77 dcl ios_$changemode entry (char (*), char (*), char (*), bit (72) aligned); 78 dcl ios_$read_ptr ext entry (pointer, fixed bin(24), fixed bin(24)); 79 dcl ios_$write_ptr ext entry (pointer, fixed bin(24), fixed bin(24)); 80 81 82 /* Work Variables */ 83 84 85 dcl increment fixed bin(24); /* number of words in mme request */ 86 87 dcl 1 gerout_word aligned based (opptr), /* model of word following mme */ 88 2 buffp bit (18) unaligned, /* buffer pointer */ 89 2 op bit (6) unaligned, /* operation code of request */ 90 2 id bit (12) unaligned; /* terminal id of request */ 91 92 dcl 1 gerout_word_ aligned based (opptr), /* gerout word overlay for op = 20 */ 93 2 term_type bit (6) unaligned, /* terminal type field */ 94 2 pad bit (30) unaligned; 95 96 dcl 1 output_buffer aligned based (buffptr), /* model of output buffer */ 97 2 word_count bit (18) unaligned, /* number of words to send */ 98 2 inputp bit (18) unaligned, /* input buffer location */ 99 2 char_count bit (18) unaligned, /* output character count */ 100 2 control_bits bit (18) unaligned, /* output control bits */ 101 2 data (1280) bit (9) unaligned; /* output character data */ 102 103 dcl 1 input_buffer aligned based (inptr), /* model of input buffer */ 104 2 char_count bit (18) unaligned, /* input character count */ 105 2 control_bits bit (18) unaligned, /* input control bits */ 106 2 data (1280) bit (9) unaligned; /* input character data */ 107 108 dcl 1 return_word aligned based (sptr), /* model of return word */ 109 2 status_return bit (18) unaligned, /* status word pointer */ 110 2 courtesy_call bit (18) unaligned; /* pointer to courtesy call rtn. */ 111 112 dcl 1 status_word aligned based (statptr), /* model of status word */ 113 2 pad bit (30) unaligned, /* unused portion of word */ 114 2 wait bit (1) unaligned, /* line waiting to connect to pgm. */ 115 2 idle bit (1) unaligned, /* terminal is idle */ 116 2 busy bit (1) unaligned, /* terminal is involved in I/O */ 117 2 complete bit (1) unaligned, /* I/O transmission is complete */ 118 2 disconnected bit (1) unaligned, /* terminal is not connected */ 119 2 break bit (1) unaligned; /* operator sent BREAK (quit key) */ 120 121 dcl inquiry_name bit (36) aligned based (nameptr); /* program inquiry identification */ 122 123 dcl 1 table (2) aligned internal static, /* tabled inquiry requests - 2 allowed */ 124 2 name bit (36) aligned, /* inquiry name of request */ 125 2 routptr ptr; /* pointer to inquiry request mme */ 126 127 dcl (buffptr, inptr, gseg, opptr, nameptr, sptr, statptr) ptr; 128 129 dcl 1 courtesy_call_conditions like save_machine_conditions based (mcp); 130 dcl code fixed bin(35); 131 dcl iosbuf (1297) bit (9); 132 dcl new_next_avail fixed bin(24); 133 dcl scratch_word bit (36) aligned; 134 dcl slave_limit fixed bin(19); 135 dcl status bit (72) aligned; 136 dcl (i, j, k) fixed bin(24); 137 138 /* Internal Static Variables */ 139 140 dcl dac_id bit (12) aligned internal static; /* line id of current direct access */ 141 dcl ackno_break bit (1) internal static; 142 dcl old_mode char (128) internal static; 143 dcl skip bit (1) internal static; 144 dcl skip_loc label internal static; 145 146 /* Constants */ 147 148 dcl CR bit (9) internal static init ("015"b3 ); 149 dcl LF bit (9) internal static init ("012"b3 ); 150 dcl NULL bit (9) internal static init ("177"b3 ); 151 dcl zero_word bit (36) aligned internal static init ((36)"0"b); 152 153 dcl (addr, addrel, fixed, substr, unspec) builtin; 154 155 156 157 /* P R O C E D U R E */ 158 159 160 161 162 if ^gcos_ext_stat_$save_data.rout then do; /* once per activity initialization */ 163 dac_id = (12)"0"b; /* not in direct access now */ 164 table.name (1) = zero_word; /* and no requests tabled */ 165 table.name (2) = zero_word; 166 ackno_break = "0"b; 167 skip = "0"b; 168 call ios_$changemode ("user_output", "edited", old_mode, status); 169 gcos_ext_stat_$save_data.rout = "1"b; /* initialization complete */ 170 end; 171 172 gseg = gcos_ext_stat_$gcos_slave_area_seg; /* get local pointer to slave area */ 173 slave_limit = gcos_ext_stat_$storage_limit; /* copy slave storage limit, too */ 174 increment = 2; /* initialize parameter length */ 175 scup = addr (mc.scu); /* get pointer to scu data */ 176 i = fixed (scu.ilc)+1; /* get offset of first parameter word */ 177 opptr = addrel (gseg, i); 178 179 k = fixed (gerout_word.op); /* extract operation code */ 180 181 if k = 5 then go to inquiry; /* remote inquiry requested */ 182 183 if gerout_word.id = (12)"0"b then go to err75; /* zero terminal id is illegal */ 184 185 if k = 6 then go to terminal_type; /* program requests terminal type */ 186 187 if k ^= 3 then /* check remaining implemented codes */ 188 if k ^= 4 then 189 if k ^= 15 then /* if no match then operation is */ 190 if k ^= 16 then go to err72; /* undefined or not implemented */ 191 /* not implemented */ 192 sptr = addrel (opptr, 1); /* return word follows operation word */ 193 if fixed (return_word.status_return) >= slave_limit then go to err41; 194 if fixed (return_word.courtesy_call) >= slave_limit then go to err44; 195 statptr = addr (scratch_word); /* allows no status word pointer */ 196 if return_word.status_return ^= (18)"0"b then 197 statptr = addrel (gseg, return_word.status_return); 198 199 unspec (status_word) = zero_word; /* clear status word */ 200 201 if k = 3 then go to in_out; /* output only request */ 202 203 if k = 4 then go to in_out; /* output then input request */ 204 205 if k = 15 then go to disconnect; /* disconnect request */ 206 207 208 /* terminal status request */ 209 210 211 212 if dac_id ^= gerout_word.id then do; /* if program uses a different id, then */ 213 disc: status_word.disconnected = "1"b; /* tell him line is disconnected */ 214 return; 215 end; 216 if ackno_break then do; /* if a "break" has occurred */ 217 status_word.break = "1"b; /* then acknowledge it */ 218 ackno_break = "0"b; 219 end; 220 else status_word.idle = "1"b; /* otherwise, the line is idle */ 221 go to type; /* get the terminal type, too */ 222 223 224 225 226 /* terminal type request */ 227 228 229 230 terminal_type: if dac_id ^= gerout_word.id then do; /* if id does not match, then */ 231 increment = 1; /* take disconnect return */ 232 return; 233 end; 234 235 type: term_type = "04"b3 ; /* if id matches, then terminal type */ 236 return; /* is teleprinter */ 237 238 239 240 241 /* line disconnect request */ 242 243 244 245 disconnect: status_word.disconnected = "1"b; /* status is always disconnected */ 246 if dac_id ^= gerout_word.id then go to cc_check; /* if not connected to this id, then */ 247 /* nothing to do */ 248 dac_id = (12)"0"b; 249 ackno_break = "0"b; /* partial reinitialization */ 250 251 if ^gcos_ext_stat_$save_data.brief then 252 call ioa_ ("direct access disconnect"); 253 254 do i = 1, 2; /* now check for tabled request */ 255 if table.name (i) ^= zero_word then do; /* tabled entry found */ 256 table.name (i) = zero_word; /* clear table entry */ 257 opptr = table.routptr (i); /* point to remembered inquiry mme */ 258 dac_id = (2)"22"b3 ; /* set new terminal id */ 259 gerout_word.id = dac_id; /* tell program the terminal id */ 260 if ^gcos_ext_stat_$save_data.brief then 261 call ioa_ ("direct access established"); /* this could be removed if not wanted */ 262 go to cc_check; 263 end; 264 end; 265 go to cc_check; /* nothing found - not in direct access */ 266 267 268 /* remote inquiry request */ 269 270 271 272 inquiry: nameptr = addrel (opptr, 1); /* set pointer to inquiry name */ 273 if inquiry_name = zero_word then go to err76; /* zero inquiry name is illegal */ 274 275 if dac_id = (12)"0"b then do; /* if not already in direct access, */ 276 /* then establish it */ 277 dac_id = (2)"21"b3 ; /* set terminal id */ 278 inq1: gerout_word.id = dac_id; /* tell program the terminal id */ 279 if ^gcos_ext_stat_$save_data.brief then 280 call ioa_ ("direct access established"); /* this could be removed if not wanted */ 281 return; 282 end; 283 284 /* request must be tabled */ 285 do i = 1, 2; /* check against tabled inquiries */ 286 if table.name (i) ^= zero_word then do; 287 if inquiry_name = table.name (i) then /* check for same name already in table */ 288 if table.routptr (i) = opptr then return; /* if so, location of mme must match */ 289 else go to err76; /* otherwise abort */ 290 if table.routptr (i) = opptr then go to err76; /* different names at the same */ 291 end; /* location is also illegal */ 292 end; 293 do i = 1, 2; /* now attempt to table the request */ 294 if table.name (i) = zero_word then do; /* found a slot */ 295 table.name (i) = inquiry_name; /* save inquiry name */ 296 table.routptr (i) = opptr; /* and mme location */ 297 return; 298 end; 299 end; 300 go to err76; /* table is full */ 301 302 303 /* output or output - input request */ 304 305 306 307 in_out: if dac_id = (12)"0"b then dac_id = gerout_word.id; /* connect by terminal id match */ 308 309 if dac_id ^= gerout_word.id then go to disc; /* i/o request to wrong terminal id */ 310 i = fixed (gerout_word.buffp); /* get address of output buffer */ 311 if i > slave_limit then go to err43; 312 buffptr = addrel (gseg, i); /* pointer to output buffer */ 313 j = fixed (output_buffer.char_count); /* output character count */ 314 315 if j > 1296 then go to err74; /* is buffer size too big (GCOS limit) */ 316 317 if (fixed (output_buffer.word_count)-1)*4 < j then go to err74; /* check word count */ 318 319 if k = 4 then 320 if fixed (output_buffer.inputp) + 324 > slave_limit 321 then go to err74; /* check input buffer against limits */ 322 323 do i = 1 to j; /* copy output buffer */ 324 iosbuf (i) = output_buffer.data (i); 325 end; 326 327 skip_loc = return_break; /* save stack frame for nonlocal transfer */ 328 skip = "1"b; /* indicate i/o in progress */ 329 if ackno_break then do; /* was there a previous break */ 330 return_break: skip = "0"b; /* then skip i/o */ 331 status_word.break = "1"b; /* acknowledge break */ 332 ackno_break = "0"b; /* acknowledgement done */ 333 go to cc_check; 334 end; 335 336 do i = 1 to j; /* convert GCOS buffer to Multics */ 337 if iosbuf (i) = LF then do; /* remove initial line feed, if there */ 338 iosbuf (i) = NULL; /* replace it with a null character */ 339 go to append_lf; 340 end; 341 if iosbuf (i) ^= CR then /* stop search for line feed on first */ 342 if iosbuf (i) ^= NULL then go to append_lf; /* printable character */ 343 end; 344 345 append_lf: if k = 3 then do; /* now append a "new line" to the end */ 346 j = j + 1; /* if this is output only */ 347 iosbuf (j) = LF; 348 end; 349 350 call ios_$write_ptr (addr (iosbuf), 0, j); /* send output to "user_output" */ 351 352 if k = 3 then go to io_done; /* if output only, then skip input */ 353 354 inptr = addrel (gseg, output_buffer.inputp); /* get pointer to input buffer */ 355 356 call ios_$read_ptr (addr (input_buffer.data), 1296, j); /* read from user_input */ 357 358 if input_buffer.data (j) = LF then /* there should be a line feed on end */ 359 input_buffer.data (j) = CR; /* so replace it with carriage return */ 360 361 input_buffer.char_count = substr (unspec (j), 19, 18); /* record input character count */ 362 363 io_done: skip = "0"b; /* i/o complete */ 364 status_word.complete = "1"b; /* normal status to program */ 365 366 367 cc_check: if return_word.courtesy_call = (18)"0"b then return; /* check for user courtesy call */ 368 if gcos_ext_stat_$save_data.cc then do; /* Already in courtesy call */ 369 370 /* Check courtesy call queue for overflow */ 371 new_next_avail = mod (courtesy_call.next_avail, 372 hbound (courtesy_call.queue, 1))+1; 373 if courtesy_call.next_out = new_next_avail then 374 call gcos_mme_bort_$system (gcos_et_$bad_mme_in_cc, 375 "Maximum of ^i simultaneous outstanding courtesy calls has been exceeded.", 376 hbound (courtesy_call.queue, 1)-1); 377 378 /* Add cc address to queue */ 379 courtesy_call.queue (courtesy_call.next_avail) = 380 fixed (return_word.courtesy_call); 381 courtesy_call.next_avail = new_next_avail; 382 end; 383 384 else do; /* Not in courtesy call yet. */ 385 386 gcos_ext_stat_$save_data.cc = "1"b; /* indicate that courtesy call in progress */ 387 388 389 /* Save machine conditions and increment value for return to the caller of */ 390 /* MME GEINOS when the MME GEENDC is executed. Put courtesy call address */ 391 /* in increment to cause control to go to courtesy call routine. */ 392 393 394 gcos_ext_stat_$increment_hold = increment; /* save increment */ 395 courtesy_call.hold = courtesy_call_conditions.save_space; /* save MME GEINOS conditions */ 396 i = fixed (return_word.courtesy_call); /* get courtesy call address */ 397 j = fixed (scu.ilc); /* get loc of MME GEINOS */ 398 increment = i-j-1; /* compute increment value to cause control to go to cc rtn */ 399 end; 400 return; 401 402 403 /* error messages */ 404 405 406 /* standard GCOS error messages are used */ 407 408 err41: code = gcos_et_$bad_status_ret_ptr; 409 go to abort; 410 err43: code = gcos_et_$invalid_dcw_ptr; 411 go to abort; 412 err44: code = gcos_et_$bad_cc_ptr; 413 go to abort; 414 err72: code = gcos_et_$bad_rout_op_code; 415 go to abort; 416 err74: code = gcos_et_$rmt_term_rec_size; 417 go to abort; 418 err75: code = gcos_et_$bad_rmt_station_id; 419 go to abort; 420 err76: code = gcos_et_$bad_rout_pgm_id; 421 abort: call gcos_mme_bort_$system (code); 422 423 424 /* process a terminal break */ 425 426 427 /* (simulated by a QUIT followed by the command "program_interrupt") */ 428 429 rout_interrupt: entry (); 430 431 432 if gcos_ext_stat_$save_data.rout & dac_id ^= (12)"0"b then do; /* are we in direct access */ 433 434 if skip then go to skip_loc; /* if i/o in progress - abort it */ 435 ackno_break = "1"b; /* otherwise remember break */ 436 return; /* and tell program later */ 437 end; 438 439 call continue_to_signal_ (code); /* not in direct access now */ 440 return; /* so pretend we didn't set handler */ 441 442 443 /* restore "user_output" edited/normal mode after an activity */ 444 445 446 rout_cleanup: entry (); 447 448 call ios_$changemode ("user_output", old_mode, "", status); /* restore edited/normal mode */ 449 old_mode = ""; /* prevent mode from being reset twice */ 450 gcos_ext_stat_$save_data.rout = "0"b; /* reset direct access flag */ 451 return; 452 453 end gcos_mme_rout_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/09/83 1007.6 gcos_mme_rout_.pl1 >spec>on>09/07/83-gcos>gcos_mme_rout_.pl1 61 1 09/08/83 1229.3 gcos_ext_stat_.incl.pl1 >spec>on>09/07/83-gcos>gcos_ext_stat_.incl.pl1 1-100 2 03/27/82 0424.8 gcos_save_mc.incl.pl1 >ldd>include>gcos_save_mc.incl.pl1 1-104 3 03/27/82 0424.8 gcos_fct_entry.incl.pl1 >ldd>include>gcos_fct_entry.incl.pl1 1-108 4 03/27/82 0424.8 gcos_save_data_entry.incl.pl1 >ldd>include>gcos_save_data_entry.incl.pl1 4-29 5 09/08/83 1230.3 gcos_flags.incl.pl1 >spec>on>09/07/83-gcos>gcos_flags.incl.pl1 1-110 6 03/27/82 0424.8 gcos_file_info_block_.incl.pl1 >ldd>include>gcos_file_info_block_.incl.pl1 1-113 7 08/17/83 1135.7 mc.incl.pl1 >ldd>include>mc.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. CR 001222 constant bit(9) initial unaligned dcl 148 ref 341 358 LF 001221 constant bit(9) initial unaligned dcl 149 ref 337 347 358 NULL 001220 constant bit(9) initial unaligned dcl 150 ref 338 341 ackno_break 000021 internal static bit(1) unaligned dcl 141 set ref 166* 216 218* 249* 329 332* 435* addr builtin function dcl 153 ref 175 195 350 350 356 356 addrel builtin function dcl 153 ref 177 192 196 272 312 354 break 0(35) based bit(1) level 2 packed unaligned dcl 112 set ref 217* 331* brief 0(15) 000100 external static bit(1) level 4 packed unaligned dcl 1-106 ref 251 260 279 buffp based bit(18) level 2 packed unaligned dcl 87 ref 310 buffptr 000102 automatic pointer dcl 127 set ref 312* 313 317 319 324 354 cc 0(05) 000100 external static bit(1) level 4 packed unaligned dcl 1-106 set ref 368 386* char_count 1 based bit(18) level 2 in structure "output_buffer" packed unaligned dcl 96 in procedure "gcos_mme_rout_" ref 313 char_count based bit(18) level 2 in structure "input_buffer" packed unaligned dcl 103 in procedure "gcos_mme_rout_" set ref 361* code 000120 automatic fixed bin(35,0) dcl 130 set ref 408* 410* 412* 414* 416* 418* 420* 421* 439* complete 0(33) based bit(1) level 2 packed unaligned dcl 112 set ref 364* continue_to_signal_ 000102 constant entry external dcl 66 ref 439 courtesy_call 000076 external static structure level 2 in structure "gcos_ext_stat_$courtesy_call_control" dcl 1-92 in procedure "gcos_mme_rout_" courtesy_call 0(18) based bit(18) level 2 in structure "return_word" packed unaligned dcl 108 in procedure "gcos_mme_rout_" ref 194 367 379 396 courtesy_call_conditions based structure level 1 packed unaligned dcl 129 dac_id 000020 internal static bit(12) dcl 140 set ref 163* 212 230 246 248* 258* 259 275 277* 278 307 307* 309 432 data 2 based bit(9) array level 2 in structure "output_buffer" packed unaligned dcl 96 in procedure "gcos_mme_rout_" ref 324 data 1 based bit(9) array level 2 in structure "input_buffer" packed unaligned dcl 103 in procedure "gcos_mme_rout_" set ref 356 356 358 358* disconnected 0(34) based bit(1) level 2 packed unaligned dcl 112 set ref 213* 245* fct_entry based structure level 1 dcl 3-3 fib based structure level 1 dcl 6-10 fixed builtin function dcl 153 ref 176 179 193 194 310 313 317 319 379 396 397 flags based structure level 1 dcl 5-8 flgs 000100 external static structure level 3 dcl 1-106 gcos_et_$bad_cc_ptr 000104 external static fixed bin(35,0) dcl 67 ref 412 gcos_et_$bad_mme_in_cc 000106 external static fixed bin(35,0) dcl 68 set ref 373* gcos_et_$bad_rmt_station_id 000110 external static fixed bin(35,0) dcl 69 ref 418 gcos_et_$bad_rout_op_code 000112 external static fixed bin(35,0) dcl 70 ref 414 gcos_et_$bad_rout_pgm_id 000114 external static fixed bin(35,0) dcl 71 ref 420 gcos_et_$bad_status_ret_ptr 000116 external static fixed bin(35,0) dcl 72 ref 408 gcos_et_$invalid_dcw_ptr 000120 external static fixed bin(35,0) dcl 73 ref 410 gcos_et_$rmt_term_rec_size 000122 external static fixed bin(35,0) dcl 74 ref 416 gcos_ext_stat_$courtesy_call_control 000076 external static structure level 1 dcl 1-92 gcos_ext_stat_$gcos_slave_area_seg 000070 external static pointer dcl 1-27 ref 172 gcos_ext_stat_$increment_hold 000072 external static fixed bin(24,0) dcl 1-30 set ref 394* gcos_ext_stat_$save_data 000100 external static structure level 1 dcl 1-106 gcos_ext_stat_$storage_limit 000074 external static fixed bin(19,0) dcl 1-60 ref 173 gcos_mme_bort_$system 000124 constant entry external dcl 75 ref 373 421 gerout_word based structure level 1 dcl 87 gerout_word_ based structure level 1 dcl 92 gseg 000106 automatic pointer dcl 127 set ref 172* 177 196 312 354 hold 000076 external static structure level 3 dcl 1-92 set ref 395* i 000634 automatic fixed bin(24,0) dcl 136 set ref 176* 177 254* 255 256 257* 285* 286 287 287 290* 293* 294 295 296* 310* 311 312 323* 324 324* 336* 337 338 341 341* 396* 398 id 0(24) based bit(12) level 2 packed unaligned dcl 87 set ref 183 212 230 246 259* 278* 307 309 idle 0(31) based bit(1) level 2 packed unaligned dcl 112 set ref 220* ilc 4 based bit(18) level 2 packed unaligned dcl 7-56 ref 176 397 increment parameter fixed bin(24,0) dcl 85 set ref 51 174* 231* 394 398* inptr 000104 automatic pointer dcl 127 set ref 354* 356 356 358 358 361 input_buffer based structure level 1 dcl 103 inputp 0(18) based bit(18) level 2 packed unaligned dcl 96 ref 319 354 inquiry_name based bit(36) dcl 121 ref 273 287 295 ioa_ 000126 constant entry external dcl 76 ref 251 260 279 ios_$changemode 000130 constant entry external dcl 77 ref 168 448 ios_$read_ptr 000132 constant entry external dcl 78 ref 356 ios_$write_ptr 000134 constant entry external dcl 79 ref 350 iosbuf 000121 automatic bit(9) array unaligned dcl 131 set ref 324* 337 338* 341 341 347* 350 350 j 000635 automatic fixed bin(24,0) dcl 136 set ref 313* 315 317 323 336 346* 346 347 350* 356* 358 358 361 397* 398 k 000636 automatic fixed bin(24,0) dcl 136 set ref 179* 181 185 187 187 187 187 201 203 205 319 345 352 mc based structure level 1 dcl 7-12 mcp parameter pointer dcl 7-10 ref 51 175 395 name 000010 internal static bit(36) array level 2 dcl 123 set ref 164* 165* 255 256* 286 287 294 295* nameptr 000112 automatic pointer dcl 127 set ref 272* 273 287 295 new_next_avail 000626 automatic fixed bin(24,0) dcl 132 set ref 371* 373 381 next_avail 60 000076 external static fixed bin(24,0) level 3 dcl 1-92 set ref 371 379 381* next_out 61 000076 external static fixed bin(24,0) level 3 dcl 1-92 ref 373 old_mode 000022 internal static char(128) unaligned dcl 142 set ref 168* 448* 449* op 0(18) based bit(6) level 2 packed unaligned dcl 87 ref 179 opptr 000110 automatic pointer dcl 127 set ref 177* 179 183 192 212 230 235 246 257* 259 272 278 287 290 296 307 309 310 output_buffer based structure level 1 dcl 96 queue 62 000076 external static fixed bin(24,0) array level 3 dcl 1-92 set ref 371 373 379* return_word based structure level 1 dcl 108 rout 0(34) 000100 external static bit(1) level 4 packed unaligned dcl 1-106 set ref 162 169* 432 450* routptr 2 000010 internal static pointer array level 2 dcl 123 set ref 257 287 290 296* save_data 000100 external static structure level 2 dcl 1-106 save_data_entry based structure level 1 dcl 4-5 save_machine_conditions based structure level 1 packed unaligned dcl 2-6 save_space based bit(1728) level 2 packed unaligned dcl 129 ref 395 scratch_word 000627 automatic bit(36) dcl 133 set ref 195 scu based structure level 1 dcl 7-56 in procedure "gcos_mme_rout_" scu 30 based bit(36) array level 2 in structure "mc" packed unaligned dcl 7-12 in procedure "gcos_mme_rout_" set ref 175 scup 000100 automatic pointer dcl 7-54 set ref 175* 176 397 skip 000062 internal static bit(1) unaligned dcl 143 set ref 167* 328* 330* 363* 434 skip_loc 000064 internal static label variable dcl 144 set ref 327* 434 slave_limit 000630 automatic fixed bin(19,0) dcl 134 set ref 173* 193 194 311 319 sptr 000114 automatic pointer dcl 127 set ref 192* 193 194 196 196 367 379 396 statptr 000116 automatic pointer dcl 127 set ref 195* 196* 199 213 217 220 245 331 364 status 000632 automatic bit(72) dcl 135 set ref 168* 448* status_return based bit(18) level 2 packed unaligned dcl 108 ref 193 196 196 status_word based structure level 1 dcl 112 set ref 199* substr builtin function dcl 153 ref 361 table 000010 internal static structure array level 1 dcl 123 term_type based bit(6) level 2 packed unaligned dcl 92 set ref 235* unspec builtin function dcl 153 set ref 199* 361 word_count based bit(18) level 2 packed unaligned dcl 96 ref 317 zero_word constant bit(36) initial dcl 151 ref 164 165 199 255 256 273 286 294 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. abx internal static fixed bin(17,0) initial dcl 7-42 apx internal static fixed bin(17,0) initial dcl 7-42 bbx internal static fixed bin(17,0) initial dcl 7-42 bpx internal static fixed bin(17,0) initial dcl 7-42 fibptr automatic pointer dcl 6-84 gcos_ext_stat_$abort_reason external static varying char(128) dcl 1-13 gcos_ext_stat_$abort_return external static label variable dcl 1-14 gcos_ext_stat_$activity_card_num external static picture(4) unaligned dcl 1-15 gcos_ext_stat_$activity_name external static char(8) unaligned dcl 1-16 gcos_ext_stat_$activity_start_time external static fixed bin(71,0) dcl 1-17 gcos_ext_stat_$card_num external static picture(4) unaligned dcl 1-18 gcos_ext_stat_$dbs external static bit(1) array unaligned dcl 1-19 gcos_ext_stat_$default_nondollar external static char(2) unaligned dcl 1-20 gcos_ext_stat_$dir_rings external static fixed bin(3,0) array dcl 1-21 gcos_ext_stat_$dpno external static varying char(100) dcl 1-22 gcos_ext_stat_$dpo external static varying char(100) dcl 1-23 gcos_ext_stat_$endfc external static char(2) unaligned dcl 1-24 gcos_ext_stat_$er external static pointer dcl 1-25 gcos_ext_stat_$etc_filecode external static char(2) unaligned dcl 1-26 gcos_ext_stat_$fct external static structure level 1 dcl 1-102 gcos_ext_stat_$gcos_gtss external static structure level 1 unaligned dcl 1-115 gcos_ext_stat_$gf external static fixed bin(24,0) dcl 1-28 gcos_ext_stat_$incode external static fixed bin(24,0) dcl 1-29 gcos_ext_stat_$initial_cpu_time external static fixed bin(71,0) dcl 1-31 gcos_ext_stat_$input_segment_path external static varying char(168) dcl 1-32 gcos_ext_stat_$jcl_warnings external static fixed bin(24,0) dcl 1-33 gcos_ext_stat_$job_cpu_time external static fixed bin(71,0) dcl 1-34 gcos_ext_stat_$job_id external static varying char(18) dcl 1-35 gcos_ext_stat_$job_real_time external static fixed bin(71,0) dcl 1-36 gcos_ext_stat_$last_mme external static fixed bin(24,0) dcl 1-37 gcos_ext_stat_$ldrss external static fixed bin(24,0) dcl 1-38 gcos_ext_stat_$max_activities external static fixed bin(24,0) dcl 1-39 gcos_ext_stat_$max_mem external static fixed bin(19,0) dcl 1-40 gcos_ext_stat_$mc external static structure level 1 unaligned dcl 1-112 gcos_ext_stat_$mme_rtrn external static label variable dcl 1-41 gcos_ext_stat_$nondollar external static char(2) unaligned dcl 1-42 gcos_ext_stat_$nongcos external static char(2) unaligned dcl 1-43 gcos_ext_stat_$normal_return external static label variable dcl 1-44 gcos_ext_stat_$patchfile_ptr external static pointer dcl 1-45 gcos_ext_stat_$pathname_prefix external static varying char(168) dcl 1-46 gcos_ext_stat_$pch external static pointer dcl 1-47 gcos_ext_stat_$pdir external static varying char(168) dcl 1-48 gcos_ext_stat_$prt external static pointer dcl 1-49 gcos_ext_stat_$rs external static pointer dcl 1-50 gcos_ext_stat_$save_dir external static varying char(168) dcl 1-52 gcos_ext_stat_$saveseg_ptr external static pointer dcl 1-51 gcos_ext_stat_$seg_rings external static fixed bin(3,0) array dcl 1-53 gcos_ext_stat_$sig_ptr external static pointer dcl 1-54 gcos_ext_stat_$skip_umc external static bit(1) unaligned dcl 1-55 gcos_ext_stat_$snumb external static bit(30) dcl 1-56 gcos_ext_stat_$sought_label external static char(8) unaligned dcl 1-57 gcos_ext_stat_$statistics external static fixed bin(24,0) array dcl 1-58 gcos_ext_stat_$stop_code external static fixed bin(24,0) dcl 1-59 gcos_ext_stat_$sysout_limit external static fixed bin(35,0) dcl 1-61 gcos_ext_stat_$sysout_lines external static fixed bin(35,0) dcl 1-62 gcos_ext_stat_$system_free_pointer external static pointer dcl 1-63 gcos_ext_stat_$tape_buffer_size external static fixed bin(35,0) dcl 1-64 gcos_ext_stat_$temp_dir external static varying char(168) dcl 1-65 gcos_ext_stat_$temp_seg_ptr external static pointer dcl 1-66 gcos_ext_stat_$termination_code external static bit(18) unaligned dcl 1-67 gcos_ext_stat_$time_limit external static fixed bin(71,0) dcl 1-68 gcos_ext_stat_$userid external static char(12) unaligned dcl 1-69 gcos_ext_stat_$validation_level external static fixed bin(3,0) dcl 1-70 lbx internal static fixed bin(17,0) initial dcl 7-42 linked_file internal static bit(1) initial unaligned dcl 6-87 lpx internal static fixed bin(17,0) initial dcl 7-42 random_file internal static bit(1) initial unaligned dcl 6-88 read_file internal static bit(1) initial unaligned dcl 6-89 sbx internal static fixed bin(17,0) initial dcl 7-42 scux based structure level 1 dcl 7-206 spx internal static fixed bin(17,0) initial dcl 7-42 write_file internal static bit(1) initial unaligned dcl 6-90 NAMES DECLARED BY EXPLICIT CONTEXT. abort 001104 constant label dcl 421 ref 409 411 413 415 417 419 append_lf 000647 constant label dcl 345 ref 339 341 cc_check 000747 constant label dcl 367 ref 246 262 265 333 disc 000252 constant label dcl 213 ref 309 disconnect 000276 constant label dcl 245 ref 205 err41 001057 constant label dcl 408 ref 193 err43 001062 constant label dcl 410 ref 311 err44 001065 constant label dcl 412 ref 194 err72 001070 constant label dcl 414 ref 187 err74 001073 constant label dcl 416 ref 315 317 319 err75 001076 constant label dcl 418 ref 183 err76 001101 constant label dcl 420 set ref 273 287 290 300 gcos_mme_rout_ 000064 constant entry external dcl 51 in_out 000506 constant label dcl 307 ref 201 203 inq1 000404 constant label dcl 278 inquiry 000373 constant label dcl 272 ref 181 io_done 000743 constant label dcl 363 ref 352 return_break 000610 constant label dcl 330 ref 327 rout_cleanup 001152 constant entry external dcl 446 rout_interrupt 001116 constant entry external dcl 429 terminal_type 000266 constant label dcl 230 ref 185 type 000273 constant label dcl 235 ref 221 NAMES DECLARED BY CONTEXT OR IMPLICATION. hbound builtin function ref 371 373 mod builtin function ref 371 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1510 1646 1224 1520 Length 2234 1224 136 352 264 60 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gcos_mme_rout_ 518 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 table gcos_mme_rout_ 000020 dac_id gcos_mme_rout_ 000021 ackno_break gcos_mme_rout_ 000022 old_mode gcos_mme_rout_ 000062 skip gcos_mme_rout_ 000064 skip_loc gcos_mme_rout_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gcos_mme_rout_ 000100 scup gcos_mme_rout_ 000102 buffptr gcos_mme_rout_ 000104 inptr gcos_mme_rout_ 000106 gseg gcos_mme_rout_ 000110 opptr gcos_mme_rout_ 000112 nameptr gcos_mme_rout_ 000114 sptr gcos_mme_rout_ 000116 statptr gcos_mme_rout_ 000120 code gcos_mme_rout_ 000121 iosbuf gcos_mme_rout_ 000626 new_next_avail gcos_mme_rout_ 000627 scratch_word gcos_mme_rout_ 000630 slave_limit gcos_mme_rout_ 000632 status gcos_mme_rout_ 000634 i gcos_mme_rout_ 000635 j gcos_mme_rout_ 000636 k gcos_mme_rout_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return tra_label_var mpfx2 mod_fx1 ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. continue_to_signal_ gcos_mme_bort_$system ioa_ ios_$changemode ios_$read_ptr ios_$write_ptr THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. gcos_et_$bad_cc_ptr gcos_et_$bad_mme_in_cc gcos_et_$bad_rmt_station_id gcos_et_$bad_rout_op_code gcos_et_$bad_rout_pgm_id gcos_et_$bad_status_ret_ptr gcos_et_$invalid_dcw_ptr gcos_et_$rmt_term_rec_size gcos_ext_stat_$courtesy_call_control gcos_ext_stat_$gcos_slave_area_seg gcos_ext_stat_$increment_hold gcos_ext_stat_$save_data gcos_ext_stat_$storage_limit LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 51 000060 162 000071 163 000074 164 000075 165 000076 166 000077 167 000100 168 000101 169 000133 172 000136 173 000141 174 000143 175 000146 176 000152 177 000156 179 000161 181 000165 183 000167 185 000173 187 000175 192 000205 193 000210 194 000221 195 000230 196 000232 199 000237 201 000240 203 000243 205 000245 212 000247 213 000252 214 000254 216 000255 217 000257 218 000261 219 000262 220 000263 221 000265 230 000266 231 000270 232 000272 235 000273 236 000275 245 000276 246 000300 248 000304 249 000305 251 000306 254 000324 255 000330 256 000336 257 000337 258 000341 259 000343 260 000345 262 000363 264 000364 265 000372 272 000373 273 000376 275 000400 277 000402 278 000404 279 000406 281 000424 285 000425 286 000431 287 000437 290 000446 292 000452 293 000460 294 000464 295 000472 296 000474 297 000476 299 000477 300 000505 307 000506 309 000512 310 000514 311 000517 312 000521 313 000524 315 000527 317 000531 319 000547 323 000562 324 000571 325 000576 327 000600 328 000604 329 000606 330 000610 331 000612 332 000614 333 000615 336 000616 337 000625 338 000635 339 000640 341 000641 343 000645 345 000647 346 000652 347 000653 350 000660 352 000676 354 000701 356 000706 358 000725 361 000740 363 000743 364 000745 367 000747 368 000752 371 000756 373 000764 379 001014 381 001022 382 001024 386 001025 394 001027 395 001032 396 001043 397 001046 398 001052 400 001056 408 001057 409 001061 410 001062 411 001064 412 001065 413 001067 414 001070 415 001072 416 001073 417 001075 418 001076 419 001100 420 001101 421 001104 429 001114 432 001123 434 001131 435 001136 436 001141 439 001142 440 001150 446 001151 448 001157 449 001210 450 001214 451 001216 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved