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

⟦f639cbdb7⟧ TextFile

    Length: 21504 (0x5400)
    Types: TextFile
    Names: »S8820«

Derivation

└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
    └─⟦this⟧ 

TextFile


!                                                820/840
                                                 AUTHOR: ME
					         EDITED: 79.12.10.






















                        PROGRAM RC36-820/840-01

                        LABELLED MULTI-FILE TAPE TO
                        LABELLED SINGLE-FILE TAPE WITH LOG.















KEYWORDS:       MUSIL,CONVERTION,MT0,MT1,SP,LISTING.

ABSTRACT:         THIS PROGRAM HANDLES LABELLED MULTI-FILE TAPES WITH
		  A MAXIMUM BLOCKSIZE OF 2000 BYTES, EACH BLOCK CON-
		  SISTING OF FIXED LENGTH RECORDS WITH EBCDIC CODE DATA.
		  ONE INPUT RECORD IS ONE BLOCK ON THE OUTPUT-MAGNETIC TAPE.
		  THE OUTPUT-MAGNETIC TAPE WILL ONLY CONTAIN ONE DATASET.
		  A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON 
		  SERIAL PRINTER.
		  THE PROGRAM MUST BE OPERATED FROM TTY.                     !

«ff»

!OUTPUT MESSAGE:

      PROG NO: 820/840   PROGRAM EXECUTION CAN START

      RUNNING:       PROGRAM EXECUTION IS STARTED.
      
      SUSPENDED:     DRIVERS REALEASED PROGRAM EXECUTION IS STOPPED.

      MOUNT DATA TAPE MT UNIT IS NOT ON-LINE.

      MT ERROR NNNNN  CONSULT THE RC3600 OPERATORS MANUAL.

      SP ERROR NNNNN  CONSULT THE RC3600 OPRATORS MANUAL.

      END JOB         PROGRAM EXECUTION IS TERMINATED.

      DATASET NO:     DATASET NUMBER TO BE READ FROM INPUT TAPE.
	
 	MOUNT 600 FT OUTPUT TAPE VOLNO:
		        MOUNT 600 FT TAPE ON MT-UNIT 1.
	MOUNT 1200 FT OUTPUT TAPE VOLNO:
			MOUNT 1200 FT TAPE ON MT-UNIT 1.

      END OF DATASET IDENT -NO:
		      OUTPUT TAPE REWINDING.

     MOUNT NEXT INPUT TAPE:
		      INPUT-DATA IS CONTINUED ON THE NEXT INPUT TAPE.

      MOUNT LABEL INPUT-TAPE
		      THE INPUT-TAPE HAS NO VOL1 LABEL.

      HDRLABEL ON INPUT-TAPE MISSING
		      THE DATASET HAS NO HDR1 LABEL.

      WRONG MT-TAPE / UDKODE CONFLICT
		      HDR1 CONTAINS WRONG INFORMATION /NOT TAPE CONVERSION.

      OUTPUT TAPE INVALID / TAPE TO SHORT
		      OUTPUT TAPE TO SHORT FOR THE INFORMATION.

     CHANGE OUTPUT TAPE
		      END OF TAPE REACHED MOUNT NEXT.

      INPUT TAPE- FILE ENDS ILLEGAL
		      INPUT FILE DOES NOT END WITH EOF1 OR EOV1.

      BLOCKNO ERROR / INPUT TAPE INVALID
		      INFORMATION IN EOF1 OR VOL1 ABOUT NUMBERS OF BLOCKS
		       IS NOT THE SAME AS WE HAVE READ.
!
«ff»

!INPUT MESSAGE:

         STOP            STOPS THE PROGRAM.

         SUSPEND	 STOPS PROGRAM EXECUTION RELEASING DRIVERS.

          LOG		 LOG IS OUTPUT ON SERIAL PRINTER.

	 START		 PROGRAM EXECUTION IS STARTED.



