|
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: 21504 (0x5400) Types: TextFile Names: »S8820«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! 820/840 AUTHOR: ME EDITED: 79.12.10. PROGRAM RC36-820/840-01 LABELLED MULTI-FILE TAPE TO LABELLED SINGLE-FILE TAPE WITH LOG. KEYWORDS: MUSIL,CONVERTION,MT0,MT1,SP,LISTING. ABSTRACT: THIS PROGRAM HANDLES LABELLED MULTI-FILE TAPES WITH A MAXIMUM BLOCKSIZE OF 2000 BYTES, EACH BLOCK CON- SISTING OF FIXED LENGTH RECORDS WITH EBCDIC CODE DATA. ONE INPUT RECORD IS ONE BLOCK ON THE OUTPUT-MAGNETIC TAPE. THE OUTPUT-MAGNETIC TAPE WILL ONLY CONTAIN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON SERIAL PRINTER. THE PROGRAM MUST BE OPERATED FROM TTY. ! «ff» !OUTPUT MESSAGE: PROG NO: 820/840 PROGRAM EXECUTION CAN START RUNNING: PROGRAM EXECUTION IS STARTED. SUSPENDED: DRIVERS REALEASED PROGRAM EXECUTION IS STOPPED. MOUNT DATA TAPE MT UNIT IS NOT ON-LINE. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. SP ERROR NNNNN CONSULT THE RC3600 OPRATORS MANUAL. END JOB PROGRAM EXECUTION IS TERMINATED. DATASET NO: DATASET NUMBER TO BE READ FROM INPUT TAPE. MOUNT 600 FT OUTPUT TAPE VOLNO: MOUNT 600 FT TAPE ON MT-UNIT 1. MOUNT 1200 FT OUTPUT TAPE VOLNO: MOUNT 1200 FT TAPE ON MT-UNIT 1. END OF DATASET IDENT -NO: OUTPUT TAPE REWINDING. MOUNT NEXT INPUT TAPE: INPUT-DATA IS CONTINUED ON THE NEXT INPUT TAPE. MOUNT LABEL INPUT-TAPE THE INPUT-TAPE HAS NO VOL1 LABEL. HDRLABEL ON INPUT-TAPE MISSING THE DATASET HAS NO HDR1 LABEL. WRONG MT-TAPE / UDKODE CONFLICT HDR1 CONTAINS WRONG INFORMATION /NOT TAPE CONVERSION. OUTPUT TAPE INVALID / TAPE TO SHORT OUTPUT TAPE TO SHORT FOR THE INFORMATION. CHANGE OUTPUT TAPE END OF TAPE REACHED MOUNT NEXT. INPUT TAPE- FILE ENDS ILLEGAL INPUT FILE DOES NOT END WITH EOF1 OR EOV1. BLOCKNO ERROR / INPUT TAPE INVALID INFORMATION IN EOF1 OR VOL1 ABOUT NUMBERS OF BLOCKS IS NOT THE SAME AS WE HAVE READ. ! «ff» !INPUT MESSAGE: STOP STOPS THE PROGRAM. SUSPEND STOPS PROGRAM EXECUTION RELEASING DRIVERS. LOG LOG IS OUTPUT ON SERIAL PRINTER. START PROGRAM EXECUTION IS STARTED. DESCRIPTION OF THE LOG: THE LOG CONTAINS A HEADLINE DESCRIBING INPUT AND OUTPUT MEDIUM (DRIVERS NAMES), DATE AND TIME. THE "TOTAL STATISTICS FOR JOB" CONTAIN THE TOTAL AMOUNT OF RECORDS/BLOCKS HAVING BEEN READ/WRITTEN. THE "JOB STATUS" DESCRIBES THE ACTUA; STATE OF THE JOB: NOT STARTED AFTER LOAD OF PROGRAM OR END OF JOB. STOPPED JOB IS STOPPED BY OPERATOR. RUNNING JOB IS RUNNING OR WAITING FOR NEW INPUT/ OUTPUT MEDIUM. END OF JOB NORMAL TERMINATION OF JOB. SUSPEND THE JOB IS TERMINATED BY THE SUSPEND COMMAND. ! «ff» !RC36-820/840 PAGE 01 ! CONST STARTTXT= '<10>PROG NR 820/840 <13><0>', RUNTXT= '<10>RUNNING<13>', LPTXT= 'SP ERROR', MT1TXT= '<7><10>MT1 ERROR ', MT0TXT= '<7><10>MT0 ERROR ', DATASETNR= '<10><10>DATASET NO: ', EODTXT= '<10>END OF DATASET IDENTNO: ', MT600TAPE= '<10>MOUNT 600 FT OUTPUT TAPE VOLNO: ', MT1200TAPE= '<10>MOUNT 1200 FT OUTPUT TAPE VOLNO:', MOUNTTXT= '<10>MOUNT LABEL INPUT- TAPE<13><0>', WRONGMT= '<10>WRONG MT-TAPE / UDKODE CONFLICT <13><0>', MT1MOUNTTAPE= '<10>MOUNT OUTPUT DATA TAPE <13><0>', MT0NEXTIN= '<7><10>MOUNT NEXT INPUT TAPE<13><0>', MT0MOUNTTAPE= '<10>MOUNT INPUT DATA TAPE <13><0>', HDRMIS= '<10>HDRLABEL ON INPUT TAPE MISSING <13><0>', TAPEFORKORT= '<10>OUTPUT TAPE INVALID / TAPE SHORT <13><0>', CHANGETAPE= '<10>CHANGE OUTPUT TAPE <13><0>', SUSTXT= '<7><10>SUSPENDED <13><0>', EOFERROR= '<14><7><10>INPUT TAPE- FILE ENDS ILLEGAL<13><0>', BLKERROR= '<10>BLOKNO ERROR / INPUT TAPE INVALID <13><0>', EOJ= '<14><7><10>END JOB <13><0>', UB= 1, U= 0, F= 2, TRUE= -1, SUSPEND= 'SUSPEND', INITINF= '<0><0><0><0><0><0><0><0><0><0>', INITDATASET= '<194><244><246><246><240><242><241>', EOF1= '<197><214><198><241>', VOL1= '<229><214><211><241>', HDR1= '<200><196><217><241>', EOV1= '<197><214><229><241>', VOL= 'VOL1 1', HDR= 'HDR1 00010001 00 000000 ', ENDLINE= '<13><0>', KD820= '<248><242><240>', KD840= '<248><244><240>', LPTNAME= 'SP<0><0>', LOGCMMD= 'LOG', NEWL= '<10><10>', LOGHEAD= '** MT UNIT 0 TO MT UNIT 1 ** DATE ........ TIME ....... <10>', STATHEAD= '<10> TOTAL STATISTICS FOR JOB <10><10>', PTEXT2= 'DATASET ... BLOCKS READ .....<10>', PTEXT1= 'OUTTAPE ... REC WRITTEN .....<10>', STATUSHEAD= '<10>JOB STATUS: ', INITTEXT= 'NOT STARTED', RUNTEXT= 'RUNNING', STOPTEXT= 'STOPPED', SUSTEXT= 'SUSPENDED', EOJTEXT= 'END OF JOB', ERRTEXT= 'I/O ERROR .....', LPTTXT= 'SP ERROR ', RUNNI= 2, PSTOP= 3, PSUSP= 4, PEOJ= 5, IOERROR= 6, START= 'START', STOP= 'STOP', «ff» !RC36-820/840 PAGE 02 ! ! 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 #, ! 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-820/840 PAGE 03 ! VAR BLOKLNG: INTEGER; SW25: INTEGER; RECTOTAL: INTEGER; BLOKTOTAL: INTEGER; IBLOCKNO: INTEGER; OBLOCKNO: INTEGER; OFILENO: INTEGER; IFILENO: INTEGER; INITPSW: INTEGER; PSTATE: INTEGER; DATASET: INTEGER; SIZE: INTEGER; INBLOK: INTEGER; FT: INTEGER; STOPPED: INTEGER; ERRORNO: INTEGER; LENGTH: INTEGER; OUTNO: INTEGER; MASK: INTEGER; LOGBLOCKNO: INTEGER; LOGDATASET: INTEGER; LASTBLKNO: INTEGER; GEMDATASET: INTEGER; SETFIRST: INTEGER; EOT: INTEGER; VOLTL: INTEGER; BINIDET: INTEGER; SWEOVI: INTEGER; SWEOV: INTEGER; RECTL: INTEGER; TAPENO: INTEGER; TAPETL: INTEGER; LAESTBLK: INTEGER; MAXBLOK: INTEGER; STARTNO: INTEGER; SMANT: INTEGER; IBLKANT: STRING(5); NR: STRING(6); TAPE: STRING(3); UDVOLNR: STRING(6); OTAPENO: STRING(6); UDVOLNR1: STRING(6); BLKNO: STRING(6); GLDGNR: STRING(6); BLLENGTH: STRING(6); REMSIZE: STRING(6); BLOKNO: STRING(6); ANSW: STRING(6); HDR1LABEL: STRING(80); BLOKNR: STRING(6); VOLID: STRING(7); UDIDENT: STRING(5); OPTEXT: STRING(20); OPSTRING: STRING(20); NEXTLP: INTEGER; LDATE: STRING(8); LHELP: STRING(6); UDSIZE1: STRING(6); «ff» !RC36-820/840 PAGE 04 ! MTR: RECORD DATA: STRING(80); DGNR: STRING(6) FROM 4; NNN: STRING(3) FROM 7; ANT: STRING(2) FROM 10; UDKODE: STRING(3) FROM 14; IDENT: STRING(4) FROM 17; DATE: STRING(12) FROM 42 END; IN: FILE 'MT0',14,1,2000,U; GIVEUP MTINERROR,2'0110001111111110 OF STRING(80); OUT: FILE 'MT1',14,2,80,F; GIVEUP MTOUTERROR,2'0110011111111110 OF STRING(80); LOG: FILE 'SP',1,1,80,U; GIVEUP LOGERROR,2'1100001011110110 OF STRING (80); «ff» !RC36-820/840 PAGE 05 ! PROCEDURE GETTIME (VAR TIME: STRING(8)); CODEBODY P0149; PROCEDURE GETLDATE (VAR DATE: STRING(8)); CODEBODY P0150; PROCEDURE PRINTLOG; BEGIN LOG.ZNAME:= LPTNAME; OPEN(LOG,3); OUTTEXT(LOG,NEWL); GETLDATE(LDATE); MOVE(LDATE,0,LOGHEAD,36,8); GETTIME(LDATE); MOVE(LDATE,0,LOGHEAD,50,8); OUTTEXT(LOG,LOGHEAD); BINDEC(OUTNO,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); OUTTEXT(LOG,STATUSHEAD); IF PSTATE = 1 THEN OUTTEXT(LOG,INITTEXT); IF PSTATE = RUNNI THEN OUTTEXT(LOG,RUNTEXT); IF PSTATE = PSTOP THEN OUTTEXT(LOG,STOPTEXT); IF PSTATE = PSUSP THEN OUTTEXT(LOG,SUSTEXT); 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-820/840 PAGE 05A ! 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 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 70; SW25:= 1; GOTO 40; END; IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MT0MOUNTTAPE); IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MT0TXT); MASK:= IN.Z0; SHOWERROR; PSTATE:= IOERROR; END; IF IN.Z0 <> 0 THEN BEGIN 215: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 215; IF STOPPED = 3 THEN GOTO 50; OPMESS(RUNTXT); END; END; «ff» !RC36-820/840 PAGE 06 ! PROCEDURE MTOUTERROR; BEGIN IF OUT.Z0 AND 8'000020 <> 0 THEN EOT:= TRUE; OUT.Z0:= OUT.Z0 AND 8'177757; IF OUT.Z0 SHIFT 1 < 0 THEN OPMESS(MT1MOUNTTAPE); IF OUT.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MT1TXT); MASK:= OUT.Z0; SHOWERROR; PSTATE:= IOERROR; END; IF OUT.Z0 <> 0 THEN BEGIN 300: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 300; IF STOPPED = 3 THEN GOTO 50; OPMESS(RUNTXT); IF OUT.Z0 AND 8'063352 <> 0 THEN REPEATSHARE(OUT); END; END; 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; 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(LPTXT); MASK:= LOG.Z0; SHOWERROR; NEXTLP:= 0; 415: OPWAIT(LENGTH); OPTEXT:= OPSTRING; OPIN(OPSTRING); IF OPTEXT = START THEN BEGIN IF LOG.Z0 AND 8'141342 <> 0 THEN REPEATSHARE(LOG); END ELSE GOTO 415; END; END; «ff» !RC36-820/840 PAGE 07 ! PROCEDURE INITTXT; BEGIN OPMESS(STARTTXT); GEMDATASET:= DATASET; 500: BINDEC(DATASET,ANSW); OPMESS(DATASETNR); OPMESS(ANSW); OPMESS(ENDLINE); OPIN(NR); OPWAIT(LENGTH); IF NR = START THEN GOTO 510; IF NR= SUSPEND THEN GOTO 50; DECBIN(NR,DATASET); GOTO 500; 510: OPMESS(RUNTXT); IF GEMDATASET <> DATASET THEN LOGDATASET:= DATASET + SETFIRST; END; PROCEDURE INITPOSITION; BEGIN 600: IF IN.ZMODE = 0 THEN BEGIN OPEN(IN,1); IF DATASET > 1 THEN GOTO 625; SETPOSITION(IN,1,1); GETREC(IN,SIZE); IF IN^ <> VOL1 THEN BEGIN OPMESS(MOUNTTXT); 610: CLOSE(IN,TRUE); GOTO 640; END; INBLOK:= 2; IF DATASET > 1 THEN BEGIN 625: INBLOK:= 1; IFILENO:= (DATASET-1)*3+1; END; SETPOSITION(IN,IFILENO,INBLOK); INITPSW:= 1; GETREC(IN,SIZE); INITPSW:= 0; IF IN^ <> HDR1 THEN BEGIN OPMESS(HDRMIS); GOTO 610; END; MOVE(IN^,1,MTR,0,80); IF MTR.UDKODE <> KD820 THEN IF MTR.UDKODE <> KD840 THEN BEGIN OPMESS(WRONGMT); GOTO 610; END; IF MTR.DGNR =GLDGNR THEN BEGIN SETFIRST:= SETFIRST-1; GOTO 635; END; 630: VOLID:= INITINF; UDIDENT:= INITINF; CONVERT(MTR.DGNR,VOLID,EATAB,6); IF MTR.UDKODE = KD820 THEN OPMESS(MT600TAPE); IF MTR.UDKODE = KD840 THEN BEGIN MAXBLOK:= MAXBLOK+ 7000; OPMESS(MT1200TAPE); END; OPMESS(VOLID); OPMESS(ENDLINE); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN BEGIN CLOSE(IN,TRUE); GOTO 10; END; IF STOPPED = 3 THEN GOTO 50; CONVERT(MTR.IDENT,UDIDENT,EATAB,4); CONVERT(MTR.ANT,TAPE,EATAB,2); MOVE(VOLID,3,UDVOLNR,0,3); DECBIN(UDVOLNR,VOLTL); BINIDET:= VOLTL; 635: IFILENO:= IFILENO+1; INBLOK:= 1; CLOSE(IN,0); IN.ZFORM:= UB; OPEN(IN,1); GOTO 650; 640: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; IF STOPPED = 3 THEN GOTO 50; GOTO 600; END; 650: SETPOSITION(IN,IFILENO,IBLOCKNO); END; «ff» !RC36-820/840 PAGE 08 ! PROCEDURE WRITETAPESTART; BEGIN IF OUT.ZMODE <> 0 THEN GOTO 700; OUT.ZFORM:= UB; OPEN(OUT,3); SETPOSITION(OUT,1,1); PUTREC(OUT,80); CONVERT(VOL,OUT^,AETAB,80); MOVE(MTR.DGNR,0,OUT^,4,6); CLOSE(OUT,0); SETPOSITION(OUT,1,2); OPEN(OUT,3); PUTREC(OUT,80); CONVERT(HDR,OUT^,AETAB,80); MOVE(INITDATASET,0,OUT^,4,7); MOVE(MTR.IDENT,0,OUT^,17,4); MOVE(MTR.DGNR,0,OUT^,21,6); MOVE(MTR.DATE,0,OUT^,42,12); IF OUTNO > 1 THEN BEGIN BINDEC(OUTNO,NR); CONVERT(NR,OTAPENO,AETAB,6); MOVE(OTAPENO,1,OUT^,27,4); END; HDR1LABEL:= OUT^; CLOSE(OUT,0); OFILENO:= 2; OUT.ZFORM:= F; SETPOSITION(OUT,OFILENO,1); OPEN(OUT,3); 700: END; «ff» !RC36-820/840 PAGE 09 ! PROCEDURE INITMTIN; BEGIN IN.ZBLOCK:= 1; IFILENO:= 1; IBLOCKNO:=1; END; PROCEDURE SLINTAPE; BEGIN IBLKANT:= INITINF; BLOKNR:= INITINF; MOVE(IN^,55,IBLKANT,0,5); SW25:= 0; CONVERT(IBLKANT,BLOKNR,EATAB,6); DECBIN(BLOKNR,SMANT); IF SMANT <> IBLOCKNO-1 THEN BEGIN OPMESS(BLKERROR); GOTO 50; END; END; «ff» !RC36-820/840 PAGE 10 ! PROCEDURE AFSLTTAPE; BEGIN IF SW25 = 1 THEN BEGIN CLOSE(IN,0); IFILENO:= IFILENO +1; IN.ZFORM:= U; SETPOSITION(IN,IFILENO,1); IN.ZFORM:= U; OPEN(IN,1); GETREC(IN,SIZE); IF IN^ <> EOF1 THEN IF IN^ <> EOV1 THEN SWEOVI:=1; SLINTAPE; IF IN^ = EOF1 THEN GOTO 825; CLOSE(IN,1); 810: OPMESS(MT0NEXTIN); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 810; IF STOPPED = 3 THEN GOTO 50; LASTBLKNO:= IBLOCKNO-1; SETFIRST:= DATASET; GLDGNR:= MTR.DGNR; DATASET:=0; GOTO 875; END; 825: CLOSE(OUT,0); OBLOCKNO:= OUT.ZBLOCK; OUT.ZFORM:= 0; OPEN(OUT,3); TAPETL:= TAPETL+1; SETPOSITION(OUT,3,1); BLOKNR:= INITINF; PUTREC(OUT,80); BINDEC(OBLOCKNO-1,BLKNO); CONVERT(BLKNO,BLOKNR,AETAB,6); MOVE(BLOKNR,0,HDR1LABEL,55,6); IF SWEOV = 1 THEN BEGIN MOVE(EOV1,0,HDR1LABEL,0,4); SWEOV:= 0; GOTO 850; END; MOVE(EOF1,0,HDR1LABEL,0,4); OPMESS(EODTXT); OPMESS(UDIDENT); OPMESS(ENDLINE); 850: OUT^:= HDR1LABEL; CLOSE(OUT,1); 875: IF SWEOVI = 1 THEN BEGIN OPMESS(EOFERROR); SWEOVI:= 0; GOTO 50; END; END; «ff» !RC36-820/840 PAGE 11 ! BEGIN LOGDATASET:=1; VOLID:=INITINF; LASTBLKNO:=0; SIZE:=80; GLDGNR:=INITINF; OUT.ZFORM:=UB; ANSW:=INITINF; MAXBLOK:=9000; OUTNO:=1; SWEOV:=0; INITPSW:=0; DATASET:=1; LOGBLOCKNO:=1; RECTOTAL:=0; PSTATE:=1; RECTL:=1; SW25:=0; SETFIRST:=0; SWEOVI:=0; OPTEXT:=INITINF; INITMTIN; 10: INITTXT; OPIN(OPSTRING); 20: INITPOSITION; WRITETAPESTART; 25: REPEAT GETREC(IN,SIZE); IBLOCKNO:= IN.ZBLOCK; LOGBLOCKNO:= IBLOCKNO + LASTBLKNO; PSTATE:= RUNNI; PUTREC(OUT,SIZE); MOVE(IN^,0,OUT^,0,SIZE); RECTOTAL:=RECTOTAL+1; IF EOT = TRUE THEN BEGIN OPMESS(TAPEFORKORT); GOTO 50; END; IF RECTOTAL>= MAXBLOK THEN BEGIN SWEOV:= 1; AFSLTTAPE; OPMESS(CHANGETAPE); VOLTL:= VOLTL+1; BINDEC(VOLTL,UDVOLNR1); MOVE(UDVOLNR1,2,VOLID,3,3); 35: IF MTR.UDKODE = KD820 THEN OPMESS(MT600TAPE); IF MTR.UDKODE = KD840 THEN OPMESS(MT1200TAPE); OPMESS(VOLID); OPMESS(ENDLINE); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 35; IF STOPPED = 3 THEN GOTO 50; OPMESS (RUNTXT); OUTNO:= OUTNO+1; MAXBLOK:= MAXBLOK+ RECTOTAL; CONVERT(VOLID,MTR.DGNR,AETAB,6); WRITETAPESTART; END UNTIL OPTEST <> 0; OPSTOP; IF STOPPED = 1 THEN BEGIN PSTATE:= PSTOP; GOTO 10; END; IF STOPPED = 3 THEN GOTO 50; OPMESS(RUNTXT); GOTO 25; 40: AFSLTTAPE; CLOSE(IN,0); IF DATASET= 0 THEN BEGIN INITMTIN; DATASET:= 1; GOTO 20; END; 45: PRINTLOG; IBLOCKNO:= 1; LOGBLOCKNO:= IBLOCKNO; OBLOCKNO:= 1; ANSW:= INITINF; OUTNO:= 1; LASTBLKNO:= 0; RECTOTAL:= 0; IN.ZFORM:= U; IFILENO:= 1; MAXBLOK:= 9000; DATASET:= DATASET+1; LOGDATASET:= LOGDATASET+1; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; IF STOPPED = 3 THEN GOTO 50; OPMESS(RUNTXT); GOTO 20; 50: OUT.ZMODE:= 0; CLOSE(IN,1); CLOSE(OUT,1); PSTATE:= PSUSP; OPMESS(SUSTXT); GOTO 45; 70: CLOSE(IN,1); PSTATE:= PEOJ; PRINTLOG; OPMESS(EOJ); END; «ff» «ff» «nul»