|
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: 25600 (0x6400) Types: TextFile Notes: RCSL-43-GL-4928, RCSL-43-GL-4931, RCSL-43-GL-4934, RCSL-43-GL-9010, RCSL-43-GL-9011, RCSL-43-GL-9012 Names: »S7982«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL: 43-GL9011 AUTHOR: PBP EDITED: 79.12.10. PROGRAM RC36-00982.01 LABELLED MULTIFILE MAGTAPE TO CASSETTE WITH LOG. KEYWORDS: MUS,CONVERSION,MTA,CT,SP,LISTING ABSTRACT: THIS PROGRAMS HANDLES LABELLED MULTIFILE MAGNETIC TAPES WITH A MAX BLOCK SIZE 2000 BYTES AND MAX RECORD SIZE 172 BYTES, AND EBCDIC CODE DATA. OUTPUT ON CASSETTE TAPE WRITTEN IN ECMA 34 VERSION 1 OR 2, WITH ASCII CODE DATA. ONE INPUT RECORD IS ONE BLOCK ON THE CASSETTE. THE MAGNETIC TAPE MAY CONTAIN MORE THAN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY. RCSL 43-GL9010: ASCII SOURCE TAPE. RCSL 43-GL9012: REL.BIN/TTY ! «ff» ! RC36-00982 PAGE 01 TITLE: LABELLED MULTIFILE MAGTAPE TO CASSETTE WITH LOG. ABSTRACT: THIS PROGRAMS HANDLES LABELLED MULTIFILE MAGNETIC TAPES WITH A MAX BLOCK SIZE 2000 BYTES AND MAX RECORD SIZE 172 BYTES, AND EBCDIC CODE DATA. OUTPUT ON CASSETTE TAPE WRITTEN IN ECMA 34 VERSION 1 OR 2, WITH ASCII CODE DATA. ONE INPUT RECORD IS ONE BLOCK ON THE CASSETTE. THE MAGNETIC TAPE MAY CONTAIN MORE THAN 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: 6786 BYTES. INCLUDING : ONE 172 BYTES CASSETTE TAPE BUFFER, AND ONE 2000 BYTES MAGNETIC TAPE BUFFER. DATE: 79.05.07 RUNTIME PARAMETERS: DATASET : 00001 THE DATASET NUMBER TO BE READ. IN BLOCKNO : 00001 NEXT BLOCK TO BE READ FROM DATASET. RECORDSIZE : 00080 INPUT RECORDSIZE, MAX 172. ECMA34V2 : + + THE CASSETTE IS ECMA 34 VERSION 2. - THE CASSETTE IS ECMA 34 VERSION 1. OUT BLOCKNO: 00001 THE NEXT BLOCK TO BE WRITTEN TO CASSETTE. MT UNIT : 00000 MT UNIT NUMBER (0-3). LOGPRINT : + + LOG ON SERIAL PRINTER, - LOG ON TTY. OTHER OUTPUT MESSAGES: CONTSTATE: +/- STATE OF CONTINUE SWITCH (TTY ONLY). PROG NO : 982 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. SUSPENDED DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS GUIDE. CT ERROR NNNNN CONSULT THE RC3600 OPERATORS GUIDE. MOUNT TAPE MT-UNIT IS NOT ON-LINE. MOUNT LABEL TAPE THE TAPE CONTAINS NO VOLUME-LABEL. RECORDSIZE ERROR RECORDSIZE IS GREATER THAN 172 BYTES. MOUNT NEXT CASSETTE CURRENT CASSETTE IS FULL AND MORE DATA IS PRESSENT. START WILL CONTINUE ON NEW CASSETTE. STOP WILL TERMINATE THE JOB. END JOB PROGRAM EXECUTION IS TERMINATED. END OF DATASET IDENTNO: OUTPUT TAPE REWINDING. MOUNT NEXT INPUT TAPE INPUT-DATA IS CONTINUED ON THE NEXT INPUT TAPE. WRONG MT / UDKODE CONFLICT HDR1 CONTAINS WRONG INFORMATION /NOT CASETTE 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 CASETTE SIDE A VOLNO: MOUNT NEW CASETTE. MOUNT CASETTE SIDE B VOLN0: MOUNT THE OTHER SIDE OF THE CASETTE. CONFLICT IN NO. OF CASETTE AND LAST VOLID INFORMATION IN HDR1 ABOUT NUMBERS OF CASETTE IS NOT THE SAME AS WE HAVE WRITTEN. ! «ff» ! RC36-00982 PAGE 03 ! ! INPUT MESSAGES: STOP STOPS EXECUTION WRITTING PROG NO : 982. SUSPEND STOPS EXECUTING, RELEASING DRIVERS (TTY ONLY). INT NEXT PARAMETER IS DISPLAYED. (ESCAPE BUTTON ON TTY HAS SAME EFFECT). STATE ALL PARAMETERS ARE DISPLAYED (TTY ONLY). "VALUE" CURRENTLY DISPLAYED PARAMETER IS CHANGED TO "VALUE". "TEXT"="VALUE" THE PARAMETER IDENTIFIED BY "TEXT" IS CHANGED TO "VALUE". START PROGRAM EXECUTION IS STARTED. NOTE: AFTER INPUT ERROR START MEANS ACCEPTING THE ERROR, AFTER OUTPUT ERROR START MEANS REPEATING THE OUTPUT OPERATION. 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. 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 BY 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-00982 PAGE 03 ! CONST NOQ= 8, OPTXTS= '<10>PROG NO : 7982<0> <10>DATASET : <0> <10>IN BLOCKNO : <0> <10>RECORDSIZE : <0> <10>ECMA34V2 : <0> <10>OUT BLOCKNO: <0> <10>MTUNIT : <0> <10>LOGPRINT : <0>', SUSPEND= 'SUSPEND', START= 'START', STOP= 'STOP', STATE= 'STATE', INT= 'INT', PLUS= '+', MINUS= '-', ENDLINE= '<13><0>', NEXTPARAM= '<27>', NL= '<10>', RETURN= '<13>', READ= 1, FALSE= -2, TRUE= -1, U= 0, UB= 1, CASMAX= 1700, CASERROR= '<7><10>OUTPUT CASSETTE INVALID <13><0>', RUNTXT= '<8><4><10>RUNNING<13><0>', SUSTEXT= '<7><10>SUSPENDED<13><0>', MTTEXT= '<7><10>MT ERROR ', CTTEXT= '<7><10>CT ERROR ', EOTTXT= '<7><10>MOUNT NEXT CASSETTE<13><0>', EOJTXT= '<14><7><10>END JOB<13><0>', MOUNT= '<7><10>MOUNT TAPE<13><0>', MOUNTTXT= '<7><10>MOUNT LABEL TAPE<13><0>', HDRMIS= '<7><10>HDRLABEL MISSING<13><0>', RECERROR= '<7><10>RECORDSIZE ERROR<13><0>', WRONGUNIT= '<7><10>MT UNIT CONFLICT<13><0>', VOL1= '<229><214><211><241>', HDR1= '<200><196><217><241>', EODTXT= '<7><10>END OF DATASET IDENTNO: ', CONFTXT= '<7><10>CONFLICT IN NO. OF CASSETTE AND LAST VOLID <13><0>', CONFTXT1= '<7><10>CASSETTE NO: ', MTKASA= '<7><10>MOUNT CASSETTE SIDE A VOLNO:', MTKASB= '<7><10>MOUNT CASSETTE SIDE B VOLNO:', KD710= '<247><241><240>', WRONGMT= '<7><10>WRONG MT / TAPE-UDKODE CONFLICT <13><0>', INITINF= '<0><0><0><0><0><0><0><0><0><0>', EOFERROR= '<14><7><10>INPUT TAPE- FILE ENDS ILLEGAL<13><0>', BLKERROR= '<10>BLOCKNO ERROR / INPUT TAPE INVALID<13><0>', MTNEXTIN= '<7><10>MOUNT NEXT INPUT TAPE<13><0>', EOF1= '<197><214><198><241>', EOV1= '<197><214><229><241>', «ff» !RC36-00982 PAGE 04! ! ** LOGTEXTS ** ! LOGCMMD= 'LOG', TTYNAME= 'TTY<0>', LPTNAME= 'SP<0><0>', NEWL= '<10><10>', LOGHEAD='** MT UNIT X TO CT0 ** DATE ........ TIME ........<10>', PTEXT1= 'CASSETTE ... REC WRITTEN .....<10>', PTEXT2= 'DATASET ... BLOCK 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, «ff» !RC36-00982 PAGE 05! ! EBCDIC TO ASCII CONVERSION TABLE ! EBSASC= # ! 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-00982 PAGE 06 ! VAR OPSTRING: STRING(80); OPTEXT: STRING(80); OPDEC: STRING(10); S1: STRING(2); S2: STRING(2); LENGTH: INTEGER; SIZE: INTEGER; STOPPED: INTEGER; ERRORNO: INTEGER; MASK: INTEGER; SIGN: INTEGER; PAR: INTEGER; TOM: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; Q: INTEGER; OPDUMMY: STRING(2); PROGNO: INTEGER; DATASET: INTEGER; IBLOCK: INTEGER; RECSIZE: INTEGER; ECMAV2: INTEGER; OBLOCK: INTEGER; MTUNIT: INTEGER; LOGPRINT: INTEGER; INFILE: INTEGER; INBLOK: INTEGER; EOT: INTEGER; VOLIDA: STRING(7); VOLID: STRING(6); UDIDENT: STRING(5); CASSET: STRING(3); UDVOLNR: STRING(6); UDVOLNR1: STRING(6); A: INTEGER; GEMDATASET: INTEGER; SETFIRST: INTEGER; BINIDET: INTEGER; FIRST: INTEGER; BINIDTO: INTEGER; CASTL: INTEGER; BINCAS: INTEGER; MAXBLOK: INTEGER; LOGBLOCKNO: INTEGER; LOGDATASET: INTEGER; LASTBLKNO: INTEGER; SMANT: INTEGER; SW25: INTEGER; INITPSW: INTEGER; SWEOV: INTEGER; SWEOVI: INTEGER; IBLKANT: STRING(5); BLOKNR: STRING(6); GLDGNR: STRING(6); «ff» !RC36- PAGE 06A! MTR: RECORD DATA: STRING(80); DGNR: STRING(6) FROM 4; NNN: STRING(3) FROM 7; ANTCAS: 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; LDATE: STRING(8); LHELP: STRING(6); «ff» ! RC36-00982 PAGE 07 ! OUT: FILE 'CT0', 14, 1, 172, U; GIVEUP CTERROR, 2'1111011111111110 OF STRING(172); IN: FILE 'MT0', 14, 1, 2000, U; GIVEUP MTERROR, 2'0110001111111110 OF STRING(2000); 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-00982 PAGE 08 ! 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-00982 PAGE 09 ! 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 GOTO 40; 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 CTERROR; BEGIN IF OUT.Z0 AND 8'20 <> 0 THEN !EOT! BEGIN EOT:=TRUE; GOTO 100; END; IF FIRST = TRUE THEN BEGIN REPEATSHARE(OUT); FIRST:= FALSE; GOTO 100; END; OPMESS(CTTEXT); MASK:=OUT.Z0; SHOWERROR; PSTATE:=IOERROR; REPEAT OPSTOP UNTIL STOPPED > 1; OPMESS(RUNTXT); REPEATSHARE(OUT); 100:END; PROCEDURE MTERROR; BEGIN IF IN.Z0 SHIFT 7 < 0 THEN BEGIN IF INITPSW = 1 THEN GOTO 45; SW25:= 1; GOTO 32; END; IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MOUNT); IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MTTEXT); MASK:=IN.Z0; SHOWERROR; PSTATE:=IOERROR; END; REPEAT OPSTOP UNTIL STOPPED > 1; OPMESS(RUNTXT); 300:END; «ff» ! RC36-00982 PAGE 10 ! PROCEDURE INITCTPOSITION; BEGIN IF OUT.ZMODE = 0 THEN BEGIN OUT.ZSHAREL:=RECSIZE; OPEN(OUT,3); SETPOSITION(OUT,1,1); CLOSE(OUT,0); IF ECMAV2 = TRUE THEN OPEN(OUT,3) ELSE OPEN(OUT,11); SETPOSITION(OUT,2,1); END; IF OUT.ZBLOCK <> OBLOCK THEN SETPOSITION(OUT,2,OBLOCK); END; PROCEDURE INITPOSITION; BEGIN 199: IF RECSIZE > 172 THEN BEGIN OPMESS(RECERROR); 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: INFILE:=1; OPEN(IN,READ); IF DATASET > 1 THEN GOTO 215; SETPOSITION(IN,1,1); GETREC(IN,SIZE); IF IN^ <> VOL1 THEN BEGIN OPMESS(MOUNTTXT); 210: CLOSE(IN,1); GOTO 290; END; INBLOK:=2; IF DATASET > 1 THEN BEGIN 215: INBLOK:=1; INFILE:=(DATASET-1)*3 +1; END; SETPOSITION(IN,INFILE,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 <> KD710 THEN BEGIN OPMESS(WRONGMT); GOTO 210; END; A:= READ; IF MTR.DGNR = GLDGNR THEN BEGIN SETFIRST:= SETFIRST-1; GOTO 220; END; CASTL:=0; VOLIDA:= INITINF; CASSET:= INITINF; VOLID:= INITINF; UDVOLNR:= INITINF; UDIDENT:= INITINF; CONVERT(MTR.DGNR,VOLID,EBSASC,6); OPMESS(MTKASA); 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 40; CONVERT(MTR.IDENT,UDIDENT,EBSASC,4); CONVERT(MTR.ANTCAS,CASSET,EBSASC,2); MOVE(VOLID,3,UDVOLNR,0,3); DECBIN(UDVOLNR,CASTL); BINIDET:= CASTL; 220: INFILE:=INFILE+1; INBLOK:=1; CLOSE(IN,0); IN.ZFORM:=UB; OPEN(IN,READ); GOTO 299; 290: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; IF STOPPED = 3 THEN GOTO 40; GOTO 199; END; 299: SETPOSITION(IN,INFILE,IBLOCK); INITCTPOSITION; END; «ff» ! RC36-00982 PAGE 11 ! 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; SAVEOUT:=OBLOCK; END; PROCEDURE INITMTIN; BEGIN IN.ZBLOCK:= 1; INFILE:= 1; IBLOCK:=1; END; «ff» ! RC36-00982 PAGE 12 ! PROCEDURE DIRECTUPDATE; BEGIN P1:=0; P2:=0; P3:=1; 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; PROCEDURE SLINTAPE; BEGIN IBLKANT:= INITINF; BLOKNR:= INITINF; MOVE(IN^,55,IBLKANT,0,5); SW25:= 0; CONVERT(IBLKANT,BLOKNR,EBSASC,5); DECBIN(BLOKNR,SMANT); IF SMANT <> IBLOCK-1 THEN BEGIN OPMESS(BLKERROR); GOTO 40; END; END; «ff» ! RC36-00982 PAGE 13 ! PROCEDURE OPCOM; BEGIN GEMDATASET:= DATASET; 1000: Q:=0; 1010: REPEAT BEGIN 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 MOVE(OPDUMMY,Q*2,OPDUMMY,0,2); PAR:= WORD OPDUMMY; IF PAR = -1 THEN OPMESS(PLUS); IF PAR = -2 THEN OPMESS(MINUS); 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 40; IF LENGTH > 6 THEN DIRECTUPDATE; IF LENGTH > 6 THEN GOTO 1020; 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 OPTEXT = RETURN THEN GOTO 1020; 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); 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-00982 PAGE 13A ! PROCEDURE AFSLTTAPE; BEGIN IF SW25 = 1 THEN BEGIN CLOSE(IN,0); INFILE:= INFILE +1; IN.ZFORM:= U; SETPOSITION(IN,INFILE,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 40; LASTBLKNO:= IBLOCK-1; GLDGNR:= MTR.DGNR; SETFIRST:= DATASET; DATASET:= 0; GOTO 875; END; 825: OPMESS(EODTXT); OPMESS(UDIDENT); OPMESS(ENDLINE); DECBIN (CASSET,BINCAS); IF BINIDET + BINCAS -1 <> CASTL THEN BEGIN OPMESS(CONFTXT); OPMESS(CONFTXT1); OPMESS(CASSET); OPMESS(ENDLINE); CLOSE(IN,1); GOTO 40; END; 850: CLOSE(OUT,1); 875: IF SWEOVI =1 THEN BEGIN OPMESS(EOFERROR); SWEOVI:= 0; GOTO 40; END; END; «ff» ! RC36-00982 PAGE 14 ! BEGIN DATASET:=1; ECMAV2:=-1; RECSIZE:=80; SWEOVI:=0; GLDGNR:=INITINF; SW25:=0; LASTBLKNO:=0; SETFIRST:=0; OBLOCK:=1; MTUNIT:=0; LOGPRINT:=TRUE; EOT:=FALSE; MAXBLOK:=1700; FIRST:=TRUE; LOGDATASET:=1; LOGBLOCKNO:=1; INITMTIN; INITSTAT; OPIN(OPSTRING); 10: OPCOM; 20: INITPOSITION; 30: REPEAT BEGIN DELETEIN:=SAVEIN-IBLOCK; DELETEOUT:=SAVEOUT-OBLOCK; GETREC(IN,RECSIZE); PSTATE:=RUNNI; IBLOCK:=IN.ZBLOCK; LOGBLOCKNO:=IBLOCK+LASTBLKNO; IF DELETEIN = DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEIN; IF DELETEIN > DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEOUT; PUTREC(OUT,RECSIZE); CONVERT(IN^,OUT^,EBSASC,RECSIZE); OUTUPDATE; RECTOTAL:=RECTOTAL + 1; IF RECTOTAL >= MAXBLOK THEN BEGIN MAXBLOK:= MAXBLOK+CASMAX; IF A > 1 THEN A:=0; GOTO 31; END; IF EOT = TRUE THEN BEGIN OPMESS(CASERROR); GOTO 40; END; END UNTIL OPTEST <> 0; WAITZONE(OUT); OUTUPDATE; OPSTOP; IF STOPPED = 2 THEN GOTO 30; IF STOPPED = 0 THEN GOTO 30; PSTATE:=PSTOP; GOTO 10; «ff» ! RC36-00982 PAGE 15 ! ! END OF CASSETTE ! 31: WAITZONE(OUT); OUTUPDATE; CLOSE(OUT,0); IF A = 1 THEN BEGIN MOVE(VOLID,0,VOLIDA,0,6); OPMESS(MTKASB); OPMESS(VOLIDA); OPMESS(ENDLINE); A:=A+1; END; IF A = 0 THEN BEGIN CASTL:= CASTL+1; BINDEC(CASTL,UDVOLNR1); MOVE(UDVOLNR1,2,VOLID,3,3); MOVE(VOLID,0,VOLIDA,0,6); OPMESS(EOTTXT); OPMESS(MTKASA); OPMESS(VOLIDA); OPMESS(ENDLINE); A:= 1; END; EOT:=FALSE; FIRST:= TRUE; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; IF A = 1 THEN TAPENO:=TAPENO+1; OBLOCK:=1; IF STOPPED = 2 THEN BEGIN INITCTPOSITION; GOTO 30; END; ! END JOB ! 32: WAITZONE(OUT); OUTUPDATE; AFSLTTAPE; CLOSE(IN,0); IF DATASET = 0 THEN BEGIN INITMTIN; DATASET:= 1; GOTO 20; END; 33: 34: PRINTLOG; INITSTAT; IBLOCK:=1; OBLOCK:=1; MAXBLOK:= 1700; INFILE:= 1; LOGBLOCKNO:= IBLOCK; LASTBLKNO:= 0; DATASET:= DATASET+1; LOGDATASET:= LOGDATASET+1; EOT:=FALSE; IN.ZFORM:=U; 35: FIRST:= TRUE; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; OPMESS(RUNTXT); GOTO 20; ! SUSPEND ! 40: OUT.ZMODE:=0; CLOSE(IN,1); CLOSE(OUT,1); PSTATE:=PSUSP; OPMESS(SUSTEXT); GOTO 34; 45: PSTATE:= PEOJ; CLOSE(IN,1); PRINTLOG; OPMESS(EOJTXT); END; «ff» «nul»