DESCRIPTION OF THE LOG:

         THE LOG CONTAINS A HEADLINE DESCRIBING INPUT AND OUTPUT
	 MEDIUM (DRIVERS NAMES), DATE AND TIME.
	
	 THE "TOTAL STATISTICS FOR JOB" CONTAIN THE TOTAL AMOUNT
 	 OF RECORDS/BLOCKS HAVING BEEN READ/WRITTEN.

	THE "JOB STATUS" DESCRIBES THE ACTUA; 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.
	SUSPEND		THE JOB IS TERMINATED BY THE SUSPEND COMMAND.

!
«ff»
                                                   !RC36-820/840 PAGE 01 !

CONST
    STARTTXT=		'<10>PROG NR 820/840  <13><0>',
    RUNTXT=		'<10>RUNNING<13>',
    LPTXT=		'SP ERROR',
    MT1TXT=		'<7><10>MT1 ERROR   ',
    MT0TXT=		'<7><10>MT0 ERROR   ',
    DATASETNR=		'<10><10>DATASET NO:  ',
    EODTXT=		'<10>END OF DATASET IDENTNO: ',
    MT600TAPE=	        '<10>MOUNT 600 FT OUTPUT TAPE VOLNO: ',
    MT1200TAPE=		'<10>MOUNT 1200 FT OUTPUT TAPE VOLNO:',
    MOUNTTXT=		'<10>MOUNT LABEL INPUT- TAPE<13><0>',
    WRONGMT=		'<10>WRONG MT-TAPE / UDKODE CONFLICT <13><0>',


    MT1MOUNTTAPE=	'<10>MOUNT OUTPUT DATA TAPE <13><0>',
    MT0NEXTIN=		'<7><10>MOUNT NEXT INPUT TAPE<13><0>',
    MT0MOUNTTAPE=	 '<10>MOUNT INPUT DATA TAPE <13><0>',
    HDRMIS=		'<10>HDRLABEL ON INPUT TAPE MISSING <13><0>',
    TAPEFORKORT=	'<10>OUTPUT TAPE INVALID / TAPE SHORT <13><0>',
    CHANGETAPE=		'<10>CHANGE OUTPUT TAPE <13><0>',
    SUSTXT=		'<7><10>SUSPENDED <13><0>',
    EOFERROR=		'<14><7><10>INPUT TAPE- FILE ENDS ILLEGAL<13><0>',
    BLKERROR=		'<10>BLOKNO ERROR / INPUT TAPE INVALID <13><0>',
    EOJ=		'<14><7><10>END JOB <13><0>',


    UB=			1,
    U=                  0,
    F=                  2,
    TRUE=		-1,
    SUSPEND=	        'SUSPEND',
    INITINF=  	        '<0><0><0><0><0><0><0><0><0><0>',
     
    INITDATASET=	'<194><244><246><246><240><242><241>',
    EOF1=	        '<197><214><198><241>',
    VOL1=	        '<229><214><211><241>',
    HDR1=	        '<200><196><217><241>',
    EOV1=	        '<197><214><229><241>',

    VOL=
    'VOL1                                                                           1',
    HDR=
    'HDR1                       00010001    00             000000                    ',
    ENDLINE=		'<13><0>',
    KD820=	        '<248><242><240>',
    KD840=	        '<248><244><240>',



    LPTNAME=	        'SP<0><0>',
    LOGCMMD=	        'LOG',
    NEWL=	        '<10><10>',
    LOGHEAD= 	        '** MT UNIT 0  TO MT UNIT 1  ** DATE ........ TIME ....... <10>',
    STATHEAD=	        '<10> TOTAL STATISTICS FOR JOB <10><10>',
    PTEXT2=	        'DATASET    ...   BLOCKS READ     .....<10>',
    PTEXT1=	        'OUTTAPE    ...   REC WRITTEN     .....<10>',

    STATUSHEAD=	'<10>JOB STATUS:  ',
    INITTEXT=		'NOT STARTED',
    RUNTEXT=		'RUNNING',
    STOPTEXT=		'STOPPED',
    SUSTEXT=		'SUSPENDED',
    EOJTEXT=		'END OF JOB',
    ERRTEXT=		'I/O ERROR  .....',
    LPTTXT=		'SP ERROR ',

    RUNNI=		2,
    PSTOP=		3,
    PSUSP=		4,
    PEOJ=		5,
    IOERROR=		6,
    
	
    START=	        'START',
    STOP=	        'STOP',

