|
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: 33280 (0x8200) Types: TextFile Notes: RCSL-43-GL-4928, RCSL-43-GL-4931, RCSL-43-GL-4934, RCSL-43-GL-8542, RCSL-43-GL-8543, RCSL-43-GL-8544 Names: »S1051«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL : 43-GL8543 AUTHOR: PBP EDITED: 79.02.12 PROGRAM RC36-01051.01 3740 DISKETTE TO LABELLED MAG-TAPE WITH LOG. KEYWORDS: MUSIL,CONVERSION,A3740,MTA,SP,LISTING ABSTRACT: THIS PROGRAM HANDLES DISKETTES WRITTEN IN IBM 3740 FORMAT WITH EBCDIC DATA. OUTPUT IS ON STANDARD IBM OS LABELLED MAGNETIC TAPES WITH EBCDIC CODE DATA. THE INPUT RECORDS ARE MAX. 512 CHARACTERS. ONE INPUT RECORD IS ONE BLOCK ON THE MAGNETIC TAPE. THE MAGNETIC TAPE WILL ONLY CONTAIN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON EITHER SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY. RCSL 43-GL8542: ASCII SOURCE TAPE RCSL 43-GL8544: REL.BIN/TTY ! «ff» ! RC36-01051 PAGE 01 TITLE: 3740 DISKETTE TO LABELLED MAG-TAPE WITH LOG. ABSTRACT: THIS PROGRAM HANDLES DISKETTES WRITTEN IN IBM 3740 FORMAT WITH EBCDIC DATA. OUTPUT IS ON STANDARD IBM OS LABELLED MAGNETIC TAPES WITH EBCDIC CODE DATA. THE INPUT RECORDS ARE MAX. 512 CHARACTERS. ONE INPUT RECORD IS ONE BLOCK ON THE MAGNETIC TAPE. THE MAGNETIC TAPE WILL ONLY CONTAIN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON EITHER SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY. SIZE: 9510 BYTES. INCLUDING TWO 512 BYTES INPUT BUFFERS AND TWO 256 BYTES OUTPUT BUFFER. DATE: 79.02.12. RUNTIME PARAMETERS: VOLUME IDENT : (MAX 6 CHARACTERS). DISKETTE VOLUME IDENT. IF THIS PARAMETER IS EMPTY, NO CHECK OF VOLUME IDENT ON DISKETTE IS PERFORMED. DATASET NAME : (MAX 8 CHARACTERS). NAME OF DATASET ON DISKETTE TO BE CONVERTED. IF THIS PARAMETER IS EMPTY, ALL DATASETS WILL BE TRANSFERRED. IN BLOCKNO : 00001 NEXT RECORD TO BE READ FROM DISKETTE. RECORDSIZE : 00172 OUTPUT RECORDSIZE MAX. 256 CHARACTERS. LABELCHECK : + INDICATES IF EXPIRATION DATE ON THE OUTPUT TAPE SHOULD BE CHECKED BEFORE WRITING. VOL SER NO : (MAX. 6 CHARACTERS) IF THIS PARAMETER IS EMPTY, THE OUTPUTTAPE MUST CONTAIN A VOLUME LABEL. AFTER PROCESSING THIS PARAMETER CONTAINS THE VOLUME SERIAL NUMBER. IF THE PARAMETER IS NON EMPTY AND THE OUTPUTTAPE HAS A VOLUME LABEL, THEN THE VOLUME SERIAL NUMBER MUST BE THE SAME AS THE PARAMETER. FINALLY, IF THE PARAMETER IS NON- EMPTY AND THE OUTPUTTAPE HAS NO VOLUME LABEL, A VOLUME LABEL WITH THIS SERIAL NUMBER IS CREATED. DATA IDENTIFIER: (MAX.17 CHARACTERS) EXPIRATION DATE: 00000 (5 DIGITS) YYDDD (DDD: DAY-NO - YY: YEAR). OUT BLOCKNO : 00001 NEXT BLOCK TO BE WRITTEN TO MAGTAPE. MT UNIT : 00000 MT UNIT NUMBER. ( 0 - 3 ). MT DENSITY : 1600 1600/800. LOGPRINT : + + INDICATES LOG ON SERIAL PRINTER. - INDICATES LOG ON TTY. «ff» RC36-01051 PAGE 02 OTHER OUTPUT MESSAGES: CONTSTATE: +/- STATE OF CONTINUE SWITCH. CONTSTATE=+ MEANS THAT MORE DISKETTES SHALL BE COPIED INTO ONE OUTPUTFILE. CONTSTATE=- MEANS THAT THE JOB IS TERMINATED AT END OF FILE FROM DISKETTE. PROG NO : 1051 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. MOUNT NEXT DISKETTE END OF FILE WAS MET ON DISKETTE. AND CONTSTATE=+. WRITE START, STOP OR CONT. (CONT WILL TERMINATE THE JOB ) TAPE PROTECTED LABELCHEK = +, AND DATE < EXPIRATIONDATE ON OUTPUTTAPE. VOLUME LABEL MISSINGVOL SER NO IS EMPTY AND THERE IS NO VOLUME LABEL ON THE OUTPUTTAPE. EXPIRATION DATE ERROR EXPIRATION DATE > 99366. MT UNIT CONFLICT MT UNIT NOT SPECIFIED TO 0 - 3. MT DENSITY ERROR MT DENSITY NOT SPECIFIED TO 1600 OR 800. MOUNT DATA TAPE MT-UNIT IS NOT ON-LINE. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. FD ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. SP ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. RECORDSIZE ERROR RECORDLENGTH ON FD IS GREATER THAN RECORD- SIZE ON MT. SUSPEND JOB. END-OF-TAPE MARK EOT MARK DETECTED. STOP WILL IN THIS CASE TERMINATE THE JOB. END JOB PROGRAM EXECUTION IS TERMINATED NORMALLY, AND THE PROGRAM IS READY TO WRITE A NEW OUTPUTTAPE. SUSPENDED THE JOB IS TERMINATED ABNORMALLY,AND THE OUTPUTTAPE IS REWOUND. ON/OFF CURRENT STATE OF CONTINUE. **** NOTICE **** SPECIAL VERSION FOR RECIVING 512 BYTES BUFFERS. «ff» RC36-01051 PAGE 03 INPUT MESSAGES: STOP STOPS EXECUTION WRITING PROG NO : 1051. STOP HAS NO EFFECT AFTER A DEVICE ERROR MESSAGE. SUSPEND TERMINATES THE JOB, RELEASING DRIVERS. THE OUTPUTAPE IS REWOUND. <ESC> NEXT PARAMETER IS DISPLAYED STATE ALL RUNTIME PARAMETERS ARE DISPLAYED "VALUE" CURRENTLY DISPLAYED RUNTIME PARAMETER IS CHANGED TO "VALUE". "TEXT"="VALUE" THE RUNTIME PARAMETER IDENTIFIED BY "TEXT" IS CHANGED TO "VALUE" CONT STATE OF CONTINUE SWITCH IS INVERTED. CURRENT STATE OF CONTINUE IS DISPLAYED(ON/OFF). START PROGRAM EXECUTION IS STARTED. NOTE: AFTER MT ERROR START MEANS REPEATING THE WRITE/READ OPERATION. AFTER ERROR ON DISKETTE IT MEANS ACCEPTING THE ERRONEUS BLOCK. ACCEPT IN CASE OF SEQUENCE ERROR AND DISKETTE IS WANTED ANYWAY, TYPE ACCEPT. LOG THE LOG IS OUTPUT ON THE SELECTED LOG-DEVICE. DESCRIPTION OF THE LOG: THE LOG CONTAINS A HEADLINE DESCRIBING INPUT AND OUTPUT MEDIUM (DRIVER NAMES), DATE AND TIME. AFTER THE HEADLINE THE ACTUAL POSITIONS ON INPUT/OUTPUT DEVICES ARE PRINTED. THE VOLUME-NUMBER/DATASET-NUMBER AND RECORD/BLOCK NUMBERS ARE USED. (RECORD/BLOCK NUMBERS ARE THE NEXT RECORD/BLOCK TO BE WRITTEN). 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 ! «ff» ! RC36-01051 PAGE 04 ! CONST NOQ= 13, OPTXTS= '<10>PROG NO : 1051<0> <10>VOLUME IDENT : <0> <10>DATASET NAME : <0> <10>IN BLOCKNO : <0> <10>RECORDSIZE : <0> <10>LABELCHECK : <0> <10>VOL SER NO : <0> <10>DATA IDENTIFIER: <0> <10>EXPIRATION DATE: <0> <10>OUT BLOCKNO : <0> <10>MTUNIT : <0> <10>MTDENSITY : <0> <10>LOGPRINT : <0>', START= 'START', STOP= 'STOP', SUSPEND= 'SUSPEND', CONT= 'CONT', STATE= 'STATE', ACCEPT = 'ACCEPT', MINUS= '-', PLUS= '+', FIVE= '<5><0>', FIFTEEN= '<15><0>', NL= '<10><0>', NEXTPARAM= '<27>', ENDLINE= '<13><0>', BELL= '<7><7><7>', RUNTXT= '<8><4><10>RUNNING<13><0>', SUSTXT= '<7><10>SUSPENDED<13><10>', FDTXT= '<7><10>FD ERROR ', MTTXT= '<7><10>MT ERROR ', EOJTXT= '<14><7><10>END JOB<13><0>', MOUNTDISK= '<7><10>MOUNT DISKETTE<13><0>', FDEOF= '<7><10>MOUNT NEXT DISKETTE<13><0>', MTMOUNTTAPE= '<14><7><10>MOUNT DATA TAPE<13><0>', ENDTAPE= '<14><7><10>END-OF-TAPE MARK<13><0>', CONTSTATE= '<10>CONSTATE : <0>', IDENTEMPTY= '<7><10>DATA IDENTIFIER EMPTY<13>', WRONGVOL= '<7><10>WRONG VOLUME LABEL<13>', PROTECTTXT= '<7><10>TAPE PROTECTED<13><0>', EXERROR= '<7><10>EXPIRATION DATE ERROR<13><0>', DENERROR= '<7><10>MT DENSITY ERROR<13><0>', RECERROR= '<7><10>RECORDSIZE ERROR<13><0>', WRONGUNIT= '<7><10>MT UNIT CONFLICT<13><0>', VOLMIS= '<7><10>VOLUME LABEL MISSING<13><0>', INITEXP= '00000<0>', INITINF= '<0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0>', INITVOLSER= ' <0>', READ= 8'122, ZERO= 8'60, ASCIISPS= ' ', «ff» ! RC36-01051 PAGE 05 ! VOL1= 'VOL10 ', HDR1= 'HDR1 00000000010001000101 0000000 ', HDR2= 'HDR2F000000000000 ', EOF1= 'EOF1', EOF2= 'EOF2', VOL1L= '<229><214><211><241>', HDR1L= '<200><196><217><241>', HDR2L= '<200><196><217><242>', DEN800= '2', DEN1600= '3', ON= 'ON<13><0>', OFF= 'OFF<13><0>', C99366= '99366', TRUE= -1, FALSE= -2, UFORM= 0, ! ** LOGTEXTS ** ! LOGCMMD= 'LOG', TTYNAME= 'TTY<0>', LPTNAME= 'SP<0><0>', NEWL= '<10><10>', LOGHEAD='** FD0 TO MT UNIT X ** DATE ........ TIME ........<10><10>', POSHEAD= 'POSITIONS ON INPUT AND OUTPUT:<10><10>', PTEXT1= 'DISKETTE ... RECORD .....<10>', PTEXT2= 'DATASET ... BLOCK .....<10>', STATHEAD= '<10>TOTAL STATISTICS FOR JOB<10><10>', STEXT1= 'READ: ..... RECORDS<10>', STEXT2= 'WRITTEN: ..... BLOCKS<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, «ff» ! RC36-01051 PAGE 06 ! ! 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-01051 PAGE 07 ! ! ASCII TO EBCDIC CONVERSION TABLE : ! AETAB= ! 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-01051 PAGE 08 ! VAR OPDUMMY: STRING(2); ! RUNTIME PARAMETERS ! PROGNO: INTEGER; TPAR5: INTEGER; TPAR4: INTEGER; INBLOK: INTEGER; RECSIZE: INTEGER; LABELCHECK: INTEGER; TPAR3: INTEGER; TPAR1: INTEGER; TPAR2: INTEGER; BLOCKNO: INTEGER; MTUNIT: INTEGER; MTDENSITY: INTEGER; LOGPRINT: INTEGER; OPTEXT: STRING(80); ! COMMUNICATION AREA ! OPSTRING: STRING(80); OPDEC: STRING(10); OPCONT: STRING(2); ! INTERNAL VARIABLES ! NEXTCONT: STRING(1); ! USED BY STANDARD ! GLCONT: STRING(1); ! PROCEDURES. ! ERRORNO: INTEGER; MASK: INTEGER; TOM: INTEGER; SIGN: INTEGER; Q: INTEGER; PAR: INTEGER; LENGTH: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; S1: STRING(2); S2: STRING(2); «ff» ! RC36-01051 PAGE 09 ! EOT: INTEGER; ! INTERNAL VARIABLES ! TAPESREAD: INTEGER; INT1: INTEGER; EXYYDDD: INTEGER; FILENO: INTEGER; NEWMT: INTEGER; MTREADMODE: INTEGER; READGIVEUP: INTEGER; IDENTLENGTH: INTEGER; STOPPED: INTEGER; RECLENGTH: INTEGER; SEQCHECK: INTEGER; INDEX: INTEGER; OFFLINE: INTEGER; HELP1: INTEGER; HELP2: INTEGER; HELP3: INTEGER; I: INTEGER; SERIALTEXT: STRING(7); TAPEVOLSER: STRING(6); IDENTTEXT: STRING(20); CREDATE: STRING(6); EXPDATE: STRING(6); H1LABEL: STRING(80); H2LABEL: STRING(80); DATE: STRING(5); TAPEDATE: STRING(5); BLKNO: STRING(6); RECLGT: STRING(6); STR3740: STRING(18); VOLUMEID: STRING(7); DATASETNAME: STRING(9); ! ** LOG VARIABLES ** ! NEXTLP: INTEGER; PSTATE: INTEGER; DISKNO: INTEGER; RECTOTAL: INTEGER; SAVEIN: INTEGER; SAVEOUT: INTEGER; DELETEIN: INTEGER; DELETEOUT: INTEGER; BFACTOR: INTEGER; SECTORNO: INTEGER; LDATE: STRING(8); LHELP: STRING(6); «ff» ! RC36-01051 PAGE 10 ! IN: FILE ! INPUT FILE DESCRIPTION ! 'A3740', ! NAME OF INPUT DRIVER ! 14, ! KIND= BLOCKED, ! ! REPEATABLE, ! ! POSITIONABLE, ! 2, ! BUFFERS ! 512, ! SHARESIZE ! UB; ! UNDEFINED ! CONV STR3740; GIVEUP RDERROR, ! FD ERROR PROCEDURE ! 2'1110011111111110 ! GIVE UP MASK ! OF STRING(1); ! RECORD STRUCTURE ! OUT: FILE ! OUTPUT FILE DESCRIPTION ! 'MT0', ! NAME OF OUTPUT DRIVER ! 14, ! KIND= REPEATABLE, ! ! POSITIONABLE, ! ! BLOCKED. ! 2, ! BUFFERS ! 256, ! SHARESIZE ! U; ! UNDEFINED ! GIVEUP MTOUTERROR, ! MT ERROR PROCEDURE ! 2'0110011111111110 ! GIVE UP MASK ! OF STRING(80); ! RECORD STRUCTURE ! 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-01051 PAGE 10A ! PROCEDURE GETTIME(VAR TIME : STRING(8)); CODEBODY P0149; PROCEDURE GETLDATE(VAR DATE: STRING(8)); CODEBODY P0150; PROCEDURE GETSDATE(VAR DATE: STRING(6)); CODEBODY P0151; 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,18); OUTTEXT(LOG,LOGHEAD); ! ACTUAL POSITIONS ! BINDEC(DISKNO,LHELP); MOVE(LHELP,2,PTEXT1,11,3); BINDEC(INBLOK,LHELP); MOVE(LHELP,0,PTEXT1,24,5); BINDEC(FILENO-1,LHELP); MOVE(LHELP,2,PTEXT2,11,3); BINDEC(BLOCKNO,LHELP); MOVE(LHELP,0,PTEXT2,24,5); OUTTEXT(LOG,POSHEAD); OUTTEXT(LOG,PTEXT1); OUTTEXT(LOG,PTEXT2); ! STATISTICS ! BINDEC(RECTOTAL,LHELP); MOVE(LHELP,0,STEXT1,11,5); BINDEC(BLOCKNO-1,LHELP); MOVE(LHELP,0,STEXT2,11,5); OUTTEXT(LOG,STATHEAD); OUTTEXT(LOG,STEXT1); OUTTEXT(LOG,STEXT2); ! 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-01051 PAGE 11 ! PROCEDURE CONTINUE; BEGIN GLCONT:=OPCONT; OPCONT:=NEXTCONT; NEXTCONT:=GLCONT; IF OPCONT=FIFTEEN THEN OPMESS(OFF); IF OPCONT=FIVE THEN OPMESS(ON); END; PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); STOPPED:= 0; IF OPTEXT=LOGCMMD THEN PRINTLOG; IF OPTEXT=CONT THEN CONTINUE; IF OPTEXT=STOP THEN STOPPED:= 1; IF OPTEXT=START THEN STOPPED:= 2; IF OPTEXT=SUSPEND THEN STOPPED:=3; END; PROCEDURE OPEN3740; BEGIN ! TRANSFER VOL-ID + DATASETNAME + INFORMATION ! ! ABOUT CHECK OF SEQUENCE-NUMBER ON ! ! MULTI-VOLUME-DATASETS ! STR3740:=ASCIISPS; INSERT(READ,STR3740,0); INSERT(ZERO,STR3740,1); MOVE(VOLUMEID,0,STR3740,3,6); MOVE(DATASETNAME,0,STR3740,9,8); CONVERT(STR3740,STR3740,AETAB,18); CONVERT(STR3740,STR3740,EATAB,18); 0: SEQCHECK:=0; OPEN(IN,1); IF SEQCHECK <> 0 THEN BEGIN INSERT(READ,STR3740,2); GOTO 0; ! SEQENCE ERROR ACCEPTED ! END; END; PROCEDURE SECTORCALC; BEGIN SECTORNO:=INBLOK; IF BFACTOR = 2 THEN SECTORNO:=INBLOK*BFACTOR - 1; IF SECTORNO <= 0 THEN SECTORNO:= 1; END; «ff» ! RC36-01051 PAGE 12 ! PROCEDURE INITPOSITION; BEGIN ! PARAMETER CHECK ! 2000: IF NEWMT=FALSE THEN GOTO 2009; IF RECSIZE > 0 THEN IF RECSIZE <= 256 THEN GOTO 2003; OPMESS(RECERROR); GOTO 2008; 2003: IF IDENTLENGTH=0 THEN BEGIN OPMESS(IDENTEMPTY); GOTO 2008; END; IF EXPDATE > C99366 THEN BEGIN OPMESS(EXERROR); GOTO 2008; END; INSERT(MTUNIT+48,OUT.ZNAME,2); IF MTUNIT >= 0 THEN IF MTUNIT <= 3 THEN GOTO 2006; OPMESS(WRONGUNIT); GOTO 2008; 2006: IF MTDENSITY = 800 THEN GOTO 2009; IF MTDENSITY =1600 THEN GOTO 2009; OPMESS(DENERROR); 2008: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; GOTO 2000; 2009: IF IN.ZMODE = 0 THEN BEGIN BFACTOR:=1; IF RECSIZE > 128 THEN BFACTOR:=2; SECTORCALC; OPEN3740; SETPOSITION(IN,0,SECTORNO); END; «ff» ! RC36-01051 PAGE 13 ! IF NEWMT = TRUE THEN BEGIN ! CREATION AND CHECK OF LABELS ! ! LABELCHECK ! OUT.ZSHAREL:=80; OPEN(OUT,5); SETPOSITION(OUT,1,1); MTREADMODE:=TRUE; READGIVEUP:=FALSE; GETSDATE(DATE); 2010: GETREC(OUT,RECLENGTH); ! CHECK VOLUME LABEL ! IF READGIVEUP=TRUE THEN GOTO 2011; IF RECLENGTH<>80 THEN GOTO 2011; IF OUT^<>VOL1L THEN BEGIN ! NO VOLUME LABEL ! 2011: IF SERIALTEXT=INITINF THEN BEGIN OPMESS(VOLMIS); CLOSE(OUT,1); BLOCKNO:=1; GOTO 2008; END; ! CREATE VOLUME LABEL ! CLOSE(OUT,0); MTREADMODE:=FALSE; OPEN(OUT,3); SETPOSITION(OUT,1,1); PUTREC(OUT,80); OUT^:=VOL1; MOVE(SERIALTEXT,0,OUT^,4,6); CONVERT(OUT^,OUT^,AETAB,80); END ELSE BEGIN MOVE(OUT^,4,TAPEVOLSER,0,6); CONVERT(TAPEVOLSER,TAPEVOLSER,EATAB,6); IF SERIALTEXT=INITINF THEN SERIALTEXT:=TAPEVOLSER ELSE IF SERIALTEXT<>TAPEVOLSER THEN BEGIN OPMESS(WRONGVOL); CLOSE(OUT,1); BLOCKNO:=1; GOTO 2008; END; IF LABELCHECK=TRUE THEN BEGIN GETREC(OUT,RECLENGTH); IF READGIVEUP=TRUE THEN GOTO 2012; IF RECLENGTH<>80 THEN GOTO 2012; IF OUT^<>HDR1L THEN GOTO 2012; ! HDR1 LABEL PRESENT. CHECK EXPIRATION DATE ! MOVE(OUT^,48,TAPEDATE,0,5); CONVERT(TAPEDATE,TAPEDATE,EATAB,5); IF TAPEDATE>DATE THEN BEGIN OPMESS(PROTECTTXT); CLOSE(OUT,1); GOTO 2008; END; END ! LABELCHECK=TRUE !; END !OUT^=VOL1L!; 2012: CLOSE(OUT,0); MTREADMODE:=FALSE; «ff» ! RC36-1051 PAGE 14 ! ! WRITE NEW HDR LABELS ! OPEN(OUT,3); SETPOSITION(OUT,1,2); H1LABEL:=HDR1; MOVE(IDENTTEXT,0,H1LABEL,4,IDENTLENGTH); MOVE(DATE,0,H1LABEL,42,5); MOVE(EXPDATE,0,H1LABEL,48,5); MOVE(SERIALTEXT,0,H1LABEL,21,6); PUTREC(OUT,80); CONVERT(H1LABEL,OUT^,AETAB,80); H2LABEL:=HDR2; BINDEC(RECSIZE,RECLGT); MOVE(RECLGT,0,H2LABEL,5,5); MOVE(RECLGT,0,H2LABEL,10,5); IF MTDENSITY=800 THEN MOVE(DEN800,0,H2LABEL,15,1); IF MTDENSITY=1600 THEN MOVE(DEN1600,0,H2LABEL,15,1); PUTREC(OUT,80); CONVERT(H2LABEL,OUT^,AETAB,80); CLOSE(OUT,0); FILENO:=2; OUT.ZFORM:=UFORM; OUT.ZSHAREL:=RECSIZE; OPEN(OUT,3); NEWMT := FALSE; SETPOSITION(OUT,FILENO,BLOCKNO); END ! NEWMT=TRUE ! ELSE IF BLOCKNO<>OUT.ZBLOCK THEN SETPOSITION(OUT,FILENO,BLOCKNO); IF IN.ZBLOCK <> INBLOK THEN BEGIN SECTORCALC; SETPOSITION(IN,0,SECTORNO); END; END ! INITPOSITION !; «ff» ! RC 36-01051 PAGE 15 ! 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,20); 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-01051 PAGE 16 ! PROCEDURE OPCOM; BEGIN 1000: Q:=0; 1010: REPEAT BEGIN IF OPTEXT=STATE THEN BEGIN Q:=1; OPMESS(CONTSTATE); IF OPCONT=FIVE THEN OPMESS(PLUS); IF OPCONT=FIFTEEN THEN OPMESS(MINUS); GOTO 1040; END; 1015: Q:=Q+1; 1020: OPSTATUS(1 SHIFT(16-Q),OPTXTS); IF Q<>1 THEN BEGIN 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(IDENTTEXT); IF PAR = -4 THEN OPMESS(EXPDATE); IF PAR = -5 THEN OPMESS(SERIALTEXT); IF PAR = -6 THEN OPMESS(DATASETNAME); IF PAR = -7 THEN OPMESS(VOLUMEID); 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 LENGTH > 6 THEN DIRECTUPDATE; IF OPTEXT = START THEN GOTO 1070; IF OPTEXT = STOP THEN GOTO 1000; IF OPTEXT = SUSPEND THEN GOTO 12; IF OPTEXT = CONT THEN BEGIN CONTINUE; GOTO 1040; END; IF OPTEXT = NEXTPARAM THEN GOTO 1060; IF OPTEXT = NL THEN GOTO 1020; IF OPTEXT = ENDLINE THEN GOTO 1020; IF OPTEXT = LOGCMMD THEN BEGIN PRINTLOG; GOTO 1040; END; IF PAR = -7 THEN BEGIN IF LENGTH > 7 THEN LENGTH := 7; VOLUMEID := INITINF; MOVE(OPTEXT,0,VOLUMEID,0,LENGTH-1); GOTO 1055; END; IF PAR = -6 THEN BEGIN IF LENGTH > 9 THEN LENGTH := 9; DATASETNAME:= INITINF; MOVE(OPTEXT,0,DATASETNAME,0,LENGTH-1); GOTO 1055; END; «ff» ! RC36-01051 PAGE 17 ! IF PAR=-3 THEN BEGIN IF LENGTH>18 THEN LENGTH:=18; IDENTLENGTH:=LENGTH-1; IDENTTEXT:=INITINF; MOVE(OPTEXT,0,IDENTTEXT,0,IDENTLENGTH); GOTO 1055; END; IF PAR=-4 THEN BEGIN IF LENGTH>6 THEN LENGTH:=6; EXPDATE:=INITEXP; MOVE(OPTEXT,0,EXPDATE,0,LENGTH-1); GOTO 1055; END; IF PAR = -5 THEN BEGIN IF LENGTH>7 THEN LENGTH:=7; IF LENGTH=1 THEN SERIALTEXT:=INITINF ELSE SERIALTEXT:=INITVOLSER; MOVE(OPTEXT,0,SERIALTEXT,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); END; 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; «ff» ! RC36-01051 PAGE 18 ! PROCEDURE RDERROR; BEGIN IF IN.Z0 SHIFT 1 < 0 THEN BEGIN OFFLINE:=OFFLINE-1; IF OFFLINE > 0 THEN REPEATSHARE(IN); OPMESS(MOUNTDISK); OFFLINE:=150; END; IF IN.Z0 AND 8'400 <> 0 THEN GOTO 9; IF IN.Z0 AND 8'20 <> 0 THEN GOTO 9; IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(FDTXT); MASK:=IN.Z0; SHOWERROR; END; REPEAT OPSTOP; PSTATE:=IOERROR; IF OPTEXT = ACCEPT THEN BEGIN IF IN.Z0 AND 8'2000 <> 0 THEN SEQCHECK:=1; GOTO 100; END; IF OPTEXT = STOP THEN GOTO 11; IF OPTEXT = SUSPEND THEN GOTO 12 UNTIL OPTEXT = START; 100: OPMESS(RUNTXT); REPEATSHARE(IN); END; PROCEDURE MTOUTERROR; BEGIN IF OUT.Z0 AND 8'000020 <> 0 THEN EOT:= TRUE; OUT.Z0:=OUT.Z0 AND 8'177757; IF MTREADMODE = TRUE THEN IF OUT.Z0 AND 8'000602 <> 0 THEN BEGIN READGIVEUP:= TRUE; ! TIMER - EOF - BLOCKLENGTH ERROR ! OUT.ZREM:= OUT.ZSHAREL; GOTO 3000; END; IF OUT.Z0 SHIFT 1 < 0 THEN OPMESS(MTMOUNTTAPE); IF OUT.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MTTXT); MASK:=OUT.Z0; SHOWERROR; PSTATE:=IOERROR; END; IF OUT.Z0<>0 THEN BEGIN 2999: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 2999; IF STOPPED=3 THEN GOTO 12; OPMESS(RUNTXT); IF MTREADMODE = TRUE THEN GOTO 3000; IF OUT.Z0 AND 8'063352 <> 0 THEN REPEATSHARE(OUT); END; 3000: END; «ff» ! RC36-01051 PAGE 18A ! 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; DISKNO := 1; RECTOTAL := 0; SAVEIN := 1; SAVEOUT := 1; END; PROCEDURE INITPARAMS; BEGIN INBLOK := 1; FILENO := 1; BLOCKNO:= 1; NEWMT := TRUE; EOT := FALSE; OFFLINE := 150; END; PROCEDURE OUTUPDATE; BEGIN BLOCKNO := OUT.ZBLOCK; SAVEOUT := BLOCKNO; END; «ff» ! RC36-01051 PAGE 19 ! BEGIN RECSIZE:=172; LABELCHECK := TRUE; TPAR1:=-3; TPAR2:=-4; TPAR3:=-5; TPAR4:=-6; TPAR5:=-7; OPTEXT:= RUNTEXT; IDENTTEXT:= INITINF; IDENTLENGTH:= 0; SERIALTEXT:=INITINF; VOLUMEID:=INITINF; DATASETNAME:=INITINF; EXYYDDD:= 0; EXPDATE:= INITEXP; LOGPRINT:=TRUE; MTUNIT:=0; MTDENSITY:= 1600; OPCONT:= FIFTEEN; NEXTCONT:= FIVE; INITPARAMS; INITSTAT; OPIN(OPSTRING); 1: OPCOM; IF RECSIZE <= 128 THEN BEGIN HELP1:=4; HELP2:=128; END ELSE BEGIN HELP1:=2; HELP2:=256; END; 2: INITPOSITION; «ff» ! RC36-01051 PAGE 20 ! ! MAIN LOOP ! 3: REPEAT DELETEIN:=SAVEIN - INBLOK; DELETEOUT:=SAVEOUT - BLOCKNO; GETREC(IN,IN.ZSHAREL); PSTATE:=RUNNI; INBLOK:=IN.ZBLOCK/BFACTOR; SAVEIN:=INBLOK; IF DELETEIN = DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEIN; IF DELETEIN > DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEOUT; IF RECLENGTH > 512 THEN BEGIN OPMESS(RECERROR); REPEAT OPSTOP UNTIL STOPPED > 2; IF STOPPED = 3 THEN GOTO 12; END; I:=0; REPEAT BEGIN PUTREC(OUT,RECSIZE); MOVE(IN^,I*HELP2,OUT^,0,RECSIZE); I:=I+1; RECTOTAL:=RECTOTAL+1; IF EOT = TRUE THEN BEGIN OPMESS(ENDTAPE); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 3 THEN GOTO 12; IF STOPPED = 1 THEN GOTO 11; END; END UNTIL I=HELP1; OUTUPDATE UNTIL OPTEST <> 0; WAITZONE(OUT); OUTUPDATE; OPSTOP; IF STOPPED = 2 THEN GOTO 3; IF STOPPED = 3 THEN GOTO 12; IF STOPPED = 0 THEN GOTO 3; PSTATE:=PSTOP; GOTO 1; «ff» ! RC36-01051 PAGE 21 ! 10: CLOSE(IN,1); OPMESS(FDEOF); REPEAT BEGIN OPSTOP; IF OPCONT=FIFTEEN THEN GOTO 11; END UNTIL STOPPED<>0; INBLOK:=1; IF STOPPED = 1 THEN BEGIN PSTATE:=PSTOP; GOTO 1; END; IF STOPPED = 3 THEN GOTO 12; DISKNO:=DISKNO+1; OPEN3740; SECTORCALC; SETPOSITION(IN,0,SECTORNO); OPMESS(RUNTXT); GOTO 3; ! END OF FILE FROM FD ! 9: IF IN.ZREM > 0 THEN BEGIN IN.ZFIRST:=IN.ZTOP; HELP3:=IN.ZREM/HELP2; ! USEFULL RECORDS ! I:=0; REPEAT BEGIN PUTREC(OUT,RECSIZE); MOVE(IN^,I*HELP2,OUT^,0,RECSIZE); I:=I+1; RECTOTAL:=RECTOTAL+1; END UNTIL I=HELP3; OUTUPDATE; END; WAITZONE(OUT); IF OPCONT = FIVE THEN BEGIN OUTUPDATE; FILENO:= OUT.ZFILE; GOTO 10; END; ! END OF JOB ! 11: BLOCKNO:= OUT.ZBLOCK; CLOSE(OUT,0); OUT.ZFORM:=UFORM; OUT.ZSHAREL:=80; OPEN(OUT,3); SETPOSITION(OUT,3,1); PUTREC(OUT,80); H1LABEL:=EOF1; BINDEC(BLOCKNO-1,BLKNO); MOVE(BLKNO,0,H1LABEL,55,5); CONVERT(H1LABEL,OUT^,AETAB,80); PUTREC(OUT,80); H2LABEL:=EOF2; CONVERT(H2LABEL,OUT^,AETAB,80); PSTATE:=PEOJ; OPMESS(EOJTXT); GOTO 13; ! SUSPEND ! 12: OPMESS(SUSTXT); OUT.ZMODE:=0; PSTATE:=PSUSP; 13: CLOSE(OUT,1); OUT.ZFORM:=UFORM; CLOSE(IN,1); PRINTLOG; INITPARAMS; INITSTAT; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED=3 THEN GOTO 12; OPMESS(RUNTXT); GOTO 2; END; «ff» «nul»