DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC3600/RC7000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC3600/RC7000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦7dfcfc3da⟧ TextFile

    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«

Derivation

└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
    └─ ⟦this⟧ »/G1047« 

TextFile

!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»