«ff»
                                                   !RC36-820/840 PAGE 02 !

        ! ASCII TO EBCDIC CONVERSION TABLE: !
    AETAB= ! 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
#,


	! 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-820/840 PAGE 03 !
VAR
    BLOKLNG:	INTEGER;
    SW25:	INTEGER;
    RECTOTAL:	INTEGER;
    BLOKTOTAL:  INTEGER;
    IBLOCKNO:   INTEGER;
    OBLOCKNO:   INTEGER;
    OFILENO:	INTEGER;
    IFILENO:	INTEGER;
    INITPSW:    INTEGER;
    PSTATE:	INTEGER;
	
    DATASET:	INTEGER;
    SIZE:	INTEGER;
	
    INBLOK:	INTEGER;
    FT:		INTEGER;
    STOPPED:	INTEGER;
    ERRORNO:	INTEGER;
    LENGTH:	INTEGER;
    OUTNO:	INTEGER;
    MASK:	INTEGER;
    LOGBLOCKNO: INTEGER;
    LOGDATASET: INTEGER;
    LASTBLKNO:   INTEGER;

    GEMDATASET:	INTEGER;
    SETFIRST:	INTEGER;
    EOT:	INTEGER;
    VOLTL:	INTEGER;
    BINIDET:	INTEGER;
    SWEOVI:	INTEGER;
    SWEOV:	INTEGER;
    RECTL:	INTEGER;
    TAPENO:	INTEGER;

    TAPETL:	INTEGER;
    LAESTBLK:	INTEGER;
    MAXBLOK:	INTEGER;
    STARTNO:	INTEGER;
    SMANT:	INTEGER;

    IBLKANT:	STRING(5);
    NR:		STRING(6);
    TAPE:	STRING(3);
    UDVOLNR:	STRING(6);
	
    OTAPENO:    STRING(6);
    UDVOLNR1:	STRING(6);
    BLKNO:	STRING(6);
    GLDGNR:     STRING(6);
    BLLENGTH:  	STRING(6);
    REMSIZE:	STRING(6);
    BLOKNO:	STRING(6);
    ANSW:	STRING(6);
    HDR1LABEL:  STRING(80);
    BLOKNR:     STRING(6);
    VOLID:	STRING(7);
    UDIDENT:	STRING(5);
    OPTEXT:	STRING(20);
    OPSTRING:	STRING(20);

    NEXTLP:	INTEGER;
 
    LDATE:	STRING(8);
    LHELP:	STRING(6);
    UDSIZE1:	STRING(6);

«ff»
                                                 !RC36-820/840 PAGE 04 !



 MTR:	RECORD
	DATA:	STRING(80);
	DGNR:	STRING(6)  FROM 4;
	NNN:	STRING(3)  FROM 7;
  	ANT:	STRING(2)  FROM 10;
	UDKODE: STRING(3)  FROM 14;
 	IDENT:	STRING(4)  FROM 17;
	DATE:	STRING(12) FROM 42
 END;


IN: FILE 'MT0',14,1,2000,U;
    GIVEUP MTINERROR,2'0110001111111110
    OF STRING(80);
 
OUT: FILE 'MT1',14,2,80,F;
    GIVEUP MTOUTERROR,2'0110011111111110
    OF STRING(80);

 LOG: FILE 'SP',1,1,80,U;
        GIVEUP LOGERROR,2'1100001011110110
        OF STRING (80);

