|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 23552 (0x5c00) Types: TextFile Notes: RCSL-43-GL-2135, RCSL-43-GL-2332, RCSL-43-GL-3715, RCSL-43-GL-3716, RCSL-43-GL-3717, RCSL-43-GL-619, RCSL-43-GL-622, RCSL-43-GL-625, RCSL-43-GL-763 Names: »S2762«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧ »/S2762«
! RCSL: 43-GL 3716 AUTHOR: CAMS EDITED: 77.01.16 PROGRAM RC36-00276.02 IBM WORKSTATION INPUT PROGRAM. RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE/ CASSETTE. KEYWORDS: MUSIL,WORKSTATION-DEVICEHANDLER,CDR,PTR,3740,MTA,LISTING. ABSTRACT: IBM WORKSTATION DEVICE PROGRAM. DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE, DISKETTE, CASSETTE. THE DEVICES CAN BE HANDLED BY MEANS OF CON MODULE CONTROL CARDS. USE OF CON MUST BE WITH STAT POSIBILITIES. BLOCK SIZES: MAGTAPE MAX=1080 BYTES. THE DISKETTE MUST BE IN IBM FORMAT. MULTILEAVING, COMPRESSION FEATURE. RCSL 43-GL 3715: ASCII SOURCE TAPE. RCSL 43-GL 3717: BINARY TTY OBJECT TAPE. «ff» TITLE: RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE. ABSTRACT: IBMWORKSTATION DEVICE PROGRAM. DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE, IBM DISKETTES CASSETE. THE DEVICES CAN BE HANDLED BY MEANS OF CONTROL CARDS. USE OF CON MUST BE WITH STAT POSIBILITIES. BLOCK SIZE: MAGTAPE = 1080. THE DISKETTES MUST BE IN IBM FORMAT. MULTILEAVING, COMPRESSION FEATURE. SIZE: 8204 BYTES. INCLUDING FOUR 80 BYTES CDR BUFFERS. COMMON BUFFERS: ONE 1080 BYTES MAGTAPE BUFFER. FOUR 80 BYTES PAPERTAPE BUFFERS. FOUR 128 BYTES DISKETTE BUFFERS. DATE: JANUARY 16 TH. 77. «ff» RUNTIME PARAMETERS: PRIMARY INPUT= CARDREADER. SECONDARY INPUT= PAPERTAPE/MAGTAPE/DISKETTE/CASSETTE. SECONDARY INPUT CAN BE SELECTED BY MEANS OF CONTROL CARDS. AFTER END MEDIUM OR END OF FILE PROGRAM WILL SWITCH BACK TO CARD INPUT AGAIN. DEVICE: CARDREADER WILL ALLWAYS BE READY FOR INPUT, UNLESS OTHERS COMMANDS HAVE BEEN GIVEN FROM MOTHER MODULE. ( CON ). DEVICE: PAPERTAPE /* READ PAPER WILL SELECT PAPERTAPE AS INPUT. DEVICE: MAGTAPE OR CASSETTE TAPE /* READ TAPE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE> /* READ CASSETTE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE> /* READ CASSETTE F=X U=Y R=Z FORMAT=QQQ WILL SELECT MAG- OR CASSETTETAPE AS INPUT. MINIMUM OF ANSWERS MUST BE A FILE- NUMBER. DEFAULTS: UNIT=0, RECSIZE:=80. DEFAULT CASSETTE FORMAT IS: ECMA 34 VERSION 2 STANDARD. DEVICE: DISKETTE /* READ 3740 VOLID=<VOLNAME> DSN=<DATASETNAME> UNIT=<NUMBER> WILL SELECT IBM DISKETTES AS INPUT. MINIMUM OF ANSWERS MUST BE A DATASET- NAME. DEFAULT: UNIT=0. MAX NUMBER OF DATASET = 4 IN ONE CARD. «ff» KEY WORDS AND THEIR MEANING: FORMAT= CASSETTE TAPE STANDARDS: E2 MEANS ECMA 34 VERSION 2. E1 MEANS ECMA 34 VERSION 1. FREE MEANS NO CHECK IS PERFORMED. VOLID= THE VOLUME LABEL ON THE DISKETTE. MAX 6 CHARACTERS. DSN= THE DATASETNAME ON THE DISKETTE MAX 8 CHARACTERS. FILE= EQUAL TO F= FILENUMBER ON THE MAGTAPE. UNIT= EQUAL TO U= UNIT NUMBER ON DEVICE. RECL= EQUAL TO R= MEANS RECSIZE ON MAGTAPE. IF SIZE > 80. 80 BYTES WILL BE TRANSFERRED UNTIL BLOCK <= 80. REST WILL BE FILLED UP WITH SPACES. ********NOTE THAT SPACE IS USED AS A TERMINATOR FOR STRING SO ********ITS NOT ALLOWED TO HAVE DATASETNAME WITH SPACES IN BETWEEN. ********ALSO THAT ITS NOT ALLOWED TO HAVE SPACES IN BETWEEN ********THE PARENTHESES IN COMMAND. «ff» EXAMPLES OF PARAMETER STRINGS: /* READ PAPER PAPERTAPE. /* READ TAPE FILE=1 MAGTAPE. MINIMUM OF ANSWERS. /* READ TAPE F=1 U=2 R=70 READ FILE 1 UNIT NUMBER 2 WITH RECORDSIZE = 70. /* READ TAPE F=(1,4,2,3,5) R=60 READ THE FIVE FILES IN THE SEQUENCE MADE IN THE PARENTHESE. /* READ CASSETTE FILE=1 CASSETTE TAPE. MINIMUM OF ANSWERS. MEANING OF COMMANDS CORRESPONDS TO AS IF IT WAS A MAGTAPE. /* READ CASSETTE R=70 U=1 F=(1,2,3) FORMAT=E1 READ FROM CASSETTE WITH RECORD SIZE = 70 ON UNIT ONE AND THE FIRST THREE FILES. FORMAT IS ECMA 34 VERSION 1. /* READ 3740 DSN=ALL DISKETTE. MINIMUM OF ANSWERS WILL TRANSFER ALL DATASETS ON THE DISKETTE UNTIL A DDR1 IS MET. /* READ 3740 DSN=(ALL) WILL READ DATASET WITH NAME= ALL. /* READ 3740 DSN=DATASETN WILL READ DATASET WITH NAME= DATASETN. /* READ 3740 VOLID=IBMIRD DSN=(JOB1,JOB2,JOB3,JOB4) U=1 READ THE DATASET ON THE DISKETTE IN THIS SEQUENCE FROM UNIT = 1. MAX NUMBER OF DATASETS ON SAME CARD IS FOUR. «ff» DEVICE NAME AND THEIR MEANING: CDR CARDREADER. MT0 MAGTAPE UNIT 0. CT0 CASSETTE TAPE UNIT 0. PTR PAPERTAPE. 3740 DISKETTE HANDLER. HANDLING OF ERRORS: SYNTAX ERRORS: SYNTAX ERRORS FROM A CONTROL CARD WILL BE DISPLAYED ON THE CONSOL WITH A OPERATOR INTERVENTION REQUIRED. THE ANSWER SHOULD BE EITHER TO CORRECT THE CARD BY WRITING THE COMMAND VIA CON. OR IGNORE THE CARD VIA CON. EXAMPLE: /* READ TAPE FILE=# WILL BE DISPLAYED AS: >RD1 SYNTAX ERROR IN COMMAND: TAPE FILE=# OPERATOR INTERVENTION REQUIRED TO CORRECT THE ERROR WRITE: >CON RESTART RD1 TAPE FILE=1 IF REGRETTING THE CARD WRITE: >CON RESTART RD1 IGNORE PROGRAM WILL SKIP THIS COMMAND. ERRORS WITH AUTOMATIC RESTART: ERROR WITH AUTOMATIC RESTART WILL RESULT IN A DISPLAY OF A LINE WITH THE STATUS AND THE DEVICENAME. TO HANDLE THIS MAKE DEVICE READY AND PROGRAM WILL START IT SELF. EXAMPLE: STATUS: MT0 NOT READY MEANS THAT DEVICE IS OFFLINE AND WAITING FOR CORRECTIONS. CORRECT ERROR BY MAKING THE DEVICE ONLINE. STATUS: PTR ENDMEDIUM PAPERTAPE ERROR. THERE WAS NO ROLL AT INPUT START. ACTION = LOAD PAPERTAPE.«ff» HARD ERRORS BY MEANS OF OPERATOR INTERVENTION REQUIRED: ALL COMMANDS SHOULD START WITH A RESTART RD1 <ACTION> FROM CON. >CON RESTART RD1 MEANS REPEAT THE OPERATION. RESTART RD1 SKIP MEANS SKIP THE BLOCK. RESTART RD1 ACCEPT MEANS ACCEPT THE BLOCK. RESTART RD1 IGNORE MEANS IGNORE DEVICE (UNLESS CARDREADER). DEVICE STATUS REPEAT ACCEPT SKIP IGNORE PTR NOT AVAILABLE - - - + CDR /RESERVED - - - + 3740 - - - + MT- - - - + MT- BLOCK LENGTH ERROR - - - + PTR DATA LATE + + + + CDR + + + + 3740 + + + + MT- + + + + CDR PARITY ERROR + + + + MT0 + + + + CT0 + + + + MT- END MEDIUM - + + + 3740 POSITION ERROR - - - + MT - - - + PTR DRIVER MISSING - - - + CDR - - - + 3740 - - - + MT- - - - + PTR TIMEOUT + + + + CDR + + + + 3740 + + + + MT- - + + + «ff» HOW TO HANDLE DISKETTE ERRORS: NORMAL JOB SEQUENCE IS THAT THE SELECT CARD IS READY FOR INPUT. AFTER "MOUNT DISKETTE" THEN MOUNT THE DISKETTE WITH CORRECT NAME AND PROGRAM WILL START AS SOON AS DEVICE IS READY. AT END OF DISKETTE A DISPLAY WILL OCCUR: "END OF DISKETTE". AND DISKETTE CAN BE TAKEN OUT. FOR EACH SELECT CARD, DOOR MUST HAVE BEEN OPENED ONCE. IF THERE IS MORE DATASETNAMES WHICH SHOULD BE TRANSFERRED ON SAME CARD THEN DO NOT TOUCH DEVICE BEFORE END OF DISKETTE UNLESS AN ERROR COMMAND OCCURS. EXAMPLE: >RD1 MOUNT DISKETTE MOUNT THE DISKETTE. END OF DISKETTE TAKE DISKETTE OUT. OUTPUT MESSAGES FROM 3740: VOLUME LABEL MISSING VOLUME LABEL SECTOR NOT FOUND OR VOLUME ID ILLEGAL HEADER LABEL MISSING HEADER LABEL SECTOR NOT FOUND DATASET NAME MISSING THE TRANSFERRED DATASET NAME IS IS NOT FOUND BETWEEN SECTOR 8 AND 26 FILE STARTS IN TRACK 0 THE DATASET IS PLACED ILLEGAL ON DISCETTE FILE ENDS ILLEGAL THE DATASET IS PLACED ILLEGAL ON DISCETTE RECORD LENGTH ERROR THE RECORD IS GREATER THEN 128 OR LESS THAN 1 CHARACTERS SEQUENCE ERROR THE SEQUENCE ARE NOT CONSECUTIVE OR DO NOT START WITH 01. DEVICE RESERVED ANOTHER PROGRAM USING FD DRIVER. FD DRIVER MISSING FD DRIVER NOT IN CORE. AFTER ERROR THE LABEL WILL BE DISPLAYED ON THE CONSOLE IF SOME OF ERRORS OCCURS ABOVE A RESTART COMMAND TO CON MUST BE GIVEN. AND EITHER THE CORRECT DISKETTE MUST BE MOUNTED OR A IGNORE COMMAND SHOULD BE GIVEN. IF SEQUENCE ERROR OCCURS THEN A RESTART RD1 COMMAND MEANS THAT ERROR WILL BE ACCEPTED AND THE REST OF THE SEQUENCE CHECK WILL BE OUT OF SEQUENCE. ******** NOTE ********* IF "PARITY ERROR" OR "POSITION ERROR" OR "TIMEOUT" OCCURS ON SCREEN THEN IT MEANS THAT THE DICETTE WAS IMPOSSIBLE TO READ. CONTACT RC AND GIVE A LOG WITH IF POSSIBLE. !«ff» ! AUTHOR: DATE: CHANGES: CAMS 76.03.16 USING RC36-00217.01 TO MODIFY FOR DISKETTE INPUT. CAMS 76.04.12 MODIFY PROGRAM FOR TAKING INPUT FROM CASSETTE. CAMS 77.01.17 CHANGE MULTIPLE FILES COMMAND. SPECIAL REQUIREMENTS: RCSL: 43-GL622 CODEPROCEDURE FILL. RCSL: 43-GL763 CODEPROCEDURE COMPRESS. RCSL: 43-GL625 CODEPROCEDURE FINDPROCESS. RCSL: 43-GL2332 CODEPROCEDURE BUFRETUR. P0045. RCSL: 43-GL2135 CODEPROCEDURE GETEVENT. P0047. RCSL: 43-GL619 CODEPROCEDURE DELAY. !«ff» CONST FD0= "FD0<0><0><0>", PTR= "PTR<0><0><0>", P3740= "3740<0><0>", CDR= 'CDR<0><0><0>', CON= 'CON<0><0><0>', MT0= 'MT0<0><0><0>', CT0= 'CT0<0><0><0>', PARAM=" VOLID=<0> DSN=<0> FILE=<0> UNIT=<0> RECL=<0> F=<0> U=<0> R=<0> FORMAT=<0> ", NUMPAR= 48, !NUMBER OF CHARACTER IN PARAM ! VVOLID= 1, VDSN= 2, VFILE= 3, VUNIT= 4, VRECL= 5, VFORMAT= 6, REDUNSPT= 5, ! NUMBER OF DIFFERENT POINTERS ! COMREDUNS= 3, ! NUMBER OF PARAMETERS WITH EQUAL MEANING ! LEFTPAR= '(', RIGHTPAR= ')', EQUAL= "=", COMMA= ',', SPACE= ' ', ALL= "ALL", NORMALREAD= 1, ECMAVER1= 9, NOCHECK= 17, E1= "E1", E2= "E2", FREE= "FREE", «ff» STATUSTXT= 'STATUS: <0>', RD1STATUS= '<0> NOT READY<10><0> <0> <0> <0> <0> NOT AVAILABLE<10><0> <0> BLOCKLENGTH ERROR<10><0> DATA LATE<10><0> PARITY ERROR<10><0> END MEDIUM<10><0> POSITION ERROR<10><0> DRIVER MISSING<10><0> TIMEOUT<10><0> <0>', SYNTAXERROR= "SYNTAX ERROR IN COMMAND: <10><0>", INTERVTXT= '<10>*** OPERATOR INTERVENTION REQUIRED<10><10>', «ff» MTMASK= 8'161776, CTMASK= 8'171776, MTMASKACTION= 2'0111001111111110, MTMASKDISPLAY= 2'0100001011111110, MTMASKRESTART= 2'0000001011101110, MTMASKREP= 2'0110001011101110, CRMASKACTION= 2'0110001011110110, CRMASKDISPLAY= 2'0000001011100110, CRMASKRESTART= 2'0000001011100110, CRMASKREP= 2'0110001011010110, DVMASKACTION= 2'0100011111010110, DVMASKDISPLAY= 2'0100011011010110, DVMASKRESTART= 2'0000011010000110, DVMASKREP= 2'0110011000010110, NOPROCESS= 1, NOTPROCESSED= 8'4, TRUE= 1, FALSE= 0, ZERO= '<0><0><0><0><0><0><0><0>', READCARD= 0, READTAP= 1, READPTR= 2, READ3740= 3, BLANK= 64, MAXCARDS= 10, SRCB= '<8'200><0>', SLASHSTAR= '<97><92>', ! /* ! B5B6B14= 8'003002, ! NO DISPLAY FROM RD1 MODUL ! ! ONLY INTERVENTIONTEXT ! SEQILLE= 8'003000, ! SEQUENCE ERROR FROM 3740 ! ! OR ILLEGAL ! OFFLINE= 8'040000, EOF= 8'010400, ! BIT 3 IS FOR CASSETTE ! SOFTBLOKERROR= 8'201, OFFLINENEEDED= -1, EOFCARD= '<97><92><64><64><197><213><196><64>', ! /* END ! READ= '<97><92><64><64><217><197><193><196><64>', ! /* READ ! FILEPOS= 19, LOGICALEOF= '<3><8'200><0>', DSKIP= 1, DACCEPT= 2, MINDUPL= 3, «ff» EO3740= "END OF DISKETTE<10><0>", LOAD3740= "MOUNT DISKETTE <0>", D3740= "3740 ", PAPER= "PAPER ", TAPE= "TAPE ", CASSETTE= "CASSETTE ", ONESEC= 10, UNTILFOREVER= -1, REPRATE= 20, NONEXISTING= 0, NOTFOUND= 1, IDLE= 0, RUNNING= 1, STOPPING= 2, RESERVATION= 8'4, RESTART= 8'400, SENSE= 8'000000, IMMEDIATE= 10000, FIRSTLIM= 60, SECONDLIM= 300, SPANNED= 8'200, MAXDATASET= 4, MAXSIZE= 1080, SIZE3740= 128, PTRSIZE= 80, ONE= 1, FOUR= 4, ACCEPT= "ACCEPT", IGNORE= "IGNORE", SKIP= "SKIP", NL= "<10>", «ff» CRTABLE= ! CR CONTROLLER FORMAT TO EBCDIC 0 1 2 3 4 5 6 7 ! # ! 0 ! 64 241 242 243 244 245 246 247 ! 8 ! 249 49 50 51 52 53 54 55 ! 16 ! 248 121 122 123 124 125 126 127 ! 24 ! 56 57 58 59 60 61 62 63 ! 32 ! 240 97 226 227 228 229 230 231 ! 40 ! 233 33 34 35 36 37 38 39 ! 48 ! 232 105 224 107 108 109 110 111 ! 56 ! 40 41 42 43 44 45 46 47 ! 64 ! 96 209 210 211 212 213 214 215 ! 72 ! 217 17 18 19 20 21 22 23 ! 80 ! 216 89 90 91 92 93 94 95 ! 88 ! 24 25 26 27 28 29 30 31 ! 96 ! 208 161 162 163 164 165 166 167 ! 104 ! 169 225 98 99 100 101 102 103 ! 112 ! 168 160 170 171 172 173 174 175 ! 120 ! 104 32 234 235 236 237 238 239 ! 128 ! 80 193 194 195 196 197 198 199 ! 136 ! 201 1 2 3 4 5 6 7 ! 144 ! 200 73 74 75 76 77 78 79 ! 152 ! 8 9 10 11 12 13 14 15 ! 160 ! 192 129 130 131 132 133 134 135 ! 168 ! 137 65 66 67 68 69 70 71 ! 176 ! 136 128 138 139 140 141 142 143 ! 184 ! 72 0 202 203 204 205 206 207 ! 192 ! 106 145 146 147 148 149 150 151 ! 200 ! 153 81 82 83 84 85 86 87 ! 208 ! 152 144 154 155 156 157 158 159 ! 216 ! 88 16 218 219 220 221 222 223 ! 224 ! 112 177 178 179 180 181 182 183 ! 232 ! 185 113 114 115 116 117 118 119 ! 240 ! 184 176 186 187 188 189 190 191 ! 248 ! 120 48 250 251 252 253 254 255 #, «ff» ! RC36-00184 PAGE 07 ! ! EBCDIC => ASCII ! ASCIITAB = # ! 0 1 2 3 4 5 6 7 ! ! 0 ! 31 31 31 31 31 31 31 31 ! 8 ! 31 31 31 31 31 31 31 31 ! 16 ! 31 31 31 31 31 31 31 31 ! 24 ! 31 31 31 31 31 31 31 31 ! 32 ! 31 31 31 31 31 31 31 31 ! 40 ! 31 31 31 31 31 31 31 31 ! 48 ! 31 31 31 31 31 31 31 31 ! 56 ! 31 31 31 31 31 31 31 31 ! 64 ! 32 31 31 31 31 31 31 31 ! 72 ! 31 31 91 46 60 40 43 94 ! 80 ! 38 31 31 31 31 31 31 31 ! 88 ! 31 31 33 36 42 41 59 92 ! 96 ! 45 47 31 31 31 31 31 31 ! 104 ! 31 31 31 44 37 95 62 63 ! 112 ! 31 31 31 31 31 31 31 31 ! 120 ! 31 31 58 35 64 39 61 34 ! 128 ! 31 65 66 67 68 69 70 71 ! 136 ! 72 73 31 31 31 31 31 31 ! 144 ! 31 74 75 76 77 78 79 80 ! 152 ! 81 82 31 31 31 31 31 31 ! 160 ! 31 31 83 84 85 86 87 88 ! 168 ! 89 90 31 31 31 31 31 31 ! 176 ! 31 31 31 31 31 31 31 31 ! 184 ! 31 31 31 31 31 31 31 31 ! 192 ! 31 65 66 67 68 69 70 71 ! 200 ! 72 73 31 31 31 31 31 31 ! 208 ! 31 74 75 76 77 78 79 80 ! 216 ! 81 82 31 31 31 31 31 31 ! 224 ! 93 31 83 84 85 86 87 88 ! 232 ! 89 90 31 31 31 31 31 31 ! 240 ! 48 49 50 51 52 53 54 55 ! 248 ! 56 57 94 31 31 31 31 31 #; ! END KEYOUTTAB ! «ff» VAR MASKACTION, MASKDISPLAY, MASKRESTART, MASKREP: INTEGER; BUFFER: STRING(MAXSIZE); ! COMMON BUFFER FOR TAP AND DEV ! STACK: STRING(42); STACKPT: INTEGER; ! POINTER IN STACK ! RESULT: INTEGER; INDEX: INTEGER; ! COMMAND INDEX ! READMODE: INTEGER; ! INPUT MODE ! COMMAND: RECORD MAX: STRING(80) FROM 1; ACCEPT: STRING(6) FROM 1; IGNORE: STRING(6) FROM 1; SKIP: STRING(4) FROM 1; NEXT: STRING(5) FROM 3 END; COMADR: INTEGER; HELPI: INTEGER; ! MUST ONLY BE MINUS IN 3740 OPSTART ! HELPA: INTEGER; HELPS: STRING(1); HELP: STRING(12); LINEMANAGER: INTEGER; ! PROCESS DESCRIPTOR ADRESSES ! DRIVER: INTEGER; SENDER: INTEGER; DLIMIT: INTEGER; ! CONTROL PARAMETERS ! DISPLAY: INTEGER; ENDMEDIUM: INTEGER; READFLAG: INTEGER; FILENO: INTEGER; CARDIMAGE: STRING(80); RCB: STRING(2); ! DATA CONTROL PARAMETERS ! CARDNUMBER: INTEGER; COLUMNS: INTEGER; RESLENGTH: INTEGER; RECORDLENGTH: INTEGER; INDEXANDFLAG: INTEGER; WAITTIME: INTEGER; BUF: INTEGER; ! MESSAGE BUFFER POINTERS ! SAVEBUF: INTEGER; KEYCOMMAND: INTEGER; CONVADR: INTEGER; ! MUST NOT BE USED ! STATUS: INTEGER; ! THIS SEQUENCE MUST NOT BE MOVED ! RUNNINGSTATUS: INTEGER; FILECOUNT: INTEGER; RECORDCOUNT: INTEGER; BYTEADR: INTEGER; BYTECOUNT: INTEGER; BUFFERLENGTH: INTEGER; MESS0: INTEGER; MESS1: INTEGER; MESS2: INTEGER; MESS3: INTEGER; ! END OF UNTOUCHNABLE SEQUENCE ! «ff» IN: FILE ! INPUT FILE DESCRIPTION ! 'CDR', ! NAME OF OUTPUT DRIVER ! 2, ! KIND = BLOCKED. ! 4, ! NUMBER OF BUFFERS ! 80, ! SHARESIZE ! U; ! UNDEFINED FORMAT ! CONV CRTABLE; ! CONVERSIONTABLE ! GIVEUP RD1ERROR, ! GIVEUPPROCEDURE ! 2'0110001011110110 ! GIVEUPMASK ! OF STRING(80); ! RECORD STRUCTURE ! TAP: FILE ! MAGTAPE FILE DESCRIPTION ! 'MT0', ! NAME OF DRIVER ! 14, ! KIND: REPEATABLE, POSITIONABLE, BLOCKED ! ONE, ! BUFFERS ! ONE, ! SHARESIZE ! FB; ! FIXEDLENGTH,BLOCKED FORMAT ! GIVEUP TAPERROR, ! GIVEUP PROCEDURE ! 2'1110001111111110 ! GIVEUPMASK ! OF STRING(ONE); ! RECORD STRUCTURE ! DEV: FILE ! DEVICE FILE DESCRIPTION ! 'XXX', ! NAME OF DRIVER ! 14, ! KIND ! FOUR, ! BUFFERS ! ONE, ! SHARESIZE ! U; ! UNDEFINED ! GIVEUP DEVERROR, ! ! 2'0110011111010110; ! GIVEUPMASK ! CONV STACK ! STRING FOR PARAMETERS TO 3740 ! OF STRING(ONE); «ff» PROCEDURE MOVIN( CONST FROMSTR: STRING(1); CONST FROMINDX: INTEGER; CONST TOADR: INTEGER; CONST LENGTH: INTEGER); CODEBODY; PROCEDURE MOVOUT( CONST FROMADR: INTEGER; VAR TO: STRING(1); CONST TOINDEX: INTEGER; CONST LENGTH: INTEGER); CODEBODY; PROCEDURE GETEVENT( VAR SENDER: INTEGER; VAR BUF: INTEGER; CONST WAITTIME: INTEGER; VAR MESS0: INTEGER); CODEBODY P0047; PROCEDURE BUFRETURN( CONST SENDER: INTEGER; VAR BUF: INTEGER; VAR STATUS: INTEGER); CODEBODY P0045; PROCEDURE FINDPROCESS( VAR PROCNAME: STRING(6); VAR PROCADDRESS: INTEGER); CODEBODY; PROCEDURE COMPRESS( VAR STR: STRING(1); CONST STRLENGTH: INTEGER; CONST RESULT: INTEGER; VAR RESLENGTH: INTEGER; CONST MINDUP: INTEGER); CODEBODY; PROCEDURE FILL( CONST VALUE: INTEGER; CONST T0: STRING(1); CONST TOINDEX: INTEGER; CONST LENGTH: INTEGER); CODEBODY; PROCEDURE SETSHARES( FILE Z; CONST SHARES: INTEGER; CONST SHAREL: INTEGER; VAR BUFAREA: STRING(1)); CODEBODY; PROCEDURE DELAY( CONST TIME:INTEGER); CODEBODY; «ff» PROCEDURE SENDANSWER; BEGIN BUFRETURN(LINEMANAGER, BUF, STATUS); END; PROCEDURE RETURNALL; BEGIN RUNNINGSTATUS:= IDLE; STATUS:=0; WHILE BUF <> 0 DO SENDANSWER; END; PROCEDURE WAIT; BEGIN ! WAIT FOR TIMER OR CONTROLMESSAGE ! 31: SENDER:= LINEMANAGER; GETEVENT(SENDER,BUF,WAITTIME,MESS0); IF SENDER <> 0 THEN ! MESSAGE RECEIVED! BEGIN IF COMADR = 0 THEN BEGIN IF MESS0 AND RESERVATION <> 0 THEN COMADR:=MESS1; IF COMADR <> 0 THEN MOVOUT(COMADR,COMMAND,0,72); SENDANSWER; END ELSE BEGIN IF MESS0 EXTRACT 2 <> 0 THEN GOTO 31; MOVOUT(COMADR,COMMAND,0,72); SENDANSWER; END; END; END; PROCEDURE SETDISPLAY; BEGIN DISPLAY:=IMMEDIATE; DLIMIT:=FIRSTLIM; END; «ff» PROCEDURE SETMASK; BEGIN IF READFLAG = READTAP THEN BEGIN MASKACTION:=MTMASKACTION; MASKDISPLAY:=MTMASKDISPLAY; MASKRESTART:=MTMASKRESTART; MASKREP:=MTMASKREP; END; IF READFLAG >= READPTR THEN BEGIN MASKACTION:=DVMASKACTION; MASKDISPLAY:=DVMASKDISPLAY; MASKRESTART:=DVMASKRESTART; MASKREP:=DVMASKREP; END; IF READFLAG = READCARD THEN BEGIN MASKACTION:=CRMASKACTION; MASKDISPLAY:=CRMASKDISPLAY; MASKRESTART:=CRMASKRESTART; MASKREP:=CRMASKREP; END; END; «ff» PROCEDURE SCAN; BEGIN HELPI:=0; HELPA:=INDEX; 0: MOVE(COMMAND,INDEX,HELP,HELPI,1); MOVE(COMMAND,INDEX,HELPS,0,1); IF INDEX > 80 THEN GOTO 2; IF HELPS = SPACE THEN GOTO 2; IF HELPS = NL THEN GOTO 2; IF HELPS = LEFTPAR THEN GOTO 2; IF HELPS = RIGHTPAR THEN GOTO 2; IF HELPS = COMMA THEN GOTO 2; INDEX:=INDEX+1; HELPI:=HELPI+1; IF HELPI < 10 THEN GOTO 0; 2: HELPA:=INDEX-HELPA; INDEX:=INDEX+1; END; PROCEDURE TABLELOOKUP; BEGIN HELPI:=0; HELPA:=INDEX; RESULT:=1; HELP:=ZERO; 0: REPEAT MOVE(PARAM,HELPI,HELPS,0,1); MOVE(COMMAND,INDEX,HELP,0,1); IF HELP = NL THEN HELPI:=NUMPAR+1; IF HELP = SPACE THEN IF HELPA = INDEX THEN BEGIN INDEX:=INDEX+1; HELPA:=INDEX; GOTO 0; END; IF HELP = HELPS THEN BEGIN HELPI:=HELPI+1; INDEX:=INDEX+1; GOTO 0; END; IF HELPS = ZERO THEN BEGIN IF INDEX <> HELPA THEN BEGIN IF RESULT > REDUNSPT THEN RESULT:=RESULT-COMREDUNS; GOTO 2; END; RESULT:=RESULT+1; END; HELPI:=HELPI+1; INDEX:=HELPA UNTIL HELPI >= NUMPAR; RESULT:=FALSE; HELPS:=HELP; GOTO 4; 2: SCAN; 4: END; «ff» PROCEDURE ERROR; BEGIN READFLAG:=READCARD; HELPI:=0; REPEAT MOVE(COMMAND,HELPI,HELPS,0,1); IF HELPI>= 78 THEN HELPS:=NL; HELPI:=HELPI+1 UNTIL HELPS=NL; INSERT(0,COMMAND,HELPI); ! TO STOP OPMESS CORECTLY ! OPMESS(SYNTAXERROR); OPMESS(COMMAND); OPMESS(INTERVTXT); SAVEBUF:=BUF; INSERT(0,COMMAND,2); 0: STATUS:=0; WAITTIME:=REPRATE; WAIT; IF COMMAND.IGNORE = IGNORE THEN BEGIN STATUS:=0; BUF:=SAVEBUF; GOTO 10; END; IF COMMAND.MAX <> CASSETTE THEN IF COMMAND.MAX <> TAPE THEN IF COMMAND.MAX <> D3740 THEN IF COMMAND.MAX <> PAPER THEN GOTO 0; BUF:=SAVEBUF; END; «ff» PROCEDURE ANALYZE; BEGIN «ff» «ff» «nul»