|
|
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: 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: »S6049«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/S6049«
! RCSL: 43-GL8473
AUTHOR: PBP / ME
EDITED: 79.12.10
PROGRAM RC36-06049.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 : 6049 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 : 6049.
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 : 6049<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 FD0 ** 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= 0,
«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»