|
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 - download
Length: 33792 (0x8400) Types: TextFile Notes: RCSL-43-GL-, RCSL-43-GL-4928, RCSL-43-GL-4931, RCSL-43-GL-4934, RCSL-43-GL-8472, RCSL-43-GL-8473 Names: »S6050«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL: 43-GL8473 AUTHOR: PBP / ME EDITED: 79.12.10 PROGRAM RC36-06050.01 LABELLED MULTIFILE TAPE TO 3740 FORMATTED DISKETTE WITH LOG. KEYWORDS: MUSIL, CONVERTION, MT0, FD0, SP, FDUNIT0, LISTING. ABSTRACT: THIS PROGRAM HANDLES LABELLED MULTIFILE TAPES WITH A MAXIMUM BLOCKSIZE OF 2000 BYTES, EACH BLOCK CONSISTING OF FIXED LENGTH RECORDS WITH EBCDIC CODE DATA. THE BLOCKS ARE COPIED TO IBM- DISKETTES WITHOUT CONVERSION. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON EITHER SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY . RCSL:43-GL8472 ASCII SOURCE «ff» !! RC36-01049 PAGE 01 TITLE: LABELLED MULTIFILE TAPE TO 3740 FORMATTED DISKETTE ABSTRACT: THIS PROGRAM HANDLES LABELLED MULTIFILE TAPES WITH A MAXIMUM BLOCKSIZE OF 2000 BYTES ,CONSISTING OF FIXED LENGTH RECORDS WITH EBCEDIC CODE DATA. THE BLOCKS ARE COPIED TO IBM-DISKETTES WITHOUT CONVERSION. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON EITHER SERIAL PRINTER OR TTY. THE PROGRAM CAN BE OPERATED FROM TTY . SIZE: 9838 BYTES. INCLUDING ONE 2000 BYTES INPUT BUFFER AND TWO 512 BYTES OUTPUT BUFFERS. DATE: 79.02.05 «ff» RUNTIME PARAMETERS: VOLUME IDENT : (MAX 6 CHARACTERS). DISKETTE VOLUME IDENT. THE IDENT WILL ALWAYS BE CHECKED , SO THIS PARAMETER MUST BE FILLED. DATASET NAME : B466021 (MAX 8 CHARACTERS). NAME OF DATASET ON DISKETTE. OUT BLOCKNO : 00001 NEXT RECORD TO BE WRITTEN TO DISKETTE. DATASET NO : 00001 DATASET NUMBER TO BE READ FROM TAPE. IN BLOCKNO : 00001 NEXT BLOCK TO BE READ FROM TAPE. RECORDSIZE : 00080 LENGTH OF INPUT RECORD, MAX. 172. MT UNIT : 00000 MT UNIT NUMBER. ( 0 - 3 ). LOGPRINT : + + INDICATES LOG ON SERIAL PRINTER. - INDICATES LOG ON TTY. OUTPUT MESSAGES: PROG NO : 6050 PROGRAM EXECUTION IS STOPPED. RUNNING : PROGRAM EXECUTION IS STARTED. SUSPENDED: DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED. MOUNT DATA TAPE MT-UNIT IS NOT ON-LINE. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. FD ERROR NNNNN CONSULT THE RC3600 OPERTORS MANUAL. SP ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. END JOB PROGRAM EXECUTION IS TERMINATED. ! ! INPUT MESSAGES: STOP STOPS EXECUTION WRITING PROG NO : 6050. SUSPEND STOPS PROGRAM EXECUTION RELEASING DRIVERS <ESC> NEXT PARAMETER IS DISPLAYED. STATE ALL PARAMETERS ARE DISPLAYED (TTY ONLY). "TEXT=VALUE" THE PARAMETER IDENTIFIED BY "TEXT" IS CHANGED TO "VALUE". LOG LOG IS OUTPUT ON SELECTED DEVICE. START PROGRAM EXECUTION IS STARTED. NOTE :AFTER MT ERROR START MEANS ACCEPTING THE ERRONIOUS INPUT, AFTER FD ERROR START MEANS REPEATING THE WRITE OPERATION. "VALUE" CURRENTLY DISPLAYED PARAMETER IS CHANGED TO "VALUE" ! «ff» ! RC36-001049 PAGE 02 OTHER OUTPUT MESSAGES: END OF DATASET IDENTNO: OUTPUT DISKETTE REWINDING. MOUNT NEXT INPUT TAPE INPUT-DATA IS CONTINUED ON THE NEXT INPUT TAPE. WRONG MT-TAPE / UDKODE CONFLICT HDR1 CONTAINS WRONG INFORMATION /NOT DISKETTE CONVERSION. INPUT TAPE-FILE ENDS ILLEGAL INPUT FILE DOES NOT END WITH EOF1 OR EOV1. BLOCKNO ERROR / INPUT TAPE INVALID INFORMATION IN EOF1 OR EOV1 ABOUT NUMBERS OF BLOCKS IS NOT THE SAME AS WE HAVE READ. MOUNT DISKETTE VOLNO: MOUNT NEW DISKETTE. CONFLICT IN NO. OF DISKETTE AND LAST VOLID INFORMATION IN HDR1 ABOUT NUMBERS OF DISKETTE IS NOT THE SAME AS WE HAVE WRITTEN. DISKETTE NUMB: NUMBERS OF DISKETTE WITCH WE HAVE READ FROM HDR1-LABEL. MOUNT LABEL TAPE THE INPUTTAPE HAS NO VOL1 LABEL. HDRLABEL MISSING THE DATASET HAS NO HDR1 LABEL. RECODSIZE ERROR THE SPECIFIED RECORDSIZE MUST BE LESS THAN 172. DISKETTE VOLUME CONFLICT VOLUME IDENT ON DISKETTE IS NOT EQUAL TO SPECIFIED VOLUME IDENT PARAMETER. DISKETTE FULL-MOUNT NEXT DISKETTE IS FILLED, MOUNT NEXT AND WRITE START. CATALOG FULL CATALOG IS FILLED, AND DISKETTE MUST BE REINITIALIZED. BOE ERROR BEGIN OF DATASET IS OUTSIDE DISKETTE OR NOT IBM STANDARD. BAD DISKETTE ERMAP NOT FOUND OR DISKETTE CONTAINS DELE- TED TRACKS. CATALOG ENTRY IS DEFECT AT DATASET NUMBER NNNNN CATALOG CONTAINS DELETED SECTORS OR SECTORS WITH PARITY ERRORS IN DATASET NNNNN. MOUNT ANOTHER DISKETTE ERROR ON DISKETTE, MUNT ANOTHER AND WRITE START, STOP OR SUSPEND. ! «ff» ! RC36-01049 PAGE 03 ! ! DESCRIPTION OF THE LOG: THE LOG CONTAINS A HEADLINE DESCRIBING INPUT AND OUTPUT MEDIUM (DRIVER NAMES), DATE AND TIME. THE "TOTAL STATISIICS FOR JOB" CONTAINS THE TOTAL AMOUNT OF RECORDS/BLOCKS HAVING BEEN READ/WRITTEN. THE "JOB STATUS" DESCRIBES THE ACTUAL STATE OF THE JOB: NOT STARTED AFTER LOAD OF PROGRAM OR END OF JOB. STOPPED JOB IS STOPPED BU OPERATOR. RUNNING JOB IS RUNNING OR WAITING FOR NEW INPUT/ OUTPUT MEDIUM. END OF JOB NORMAL TERMINATION OF JOB. I/O ERROR NNN ERROR NNN ON INPUT/OUTPUT DEVICE, CONSULT OPERATORS MANUAL. SUSPENDED THE JOB IS TERMINATED BY THE SUSPEND COMMAND. SPECIAL REQIREMENTS: P0149 RCSL: 43-GL4928 P0150 RCSL: 43-GL4931 P0151 RCSL: 43-GL4934 FILL RCSL: 43-GLXXXX ! «ff» !RC36-01049 PAGE 03A! CONST NOQ= 9, OPTXTS= '<10>PROG NO : 6050<0> <10>VOLUME IDENT : <0> <10>DATASET NAME : <0> <10>OUT BLOCKNO : <0> <10>DATASET NO : <0> <10>IN BLOCKNO : <0> <10>RECORDSIZE : <0> <10>MTUNIT : <0> <10>LOGPRINT : <0>', START= 'START', STOP= 'STOP', SUSPEND= 'SUSPEND', STATE= 'STATE', NEXTPARAM= '<27>', ENDLINE= '<13><0>', NL= '<10>', RETURN= '<13>', MINUS= '-', PLUS= '+', EN= '<01>', EODTXT= '<14><7><10>END OF DATASET IDENTNO: ', CONFTXT= '<14><7><10>CONFLICT BETWEEN NO. OF DISKETTE AND LAST VOLID <13> <0>', CONFTXT1= '<7><10>DISKETTE NUMB: ', MTNEXTIN= '<7><10>MOUNT NEXT INPUT TAPE<13><0>', BLKERROR= '<10>BLOCKNO ERROR / INPUT TAPE INVALID<13><0>', EOFERROR= '<14><7><10>INPUT TAPE- FILE ENDS ILLEGAL<13><0>', RUNTXT= '<10>RUNNING<13>', MTTXT= '<7><10>MT ERROR ', FDTXT= '<7><10>FD ERROR ', EOJTXT= '<14><7><10>END JOB<13><0>', SUSTXT= '<7><10>SUSPENDED<13><0>', MTMOUNTTAPE= '<14><7><10>MOUNT DATA TAPE<13><0>', MAXBLOCK= 1875, FALSE= -2, TRUE= -1, IDLE= 0, RUNNING= 1, STOPPING= 2, HARDBITCHECK= 5, FIRSTOFFLINE= 6, B10= 32, IBMSPACE= "<64>", EBL= "<211>", BOE= "<240><241><240><240><241>", C= "<195>", EBEOD= "<247><244><240><240><241>", EBC128= '<241><242><248>', U= 0, UB= 1, «ff» !RC36-01049 PAGE 04 ! CHANGE= '<7><10>MOUNT ANOTHER DISKETTE<10>', CHANGEDISK= '<7><10>DISKETTE FULL - MOUNT NEXT DISKETTE <10>", RLTOOLONG= '<7><10>RECORDSIZE ERROR<10>', CATFAIL= '<7><10>CATALOG ENTRY IS DEFECT AT DATASET NUMBER <10>', FREERMAP= "<197><217><212><193><215><64><64><64><64><64><64>", NOTPOSS= '<7><10>BAD DISKETTE<10>', DSNLIMIT= '<7><10>CATALOG FULL<10>', BOEERROR= '<7><10>BOE ERROR<13><0>', MOUNTTXT= '<7><10>MOUNT LABEL TAPE<13><0>', HDRMIS= '<7><10>HDRLABEL MISSING<13><0>', WRONGVOL= '<7><10>DISKETTE VOLUME CONFLICT<10>', WRONGUNIT= '<7><10>MT UNIT CONFLICT<13><0>', WRONGMT= '<7><10>WRONG MT-TAPE / UDKODE CONFLICT<13><0>', INITINF= '<0><0><0><0><0><0><0><0><0><0>', INITDATASET= 'B466021', MTDISK= '<7><10>MOUNT DISKETTE VOLNO: ', KD610= '<246><241><240>', VOL1= '<229><214><211><241>', HDR1= '<200><196><217><241>', EOF1= '<197><214><198><241>', EOV1= '<197><214><229><241>', SLTREC= '<249><240>', ! ** LOGTEXTS ** ! LOGCMMD= 'LOG', TTYNAME= 'TTY<0>', LPTNAME= 'SP<0><0>', NEWL= '<10><10>', LOGHEAD='** MT UNIT X TO FD1 ** DATE ........ TIME ........<10>', PTEXT1= 'DISKETTE ... REC WRITTEN .....<10>', PTEXT2= 'DATASET ... BLOCKS READ .....<10>', STATHEAD= '<10>TOTAL STATISTICS FOR JOB<10><10>', STATUSHEAD= '<10>JOB STATUS: ', ! PROGRAM STATES ! INITEXT= 'NOT STARTED', RUNTEXT= 'RUNNING', STOPTEXT= 'STOPPED', SUSPTEXT= 'SUSPENDED', EOJTEXT= 'END OF JOB', ERRTEXT= 'I/O ERROR ..... ', LPTTXT= 'SP ERROR ', RUNNI= 2, PSTOP= 3, PSUSP= 4, PEOJ= 5, IOERROR= 6, FDUNIT= 1, «ff» ! RC36-01049 PAGE 05 ! ! EBCDIC TO ASCII CONVERSION TABLE : ! EATAB=! 0 1 2 3 4 5 6 7 ! # ! 0 ! 32 32 32 32 32 32 32 32 ! 8 ! 32 32 32 32 32 32 32 32 ! 16 ! 32 32 32 32 32 32 32 32 ! 24 ! 32 32 32 32 32 32 32 32 ! 32 ! 32 32 32 32 32 32 32 32 ! 40 ! 32 32 32 32 32 32 32 32 ! 48 ! 32 32 32 32 32 32 32 32 ! 56 ! 32 32 32 32 32 32 32 32 ! 64 ! 32 32 32 32 32 32 32 32 ! 72 ! 32 32 32 46 60 40 43 94 ! 80 ! 38 32 32 32 32 32 32 32 ! 88 ! 32 32 33 36 42 41 59 94 ! 96 ! 45 47 32 32 32 32 32 32 ! 104 ! 32 32 124 44 37 95 62 63 ! 112 ! 32 32 32 32 32 32 32 32 ! 120 ! 32 32 58 35 64 39 61 34 ! 128 ! 32 65 66 67 68 69 70 71 ! 136 ! 72 73 32 32 32 32 32 32 ! 144 ! 32 74 75 76 77 78 79 80 ! 152 ! 81 82 32 32 32 32 32 32 ! 160 ! 32 126 83 84 85 86 87 88 ! 168 ! 89 90 32 32 32 91 32 32 ! 176 ! 32 32 32 32 32 32 32 32 ! 184 ! 32 32 32 32 32 93 32 32 ! 192 ! 123 65 66 67 68 69 70 71 ! 200 ! 72 73 32 32 32 32 32 32 ! 208 ! 125 74 75 76 77 78 79 80 ! 216 ! 81 82 32 32 32 32 32 32 ! 224 ! 92 32 83 84 85 86 87 88 ! 232 ! 89 90 32 32 32 32 32 32 ! 240 ! 48 49 50 51 52 53 54 55 ! 248 ! 56 57 94 32 32 32 32 32 #, «ff» ! RC36-01049 PAGE 07 ! ! ASCII TO EBCDIC CONVERSION TABLE : ! ASCTOEB= ! 0 1 2 3 4 5 6 7! # ! 0 ! 64 64 64 64 64 64 64 64 ! 8 ! 64 64 64 64 64 64 64 64 ! 16 ! 64 64 64 64 64 64 64 64 ! 24 ! 64 64 64 64 64 64 64 64 ! 32 ! 64 90 127 123 91 108 80 125 ! 40 ! 77 93 92 78 107 96 75 97 ! 48 ! 240 241 242 243 244 245 246 247 ! 56 ! 248 249 122 94 76 126 110 111 ! 64 ! 124 193 194 195 196 197 198 199 ! 72 ! 200 201 209 210 211 212 213 214 ! 80 ! 215 216 217 226 227 228 229 230 ! 88 ! 231 232 233 173 224 189 250 109 ! 96 ! 121 129 130 131 132 133 134 135 ! 104 ! 136 137 145 146 147 148 149 150 ! 112 ! 151 152 153 162 163 164 165 166 ! 120 ! 167 168 169 192 106 208 161 7 #; «ff» ! RC36-01049 PAGE 07 ! VAR OPDUMMY: STRING(2); ! RUNTIME PARAMETERS! PROGNO: INTEGER; TPAR1: INTEGER; TPAR2: INTEGER; OBLOCK: INTEGER; DATASET: INTEGER; BLOCKNO: INTEGER; RECSIZE: INTEGER; MTUNIT: INTEGER; LOGPRINT: INTEGER; OPTEXT: STRING(20); !COMMUNICATION AREA! OPSTRING: STRING(20); OPDEC: STRING(10); ERRORNO: INTEGER; !INTERNAL VARIABLES! MASK: INTEGER; TOM: INTEGER; SIGN: INTEGER; Q: INTEGER; PAR: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; STOPPED: INTEGER; S1: STRING(2); S2: STRING(2); S3: STRING(1); EOD: INTEGER; L1: INTEGER; L: INTEGER; NEWDSN: INTEGER; RUNNINGSTATUS: INTEGER; HELP2: STRING(6); HELP: STRING(6); EOFSWITCH: INTEGER; INDEX: INTEGER; INBLOK: INTEGER; FILENO: INTEGER; SIZE: INTEGER; COUNT: INTEGER; LENGTH: INTEGER; POS: INTEGER; VOLNAME: STRING(6); DATESTR: STRING(6); DATE1: STRING(8); UDIDENT: STRING(5); UDKD: STRING(3); UDVOLNR1: STRING(6); UDVOLNR: STRING(6); DISKET: STRING(3); SMVOLNR: STRING(6); VOLTL: INTEGER; BINIDET: INTEGER; BINIDTO: INTEGER; GEMDATASET: INTEGER; SETFIRST: INTEGER; DISKMAX: INTEGER; BINDISK: INTEGER; VOLID: STRING(7); DATASETNAME: STRING(9); HELP1: INTEGER; HELP3: INTEGER; LOGDATASET: INTEGER; LOGBLOCKNO: INTEGER; LASTBLKNO: INTEGER; SMANT: INTEGER; SW25: INTEGER; INITPSW: INTEGER; SWEOV: INTEGER; SWEOVI: INTEGER; IBLKANT: STRING(5); BLOKNR: STRING(6); GLDGNR: STRING(6); «ff» ! RC36-01049 PAGE 08 ! DISKBUF: RECORD DATA: STRING(80); BEG: STRING(4) FROM 1; DSN: STRING(8) FROM 6; RLE: STRING(3) FROM 25; BOE: STRING(5) FROM 29; EOE: STRING(5) FROM 35; MVI: STRING(1) FROM 45; VSN: STRING(2) FROM 46; CDT: STRING(6) FROM 48; EDT: STRING(6) FROM 67; EOD: STRING(5) FROM 75 END; MTR: RECORD DATA: STRING(80); DGNR: STRING(6) FROM 4; NNN: STRING(3) FROM 7; ANTDIS: STRING(2) FROM 10; UDKODE: STRING(3) FROM 14; IDENT: STRING(4) FROM 17 END; ! ** LOG VARIABLES ** ! NEXTLP: INTEGER; PSTATE: INTEGER; TAPENO: INTEGER; RECTOTAL: INTEGER; SAVEIN: INTEGER; SAVEOUT: INTEGER; DELETEIN: INTEGER; DELETEOUT: INTEGER; BFACTOR: INTEGER; SECTORNO: INTEGER; LDATE: STRING(8); LHELP: STRING(6); «ff» !RC36-01049 PAGE 09 ! IN: FILE 'MT0', 14, 1, 2000, U; GIVEUP MTINERROR, 2'0110001111111110 OF STRING(1); OUT: FILE 'FD0', 14, 2, 512, UB; GIVEUP FDERROR, 2'1110011111111110 OF RECORD MAX: STRING(128); BEG: STRING(4) FROM 1; VOL: STRING(6) FROM 5; DSN: STRING(8) FROM 6; RLE: STRING(3) FROM 25; BOE: STRING(5) FROM 29; EOE: STRING(5) FROM 35; MVI: STRING(1) FROM 45; VSN: STRING(2) FROM 46; CDT: STRING(6) FROM 48; EDT: STRING(6) FROM 67; EOD: STRING(5) FROM 75 END; LOG: FILE ! LOG FILE DESCRIPTION ! 'SP', ! NAME OF DEVICE DRIVER ! 1, ! KIND= CHAR ORIENTED ! 1, ! BUFFERS ! 80, ! SHARESIZE ! U; ! UNDEFINED ! GIVEUP LOGERROR, ! LOG ERROR PROCEDURE ! 2'1100001011110110 ! GIVE UP MASK ! OF STRING(80); «ff» ! RC36-01049 PAGE 10 ! PROCEDURE GETTIME(VAR TIME : STRING(8)); CODEBODY P0149; PROCEDURE GETLDATE(VAR DATE: STRING(8)); CODEBODY P0150; PROCEDURE PRINTLOG; BEGIN IF LOGPRINT=TRUE THEN LOG.ZNAME:=LPTNAME ELSE LOG.ZNAME:=TTYNAME; OPEN(LOG,3); OUTTEXT(LOG,NEWL); ! LOG - HEAD ! GETLDATE(LDATE); MOVE(LDATE,0,LOGHEAD,29,8); GETTIME(LDATE); MOVE(LDATE,0,LOGHEAD,43,8); INSERT(MTUNIT+48,LOGHEAD,11); OUTTEXT(LOG,LOGHEAD); ! ACTUAL POSITIONS ! BINDEC(TAPENO,LHELP); MOVE(LHELP,2,PTEXT1,11,3); BINDEC(RECTOTAL,LHELP); MOVE(LHELP,0,PTEXT1,33,5); BINDEC(LOGDATASET,LHELP); MOVE(LHELP,2,PTEXT2,11,3); BINDEC(LOGBLOCKNO-1,LHELP); MOVE(LHELP,0,PTEXT2,33,5); OUTTEXT(LOG,STATHEAD); OUTTEXT(LOG,PTEXT2); OUTTEXT(LOG,PTEXT1); ! PROGRAM STATE ! OUTTEXT(LOG,STATUSHEAD); IF PSTATE = 1 THEN OUTTEXT(LOG,INITEXT); IF PSTATE = RUNNI THEN OUTTEXT(LOG,RUNTEXT); IF PSTATE = PSTOP THEN OUTTEXT(LOG,STOPTEXT); IF PSTATE = PSUSP THEN OUTTEXT(LOG,SUSPTEXT); IF PSTATE = PEOJ THEN OUTTEXT(LOG,EOJTEXT); IF PSTATE = IOERROR THEN BEGIN BINDEC(ERRORNO,LHELP); MOVE(LHELP,0,ERRTEXT,12,5); OUTTEXT(LOG,ERRTEXT); END; OUTTEXT(LOG,NEWL); CLOSE(LOG,1); END; «ff» ! RC36-01049 PAGE 11 ! PROCEDURE FILL(CONST CHAR: INTEGER; VAR TEXT: STRING(1); CONST POS: INTEGER; CONST LGT: INTEGER); CODEBODY; PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); STOPPED:= 0; IF OPTEXT = LOGCMMD THEN PRINTLOG; IF OPTEXT=STOP THEN STOPPED:= 1; IF OPTEXT=START THEN STOPPED:= 2; IF OPTEXT=SUSPEND THEN STOPPED:=3; END; PROCEDURE DIRECTUPDATE; BEGIN P1:=0; ! INDEX IN INPUT STRING ! P2:=0; ! INDEX IN CONSTANT STRING ! P3:=1; ! PARAMETER NUMBER IN CONSTANT STRING ! REPEAT BEGIN MOVE(OPTEXT,P1,S1,0,1); MOVE(OPTXTS,P2,S2,0,1); WHILE BYTE S1 <> BYTE S2 DO BEGIN IF BYTE S2 = 0 THEN P3:=P3+1; P2:=P2+1; MOVE(OPTXTS,P2,S2,0,1); IF P3>NOQ THEN S2:=S1; END; IF P3<=NOQ THEN BEGIN WHILE BYTE S1 = BYTE S2 DO BEGIN P1:=P1+1; P2:=P2+1; MOVE(OPTEXT,P1,S1,0,1); MOVE(OPTXTS,P2,S2,0,1); IF BYTE S1 = 61 THEN BEGIN MOVE(OPTEXT,P1+1,OPTEXT,0,10); LENGTH:=LENGTH-P1-1; Q:=P3; MOVE(OPDUMMY,Q*2,OPDUMMY,0,2); PAR:= WORD OPDUMMY; P3:=NOQ; END; END; P2:=P2-P1+1; P1:=0; END; END UNTIL P3>=NOQ; END; «ff» ! RC36-001049 PAGE 12 ! PROCEDURE OPCOM; BEGIN GEMDATASET:= DATASET; 1000: Q:=0; 1010: REPEAT BEGIN DATASETNAME:= INITDATASET; IF OPTEXT=STATE THEN BEGIN Q:=1; GOTO 1040; END; 1015: Q:=Q+1; 1020: OPSTATUS(1 SHIFT(16-Q),OPTXTS); IF Q<>1 THEN BEGIN IF Q=3 THEN DATASETNAME:= INITDATASET; MOVE(OPDUMMY,Q*2,OPDUMMY,0,2); PAR:= WORD OPDUMMY; IF PAR = -1 THEN OPMESS(PLUS); IF PAR = -2 THEN OPMESS(MINUS); IF PAR = -3 THEN OPMESS(VOLID); IF PAR = -4 THEN OPMESS(DATASETNAME); IF PAR >= 0 THEN BEGIN BINDEC(PAR,OPDEC); OPMESS(OPDEC); END; END; IF OPTEXT=STATE THEN GOTO 1060; 1040: OPMESS(ENDLINE); OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); IF OPTEXT=STATE THEN BEGIN Q:=0; GOTO 1015; END; IF OPTEXT=SUSPEND THEN GOTO 12; IF LENGTH > 6 THEN DIRECTUPDATE; IF OPTEXT = START THEN GOTO 1070; IF OPTEXT = STOP THEN GOTO 1000; IF OPTEXT = LOGCMMD THEN BEGIN PRINTLOG; GOTO 1040; END; IF OPTEXT = NEXTPARAM THEN GOTO 1060; IF OPTEXT = NL THEN GOTO 1020; IF OPTEXT = ENDLINE THEN GOTO 1020; IF PAR = -3 THEN BEGIN IF LENGTH > 7 THEN LENGTH := 7; VOLID:=INITINF; MOVE(OPTEXT,0,VOLID,0,LENGTH-1); GOTO 1055; END; IF PAR = -4 THEN BEGIN IF LENGTH >9 THEN LENGTH:=9; DATASETNAME:=INITINF; IF BYTE OPTEXT < 65 THEN GOTO 1020; INDEX:=0; REPEAT BEGIN MOVE (OPTEXT,INDEX,S3,0,1); IF BYTE S3 = 32 THEN GOTO 1020; INDEX:=INDEX+1; END UNTIL INDEX >= LENGTH-1; MOVE(OPTEXT,0,DATASETNAME,0,LENGTH-1); END; SIGN:=0; IF OPTEXT = MINUS THEN SIGN:=-1; IF OPTEXT = PLUS THEN SIGN:=+1; IF SIGN <> 0 THEN INSERT(48,OPTEXT,0); DECBIN(OPTEXT,TOM); IF PAR < 0 THEN BEGIN IF SIGN=0 THEN GOTO 1020; PAR:=-2; IF SIGN=1 THEN PAR:=-1; GOTO 1050; END; IF SIGN=0 THEN BEGIN SIGN:=1; PAR:=0; END; PAR:=PAR+TOM*SIGN; IF PAR<0 THEN GOTO 1020; 1050: INSERT(PAR SHIFT(-8),OPDUMMY,0); INSERT(PAR, OPDUMMY,1); MOVE(OPDUMMY,0,OPDUMMY,Q*2,2); 1055: IF OPTEST <> 0 THEN GOTO 1040; GOTO 1020; 1060: IF OPTEXT=STATE THEN IF Q<NOQ THEN GOTO 1015; END UNTIL Q>=NOQ; GOTO 1000; 1070: OPMESS(RUNTXT); IF GEMDATASET <> DATASET THEN LOGDATASET:= DATASET + SETFIRST; END; «ff» !RC36-01049 PAGE 13 ! PROCEDURE CHANGEFD; BEGIN CLOSE(OUT,1); REPEAT BEGIN OPSTOP; IF STOPPED = 1 THEN BEGIN PSTATE:=PSTOP; GOTO 1; END; IF STOPPED = 3 THEN GOTO 12; END UNTIL OPTEXT = START; END; PROCEDURE TESTCATALOGSECTOR; BEGIN L:=0; REPEAT OUT.ZMODE:=FDUNIT*256+3+B10; OUT.ZSHAREL:=128; OUT.ZREM:=OUT.ZSHAREL; TRANSFER(OUT,0,FDUNIT*256); WAITTRANSFER(OUT); SETPOSITION(OUT,0,NEWDSN); PUTREC(OUT,128); OUT^:=DISKBUF.DATA; FILL(0,OUT^,80,48); CLOSE(OUT,0); RUNNINGSTATUS:=HARDBITCHECK; OUT.ZMODE:=FDUNIT*256+1+B10; OUT.ZSHAREL:=128; TRANSFER(OUT,0,FDUNIT*256); WAITTRANSFER(OUT); SETPOSITION(OUT,0,NEWDSN); GETREC(OUT,L1) UNTIL RUNNINGSTATUS = HARDBITCHECK; IF L >= 6 THEN BEGIN BINDEC(NEWDSN-7,HELP); MOVE(HELP,3,CATFAIL,43,2); OPMESS(CATFAIL); CHANGEFD; END; END; «ff» ! RC36-31049 PAGE 14 ! PROCEDURE INITPOSITION; BEGIN 199: IF RECSIZE > 172 THEN BEGIN OPMESS(RLTOOLONG); GOTO 290; END; IF IN.ZMODE = 0 THEN BEGIN INSERT(MTUNIT+48,IN.ZNAME,2); IF MTUNIT >= 0 THEN IF MTUNIT <= 3 THEN GOTO 205; OPMESS(WRONGUNIT); GOTO 290; 205: FILENO:=1; BFACTOR:=1; IF RECSIZE > 128 THEN BFACTOR:=2; OPEN(IN,1); IF DATASET > 1 THEN GOTO 215; SETPOSITION(IN,1,1); GETREC(IN,SIZE); IF IN^ <> VOL1 THEN BEGIN OPMESS(MOUNTTXT); 210: CLOSE(IN,TRUE); GOTO 290; END; INBLOK:=2; IF DATASET > 1 THEN BEGIN 215: INBLOK:=1; FILENO:=(DATASET-1)*3 +1; END; SETPOSITION(IN,FILENO,INBLOK); INITPSW:= 1; GETREC(IN,SIZE); INITPSW:= 0; IF IN^ <> HDR1 THEN BEGIN OPMESS(HDRMIS); GOTO 210; END; MOVE(IN^,1,MTR,0,80); IF MTR.UDKODE <> KD610 THEN BEGIN OPMESS(WRONGMT); GOTO 210; END; IF MTR.DGNR = GLDGNR THEN BEGIN SETFIRST:= SETFIRST -1; GOTO 220; END; VOLTL:=0; DISKET:=INITINF; UDIDENT:=INITINF; VOLID:=INITINF; UDVOLNR:=INITINF; CONVERT(MTR.DGNR,VOLID,EATAB,6); OPMESS(MTDISK); OPMESS(VOLID); OPMESS(ENDLINE); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN BEGIN CLOSE(IN,TRUE); GOTO 1; END; IF STOPPED= 3 THEN GOTO 12; CONVERT(MTR.IDENT,UDIDENT,EATAB,4); CONVERT (MTR.ANTDIS,DISKET,EATAB,2); MOVE(VOLID,3,UDVOLNR,0,3); DECBIN(UDVOLNR,VOLTL); BINIDET:= VOLTL; 220: FILENO:=FILENO+1; INBLOK:=1; CLOSE(IN,0); IN.ZFORM:=UB; OPEN(IN,1); GOTO 299; 290: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; GOTO 199; END; 299: SETPOSITION(IN,FILENO,BLOCKNO); END; «ff» ! RC36-01049 PAGE 15 ! PROCEDURE SHOWERROR; BEGIN ERRORNO:=20; WHILE MASK>0 DO BEGIN MASK:=MASK SHIFT 1; ERRORNO:=ERRORNO+1 END; BINDEC(ERRORNO,OPTEXT); OPMESS(OPTEXT); OPMESS(ENDLINE); END; PROCEDURE MTINERROR; BEGIN IN.Z0:=IN.Z0 AND 8'177757; IF IN.Z0 SHIFT 7 < 0 THEN BEGIN IF INITPSW = 1 THEN GOTO 20; SW25:= 1; EOFSWITCH:=1; GOTO 9; END; IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MTMOUNTTAPE); IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MTTXT); MASK:=IN.Z0; SHOWERROR; PSTATE:=IOERROR; END; IF IN.Z0<>0 THEN BEGIN 2999: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 2999; IF STOPPED=3 THEN GOTO 12; OPMESS(RUNTXT); END; 3000: END; PROCEDURE INITMTIN; BEGIN IN.ZBLOCK:= 1; FILENO:= 1; BLOCKNO:= 1; END; «ff» ! RC36-01049 PAGE 16 ! PROCEDURE LOGERROR; BEGIN NEXTLP:= LOG.Z0 AND 8'000020; LOG.Z0:=LOG.Z0 - NEXTLP; IF LOG.Z0 SHIFT 1 < 0 THEN LOG.Z0:= LOG.Z0 AND 8'041342; IF LOG.Z0 = 8'040000 THEN IF NEXTLP <> 0 THEN LOG.Z0:= NEXTLP; IF LOG.Z0 AND 8'001342 <> 0 THEN LOG.Z0:=LOG.Z0 AND 8'001342; IF LOG.Z0 <> 0 THEN BEGIN OPMESS(LPTTXT); MASK:=LOG.Z0; SHOWERROR; NEXTLP:=0; 4000: OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); IF OPTEXT = START THEN BEGIN IF LOG.Z0 AND 8'141342 <> 0 THEN REPEATSHARE(LOG); END ELSE GOTO 4000; END; END; PROCEDURE INITSTAT; BEGIN PSTATE := 1; TAPENO := 1; RECTOTAL := 0; SAVEIN := 1; SAVEOUT := 1; END; PROCEDURE OUTUPDATE; BEGIN OBLOCK:=(OUT.ZBLOCK-POS+BFACTOR-1)/BFACTOR; SAVEOUT:=OBLOCK; END; PROCEDURE SLINTAPE; BEGIN IBLKANT:= INITINF; BLOKNR:= INITINF; MOVE(IN^,55,IBLKANT,0,5); SW25:= 0; CONVERT(IBLKANT,BLOKNR,EATAB,5); DECBIN(BLOKNR,SMANT); IF SMANT <> BLOCKNO-1 THEN BEGIN OPMESS(BLKERROR); GOTO 12; END; END; «ff» !RC36-01049 PAGE 17 ! PROCEDURE FDERROR; BEGIN IF RUNNINGSTATUS = FIRSTOFFLINE THEN BEGIN RUNNINGSTATUS:=RUNNING; REPEATSHARE(OUT); END; IF RUNNINGSTATUS = HARDBITCHECK THEN IF OUT.Z0 AND 8'000052 <> 0 THEN BEGIN L:=L+1;OUT.ZREM:=1; IF L < 6 THEN RUNNINGSTATUS:= STOPPING; GOTO 400; END; IF OUT.Z0 <> 0 THEN BEGIN OPMESS(FDTXT); MASK:=OUT.Z0; SHOWERROR; PSTATE:=IOERROR; REPEAT OPSTOP UNTIL STOPPED > 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); END; REPEATSHARE(OUT); 400: END; PROCEDURE TRACKSE; !HANDLES EXEPTIONS IN TRACK-SECTOR CALCULATION! BEGIN IF L = 0 THEN BEGIN L:=26; L1:=L1-1; END; BINDEC(L,HELP2); BINDEC(L1,HELP); MOVE(HELP,3,HELP2,0,2); END; PROCEDURE LASTBUFFER; BEGIN HELP3:= 0; IF OUT.ZREM > 0 THEN BEGIN HELP3:=OUT.ZREM; PUTREC(OUT,HELP3); FILL(64,OUT^,0,HELP3); END; WAITZONE(OUT); END; «ff» !RC36-01049 PAGE 18 ! PROCEDURE TERMINATE; BEGIN IF SW25 = 1 THEN BEGIN CLOSE(IN,0); FILENO:= FILENO+1; IN.ZFORM:= U; SETPOSITION(IN,FILENO,1); IN.ZFORM:= U; OPEN(IN,1); GETREC(IN,RECSIZE); IF IN^ <> EOF1 THEN IF IN^ <> EOV1 THEN SWEOVI:= 1; SLINTAPE; IF IN^ = EOF1 THEN GOTO 825; CLOSE(IN,1); 810: OPMESS(MTNEXTIN); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 810; IF STOPPED = 3 THEN GOTO 12; LASTBLKNO:= BLOCKNO-1; GLDGNR:= MTR.DGNR; SETFIRST:= DATASET; DATASET:= 0; GOTO 875; END; 825: LASTBUFFER; OUTUPDATE; EOD:=OUT.ZBLOCK-HELP3/128; L1:=EOD/26; !TRACK! L:=EOD-L1*26; !SECTOR! TRACKSE; CONVERT(HELP2,DISKBUF.EOD,ASCTOEB,5); L:=L-1; TRACKSE; CONVERT(HELP2,DISKBUF.EOE,ASCTOEB,5); !WRITE NEW HEADER AND TEST FOR HARD ERROR ! IF EOFSWITCH = 1 THEN BEGIN IF COUNT = 1 THEN DISKBUF.MVI:=IBMSPACE ELSE DISKBUF.MVI:=EBL; END ELSE DISKBUF.MVI:=C; EOFSWITCH:=0; BINDEC(COUNT,HELP2); CONVERT(HELP2,HELP,ASCTOEB,6); MOVE(HELP,3,DISKBUF.VSN,0,2); TESTCATALOGSECTOR; IF SWEOV =1 THEN BEGIN SWEOV:= 0; GOTO 850; END; OPMESS(EODTXT); OPMESS(UDIDENT); OPMESS(ENDLINE); DECBIN(DISKET,BINDISK); IF BINIDET + BINDISK - 1 <> VOLTL THEN BEGIN OPMESS(CONFTXT); OPMESS(CONFTXT1); OPMESS(DISKET); OPMESS(ENDLINE); GOTO 12; END; 850: CLOSE(OUT,1); 875: IF SWEOVI = 1 THEN BEGIN OPMESS(EOFERROR); SWEOVI:= 0; GOTO 12; END; END; PROCEDURE DISKPOSITION; BEGIN SECTORNO:=OBLOCK+POS; IF BFACTOR = 2 THEN SECTORNO:=OBLOCK*BFACTOR+POS-1; SETPOSITION(OUT,0,SECTORNO); END; «ff» !RC36-01049 PAGE 19 ! PROCEDURE CHECKDISKETTE; BEGIN FILL(64,DISKBUF.DATA,0,80); 40: RUNNINGSTATUS:=FIRSTOFFLINE; NEWDSN:=8; LENGTH:=128; OUT.ZMODE:=FDUNIT*256+17+B10; OUT.ZSHAREL:=128; OUT.ZREM:=0; TRANSFER(OUT,0,FDUNIT*256); WAITTRANSFER(OUT); SETPOSITION(OUT,0,5); RUNNINGSTATUS:=RUNNING; GETREC(OUT,LENGTH); IF OUT^ <> FREERMAP THEN !CHECK OF ERMAP! BEGIN OPMESS(NOTPOSS); OPMESS(CHANGE); CHANGEFD; GOTO 40; END; SETPOSITION(OUT,0,7); GETREC(OUT,LENGTH); CONVERT(VOLID,VOLNAME,ASCTOEB,6); IF OUT^.VOL <> VOLNAME THEN BEGIN OPMESS(WRONGVOL); CHANGEFD; GOTO 40; END; SETPOSITION(OUT,0,NEWDSN); GETLDATE(DATE1); MOVE(DATE1,0,DATESTR,0,2); MOVE(DATE1,3,DATESTR,2,5); MOVE(DATE1,6,DATESTR,4,2); 50: GETREC(OUT,LENGTH); IF NEWDSN > 26 THEN BEGIN OPMESS(DSNLIMIT); OPMESS(CHANGE); CHANGEFD; GOTO 40; END; IF OUT^ = HDR1 THEN !BRAND NEW DISKETTE! IF OUT^.BOE = OUT^.EOD THEN GOTO 53 ELSE ! SEARCH FOR FREE DATASET ! BEGIN NEWDSN:=NEWDSN + 1; GOTO 50; END; SETPOSITION(OUT,0,NEWDSN-1); GETREC(OUT,LENGTH); 53: DISKBUF.BOE:=OUT^.EOD; IF DISKBUF.BOE > EBEOD THEN GOTO 55; IF DISKBUF.BOE < BOE THEN BEGIN 55: OPMESS(BOEERROR); OPMESS(CHANGE); CHANGEFD; GOTO 40; END; «ff» ! RC36-01049 PAGE 20 ! CONVERT(DISKBUF.BOE,HELP,EATAB,5); INSERT(0,HELP,2); DECBIN(HELP,POS); MOVE(HELP,3,HELP,0,2); DECBIN(HELP,LENGTH); POS:= POS*26 + LENGTH; IF POS > MAXBLOCK THEN BEGIN OPMESS(CHANGEDISK); OPMESS(MTDISK); OPMESS(VOLID); OPMESS(ENDLINE); CHANGEFD; GOTO 40; END; CLOSE(OUT,0); COUNT:=COUNT+1; OUT.ZMODE:=FDUNIT*256+3+B10; OUT.ZSHAREL:=128; OUT.ZREM:=0; TRANSFER(OUT,0,FDUNIT*256); WAITTRANSFER(OUT); SETPOSITION(OUT,0,POS); POS:=POS-1; IF RECSIZE <= 128 THEN BEGIN BINDEC(RECSIZE,HELP2); CONVERT(HELP2,HELP,ASCTOEB,6); MOVE(HELP,2,DISKBUF.RLE,0,3); END ELSE DISKBUF.RLE:=EBC128; DISKBUF.BEG:=HDR1; CONVERT(DATESTR,DISKBUF.CDT,ASCTOEB,6); CONVERT(DATASETNAME,DISKBUF.DSN,ASCTOEB,8); OUT.ZSHAREL:=512; OUT.ZREM:=OUT.ZSHAREL; END; «ff» !RC36-01049 PAGE 21! BEGIN NEWDSN:=8; GLDGNR:=INITINF; SW25:=0; LASTBLKNO:=0; RECSIZE:=80;EOFSWITCH:=0;COUNT:=0;DATASET:=1; OPIN(OPSTRING); RUNNINGSTATUS:=IDLE; LOGDATASET:=1; LOGBLOCKNO:=1; TPAR1:=-3; TPAR2:=-4; VOLID:=INITINF; DATASETNAME:=INITINF; MTUNIT:=0; LOGPRINT:=TRUE; OBLOCK:=1; HELP3:=0; DISKMAX:=1875; SETFIRST:=0; SWEOV:=0; SWEOVI:=0; INITMTIN; INITSTAT; 1: OPCOM; 2: INITPOSITION; IF OUT.ZMODE = 0 THEN CHECKDISKETTE; DISKPOSITION; 3: REPEAT !MAIN LOOP! DELETEIN:=SAVEIN-BLOCKNO; DELETEOUT:=SAVEOUT-OBLOCK; GETREC(IN,RECSIZE); BLOCKNO:=IN.ZBLOCK; LOGBLOCKNO:= BLOCKNO + LASTBLKNO; SAVEIN:=BLOCKNO; PSTATE:=RUNNI; INDEX:=0; WHILE RECSIZE-INDEX >= 128 DO BEGIN PUTREC(OUT,128); MOVE(IN^,INDEX,OUT^,0,128); INDEX:=INDEX+128; END; PUTREC(OUT,128); MOVE(IN^,INDEX,OUT^,0,RECSIZE-INDEX); FILL(64,OUT^,RECSIZE-INDEX,128-(RECSIZE-INDEX)); RECTOTAL:=RECTOTAL+1; OUTUPDATE; IF DELETEIN = DELETEOUT THEN RECTOTAL:=RECTOTAL-DELETEIN; IF DELETEIN > DELETEOUT THEN RECTOTAL:=RECTOTAL-DELETEOUT; IF RECTOTAL >= DISKMAX THEN BEGIN IF IN^ = SLTREC THEN GETREC(IN,RECSIZE); SWEOV:=1; DISKMAX:=DISKMAX+MAXBLOCK; TERMINATE; OPMESS(CHANGEDISK); VOLTL:=VOLTL+1; BINDEC(VOLTL,UDVOLNR1); MOVE(UDVOLNR1,2,VOLID,3,3); OPMESS(MTDISK); OPMESS(VOLID); OPMESS(ENDLINE); CHANGEFD; TAPENO:=TAPENO+1; CHECKDISKETTE; END UNTIL OPTEST <> 0; IF OPSTRING = LOGCMMD THEN GOTO 5; LASTBUFFER; 5: OUTUPDATE; OPSTOP; IF STOPPED = 1 THEN BEGIN PSTATE:=PSTOP; GOTO 1; END; IF STOPPED = 3 THEN GOTO 12; GOTO 3; 9: TERMINATE; GOTO 13; 12: OUT.ZMODE:=0; CLOSE(OUT,1); CLOSE(IN,1); PSTATE:=PSUSP; OPMESS(SUSTXT); GOTO 14; 13: CLOSE(IN,0); IF DATASET = 0 THEN BEGIN INITMTIN; DATASET:= 1; GOTO 2; END; 14: PRINTLOG; INITSTAT; DISKMAX:=1875; BLOCKNO:=1; LOGBLOCKNO:=BLOCKNO; LASTBLKNO:= 0; FILENO:=1; DATASET:=DATASET+1; LOGDATASET:= LOGDATASET+1; OBLOCK:=1; IN.ZFORM:=U; COUNT:=0; HELP3:=0; REPEAT OPSTOP UNTIL STOPPED <>0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); GOTO 2; 20: PSTATE:= PEOJ; CLOSE(IN,1); PRINTLOG; OPMESS(EOJTXT); END; «ff» «nul»