|
|
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: 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: »XX«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/XX«
! 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);
HELP: STRING(6);
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);
OPMESS(BLOKNR); BINDEC(SMANT,HELP); OPMESS(HELP); BINDEC(IBLOCK-1,HELP); OPMESS(HELP);
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»