«ff»
						   !RC36-820/840 PAGE 05 !

	PROCEDURE GETTIME (VAR TIME: STRING(8));
	CODEBODY P0149;


	PROCEDURE GETLDATE (VAR DATE: STRING(8));
	CODEBODY P0150;

	PROCEDURE PRINTLOG;
	BEGIN

	  LOG.ZNAME:= LPTNAME;
	  OPEN(LOG,3);
	  OUTTEXT(LOG,NEWL);
	  GETLDATE(LDATE);
	  MOVE(LDATE,0,LOGHEAD,36,8);
	  GETTIME(LDATE);
	  MOVE(LDATE,0,LOGHEAD,50,8);
	  OUTTEXT(LOG,LOGHEAD);
	  BINDEC(OUTNO,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);

	  OUTTEXT(LOG,STATUSHEAD);
	  IF PSTATE = 1 THEN OUTTEXT(LOG,INITTEXT);
	  IF PSTATE = RUNNI  THEN OUTTEXT(LOG,RUNTEXT);
	  IF PSTATE = PSTOP  THEN OUTTEXT(LOG,STOPTEXT);
	  IF PSTATE = PSUSP  THEN OUTTEXT(LOG,SUSTEXT);
	  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-820/840 PAGE 05A !
	
 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 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 70;
		SW25:= 1;
		  GOTO 40;
	  END;
	  IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MT0MOUNTTAPE);
	  IF IN.Z0 SHIFT 1 > 0  THEN
	  BEGIN
		OPMESS(MT0TXT);
		MASK:= IN.Z0;
		SHOWERROR;
		PSTATE:= IOERROR;
		
	  END;
	  IF IN.Z0 <> 0  THEN
	  BEGIN
 215:
		REPEAT OPSTOP UNTIL STOPPED <> 0;
		IF STOPPED = 1  THEN GOTO 215;
		IF STOPPED = 3  THEN GOTO 50;
		OPMESS(RUNTXT);
	END;
	END;

«ff»

                                                 !RC36-820/840 PAGE 06 !
	PROCEDURE MTOUTERROR;
	
	BEGIN
	  IF OUT.Z0 AND 8'000020 <> 0  THEN  EOT:= TRUE;
	  OUT.Z0:= OUT.Z0 AND 8'177757;
	  IF OUT.Z0 SHIFT 1 < 0  THEN OPMESS(MT1MOUNTTAPE);
	  IF OUT.Z0 SHIFT 1 > 0 THEN
	  BEGIN
		OPMESS(MT1TXT);
		MASK:= OUT.Z0;
		SHOWERROR;
		PSTATE:= IOERROR;
	  END;
	  IF OUT.Z0 <> 0  THEN
	  BEGIN
 300:
		REPEAT OPSTOP UNTIL STOPPED <> 0;
		IF STOPPED = 1  THEN GOTO 300;
		IF STOPPED = 3  THEN GOTO 50;
		OPMESS(RUNTXT);
		IF OUT.Z0 AND 8'063352 <> 0  THEN
		REPEATSHARE(OUT);
	  END;
	END;



	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;
	  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(LPTXT);
		MASK:= LOG.Z0;
		SHOWERROR;
		NEXTLP:= 0;
 415:
		OPWAIT(LENGTH);
		OPTEXT:= OPSTRING;
		OPIN(OPSTRING);
		IF OPTEXT = START  THEN
		BEGIN
			IF LOG.Z0 AND 8'141342 <> 0  THEN
			REPEATSHARE(LOG);
		END ELSE
		GOTO 415;
	  END;
	END;

«ff»
					            !RC36-820/840 PAGE 07 !

    PROCEDURE INITTXT;
	BEGIN
	  OPMESS(STARTTXT);
		
	  GEMDATASET:= DATASET;
