|
|
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: 20480 (0x5000)
Types: TextFile
Notes: RCSL-43-GL-2615, RCSL-43-GL-2618, RCSL-43-GL-8209, RCSL-43-GL-8210, RCSL-43-GL-8211
Names: »G1047«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/G1047«
!A3740▶01◀$▶06◀Ø) RCSL: 43-GL8210
AUTHOR: CAMS/PBP
EDITED: 78.12.05
PROGRAM RC36-01047.00
3740 IBM LABEL HANDLER
KEYWORDS: MUSIL,FD,LISTING,3751.
ABSTRACT: THIS PROGRAM FUNCTIONIZE AS A DRIVER
FOR IBM 3740 SERIES DISCETTE. WITH AUTOMATIC
CHECK OF LABEL, BAD TRACKS, AND DATASETFILE.
RCSL: 43-GL8209 ASCII SOURCE
RCSL: 43-GL8211/8212 BINARY TTY
«ff»
RC36-01047 PAGE 01
ABSTRACT: THIS PROGRAM FUNCTIONIZE AS A DRIVER FOR IBM
3740 SERIES DISCETTE. WITH AUTOMATIC CHECK
OF LABEL, BAD TRACK AND DATASETFILE.
SIZE: 4676 BYTES. INCLUDING TWO 512 BYTES INPUT BUFFERS.
DATE: MARTS 16.TH 76.
MODES: OPEN(IN,OPERATION ) JUST FOR TRANSFERING DATASET TO MODULE.
OPERATION:=1 FOR READ 3 FOR WRITE.
PARAMETERS FOR OPEN FOR DATASET(S) MUST BE MADE
IN AN CONVERSION STRING CONNECTED TO
THE FILE DESCRIPTION.
TO SENSE STATUS FOR DEVICE WITHOUT TESTING CONTENT
OF DISKETTE SET FD.ZONV TO ZERO AND MAKE AN OPEN.
EXAMPLE: FDZONV:=FD.ZONV; FD.ZCONV:=0; OPEN(FD,READ);
COULD BE USED IF READING SHOULD BE DONE AUTOMATICALLY.
COMMAND:
MODE: STRING(1) FROM 1 , READ=R WRITE=W
DUMMY YET.
UNIT: STRING(1) FROM 2 ASCII VALUE OF UNIT.
ACCEPT: STRING(1) FROM 3 IF SEQUENCE ERROR WAS
MET AND READING IS WANTED ANYWAY THEN
VALUE DIFFERENT FROM SPACE SHOULD BE
INSERTED.
VOLID: STRING(6) FROM 4 VOLUME LABEL.
DATASET: STRING(8) FROM 10 DATASETNAME.
NOTE THAT IF VOLID = SPACES THEN NO CHECK OF
LABEL WILL BE DONE.
THAT IF DATASETNAME = SPACES THEN ALL LEGAL
DATASET WILL BE TRANSFERRED UNTIL A DDR1 MARK
IS MET.
STATUS:
B1: OFF-LINE.
B5: SEQUENCE ERROR.
B6: DISCETTE CONTAINS ILLEGAL INFORMAITION.
B7: DATASET REACHED EOD.
B8: BLOCK LENGTH ERROR.
B11: DISCETTE FULL / OR END MEDIUM IF DATASET IS
CONCECUTIVE.
B12: POSITION ERROR.
B14: FATAL SYSTEM ERROR. DISC CANNOT BE READ.
«ff»
RC36-01047 PAGE 02
OUTPUT MESSAGES:
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 THAN 512
OR BETWEEN 128 AND 512
OR LESS THAN 1 CHARACTERS
SEQUENCE ERROR THE SEQUENCE ARE NOT CONSECUTIVE
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
******** 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.
AFTER THESE ERRORS : RECORD NR: XXXX OCCURS WHICH MEANS
THAT THE SECTOR WITH NUMBER 1 <= SECTOR <= 2002 WAS
DEFECT.
**** NOTICE ****
SPECIAL VERSION USING 512 BYTES BUFFERS
USED TOGETHER WITH SPECIAL P&T PROGRAMS P1051 AND P1052.
THIS VERSION SHOULD NOT BE USED ANYWHERE ELSE.
«ff»
RC36-01047 PAGE 03
AUTHOR: DATE: CHANGE:
CAMS 76.01.13 EOD IS ALLOWED TO BE 1 > EOE
CAMS 76.02.17 CORRECT MODULE TO MANAGE IBM
ERMAP FORMAT.
CAMS 76.03.16 CHANGE MODULE TO BE USED
MORE GENEREL. (SLAKTERIFORBUNDET).
CAMS 76.05.20 MODIFIE DELETED RECORDS
CAMS 77.12.13 ALLOWED EMPTY DATASET.
JSVJ 78.09.25 POSITIONING IMPLEMENTED.
PBP 78.11.30 MODIFIED FOR 3751 DRIVER.
OPEN STATEMENTS ARE RE-
PLACED BY TRANSFER
STATEMENTS. THIS MAKES
IT POSIBLE TO USE
MORE THAN ONE UNIT
AT THE SAME TIME.
** OBS ** ** OBS **
THIS PROGRAM IS USING
512 BYTES BUFFERS.
** OBS ** ** OBS **
SPECIAL REQUIREMENTS:
CODEPROCEDURE WAITANSWER RCSL: 43-GL2615
CODEPROCEDURE SENDANSWER RCSL: 43-GL2618
!
«ff»
! RC36-01047 PAGE 04 !
CONST
ZEROS= '<0><0><0><0><0><0><0><0>",
! BOOLEANS !
TRUE= 1,
FALSE= 0,
ERMAPONE= -26,
ERMAPTWO= -52,
READSKIP= 1,
READNONSKIP= 17,
ERMAP= 5,
VOLLABEL= 7,
RESET= -1,
ENOUGH= 10000,
REPEATNUMBER= 10,
BOPEN= 8'14,
! BITPATTERN !
B0= 8'100000,
B1= 8'040000,
B2= 8'020000,
B3= 8'010000,
B4= 8'004000,
B5= 8'002000,
B6= 8'001000,
B7= 8'000400,
B8= 8'000200,
B9= 8'000100,
B10= 8'000040,
B11= 8'000020,
B12= 8'000010,
B13= 8'000004,
B14= 8'000002,
B15= 8'000001,
! STATUS ANSWERS !
CLEANBITS= 2'1110001111110010,
STATUS= "B0 <0>B1 <0>B2 <0>B3 <0>B4 <0>B5 <0><10>DEVICE RESERVED <0>
B7 <0>B8 <0>B9 <0><10>PARITY ERROR<0>B11 <0><10>POSITION ERROR<0>
<10>FD DRIVER MISSING<0><10>TIME OUT<0>B15 <0>",
VOL1= "VOL1",
HDR1= "HDR1",
SPACES= " ",
ENDLIN= "<13><0>",
VOLERROR= "VOLUME LABEL MISSING<10><0>",
HDRERROR= "HEADER LABEL MISSING<10><0>",
NAMEERROR= "DATASET NAME MISSING<10><0>",
BOEERROR= "FILE STARTS IN TRACK 0<10><0>",
EODERROR= "FILE ENDS ILLEGAL<10><0>",
RECERROR= "RECORD LENGTH ERROR<10><0>",
SEQERROR= "SEQUENCE ERROR<10><0>",
C= "C", L= "L",
ZERO="0", ONE= "1",
READ= "R",
ANTDEL= "ANTAL DELETED SECTORS: ",
RECORDNR= " RECORD: ",
U= 0,
UB= 1,
«ff»
! RC36-01047 PAGE 05 !
! EBCDIC => ASCII !
KEYOUTTAB = #
! 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»
! RC36-01047 PAGE 06 !
VAR
OPSTRING: STRING(42);
COM: RECORD
TOTAL: STRING(20);
MODE: STRING(1) FROM 1;
UNIT: STRING(1) FROM 2;
ACCEPT: STRING(1) FROM 3;
VOLID: STRING(6) FROM 4;
DATASET: STRING(8) FROM 10
END;
BUF: INTEGER;
SENDER: INTEGER;
RESERVER: INTEGER;
LABELCHECK: INTEGER;
LENGTH: INTEGER;
BADTRACK: INTEGER;
BLOCKNO: INTEGER;
SIZE: INTEGER;
BOE: INTEGER;
EOD: INTEGER;
EOE: INTEGER;
TRACKREL: INTEGER;
SICKONE: INTEGER;
SICKTWO: INTEGER;
REJECT: INTEGER;
COUNT: INTEGER;
SEQUENCE: INTEGER;
NEXTDATASET: INTEGER;
HELP1: INTEGER;
HELP2: INTEGER;
UNIT : INTEGER;
L1: INTEGER;
L2: INTEGER;
ZBLOK: INTEGER;
SWDELET: INTEGER;
DELCOUNT: INTEGER;
! THIS SEQUENCE MUST NOT BE MOVED !
MESS0,MESS1,MESS2,MESS3: INTEGER;
ANSW0,ANSW1,ANSW2,ANSW3: INTEGER;
«ff»
! RC36-01047 PAGE 07 !
IN: FILE
"FD0", 14, 1, 512, UB;
GIVEUP INERROR, 8'145776
OF STRING(128);
ABSCORE:
FILE
"ABS",2,1,1, U
OF STRING(1);
! HANDLING OF ABSOLUT ADRESSES !
PROCEDURE P0039(VAR MESSAGE: INTEGER;
SENDER, BUF: INTEGER);
CODEBODY;
PROCEDURE P0040(VAR ANSWER: INTEGER;
VAR BUF: INTEGER);
CODEBODY;
PROCEDURE SENDOK;
BEGIN
ANSW0:=0;
ANSW1:=0;
END;
PROCEDURE SETREJECT;
BEGIN
ANSW0:=B6;
ANSW1:=0;
END;
PROCEDURE NEXTRECORD;
BEGIN
GETREC(IN,IN.ZSHAREL);
CONVERT(IN^,IN^,KEYOUTTAB,80);
END;
PROCEDURE CHECKSIZE;
BEGIN
IF MESS1 < 512 THEN
BEGIN
IF MESS1 > 128 THEN GOTO 65;
IN.ZSHAREL:=MESS1;
IN.ZREM:=IN.ZSHAREL;
IN.ZFORM:=U;
END;
END;
«ff»
! RC36-01047 PAGE 08 !
PROCEDURE CHECKLABEL;
BEGIN
IN.ZFORM:=UB;
IN.ZSHAREL:=128;
IN.ZREM:=IN.ZSHAREL;
IN.ZMODE:= UNIT * 256 + READNONSKIP + B10;
TRANSFER(IN,0,UNIT*256);
WAITTRANSFER(IN);
SETPOSITION(IN,RESET,VOLLABEL);
NEXTRECORD;
IF IN^ <> VOL1 THEN
BEGIN
4015: OPMESS(VOLERROR);
GOTO 4040;
END;
IF COM.VOLID <> SPACES THEN
BEGIN
MOVE(IN^,4,OPSTRING,0,6);
IF OPSTRING <> COM.VOLID THEN GOTO 4015;
END;
IF NEXTDATASET > 0 THEN
BEGIN
SETPOSITION(IN,RESET,NEXTDATASET);
NEXTDATASET:=NEXTDATASET+1;
END;
4020: NEXTRECORD;
IF IN^ <> HDR1 THEN
BEGIN
IF NEXTDATASET > 9 THEN ! 9 MEANS SECTOR 9 IN CATALOG !
BEGIN
NEXTDATASET:=0; GOTO 210; ! EOF FOR WHOLE DISC !
END;
IF IN.ZBLOCK > 9 THEN GOTO 4025;
OPMESS(HDRERROR);
GOTO 4040;
END;
MOVE(IN^,5,OPSTRING,0,8);
IF COM.DATASET <> SPACES THEN
IF OPSTRING <> COM.DATASET THEN
BEGIN
IF IN.ZBLOCK < 27 THEN GOTO 4020;
4025: OPMESS(NAMEERROR);
GOTO 4040;
END;
INSERT(0,OPSTRING,6);
MOVE(IN^,22,OPSTRING,0,6);
REPEAT MOVE(OPSTRING,1,OPSTRING,0,42)
UNTIL BYTE OPSTRING > 32;
DECBIN(OPSTRING,SIZE);
IF SIZE <= 128 THEN
IF SIZE > 0 THEN GOTO 4030;
OPMESS(RECERROR);
GOTO 4040;
«ff»
! RC36-01047 PAGE 09 !
! LABEL HANDLING CONTINUED !
4030: INSERT(0,OPSTRING,2);
MOVE(IN^,28,OPSTRING,0,2);
DECBIN(OPSTRING,BOE ); BOE:=BOE*26 ;
MOVE(IN^,31,OPSTRING,0,2);
DECBIN(OPSTRING,LENGTH); BOE:=BOE+LENGTH;
IF BOE < 27 THEN
BEGIN
OPMESS(BOEERROR);
GOTO 4040;
END;
MOVE(IN^,74,OPSTRING,0,2);
DECBIN(OPSTRING, EOD); EOD:=EOD * 26 ;
MOVE(IN^,77,OPSTRING,0,2);
DECBIN(OPSTRING, LENGTH); EOD:=EOD + LENGTH;
MOVE(IN^,34,OPSTRING,0,2);
DECBIN(OPSTRING, EOE); EOE:=EOE * 26 ;
MOVE(IN^,37,OPSTRING,0,2);
DECBIN(OPSTRING,LENGTH); EOE:=EOE + LENGTH;
IF EOD < BOE THEN ! 77.12.13 !
BEGIN
4035: OPMESS(EODERROR);
GOTO 4040;
END;
IF EOE > 2002 THEN GOTO 4035;
IF EOE <= BOE THEN GOTO 4035;
IF EOD > EOE+1 THEN GOTO 4035;
IF NEXTDATASET = 0 THEN
BEGIN
IF COM.ACCEPT = SPACES THEN
BEGIN
MOVE(IN^,44,OPSTRING,0,1);
IF OPSTRING = C THEN
BEGIN
SEQUENCE:=1;
END;
IF OPSTRING = L THEN
BEGIN
SEQUENCE:=0;
END;
END ELSE SEQUENCE:=0;
IF SEQUENCE > 0 THEN IF OPSTRING <> C THEN GOTO 4070;
END;
«ff»
! RC36-01047 PAGE 10 !
! LABEL HANDLING CONTINUED !
IN.ZSHAREL:=128;
IN.ZREM:=IN.ZSHAREL;
IN.ZMODE:=UNIT*256+READSKIP + B10;
TRANSFER(IN,0,UNIT*256);
WAITTRANSFER(IN);
SICKONE:=0; SICKTWO:=0; BADTRACK:=0; TRACKREL:=RESET;
SETPOSITION(IN,RESET,ERMAP);
NEXTRECORD;
INSERT(0,OPSTRING,2);
MOVE(IN^,6,OPSTRING,0,2);
DECBIN(OPSTRING,SICKONE);
MOVE(IN^,10,OPSTRING,0,2);
DECBIN(OPSTRING,SICKTWO);
IF SICKONE <> 0 THEN
BEGIN
SICKONE:= SICKONE * 26+1;
IF BOE >= SICKONE THEN
BEGIN
BOE:=BOE+26; EOD:=EOD+26;
TRACKREL:=ERMAPONE;
GOTO 4045;
END;
IF EOD >= SICKONE THEN
BEGIN
EOD:=EOD+26; BADTRACK:=TRUE;
END;
END;
4045: IF SICKTWO <> 0 THEN
BEGIN
SICKTWO:= SICKTWO * 26+1;
IF BOE >= SICKTWO THEN
BEGIN
BOE:=BOE+26; EOD:=EOD+26;
TRACKREL:=ERMAPTWO;
GOTO 4047;
END;
IF EOD >= SICKTWO THEN
BEGIN
EOD:=EOD+26; BADTRACK:=TRUE;
END;
END;
4047: SETPOSITION(IN,TRACKREL,BOE);
ANSW3:=1;
LABELCHECK:=TRUE;
SENDOK;
IN.ZSHAREL:=512;
IN.ZREM:=IN.ZSHAREL;
IN.ZFORM:=UB;
GOTO 4060;
! ********** LABEL WAS NOT CORRECT *******!
4070: OPMESS(SEQERROR);
ANSW0:=B5; ! SEQUENCE ERROR ! ANSW1:=0;
GOTO 4050;
4040: SETREJECT;
4050: INSERT(13,OPSTRING,40);
INSERT(0,OPSTRING,41);
SETPOSITION(IN,RESET,IN.ZBLOCK-1);
NEXTRECORD;
MOVE(IN^,0,OPSTRING,0,40);
OPMESS(OPSTRING);
MOVE(IN^,40,OPSTRING,0,40);
OPMESS(OPSTRING);
NEXTDATASET:=FALSE;
LABELCHECK:=FALSE;
CLOSE(IN,1);
4060: END;
«ff»
! RC36-01047 PAGE 11 !
PROCEDURE NEWLABEL;
BEGIN
END;
PROCEDURE UPDATE;
BEGIN
IF SICKONE <= IN.ZBLOCK THEN
BEGIN
SETPOSITION(IN,ERMAPONE,SICKONE+26);
TRACKREL:=ERMAPONE;
SICKONE:=ENOUGH;
GOTO 300;
END;
IF SICKTWO <= IN.ZBLOCK THEN
BEGIN
SETPOSITION(IN,ERMAPTWO,SICKTWO+26);
TRACKREL:=ERMAPTWO;
SICKTWO:=ENOUGH;
GOTO 300;
END;
END;
PROCEDURE INERROR;
BEGIN
IF IN.Z0 AND 8'004000 <> 0 THEN
BEGIN
IF IN.ZBLOCK <= 27 THEN GOTO 400;
DELCOUNT:= 0;
SWDELET:= 1;
GOTO 400;
END;
IF LABELCHECK = TRUE THEN
BEGIN
IF IN.ZBLOCK > EOD THEN GOTO 210;
IF BADTRACK = TRUE THEN UPDATE;
END;
IF IN.Z0 AND 8'000052 <> 0 THEN
BEGIN
IF COUNT > 0 THEN
BEGIN
COUNT:=COUNT-1;
REPEATSHARE(IN);
END;
END;
IF IN.Z0 AND 8'137777 <> 0 THEN OPSTATUS(IN.Z0,STATUS);
IF IN.Z0 AND 8'001004 <> 0 THEN
BEGIN
IN.ZMODE:=0; MOVE(ZERO,0,IN.ZNAME,2,1);
END;
COUNT:=REPEATNUMBER;
REJECT:=IN.Z0 AND CLEANBITS;
ANSW1:=0; ANSW0:=B6;
IF IN.Z0 AND B1 <> 0 THEN ANSW0:=B1;
IF IN.Z0 AND 8'000052 <> 0 THEN
BEGIN
ANSW0:=IN.ZBLOCK;
IF IN.Z0 AND B10 <> 0 THEN ANSW0:=ANSW0-1;
BINDEC(ANSW0,OPSTRING);
OPMESS(RECORDNR); OPMESS(OPSTRING);
ANSW0:=B14;
END;
GOTO 100;
400: END;
«ff»
! RC36-01047 PAGE 12 !
BEGIN
ABSCORE.ZFIRST:=0;
LABELCHECK:=0;
RESERVER:=0;
SEQUENCE:=0;
TRACKREL:=0;
HELP1:=0;
SWDELET:= 0;
DELCOUNT:= 0;
COUNT:=REPEATNUMBER;
0: P0039(MESS0,SENDER,BUF);
IF RESERVER<> 0 THEN IF SENDER <> RESERVER THEN GOTO 110;
IF MESS0 AND B15 = 0 THEN
BEGIN ! CONTROL MESSAGE !
REJECT:=FALSE;
IF MESS0 AND B13 <> 0 THEN
BEGIN
IF MESS1 = 0 THEN
BEGIN
RESERVER:=0;
IF IN.ZMODE <> 0 THEN CLOSE(IN,1);
LABELCHECK:=FALSE;
GOTO 205;
END;
END;
IF MESS0 = B10 THEN
BEGIN
IF LABELCHECK = FALSE THEN GOTO 205;
BLOCKNO:=MESS3 + BOE -1; !RELATIVE TO START OF FILE!
IF BLOCKNO > EOD THEN
BEGIN
ANSW0:=B12;
ANSW1:=0;
GOTO 100;
END;
SETPOSITION(IN,TRACKREL,BLOCKNO);
GOTO 205;
END;
IF MESS0 = BOPEN THEN
IF MESS2 <> 0 THEN
BEGIN
MOVE(ABSCORE^,MESS2,COM,0,20);
190: LABELCHECK:=FALSE;
RESERVER:=SENDER;
UNIT:= BYTE COM.UNIT-48;
NEXTDATASET:=0;
IF COM.DATASET = SPACES THEN NEXTDATASET:=8;
200: CHECKLABEL;
GOTO 100;
END;
IN.ZMODE:= UNIT*256+READSKIP + B10;
TRANSFER(IN,0,UNIT*256);
WAITTRANSFER(IN);
205: SENDOK;
GOTO 100;
END;
«ff»
! RC36-01047 PAGE 13 !
! TRANSPUT MESSAGE !
COUNT:=REPEATNUMBER;
CHECKSIZE;
IF REJECT <> FALSE THEN
BEGIN
ANSW0:=B15;
ANSW1:=0;
GOTO 100;
END;
IF MESS0 EXTRACT 2 = 3 THEN
BEGIN ! PUTREC !
IF MESS1 > 512 THEN ! BLOCK LENGTH ERROR !
BEGIN
65: ANSW0:=B8; ANSW1:=0;;
GOTO 100;
END;
IF LABELCHECK= FALSE THEN GOTO 110;
IF MESS1 <= 0 THEN GOTO 80;
! PUTREC(OUT,MESS1); !
! MOVE(ABSCORE^,MESS2,OUT^,0,MESS1); !
80: SENDOK;
GOTO 100;
END;
«ff»
! RC36-01047 PAGE 14 !
290:
IF LABELCHECK = FALSE THEN
BEGIN
IF NEXTDATASET > 0 THEN ! ERROR OCCURED DURING SWITCH !
BEGIN ! TO NEXT DATASET !
CHECKLABEL;
GOTO 290;
END;
GOTO 110;
END;
IF MESS1 < SIZE THEN GOTO 65; ! BLOCK LENGTH ERROR !
300: ! AS ACCEPT OF ERROR !
GETREC(IN,MESS1);
IF SWDELET <> 0 THEN
BEGIN
SWDELET:= 0;
ZBLOK:= IN.ZBLOCK;
TRANSFER(IN,UNIT*256,-2);
WAITTRANSFER(IN);
DELCOUNT:= IN.ZBLOCK;
IN.ZBLOCK:= ZBLOK;
END;
IF IN.ZBLOCK +DELCOUNT > EOD THEN
BEGIN
IF DELCOUNT > 0 THEN
BEGIN
OPMESS(ANTDEL);
BINDEC(DELCOUNT,OPSTRING); OPMESS(OPSTRING);
OPMESS(ENDLIN);
END;
! ENTRY FOR EOF OR END MEDIUM !
SWDELET:= 0;
HELP2:=IN.ZBLOCK+DELCOUNT;
IF MESS1>128 THEN
BEGIN
HELP1:=MESS1-128*(HELP2-EOD);
MOVE(IN^,0,ABSCORE^,MESS2,MESS1);
END;
210: IF NEXTDATASET>0 THEN
BEGIN
LABELCHECK:=FALSE;
CHECKLABEL;
IF LABELCHECK=TRUE THEN
BEGIN
IF MESS1>128 THEN
BEGIN
L1:=BOE/26;
L2:=BOE-L1*26;
L2:=L2+HELP1/128;
IF L2>26 THEN
BEGIN
L1:=L1+1;
L2:=L2-26;
END;
BOE:=L1*26+L2;
SETPOSITION(IN,TRACKREL,BOE);
ANSW0:=0; ANSW1:=MESS1;
GOTO 100;
END ELSE
BEGIN
CHECKSIZE;
GOTO 300;
END;
END;
END;
ANSW1:=0;
REJECT:=B7;
IF SEQUENCE > 0 THEN ANSW0:=B11 ELSE ANSW0:=B7;
IF HELP1>0 THEN
BEGIN
ANSW1:=HELP1; HELP1:=0;
END;
DELCOUNT:= 0;
GOTO 100;
END;
MOVE(IN^,0,ABSCORE^,MESS2,MESS1);
ANSW0:=0; ANSW1:=MESS1;
100:
ANSW3:=IN.ZBLOCK-BOE+1; ! RELATIVE POSITION !
P0040(ANSW0,BUF);
GOTO 0;
110:
NEXTDATASET:=0;
SETREJECT;
GOTO 100;
END;
«ff»
«nul»