|
|
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: 23552 (0x5c00)
Types: TextFile
Notes: RCSL-43-GL-2135, RCSL-43-GL-2332, RCSL-43-GL-3715, RCSL-43-GL-3716, RCSL-43-GL-3717, RCSL-43-GL-619, RCSL-43-GL-622, RCSL-43-GL-625, RCSL-43-GL-763
Names: »S2762«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/S2762«
! RCSL: 43-GL 3716
AUTHOR: CAMS
EDITED: 77.01.16
PROGRAM RC36-00276.02
IBM WORKSTATION INPUT PROGRAM.
RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE/
CASSETTE.
KEYWORDS: MUSIL,WORKSTATION-DEVICEHANDLER,CDR,PTR,3740,MTA,LISTING.
ABSTRACT: IBM WORKSTATION DEVICE PROGRAM.
DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE,
DISKETTE, CASSETTE. THE DEVICES CAN BE HANDLED BY MEANS
OF CON MODULE CONTROL CARDS. USE OF CON MUST BE WITH
STAT POSIBILITIES.
BLOCK SIZES: MAGTAPE MAX=1080 BYTES.
THE DISKETTE MUST BE IN IBM FORMAT.
MULTILEAVING, COMPRESSION FEATURE.
RCSL 43-GL 3715: ASCII SOURCE TAPE.
RCSL 43-GL 3717: BINARY TTY OBJECT TAPE.
«ff»
TITLE: RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE.
ABSTRACT: IBMWORKSTATION DEVICE PROGRAM.
DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE,
IBM DISKETTES CASSETE. THE DEVICES CAN BE HANDLED BY MEANS
OF CONTROL CARDS. USE OF CON MUST BE WITH
STAT POSIBILITIES.
BLOCK SIZE: MAGTAPE = 1080.
THE DISKETTES MUST BE IN IBM FORMAT.
MULTILEAVING, COMPRESSION FEATURE.
SIZE: 8204 BYTES. INCLUDING FOUR 80 BYTES CDR BUFFERS.
COMMON BUFFERS: ONE 1080 BYTES MAGTAPE BUFFER.
FOUR 80 BYTES PAPERTAPE BUFFERS. FOUR 128 BYTES DISKETTE
BUFFERS.
DATE: JANUARY 16 TH. 77.
«ff»
RUNTIME PARAMETERS:
PRIMARY INPUT= CARDREADER.
SECONDARY INPUT= PAPERTAPE/MAGTAPE/DISKETTE/CASSETTE.
SECONDARY INPUT CAN BE SELECTED BY MEANS OF CONTROL CARDS.
AFTER END MEDIUM OR END OF FILE PROGRAM WILL SWITCH BACK
TO CARD INPUT AGAIN.
DEVICE: CARDREADER WILL ALLWAYS BE READY FOR INPUT,
UNLESS OTHERS COMMANDS HAVE
BEEN GIVEN FROM MOTHER MODULE.
( CON ).
DEVICE: PAPERTAPE
/* READ PAPER WILL SELECT PAPERTAPE AS INPUT.
DEVICE: MAGTAPE OR CASSETTE TAPE
/* READ TAPE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE>
/* READ CASSETTE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE>
/* READ CASSETTE F=X U=Y R=Z FORMAT=QQQ
WILL SELECT MAG- OR CASSETTETAPE AS INPUT.
MINIMUM OF ANSWERS MUST BE A FILE-
NUMBER. DEFAULTS: UNIT=0, RECSIZE:=80.
DEFAULT CASSETTE FORMAT IS:
ECMA 34 VERSION 2 STANDARD.
DEVICE: DISKETTE
/* READ 3740 VOLID=<VOLNAME> DSN=<DATASETNAME> UNIT=<NUMBER>
WILL SELECT IBM DISKETTES AS INPUT.
MINIMUM OF ANSWERS MUST BE A DATASET-
NAME. DEFAULT: UNIT=0. MAX NUMBER OF
DATASET = 4 IN ONE CARD.
«ff»
KEY WORDS AND THEIR MEANING:
FORMAT= CASSETTE TAPE STANDARDS:
E2 MEANS ECMA 34 VERSION 2.
E1 MEANS ECMA 34 VERSION 1.
FREE MEANS NO CHECK IS PERFORMED.
VOLID= THE VOLUME LABEL ON THE
DISKETTE. MAX 6 CHARACTERS.
DSN= THE DATASETNAME ON THE DISKETTE
MAX 8 CHARACTERS.
FILE= EQUAL TO F= FILENUMBER ON THE MAGTAPE.
UNIT= EQUAL TO U= UNIT NUMBER ON DEVICE.
RECL= EQUAL TO R= MEANS RECSIZE ON MAGTAPE.
IF SIZE > 80. 80 BYTES WILL
BE TRANSFERRED UNTIL BLOCK <= 80.
REST WILL BE FILLED UP WITH
SPACES.
********NOTE THAT SPACE IS USED AS A TERMINATOR FOR STRING SO
********ITS NOT ALLOWED TO HAVE DATASETNAME WITH SPACES IN BETWEEN.
********ALSO THAT ITS NOT ALLOWED TO HAVE SPACES IN BETWEEN
********THE PARENTHESES IN COMMAND.
«ff»
EXAMPLES OF PARAMETER STRINGS:
/* READ PAPER PAPERTAPE.
/* READ TAPE FILE=1 MAGTAPE. MINIMUM OF ANSWERS.
/* READ TAPE F=1 U=2 R=70 READ FILE 1 UNIT NUMBER 2
WITH RECORDSIZE = 70.
/* READ TAPE F=(1,4,2,3,5) R=60 READ THE FIVE FILES
IN THE SEQUENCE MADE IN THE
PARENTHESE.
/* READ CASSETTE FILE=1 CASSETTE TAPE. MINIMUM OF ANSWERS.
MEANING OF COMMANDS CORRESPONDS
TO AS IF IT WAS A MAGTAPE.
/* READ CASSETTE R=70 U=1 F=(1,2,3) FORMAT=E1
READ FROM CASSETTE WITH RECORD
SIZE = 70 ON UNIT ONE AND
THE FIRST THREE FILES.
FORMAT IS ECMA 34 VERSION 1.
/* READ 3740 DSN=ALL DISKETTE. MINIMUM OF ANSWERS
WILL TRANSFER ALL DATASETS ON THE
DISKETTE UNTIL A DDR1 IS MET.
/* READ 3740 DSN=(ALL) WILL READ DATASET WITH NAME=
ALL.
/* READ 3740 DSN=DATASETN WILL READ DATASET WITH NAME=
DATASETN.
/* READ 3740 VOLID=IBMIRD DSN=(JOB1,JOB2,JOB3,JOB4) U=1
READ THE DATASET ON THE DISKETTE
IN THIS SEQUENCE FROM UNIT = 1.
MAX NUMBER OF DATASETS ON SAME
CARD IS FOUR.
«ff»
DEVICE NAME AND THEIR MEANING:
CDR CARDREADER.
MT0 MAGTAPE UNIT 0.
CT0 CASSETTE TAPE UNIT 0.
PTR PAPERTAPE.
3740 DISKETTE HANDLER.
HANDLING OF ERRORS:
SYNTAX ERRORS:
SYNTAX ERRORS FROM A CONTROL CARD WILL BE DISPLAYED ON THE
CONSOL WITH A OPERATOR INTERVENTION REQUIRED. THE ANSWER
SHOULD BE EITHER TO CORRECT THE CARD BY WRITING
THE COMMAND VIA CON. OR IGNORE THE CARD VIA CON.
EXAMPLE:
/* READ TAPE FILE=#
WILL BE DISPLAYED AS:
>RD1
SYNTAX ERROR IN COMMAND:
TAPE FILE=#
OPERATOR INTERVENTION REQUIRED
TO CORRECT THE ERROR WRITE:
>CON
RESTART RD1 TAPE FILE=1
IF REGRETTING THE CARD WRITE:
>CON
RESTART RD1 IGNORE PROGRAM WILL SKIP THIS
COMMAND.
ERRORS WITH AUTOMATIC RESTART:
ERROR WITH AUTOMATIC RESTART WILL RESULT IN A DISPLAY
OF A LINE WITH THE STATUS AND THE DEVICENAME. TO HANDLE
THIS MAKE DEVICE READY AND PROGRAM
WILL START IT SELF.
EXAMPLE:
STATUS: MT0
NOT READY MEANS THAT DEVICE IS OFFLINE
AND WAITING FOR CORRECTIONS.
CORRECT ERROR BY MAKING THE
DEVICE ONLINE.
STATUS: PTR
ENDMEDIUM PAPERTAPE ERROR. THERE
WAS NO ROLL AT INPUT
START.
ACTION = LOAD PAPERTAPE.«ff»
HARD ERRORS BY MEANS OF OPERATOR INTERVENTION REQUIRED:
ALL COMMANDS SHOULD START WITH A RESTART RD1 <ACTION>
FROM CON.
>CON
RESTART RD1 MEANS REPEAT THE OPERATION.
RESTART RD1 SKIP MEANS SKIP THE BLOCK.
RESTART RD1 ACCEPT MEANS ACCEPT THE BLOCK.
RESTART RD1 IGNORE MEANS IGNORE DEVICE (UNLESS CARDREADER).
DEVICE STATUS REPEAT ACCEPT SKIP IGNORE
PTR NOT AVAILABLE - - - +
CDR /RESERVED - - - +
3740 - - - +
MT- - - - +
MT- BLOCK LENGTH ERROR
- - - +
PTR DATA LATE + + + +
CDR + + + +
3740 + + + +
MT- + + + +
CDR PARITY ERROR + + + +
MT0 + + + +
CT0 + + + +
MT- END MEDIUM - + + +
3740 POSITION ERROR - - - +
MT - - - +
PTR DRIVER MISSING - - - +
CDR - - - +
3740 - - - +
MT- - - - +
PTR TIMEOUT + + + +
CDR + + + +
3740 + + + +
MT- - + + +
«ff»
HOW TO HANDLE DISKETTE ERRORS:
NORMAL JOB SEQUENCE IS THAT THE SELECT CARD IS READY FOR
INPUT. AFTER "MOUNT DISKETTE" THEN MOUNT THE DISKETTE WITH
CORRECT NAME AND PROGRAM WILL START AS SOON AS DEVICE
IS READY. AT END OF DISKETTE A DISPLAY WILL OCCUR:
"END OF DISKETTE". AND DISKETTE CAN BE TAKEN OUT.
FOR EACH SELECT CARD, DOOR MUST HAVE BEEN OPENED ONCE.
IF THERE IS MORE DATASETNAMES WHICH SHOULD BE TRANSFERRED
ON SAME CARD THEN DO NOT TOUCH DEVICE BEFORE END OF DISKETTE
UNLESS AN ERROR COMMAND OCCURS.
EXAMPLE:
>RD1
MOUNT DISKETTE MOUNT THE DISKETTE.
END OF DISKETTE TAKE DISKETTE OUT.
OUTPUT MESSAGES FROM 3740:
VOLUME LABEL MISSING VOLUME LABEL SECTOR NOT FOUND
OR VOLUME ID ILLEGAL
HEADER LABEL MISSING HEADER LABEL SECTOR NOT FOUND
DATASET NAME MISSING THE TRANSFERRED DATASET NAME IS
IS NOT FOUND BETWEEN SECTOR 8 AND 26
FILE STARTS IN TRACK 0 THE DATASET IS PLACED ILLEGAL ON DISCETTE
FILE ENDS ILLEGAL THE DATASET IS PLACED ILLEGAL ON DISCETTE
RECORD LENGTH ERROR THE RECORD IS GREATER THEN 128
OR LESS THAN 1 CHARACTERS
SEQUENCE ERROR THE SEQUENCE ARE NOT CONSECUTIVE
OR DO NOT START WITH 01.
DEVICE RESERVED ANOTHER PROGRAM USING FD DRIVER.
FD DRIVER MISSING FD DRIVER NOT IN CORE.
AFTER ERROR THE LABEL WILL BE DISPLAYED ON THE CONSOLE
IF SOME OF ERRORS OCCURS ABOVE A RESTART COMMAND TO CON
MUST BE GIVEN. AND EITHER THE CORRECT DISKETTE MUST BE
MOUNTED OR A IGNORE COMMAND SHOULD BE GIVEN. IF SEQUENCE
ERROR OCCURS THEN A RESTART RD1 COMMAND MEANS THAT
ERROR WILL BE ACCEPTED AND THE REST OF THE SEQUENCE
CHECK WILL BE OUT OF SEQUENCE.
******** NOTE *********
IF "PARITY ERROR" OR "POSITION ERROR" OR "TIMEOUT" OCCURS ON SCREEN
THEN IT MEANS THAT THE DICETTE WAS IMPOSSIBLE TO
READ. CONTACT RC AND GIVE A LOG WITH IF POSSIBLE.
!«ff»
!
AUTHOR: DATE: CHANGES:
CAMS 76.03.16 USING RC36-00217.01 TO MODIFY FOR
DISKETTE INPUT.
CAMS 76.04.12 MODIFY PROGRAM FOR TAKING INPUT
FROM CASSETTE.
CAMS 77.01.17 CHANGE MULTIPLE FILES COMMAND.
SPECIAL REQUIREMENTS:
RCSL: 43-GL622 CODEPROCEDURE FILL.
RCSL: 43-GL763 CODEPROCEDURE COMPRESS.
RCSL: 43-GL625 CODEPROCEDURE FINDPROCESS.
RCSL: 43-GL2332 CODEPROCEDURE BUFRETUR. P0045.
RCSL: 43-GL2135 CODEPROCEDURE GETEVENT. P0047.
RCSL: 43-GL619 CODEPROCEDURE DELAY.
!«ff»
CONST
FD0= "FD0<0><0><0>",
PTR= "PTR<0><0><0>",
P3740= "3740<0><0>",
CDR= 'CDR<0><0><0>',
CON= 'CON<0><0><0>',
MT0= 'MT0<0><0><0>',
CT0= 'CT0<0><0><0>',
PARAM="
VOLID=<0>
DSN=<0>
FILE=<0>
UNIT=<0>
RECL=<0>
F=<0>
U=<0>
R=<0>
FORMAT=<0>
",
NUMPAR= 48, !NUMBER OF CHARACTER IN PARAM !
VVOLID= 1,
VDSN= 2,
VFILE= 3,
VUNIT= 4,
VRECL= 5,
VFORMAT= 6,
REDUNSPT= 5, ! NUMBER OF DIFFERENT POINTERS !
COMREDUNS= 3, ! NUMBER OF PARAMETERS WITH EQUAL MEANING !
LEFTPAR= '(',
RIGHTPAR= ')',
EQUAL= "=",
COMMA= ',',
SPACE= ' ',
ALL= "ALL",
NORMALREAD= 1,
ECMAVER1= 9,
NOCHECK= 17,
E1= "E1",
E2= "E2",
FREE= "FREE",
«ff»
STATUSTXT= 'STATUS: <0>',
RD1STATUS= '<0>
NOT READY<10><0>
<0>
<0>
<0>
<0>
NOT AVAILABLE<10><0>
<0>
BLOCKLENGTH ERROR<10><0>
DATA LATE<10><0>
PARITY ERROR<10><0>
END MEDIUM<10><0>
POSITION ERROR<10><0>
DRIVER MISSING<10><0>
TIMEOUT<10><0>
<0>',
SYNTAXERROR= "SYNTAX ERROR IN COMMAND: <10><0>",
INTERVTXT= '<10>*** OPERATOR INTERVENTION REQUIRED<10><10>',
«ff»
MTMASK= 8'161776,
CTMASK= 8'171776,
MTMASKACTION= 2'0111001111111110,
MTMASKDISPLAY= 2'0100001011111110,
MTMASKRESTART= 2'0000001011101110,
MTMASKREP= 2'0110001011101110,
CRMASKACTION= 2'0110001011110110,
CRMASKDISPLAY= 2'0000001011100110,
CRMASKRESTART= 2'0000001011100110,
CRMASKREP= 2'0110001011010110,
DVMASKACTION= 2'0100011111010110,
DVMASKDISPLAY= 2'0100011011010110,
DVMASKRESTART= 2'0000011010000110,
DVMASKREP= 2'0110011000010110,
NOPROCESS= 1,
NOTPROCESSED= 8'4,
TRUE= 1,
FALSE= 0,
ZERO= '<0><0><0><0><0><0><0><0>',
READCARD= 0,
READTAP= 1,
READPTR= 2,
READ3740= 3,
BLANK= 64,
MAXCARDS= 10,
SRCB= '<8'200><0>',
SLASHSTAR= '<97><92>', ! /* !
B5B6B14= 8'003002, ! NO DISPLAY FROM RD1 MODUL !
! ONLY INTERVENTIONTEXT !
SEQILLE= 8'003000, ! SEQUENCE ERROR FROM 3740 !
! OR ILLEGAL !
OFFLINE= 8'040000,
EOF= 8'010400, ! BIT 3 IS FOR CASSETTE !
SOFTBLOKERROR= 8'201,
OFFLINENEEDED= -1,
EOFCARD= '<97><92><64><64><197><213><196><64>', ! /* END !
READ= '<97><92><64><64><217><197><193><196><64>', ! /* READ !
FILEPOS= 19,
LOGICALEOF= '<3><8'200><0>',
DSKIP= 1,
DACCEPT= 2,
MINDUPL= 3,
«ff»
EO3740= "END OF DISKETTE<10><0>",
LOAD3740= "MOUNT DISKETTE <0>",
D3740= "3740 ",
PAPER= "PAPER ",
TAPE= "TAPE ",
CASSETTE= "CASSETTE ",
ONESEC= 10,
UNTILFOREVER= -1,
REPRATE= 20,
NONEXISTING= 0,
NOTFOUND= 1,
IDLE= 0,
RUNNING= 1,
STOPPING= 2,
RESERVATION= 8'4,
RESTART= 8'400,
SENSE= 8'000000,
IMMEDIATE= 10000,
FIRSTLIM= 60,
SECONDLIM= 300,
SPANNED= 8'200,
MAXDATASET= 4,
MAXSIZE= 1080,
SIZE3740= 128,
PTRSIZE= 80,
ONE= 1,
FOUR= 4,
ACCEPT= "ACCEPT",
IGNORE= "IGNORE",
SKIP= "SKIP",
NL= "<10>",
«ff»
CRTABLE= ! CR CONTROLLER FORMAT TO EBCDIC
0 1 2 3 4 5 6 7 !
#
! 0 ! 64 241 242 243 244 245 246 247
! 8 ! 249 49 50 51 52 53 54 55
! 16 ! 248 121 122 123 124 125 126 127
! 24 ! 56 57 58 59 60 61 62 63
! 32 ! 240 97 226 227 228 229 230 231
! 40 ! 233 33 34 35 36 37 38 39
! 48 ! 232 105 224 107 108 109 110 111
! 56 ! 40 41 42 43 44 45 46 47
! 64 ! 96 209 210 211 212 213 214 215
! 72 ! 217 17 18 19 20 21 22 23
! 80 ! 216 89 90 91 92 93 94 95
! 88 ! 24 25 26 27 28 29 30 31
! 96 ! 208 161 162 163 164 165 166 167
! 104 ! 169 225 98 99 100 101 102 103
! 112 ! 168 160 170 171 172 173 174 175
! 120 ! 104 32 234 235 236 237 238 239
! 128 ! 80 193 194 195 196 197 198 199
! 136 ! 201 1 2 3 4 5 6 7
! 144 ! 200 73 74 75 76 77 78 79
! 152 ! 8 9 10 11 12 13 14 15
! 160 ! 192 129 130 131 132 133 134 135
! 168 ! 137 65 66 67 68 69 70 71
! 176 ! 136 128 138 139 140 141 142 143
! 184 ! 72 0 202 203 204 205 206 207
! 192 ! 106 145 146 147 148 149 150 151
! 200 ! 153 81 82 83 84 85 86 87
! 208 ! 152 144 154 155 156 157 158 159
! 216 ! 88 16 218 219 220 221 222 223
! 224 ! 112 177 178 179 180 181 182 183
! 232 ! 185 113 114 115 116 117 118 119
! 240 ! 184 176 186 187 188 189 190 191
! 248 ! 120 48 250 251 252 253 254 255
#,
«ff»
! RC36-00184 PAGE 07 !
! EBCDIC => ASCII !
ASCIITAB = #
! 0 1 2 3 4 5 6 7 !
! 0 ! 31 31 31 31 31 31 31 31
! 8 ! 31 31 31 31 31 31 31 31
! 16 ! 31 31 31 31 31 31 31 31
! 24 ! 31 31 31 31 31 31 31 31
! 32 ! 31 31 31 31 31 31 31 31
! 40 ! 31 31 31 31 31 31 31 31
! 48 ! 31 31 31 31 31 31 31 31
! 56 ! 31 31 31 31 31 31 31 31
! 64 ! 32 31 31 31 31 31 31 31
! 72 ! 31 31 91 46 60 40 43 94
! 80 ! 38 31 31 31 31 31 31 31
! 88 ! 31 31 33 36 42 41 59 92
! 96 ! 45 47 31 31 31 31 31 31
! 104 ! 31 31 31 44 37 95 62 63
! 112 ! 31 31 31 31 31 31 31 31
! 120 ! 31 31 58 35 64 39 61 34
! 128 ! 31 65 66 67 68 69 70 71
! 136 ! 72 73 31 31 31 31 31 31
! 144 ! 31 74 75 76 77 78 79 80
! 152 ! 81 82 31 31 31 31 31 31
! 160 ! 31 31 83 84 85 86 87 88
! 168 ! 89 90 31 31 31 31 31 31
! 176 ! 31 31 31 31 31 31 31 31
! 184 ! 31 31 31 31 31 31 31 31
! 192 ! 31 65 66 67 68 69 70 71
! 200 ! 72 73 31 31 31 31 31 31
! 208 ! 31 74 75 76 77 78 79 80
! 216 ! 81 82 31 31 31 31 31 31
! 224 ! 93 31 83 84 85 86 87 88
! 232 ! 89 90 31 31 31 31 31 31
! 240 ! 48 49 50 51 52 53 54 55
! 248 ! 56 57 94 31 31 31 31 31
#; ! END KEYOUTTAB !
«ff»
VAR
MASKACTION, MASKDISPLAY, MASKRESTART, MASKREP: INTEGER;
BUFFER: STRING(MAXSIZE); ! COMMON BUFFER FOR TAP AND DEV !
STACK: STRING(42);
STACKPT: INTEGER; ! POINTER IN STACK !
RESULT: INTEGER;
INDEX: INTEGER; ! COMMAND INDEX !
READMODE: INTEGER; ! INPUT MODE !
COMMAND: RECORD
MAX: STRING(80) FROM 1;
ACCEPT: STRING(6) FROM 1;
IGNORE: STRING(6) FROM 1;
SKIP: STRING(4) FROM 1;
NEXT: STRING(5) FROM 3
END;
COMADR: INTEGER;
HELPI: INTEGER; ! MUST ONLY BE MINUS IN 3740 OPSTART !
HELPA: INTEGER;
HELPS: STRING(1);
HELP: STRING(12);
LINEMANAGER: INTEGER; ! PROCESS DESCRIPTOR ADRESSES !
DRIVER: INTEGER;
SENDER: INTEGER;
DLIMIT: INTEGER; ! CONTROL PARAMETERS !
DISPLAY: INTEGER;
ENDMEDIUM: INTEGER;
READFLAG: INTEGER;
FILENO: INTEGER;
CARDIMAGE: STRING(80);
RCB: STRING(2); ! DATA CONTROL PARAMETERS !
CARDNUMBER: INTEGER;
COLUMNS: INTEGER;
RESLENGTH: INTEGER;
RECORDLENGTH: INTEGER;
INDEXANDFLAG: INTEGER;
WAITTIME: INTEGER;
BUF: INTEGER; ! MESSAGE BUFFER POINTERS !
SAVEBUF: INTEGER;
KEYCOMMAND: INTEGER;
CONVADR: INTEGER; ! MUST NOT BE USED !
STATUS: INTEGER; ! THIS SEQUENCE MUST NOT BE MOVED !
RUNNINGSTATUS: INTEGER;
FILECOUNT: INTEGER;
RECORDCOUNT: INTEGER;
BYTEADR: INTEGER;
BYTECOUNT: INTEGER;
BUFFERLENGTH: INTEGER;
MESS0: INTEGER;
MESS1: INTEGER;
MESS2: INTEGER;
MESS3: INTEGER; ! END OF UNTOUCHNABLE SEQUENCE !
«ff»
IN: FILE ! INPUT FILE DESCRIPTION !
'CDR', ! NAME OF OUTPUT DRIVER !
2, ! KIND = BLOCKED. !
4, ! NUMBER OF BUFFERS !
80, ! SHARESIZE !
U; ! UNDEFINED FORMAT !
CONV
CRTABLE; ! CONVERSIONTABLE !
GIVEUP
RD1ERROR, ! GIVEUPPROCEDURE !
2'0110001011110110 ! GIVEUPMASK !
OF STRING(80); ! RECORD STRUCTURE !
TAP: FILE ! MAGTAPE FILE DESCRIPTION !
'MT0', ! NAME OF DRIVER !
14, ! KIND: REPEATABLE, POSITIONABLE, BLOCKED !
ONE, ! BUFFERS !
ONE, ! SHARESIZE !
FB; ! FIXEDLENGTH,BLOCKED FORMAT !
GIVEUP
TAPERROR, ! GIVEUP PROCEDURE !
2'1110001111111110 ! GIVEUPMASK !
OF STRING(ONE); ! RECORD STRUCTURE !
DEV: FILE ! DEVICE FILE DESCRIPTION !
'XXX', ! NAME OF DRIVER !
14, ! KIND !
FOUR, ! BUFFERS !
ONE, ! SHARESIZE !
U; ! UNDEFINED !
GIVEUP
DEVERROR, ! !
2'0110011111010110; ! GIVEUPMASK !
CONV STACK ! STRING FOR PARAMETERS TO 3740 !
OF STRING(ONE);
«ff»
PROCEDURE MOVIN( CONST FROMSTR: STRING(1);
CONST FROMINDX: INTEGER;
CONST TOADR: INTEGER;
CONST LENGTH: INTEGER);
CODEBODY;
PROCEDURE MOVOUT( CONST FROMADR: INTEGER;
VAR TO: STRING(1);
CONST TOINDEX: INTEGER;
CONST LENGTH: INTEGER);
CODEBODY;
PROCEDURE GETEVENT( VAR SENDER: INTEGER;
VAR BUF: INTEGER;
CONST WAITTIME: INTEGER;
VAR MESS0: INTEGER);
CODEBODY P0047;
PROCEDURE BUFRETURN( CONST SENDER: INTEGER;
VAR BUF: INTEGER;
VAR STATUS: INTEGER);
CODEBODY P0045;
PROCEDURE FINDPROCESS( VAR PROCNAME: STRING(6);
VAR PROCADDRESS: INTEGER);
CODEBODY;
PROCEDURE COMPRESS( VAR STR: STRING(1);
CONST STRLENGTH: INTEGER;
CONST RESULT: INTEGER;
VAR RESLENGTH: INTEGER;
CONST MINDUP: INTEGER);
CODEBODY;
PROCEDURE FILL( CONST VALUE: INTEGER;
CONST T0: STRING(1);
CONST TOINDEX: INTEGER;
CONST LENGTH: INTEGER);
CODEBODY;
PROCEDURE SETSHARES( FILE Z;
CONST SHARES: INTEGER;
CONST SHAREL: INTEGER;
VAR BUFAREA: STRING(1));
CODEBODY;
PROCEDURE DELAY( CONST TIME:INTEGER);
CODEBODY;
«ff»
PROCEDURE SENDANSWER;
BEGIN
BUFRETURN(LINEMANAGER, BUF, STATUS);
END;
PROCEDURE RETURNALL;
BEGIN
RUNNINGSTATUS:= IDLE;
STATUS:=0;
WHILE BUF <> 0 DO SENDANSWER;
END;
PROCEDURE WAIT;
BEGIN ! WAIT FOR TIMER OR CONTROLMESSAGE !
31: SENDER:= LINEMANAGER;
GETEVENT(SENDER,BUF,WAITTIME,MESS0);
IF SENDER <> 0 THEN ! MESSAGE RECEIVED!
BEGIN
IF COMADR = 0 THEN
BEGIN
IF MESS0 AND RESERVATION <> 0 THEN COMADR:=MESS1;
IF COMADR <> 0 THEN MOVOUT(COMADR,COMMAND,0,72);
SENDANSWER;
END ELSE
BEGIN
IF MESS0 EXTRACT 2 <> 0 THEN GOTO 31;
MOVOUT(COMADR,COMMAND,0,72);
SENDANSWER;
END;
END;
END;
PROCEDURE SETDISPLAY;
BEGIN
DISPLAY:=IMMEDIATE;
DLIMIT:=FIRSTLIM;
END;
«ff»
PROCEDURE SETMASK;
BEGIN
IF READFLAG = READTAP THEN
BEGIN
MASKACTION:=MTMASKACTION;
MASKDISPLAY:=MTMASKDISPLAY;
MASKRESTART:=MTMASKRESTART;
MASKREP:=MTMASKREP;
END;
IF READFLAG >= READPTR THEN
BEGIN
MASKACTION:=DVMASKACTION;
MASKDISPLAY:=DVMASKDISPLAY;
MASKRESTART:=DVMASKRESTART;
MASKREP:=DVMASKREP;
END;
IF READFLAG = READCARD THEN
BEGIN
MASKACTION:=CRMASKACTION;
MASKDISPLAY:=CRMASKDISPLAY;
MASKRESTART:=CRMASKRESTART;
MASKREP:=CRMASKREP;
END;
END;
«ff»
PROCEDURE SCAN;
BEGIN
HELPI:=0; HELPA:=INDEX;
0:
MOVE(COMMAND,INDEX,HELP,HELPI,1);
MOVE(COMMAND,INDEX,HELPS,0,1);
IF INDEX > 80 THEN GOTO 2;
IF HELPS = SPACE THEN GOTO 2;
IF HELPS = NL THEN GOTO 2;
IF HELPS = LEFTPAR THEN GOTO 2;
IF HELPS = RIGHTPAR THEN GOTO 2;
IF HELPS = COMMA THEN GOTO 2;
INDEX:=INDEX+1;
HELPI:=HELPI+1;
IF HELPI < 10 THEN GOTO 0;
2: HELPA:=INDEX-HELPA;
INDEX:=INDEX+1;
END;
PROCEDURE TABLELOOKUP;
BEGIN
HELPI:=0; HELPA:=INDEX; RESULT:=1; HELP:=ZERO;
0: REPEAT
MOVE(PARAM,HELPI,HELPS,0,1);
MOVE(COMMAND,INDEX,HELP,0,1);
IF HELP = NL THEN HELPI:=NUMPAR+1;
IF HELP = SPACE THEN
IF HELPA = INDEX THEN
BEGIN
INDEX:=INDEX+1; HELPA:=INDEX;
GOTO 0;
END;
IF HELP = HELPS THEN
BEGIN
HELPI:=HELPI+1;
INDEX:=INDEX+1;
GOTO 0;
END;
IF HELPS = ZERO THEN
BEGIN
IF INDEX <> HELPA THEN
BEGIN
IF RESULT > REDUNSPT THEN RESULT:=RESULT-COMREDUNS;
GOTO 2;
END;
RESULT:=RESULT+1;
END;
HELPI:=HELPI+1;
INDEX:=HELPA
UNTIL HELPI >= NUMPAR;
RESULT:=FALSE; HELPS:=HELP; GOTO 4;
2:
SCAN;
4:
END;
«ff»
PROCEDURE ERROR;
BEGIN
READFLAG:=READCARD;
HELPI:=0;
REPEAT
MOVE(COMMAND,HELPI,HELPS,0,1);
IF HELPI>= 78 THEN HELPS:=NL;
HELPI:=HELPI+1
UNTIL HELPS=NL;
INSERT(0,COMMAND,HELPI); ! TO STOP OPMESS CORECTLY !
OPMESS(SYNTAXERROR);
OPMESS(COMMAND);
OPMESS(INTERVTXT);
SAVEBUF:=BUF;
INSERT(0,COMMAND,2);
0:
STATUS:=0;
WAITTIME:=REPRATE;
WAIT;
IF COMMAND.IGNORE = IGNORE THEN
BEGIN
STATUS:=0; BUF:=SAVEBUF; GOTO 10;
END;
IF COMMAND.MAX <> CASSETTE THEN
IF COMMAND.MAX <> TAPE THEN
IF COMMAND.MAX <> D3740 THEN
IF COMMAND.MAX <> PAPER THEN GOTO 0;
BUF:=SAVEBUF;
END;
«ff»
PROCEDURE ANALYZE;
BEGIN
«ff»
«ff»
«nul»