500:
	  BINDEC(DATASET,ANSW);
	  OPMESS(DATASETNR); OPMESS(ANSW);
	  OPMESS(ENDLINE);
	  OPIN(NR);
	  OPWAIT(LENGTH);
	  IF NR = START  THEN GOTO 510;
	  IF NR= SUSPEND  THEN GOTO 50;
	  DECBIN(NR,DATASET);
	  GOTO 500;
 510:
	  OPMESS(RUNTXT);
	  IF GEMDATASET <> DATASET  THEN LOGDATASET:= DATASET + SETFIRST;
	END;


    PROCEDURE INITPOSITION;
	BEGIN
	
 600:
	  IF IN.ZMODE = 0  THEN
	  BEGIN
	  OPEN(IN,1);
	  IF DATASET > 1  THEN GOTO 625;
	  SETPOSITION(IN,1,1);
	  GETREC(IN,SIZE);
	  IF IN^ <> VOL1  THEN
	  BEGIN
		OPMESS(MOUNTTXT);

 610:
		CLOSE(IN,TRUE);
		GOTO 640;
	  END;
	  INBLOK:= 2;
	  IF DATASET > 1  THEN 
	  BEGIN
	
 625:
		INBLOK:= 1;
		IFILENO:= (DATASET-1)*3+1;
	  END;
	  SETPOSITION(IN,IFILENO,INBLOK);
	  INITPSW:= 1;
	  GETREC(IN,SIZE);
	  INITPSW:= 0;
	  IF IN^ <> HDR1  THEN
	  BEGIN
		OPMESS(HDRMIS);
		GOTO 610;
	  END;
	  MOVE(IN^,1,MTR,0,80);
	  IF MTR.UDKODE <> KD820  THEN
	  IF MTR.UDKODE <> KD840 THEN
	  BEGIN
		OPMESS(WRONGMT);
		GOTO 610;
	  END;
	  IF MTR.DGNR =GLDGNR THEN 
	  BEGIN
		SETFIRST:= SETFIRST-1;
		GOTO 635;
	END;
 630:
	  VOLID:= INITINF;
	  UDIDENT:= INITINF;
	  CONVERT(MTR.DGNR,VOLID,EATAB,6);
	  IF MTR.UDKODE = KD820  THEN OPMESS(MT600TAPE);
	  IF MTR.UDKODE = KD840  THEN
	  BEGIN
		MAXBLOK:= MAXBLOK+ 7000;
		OPMESS(MT1200TAPE);
	  END;
	  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 50;

	  CONVERT(MTR.IDENT,UDIDENT,EATAB,4);
	  CONVERT(MTR.ANT,TAPE,EATAB,2);
	  MOVE(VOLID,3,UDVOLNR,0,3);
	  DECBIN(UDVOLNR,VOLTL);
	  BINIDET:= VOLTL;
 635:
	  IFILENO:= IFILENO+1;
	  INBLOK:= 1;
	  CLOSE(IN,0);
	  IN.ZFORM:= UB;
	  OPEN(IN,1);
	  GOTO 650;
640:
	  REPEAT OPSTOP UNTIL STOPPED <> 0;
	  IF STOPPED = 1  THEN GOTO 10;
	  IF STOPPED = 3  THEN GOTO 50;
	  GOTO 600;
	  END;
650:
	SETPOSITION(IN,IFILENO,IBLOCKNO);
    END;
«ff»
						    !RC36-820/840 PAGE 08 !


    PROCEDURE WRITETAPESTART;
	BEGIN
	  IF OUT.ZMODE <> 0  THEN GOTO 700;
	  OUT.ZFORM:= UB;



	  OPEN(OUT,3);
	  SETPOSITION(OUT,1,1);
	  PUTREC(OUT,80);
	  CONVERT(VOL,OUT^,AETAB,80);
	  MOVE(MTR.DGNR,0,OUT^,4,6);
	  CLOSE(OUT,0);
	 
	  SETPOSITION(OUT,1,2);
	  OPEN(OUT,3);
	  PUTREC(OUT,80);
	  CONVERT(HDR,OUT^,AETAB,80);
	  MOVE(INITDATASET,0,OUT^,4,7);
	  MOVE(MTR.IDENT,0,OUT^,17,4);
	  MOVE(MTR.DGNR,0,OUT^,21,6);
	  MOVE(MTR.DATE,0,OUT^,42,12);
	  IF OUTNO > 1  THEN
	  BEGIN
		BINDEC(OUTNO,NR);
		 CONVERT(NR,OTAPENO,AETAB,6);
		MOVE(OTAPENO,1,OUT^,27,4);
	  END;

	  HDR1LABEL:= OUT^;
	  CLOSE(OUT,0);
	  OFILENO:= 2;
	  OUT.ZFORM:= F;
	  SETPOSITION(OUT,OFILENO,1);
	  OPEN(OUT,3);
 700:
	END;
