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

⟦1fede82ae⟧ TextFile

    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: »S7982«

Derivation

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

TextFile

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