«ff»
                                                 !RC36-820/840 PAGE 09 !

	
    PROCEDURE INITMTIN;
	BEGIN
	  IN.ZBLOCK:= 1;
	  IFILENO:= 1;
	  IBLOCKNO:=1;
	END;



	PROCEDURE SLINTAPE;

	  
	  BEGIN
		IBLKANT:= INITINF;
		BLOKNR:= INITINF;
		MOVE(IN^,55,IBLKANT,0,5);
		SW25:= 0;
		CONVERT(IBLKANT,BLOKNR,EATAB,6);
		DECBIN(BLOKNR,SMANT);
		IF SMANT <> IBLOCKNO-1  THEN
		BEGIN
			OPMESS(BLKERROR);
			GOTO 50;
		END;
	  END;

«ff»
                                                  !RC36-820/840 PAGE 10 !

	PROCEDURE AFSLTTAPE;
	
	BEGIN
	  IF SW25 = 1  THEN
	  BEGIN
		CLOSE(IN,0);
		IFILENO:= IFILENO +1;
		IN.ZFORM:= U;
		SETPOSITION(IN,IFILENO,1);
		IN.ZFORM:= U;
		OPEN(IN,1);
		GETREC(IN,SIZE);
		IF IN^ <> EOF1  THEN
		IF IN^ <> EOV1  THEN SWEOVI:=1;
		SLINTAPE;
		IF IN^ = EOF1  THEN GOTO 825;
		CLOSE(IN,1);
 810:
		OPMESS(MT0NEXTIN);
		REPEAT OPSTOP UNTIL STOPPED <> 0;
		IF STOPPED = 1  THEN GOTO 810;
		IF STOPPED = 3  THEN GOTO 50;
		LASTBLKNO:= IBLOCKNO-1;
		SETFIRST:= DATASET;
		GLDGNR:= MTR.DGNR;
		DATASET:=0;
		GOTO 875;
	  END;
 825:

	  CLOSE(OUT,0);
	  OBLOCKNO:= OUT.ZBLOCK;
	  OUT.ZFORM:= 0;
	  OPEN(OUT,3);
		
	  TAPETL:= TAPETL+1;
	  SETPOSITION(OUT,3,1);
	  BLOKNR:= INITINF;
	  PUTREC(OUT,80);
	  BINDEC(OBLOCKNO-1,BLKNO);
	  CONVERT(BLKNO,BLOKNR,AETAB,6);
	  MOVE(BLOKNR,0,HDR1LABEL,55,6);
	  IF SWEOV = 1 THEN
	  BEGIN
		MOVE(EOV1,0,HDR1LABEL,0,4);
		SWEOV:= 0;
	 	 GOTO 850;
	  END;
	  MOVE(EOF1,0,HDR1LABEL,0,4);
	  OPMESS(EODTXT);  OPMESS(UDIDENT);
	  OPMESS(ENDLINE);
	
    850:
	  OUT^:= HDR1LABEL;
	  CLOSE(OUT,1);
 875:
	  IF SWEOVI = 1  THEN
	  BEGIN
		OPMESS(EOFERROR);
		SWEOVI:= 0;
		GOTO 50;
	  END;
	END;
«ff»
					            !RC36-820/840 PAGE 11 !

BEGIN
	LOGDATASET:=1; VOLID:=INITINF; LASTBLKNO:=0;
	SIZE:=80; GLDGNR:=INITINF; OUT.ZFORM:=UB;
	ANSW:=INITINF; MAXBLOK:=9000; OUTNO:=1;
	SWEOV:=0; INITPSW:=0; DATASET:=1; LOGBLOCKNO:=1;
    RECTOTAL:=0; PSTATE:=1; RECTL:=1; SW25:=0; SETFIRST:=0;
	SWEOVI:=0; OPTEXT:=INITINF; 

	INITMTIN;
10:
	INITTXT;
	OPIN(OPSTRING);
    20:
	INITPOSITION;
	WRITETAPESTART;
 25:	REPEAT
	GETREC(IN,SIZE);
	IBLOCKNO:= IN.ZBLOCK;
	LOGBLOCKNO:= IBLOCKNO + LASTBLKNO;
	PSTATE:= RUNNI;
	PUTREC(OUT,SIZE);
	MOVE(IN^,0,OUT^,0,SIZE);
	RECTOTAL:=RECTOTAL+1;
	IF EOT = TRUE  THEN
	BEGIN
		OPMESS(TAPEFORKORT);
		GOTO 50;
	END;
	IF RECTOTAL>= MAXBLOK  THEN
	BEGIN
		SWEOV:= 1;
		AFSLTTAPE;
		OPMESS(CHANGETAPE);
		VOLTL:= VOLTL+1;
		BINDEC(VOLTL,UDVOLNR1);
		MOVE(UDVOLNR1,2,VOLID,3,3);
 35:
		IF MTR.UDKODE = KD820  THEN OPMESS(MT600TAPE);
		IF MTR.UDKODE = KD840  THEN OPMESS(MT1200TAPE);
		 OPMESS(VOLID); OPMESS(ENDLINE);
		REPEAT OPSTOP UNTIL STOPPED <> 0;
		IF STOPPED = 1  THEN GOTO 35;
		IF STOPPED  = 3  THEN GOTO 50;
		OPMESS (RUNTXT);
		OUTNO:= OUTNO+1;
		MAXBLOK:= MAXBLOK+ RECTOTAL;
		 CONVERT(VOLID,MTR.DGNR,AETAB,6);
		WRITETAPESTART;
	END

	UNTIL OPTEST <> 0;
	OPSTOP;
	IF STOPPED = 1  THEN 
	BEGIN
		PSTATE:= PSTOP;
		GOTO 10;
	END;
	IF STOPPED = 3  THEN GOTO 50;
	OPMESS(RUNTXT);
	GOTO 25;

    40:
	AFSLTTAPE;
	CLOSE(IN,0);
	IF DATASET= 0  THEN 
	BEGIN
		INITMTIN;
		DATASET:= 1;
		GOTO 20;
	END;
 45:
	PRINTLOG;
	IBLOCKNO:= 1;
	LOGBLOCKNO:= IBLOCKNO;
	OBLOCKNO:= 1;
	ANSW:= INITINF;
 	OUTNO:= 1;
	LASTBLKNO:= 0;
	RECTOTAL:= 0;
	IN.ZFORM:= U;
	IFILENO:= 1;
	MAXBLOK:= 9000;
	DATASET:= DATASET+1;
	LOGDATASET:= LOGDATASET+1;
	REPEAT OPSTOP UNTIL STOPPED <> 0;
	IF STOPPED = 1 THEN GOTO 10;
	IF STOPPED = 3 THEN GOTO 50;
	OPMESS(RUNTXT);
	GOTO 20;
    50:
	OUT.ZMODE:= 0;
	CLOSE(IN,1);
	CLOSE(OUT,1);
	PSTATE:= PSUSP;
	OPMESS(SUSTXT);
	GOTO 45;
	
  70:
	CLOSE(IN,1);
	PSTATE:= PEOJ;
	PRINTLOG;
	 OPMESS(EOJ);
  	END;
«ff»
«ff»
«nul»