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

⟦79131bbf2⟧ TextFile

    Length: 27648 (0x6c00)
    Types: TextFile
    Notes: RCSL-43-GL-8480, RCSL-43-GL-8481, RCSL-43-GL-8482
    Names: »S1048«

Derivation

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

TextFile

S1048!						RCSL:	43-GL8481

						AUTHOR:	PBP

						EDITED:	79.02.05
























			PROGRAM RC36-1048.01

			IBM LABEL PRINT IMAGE













KEYWORDS:	MUSIL,CONVERSION,MTA,SP,LISTING

ABSTRACT:	THIS PROGRAM HANDLES IBM LABELLED TAPES WITH A
		MAXIMUM BLOCK SIZE OF 4000 BYTES, EACH BLOCK
		CONSISTING OF FIXED OR VARIABLE OR UNDEFINED LENGTH
		RECORDS WITH CCCW OR ANSI CONTROL CHARACTERS AND EBCDIC
		CODE DATA.
		OUTPUT ON SERIAL PRINTER.
	        IF ONE RECORD IS GREATER THAN ONE PRINTLINE
	        THE REST OF THE RECORD IS PRINTED ON SUBSEQUENT LINES.
		TAPES WITH UNDEFINED FORMAT IS PRINTED WITH ONE
		RECORD = ONE BLOCK.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

RCSL 43-GL8480:	ASCII SOURCE TAPE       
RCSL 43-GL8482: REL/BIN	!	


«ff»
!				RC36-01048 PAGE 1


TITLE:		IBM LABEL PRINT IMAGE

ABSTRACT:	THIS PROGRAM HANDLES IBM LABELLED TAPES WITH A
		MAXIMUM BLOCK SIZE OF 4000 BYTES, EACH BLOCK CONSISTING
		OF FIXED OR VARIABLE OR UNDEFINED LENGTH RECORDS
		WITH CCW OR ANSI CONTROL CHARACTERS AND EBCDIC CODE
		DATA. OUTPUT ON SERIAL PRINTER.
	        IF ONE RECORD IS GREATER THAN ONE PRINTLINE
		THE REST OF THE RECORD IS PRINTED ON SUBSEQUENT LINES.
		TAPES WITH UNDEFINED FORMAT IS PRINTED WITH ONE
		RECORD = ONE BLOCK.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

SIZE:		10376 BYTES. INCLUDING ONE 4000 BYTES INPUT BUFFER AND     
		THREE 133 BYTES OUTPUT BUFFERS.
      
DATE:		79.02.05

RUNTIME PARAMETERS:

    MT UNIT  : 00000	SELECT MT UNIT
    BLOCK NO : 00001	NEXT BLOCK TO BE READ FROM CURRENT DATASET.
    DATASET  : 00001	THE DATASET FROM WHICH THE BLOCK IS READ.
    REWIND   :   +	INDICATES IF REWIND AT END OF DATASET.
    MARGIN   : 00000	SPACES TO THE LEFT OF THE PRINT LINE.
    SELECT   : 00999	DEFAULT CCW, SELECT MODE AND VALUE.
	       10999	OPERATOR SPECIFIED DEFAULT SP1A CONTROL.
	       20999	OPERATOR SPECIFIED CCW CONTROL.
	       30999	OPERATOR SPECIFIED ANSI CONTROL.
    PAGLENGTH: 00000	IF THIS PARAMETER IS DIFFERENT FROM ZERO,
			A PAGESHIFT IS PERFORMED AFTER PAGLENGTH
			PRINTED LINES WHEN ONE OF THE FOLLOWING
			CONDITIONS HOLDS:
			(1) SELECT=00999 AND CCW IN LABEL=SPACE.
			(2) SELECT=10999
    L-PRINT  :   -	INDICATES IF HEADER LABEL SHOULD BE PRINTED.

«ff»
					RC36-01048 PAGE 2
OTHER OUTPUT MESSAGES:

    MOUNT VSN AAAAAA	WRONG DATASET REEL MOUNTED.
    MOUNT REEL NNNNN	MULTI VOLUME DATASET OR WRONG REEL MOUNTED.
    DATASET ACCEPTED	LABEL CONTENT PROCESSED AND ACCEPTED.
    RECORDTYPE ERROR	RECORD FORMAT NEITHER F NOR V.
    BLOCKSIZE ERROR	BLOCK GREATER THAN 512 BYTES.
    CCW TYPE ERROR	CCW NEITHER A NOR M NOR SPACE.
    ATTRIBUTE ERROR	NEITHER BLOCKED NOR UNDEFINED RECORDS.
    SELECT  ERROR	ILLEGAL VALUE FOR SELECT.
    CONTSTATE:  +/-	STATE OF CONTINUE SWITCH (TTY ONLY).
    PROG NO  :   1048 	PROGRAM EXECUTION IS STOPPED.
    RUNNING		PROGRAM EXECUTION IS STARTED.
    SUSPENDED		DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED.
    MOUNT DATA TAPE	MT-UNIT IS NOT ON-LINE.
    LP ERROR   NNNNN	CONSULT THE RC3600 OPERATOR MANUAL.
    MT ERROR   NNNNN    CONSULT THE RC3600 OPERATOR MANUAL.
    END JOB		PROGRAM EXECUTION IS TERMINATED.

INPUT MESSAGES:

    STOP		STOPS EXECUTION WRITING PROG NO  :    1048.
    SUSPEND		STOPS EXECUTION 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 PAPAMETER IS CHANGED
			TO "VALUE".
    "TEXT"="VALUE"	THE PARAMETER IDENTIFIED BY "TEXT" IS
			CHANGED TO "VALUE".
    CONT		STATE OF CONTINUE SWITCH IS INVERTED.
    START		PROGRAM EXECUTION IS STARTED.
			NOTE: AFTER MT ERROR START MEANS ACCEPTING
			THE ERRONEOUS INPUT, AFTER LP ERROR START
			MEANS REPEATING THE PRINT OPERATION.

SPECIAL REQUIREMENTS:	NONE.					!



«ff»
						! RC36-01048 PAGE 03 !
CONST

NOQ=		9,

OPTXTS=
'<14><6>
<10>PROG NO  : 1048<0>
<10>MT UNIT  : <0>
<10>BLOCK NO : <0>
<10>DATASET  : <0>
<10>REWIND   :   <0>
<10>SELECT   : <0>
<10>MARGIN   : <0>
<10>PAGLENGTH: <0>
<10>L-PRINT  :   <0>',

LABTXTS='
<14><7><10>DATASET ACCEPTED<13><0>
<14><7><10>RECORDTYPE ERROR<13><0>
<14><7><10>BLOCKSIZE ERROR <13><0>
<14><7><10>CCW TYPE ERROR  <13><0>
<14><7><10>ATTRIBUTE ERROR <13><0>',

START=		'START',
STOP=		'STOP',
SUSPEND=	'SUSPEND',
CONT=		'CONT',
INT=		'INT',
STATE=		'STATE',
MINUS=		'-',
PLUS=		'+',
FIVE=		'<5><0>',
FIFTEEN=	'<15><0>',
NL=		'<10>',
NEXTPARAM=	'<27>',
SP1A=		'<9>',
SP2A=		'<17>',
SK1A=		'<137>',
ENDLINE=	'<13><0>',
RETURN=		'<13>',

«ff»
						! RC36-01048 PAGE 04 !

RUNTXT=		'<8><4><10>RUNNING<13><0>',
MTTXT=		'<7><10>MT ERROR   ',
LPTXT=		'<7><10>LP ERROR   ',
SELECTER=	'<14><7><10>SELECT ERROR<13><0>',
EOJTXT=		'<14><7><10>END JOB<13><0>',
SUSTXT=		'<7><10>SUSPENDED<13><0>',
MTMOUNTTAPE=	'<14><7><10>MOUNT DATA TAPE<13><0>',
MOUNTVSN=	'<14><7><10>MOUNT VSN ',
MOUNTREEL=	'<14><7><10>MOUNT REEL  ',
A=		'<193>',
B=		'<194>',
F=		'<198>',
M=		'<212>',
U=		'<228>',
V=		'<229>',
SPACE=		'<64>',
REEL1=		'<240><240><240><241>',
R133=		'<240><240><241><243><243>',
VOL1=		'<229><214><211><241>',
HDR1=		'<200><196><217><241>',
HDR2=		'<200><196><217><242>',
EOF1=		'<197><214><198><241>',
EOF2=		'<197><214><198><242>',
EOV1=		'<197><214><229><241>',
EOV2=		'<197><214><229><242>',
CONTSTATE=	'<10>CONTSTATE:   <0>',



«ff»
                                                !RC36-01048 PAGE 05 !

LPTABLE=	! SPECIAL TABLE POST & TELEGRAFVAESNET 
	   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  85
!  80 !   38  32  32  32  32  32  32  32
!  88 !   32  32  33  93  42  41  59  32
!  96 !   45  47  32  32  32  32  32  32
! 104 !   32  32  32  44  37  95  62  63
! 112 !   32  32  32  32  32  32  32  32
! 120 !   32  32  58  91  92  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  32  83  84  85  86  87  88
! 168 !   89  90  32  32  32  32  32  32
! 176 !   32  32  32  32  32  32  32  32
! 184 !   32  32  32  32  32  32  32  32
! 192 !   32  65  66  67  68  69  70  71
! 200 !   72  73  32  32  32  32  32  32
! 208 !   32  74  75  76  77  78  79  80
! 216 !   81  82  32  32  32  32  32  32
! 224 !   32  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
#,



ANSITABLE=	! ANSI TO CCW !
#
 78   7 ! SPACE 0 LINES BEFORE PRINT !
 64  15 !       1                    !
240  23 !       2                    !
 96  31 !       3                    !

241 143 ! SKIP TO CHANNEL  1 BEFORE PRINT !
242 151 !                  2              !
243 159 !                  3              !
244 167 !                  4              !
245 175 !                  5              !
246 183 !                  6              !
239 191 !                  7              !
248 199 !                  8              !
249 207 !                  9              !
193 215 !                 10              !
194 223 !                 11              !
195 231 !                 12              !
  0   0 !                                 !
  0  15 ! SPACE 1 LINE BEFORE PRINT !
#,


«ff»
						! RC36-01048 PAGE 06 !

EBCASC=		! NUMERIC EBCDIC TO NUMERIC ASCII !
#
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  48  48  48  48  48  48  48  48  48  48  48  48  48  48  48
 48  49  50  51  52  53  54  55  56  57  48  48  48  48  48  48
#,

ASCEBC=		! NUMERIC ASCII TO NUMERIC EBCDIC !
#
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 241 242 243 244 245 246 247 248 249 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
#;


«ff»
						! RC36-01048 PAGE 07 !
VAR

OPDUMMY:	STRING(2);	! RUNTIME PARAMETERS !
PROGNO:		INTEGER;
MTUNIT:		INTEGER;
BLOCKNO:	INTEGER;
DATASET:	INTEGER;
REWIND:		INTEGER;
SELECT:		INTEGER;
MARGIN:		INTEGER;
PAGELENGTH:	INTEGER;
LPRINT:		INTEGER;

OPTEXT:		STRING(20);	! COMMUNICATION AREA !
OPSTRING:	STRING(20);
OPDEC:		STRING(10);

OPCONT:		STRING(2);	! INTERNAL VARIABLES !
NEXTCONT:	STRING(1);
GLCONT:		STRING(1);
CURZZZ:		STRING(1);
RECSIZE:	INTEGER;
FILENO:		INTEGER;
SELX:		INTEGER;
SELY:		INTEGER;
SELZZZ:		INTEGER;
DATAINDEX:	INTEGER;
DATALENGTH:	INTEGER;
SELECTINDEX:	INTEGER;
ERRORNO:        INTEGER;
MASK:           INTEGER;
TOM:		INTEGER;
SIGN:		INTEGER;
Q:		INTEGER;
PAR:		INTEGER;
LENGTH:		INTEGER;
RECLENGTH:	INTEGER;
LPLENGTH:	INTEGER;
LPDATALENGTH:	INTEGER;
SDATASET:	INTEGER;
DFILE:		INTEGER;
SFILENO:	INTEGER;
SBLOCKNO:	INTEGER;
REJECT:		INTEGER;
WORKINT:	INTEGER;
WORKSTR:	STRING(8);
NEWVSN:		STRING(6);
NEWDSSN:	STRING(6);
NEWVSEQN:	STRING(4);
NEWRF:		STRING(1);
NEWBL:		STRING(5);
NEWRL:		STRING(5);
NEWCC:		STRING(1);
NEWBA:		STRING(1);
OLDVSEQN:	STRING(4);
OLDVSN:		STRING(6);
P1:		INTEGER;
P2:		INTEGER;
P3:		INTEGER;
S1:		STRING(2);
S2:		STRING(2);
NEXTLP:		INTEGER;
BSIZE:		STRING(6);
LINES:		INTEGER;
«ff»
						! RC36-01048 PAGE 08 !
IN:	FILE			! INPUT FILE DESCRIPTION !
	'MT0',			! NAME OF INPUT DRIVER !
	14,			! KIND=	REPEATABLE, !
				!	POSITIONABLE, !
				!	BLOCKED. !
	1,			! BUFFERS !
	4000,			! SHARESIZE !
	FB;			! FIXED BLOCKED !

	GIVEUP
	MTINERROR,		! MT ERROR PROCEDURE !
	2'0110001111011111	! GIVE UP MASK !

	OF RECORD		! RECORD STRUCTURE !
	   LBLOCK:	STRING(80);
	   CCW:		STRING(1)	FROM 1;
	   SELECT1:	STRING(1)	FROM 1;
	   DATA:	STRING(1)	FROM 1;
	   SELECT2:	STRING(1)	FROM 2;
	   LABEL:	STRING(4)	FROM 1;
	   F5L6:	STRING(6)	FROM 5;
	   F22L6:	STRING(6)	FROM 22;
	   F28L4:	STRING(4)	FROM 28;
	   F5L1:	STRING(1)	FROM 5;
	   F6L5:	STRING(5)	FROM 6;
	   F11L5:	STRING(5)	FROM 11;
	   F37L1:	STRING(1)	FROM 37;
	   F39L1:	STRING(1)	FROM 39
	END;



OUT:	FILE			! OUTPUT FILE DESCRIPTION !
	'SP',			! NAME OF OUTPUT DRIVER !
	2,			! KIND=	BLOCKED !
	3,			! BUFFERS !
	133,			! SHARESIZE !
	U;			! UNDEFINED !

	GIVEUP
	LPERROR,		! LP ERROR PROCEDURE !
	2'1100001011110110;	! GIVE UP MASK !

	CONV
	LPTABLE			! CONVERSION TABLE !

	OF RECORD		! RECORD STRUCTURE !
	   CCW:		STRING(1);
	   DATA:	STRING(1)
	END;


«ff»
						! RC36-01048 PAGE 09 !
	PROCEDURE INITPOSITION;
	BEGIN
100:	    IF IN.ZMODE=0 THEN
	    BEGIN
	      INSERT(48+MTUNIT,IN.ZNAME,2);
	      OPEN(IN,1);
	    END;
	    IF OUT.ZMODE=0 THEN OPEN(OUT,7);
	    IF DATASET=0 THEN BEGIN DATASET:=1; SDATASET:=0; END;
	    IF DATASET<>SDATASET THEN
	    BEGIN
		SDATASET:=DATASET;
		FILENO:=DATASET*3-2;
		BLOCKNO:=1;
	    END;
	    DFILE:=DATASET*3-1;
	    IF DFILE<>FILENO THEN
	    BEGIN
		BLOCKNO:=1;
		IN.ZFORM:=2 !FIXED UNBLOCKED FORMAT!;
		IN.ZLENGTH:=80 !80 BYTE LABEL BLOCKS!;
		IF LPRINT=-1 THEN
		IF FILENO<DFILE THEN
		IF OLDVSEQN=REEL1 THEN
		BEGIN
		    OUTCHAR(OUT,BYTE SK1A);
		    WAITZONE(OUT);
		    LINES:=0;
		END;
	    END;
«ff»
						! RC36-01048 PAGE 10 !

	    IF DFILE=FILENO THEN
	    BEGIN
		CONVERT(NEWRL,WORKSTR,EBCASC,5);
		INSERT(0,WORKSTR,5);
		DECBIN(WORKSTR,RECSIZE);
		IN.ZLENGTH:=RECSIZE;
		IN.ZFORM:=3;
		IF NEWRF=V THEN IN.ZFORM:=5;
	        IF NEWRF=U THEN IN.ZFORM:=0;
	    END;
101:	    SELX:=SELECT/10000;
	    SELY:=(SELECT-SELX*10000)/1000;
	    SELZZZ:=(SELECT-SELX*10000)-SELY*1000;
	    IF SELX<=3 THEN IF SELX>=0 THEN GOTO 102;
	    OPMESS(SELECTER); GOTO 1;
102:	    IF SELX=2 THEN NEWCC:=M;
	    IF SELX=3 THEN NEWCC:=A;
	    IF NEWCC=SPACE THEN SELX:=1;
	    DATAINDEX:=0;
	    IF SELX<>1 THEN DATAINDEX:=1;
	    IF SELZZZ<256 THEN DATAINDEX:=DATAINDEX+1;
	    SELECTINDEX:=DATAINDEX-1;
	    LPLENGTH:=RECSIZE-DATAINDEX+1;
	    IF LPLENGTH+MARGIN>133 THEN LPLENGTH:=133-MARGIN;
	    LPDATALENGTH:=LPLENGTH-1;
	    SETPOSITION(IN,FILENO,BLOCKNO);
	    SETPOSITION(OUT,MARGIN,0);
	END;

	PROCEDURE CONTINUE;
	BEGIN
	    GLCONT:=OPCONT;
	    OPCONT:=NEXTCONT;
	    NEXTCONT:=GLCONT;
	    OPMESS(OPCONT);
	END;


«ff»
						! RC36-01048 PAGE 11 !

	PROCEDURE DIRECTUPDATE;
	BEGIN
	    P1:=0;	! INDEX IN INPUT STRING !
	    P2:=0;	! INDEX IN CONSTANT STRING !
	    P3:=1;	! PARAMETER NUMBER IN CONSTANT STRING !
	    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;


«ff»
						! RC36-01048 PAGE 12 !
	PROCEDURE OPCOM;
	BEGIN
1000:	    Q:=0;
1010:	    REPEAT BEGIN
		IF OPTEXT=STATE THEN
		BEGIN Q:=1; OPMESS(CONTSTATE); IF OPCONT=FIVE THEN
		    OPMESS(PLUS); IF OPCONT=FIFTEEN THEN
		    OPMESS(MINUS); 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 10;
		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 = CONT THEN
		BEGIN CONTINUE; GOTO 1040; END;
		IF OPTEXT = INT THEN GOTO 1060;
		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);
	END;


«ff»
						! RC36-01048 PAGE 13 !
	PROCEDURE OPSTOP;
	BEGIN
	    OPWAIT(LENGTH);
	    OPTEXT:=OPSTRING;
	    OPIN(OPSTRING);
	    IF OPTEXT=CONT THEN CONTINUE;
	    IF OPTEXT=STOP THEN GOTO 1;
	    IF OPTEXT=SUSPEND THEN GOTO 10;
	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
	    IF IN.Z0 AND 256 <> 0 THEN !EOF! GOTO 9;
	    IF IN.Z0 AND 8'041000 = 0 THEN BLOCKNO:=IN.ZBLOCK;
	    IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MTMOUNTTAPE);
	    IF IN.Z0 SHIFT 1 >= 0 THEN
	    BEGIN
		OPMESS(MTTXT);
		MASK:=IN.Z0;
		SHOWERROR;
	    END;
	    REPEAT OPSTOP UNTIL OPTEXT=START;
	    OPMESS(RUNTXT);
	END;

	PROCEDURE LPERROR;
	BEGIN
	    NEXTLP:= OUT.Z0 AND 8'000020;
	    OUT.Z0:= OUT.Z0 - NEXTLP;
	    IF OUT.Z0 SHIFT 1 < 0 THEN OUT.Z0:= OUT.Z0 AND 8'041342;
	    IF OUT.Z0 = 8'040000 THEN IF NEXTLP <> 0 THEN
	    OUT.Z0:= NEXTLP;
	    IF OUT.Z0 AND 8'001342 <> 0 THEN
	    OUT.Z0:= OUT.Z0 AND 8'001342;
	    IF OUT.Z0 <> 0 THEN
	    BEGIN
		OPMESS(LPTXT);
		BLOCKNO:=IN.ZBLOCK;
		MASK:=OUT.Z0;
		SHOWERROR;
		NEXTLP:=0;
		REPEAT OPSTOP UNTIL OPTEXT=START;
		OPMESS(RUNTXT);
		IF OUT.Z0 AND 8'141362 <> 0 THEN
		REPEATSHARE(OUT);
	    END;
	END;


«ff»
						! RC36-01048 PAGE 14 !

	PROCEDURE NEXTREEL;
	BEGIN ! INCREASE OLDVSEQN BY 1 !
	    CONVERT(NEWVSEQN,WORKSTR,EBCASC,4);
	    INSERT(0,WORKSTR,4);
	    DECBIN(WORKSTR,WORKINT);
	    WORKINT:=WORKINT+1;
	    BINDEC(WORKINT,WORKSTR);
	    CONVERT(WORKSTR,OLDVSEQN,ASCEBC,4);
	END;


	PROCEDURE DISPVSEQN;
	BEGIN ! DISPLAY VOLUME SEQUENCE NUMBER !
	    CONVERT(OLDVSEQN,WORKSTR,EBCASC,4);
	    INSERT(0,WORKSTR,4);
	    OPMESS(WORKSTR); OPMESS(ENDLINE);
	END;



	PROCEDURE DISPVSN;
	BEGIN ! DISPLAY VOLUME SERIAL NUMBER !
	    CONVERT(OLDVSN,WORKSTR,EBCASC,6);
	    INSERT(0,WORKSTR,6);
	    OPMESS(WORKSTR); OPMESS(ENDLINE);
	END;



	PROCEDURE PRINTREST;
	BEGIN
	    DATALENGTH := LPDATALENGTH + DATAINDEX;
	    RECLENGTH  := RECLENGTH - DATALENGTH;
	    WHILE RECLENGTH > 0 DO
	    BEGIN
		IN.ZFIRST := IN.ZFIRST + DATALENGTH;
		DATALENGTH := 132 - MARGIN;
		IF RECLENGTH < DATALENGTH THEN DATALENGTH := RECLENGTH;
		PUTREC(OUT,DATALENGTH + 1);
		OUT^.CCW := SP1A;
		MOVE(IN^.DATA,0,OUT^.DATA,0,DATALENGTH);
		RECLENGTH := RECLENGTH - DATALENGTH;
	    END;
	END;
«ff»
						! RC36-01048 PAGE 15 !
    BEGIN
	PROGNO:=1; IN.ZBLOCK:=1; BLOCKNO:=1; FILENO:=1; REWIND:=-1;
	MTUNIT:=0; PAGELENGTH:=0;
	SELECT:=10999; MARGIN:=0; RECSIZE:=133; LPRINT:=-2;
	DATASET:=1; SDATASET:=1; DFILE:=2; OLDVSEQN:=REEL1; NEXTLP:=0;
	BINDEC(IN.ZSHAREL,OPDEC); CONVERT(OPDEC,BSIZE,ASCEBC,5);
	INSERT(0,BSIZE,5);
	LINES:=0;
	OPCONT:=FIFTEEN; NEXTCONT:=FIVE; OPIN(OPSTRING);
1:	OPCOM;
	INITPOSITION; IF OPTEST<>0 THEN OPSTOP;

2:	IF DFILE<>FILENO THEN
	BEGIN ! READ LABEL GROUP !
	    GETREC(IN,RECLENGTH);
	    IF DFILE>FILENO THEN
	    BEGIN ! READ HEADER LABEL GROUP !
		IF IN^.LABEL=VOL1 THEN NEWVSN:=IN^.F5L6;
		IF IN^.LABEL=HDR1 THEN
		BEGIN
		    NEWDSSN:=IN^.F22L6; !DATASET SERIAL NUMBER !
		    NEWVSEQN:=IN^.F28L4; !REEL NUMBER !
		    NEWRF:=F;
		    NEWBL:=BSIZE;
		    NEWRL:=R133;
		    NEWCC:=A;
		    NEWBA:=B;
		END;
		IF IN^.LABEL=HDR2 THEN
		BEGIN
		    NEWRF:=IN^.F5L1; !RECORD FORMAT F V U !
		    NEWBL:=IN^.F6L5; !BLOCK LENGTH !
		    NEWRL:=IN^.F11L5; !RECORD LENGTH !
		    NEWCC:=IN^.F37L1; !PRINT CONTROL A M SPACE !
		    NEWBA:=IN^.F39L1; !BLOCK ATTRIBUTE B S R SPACE !
		END;
		IF LPRINT=-1 THEN
		IF OLDVSEQN=REEL1 THEN
		BEGIN ! PRINT HEADER LABEL !
		    PUTREC(OUT,81);
		    OUT^.CCW:=SP2A;
		    MOVE(IN^,0,OUT^,1,80);
		    WAITZONE(OUT);
		END;
		GOTO 2;
	    END;
	    BEGIN ! READ TRAILER LABEL GROUP !
		IF IN^.LABEL=EOF1 THEN OLDVSEQN:=REEL1;
		IF IN^.LABEL=EOF2 THEN OLDVSEQN:=REEL1;
		IF IN^.LABEL=EOV1 THEN NEXTREEL;
		IF IN^.LABEL=EOV2 THEN NEXTREEL;
		GOTO 2;
	    END;
	END;


«ff»
						! RC36-01048 PAGE 16 !

200:	IF NEWRF=F THEN
	BEGIN ! PROCESS FIXED LENGTH RECORDS !
3:	REPEAT BEGIN
	    GETREC(IN,RECLENGTH);
	    IF SELZZZ<256 THEN
	    BEGIN
		MOVE(IN^.DATA,SELECTINDEX,CURZZZ,0,1);
		IF SELY=0 THEN
		BEGIN
		    IF BYTE CURZZZ<>SELZZZ THEN GOTO 6;
		    GOTO 4;
		END;
		IF BYTE CURZZZ AND SELZZZ=0 THEN GOTO 6;
	    END;
4:	    PUTREC(OUT,LPLENGTH);
	    IF SELX<>1 THEN
	    BEGIN
		OUT^.CCW:=IN^.CCW;
		IF NEWCC=A THEN TRANSLATE(IN^.CCW,OUT^.CCW,ANSITABLE);
		GOTO 5;
	    END;
	    LINES:=LINES+1;
	    IF PAGELENGTH<>0 THEN
	    IF LINES>=PAGELENGTH THEN
	    BEGIN
	      OUT^.CCW:=SK1A;
	      LINES:=0; GOTO 5;
	    END;
	    OUT^.CCW:=SP1A;
5:	    MOVE(IN^.DATA,DATAINDEX,OUT^.DATA,0,LPDATALENGTH);
	    PRINTREST;
6:	END UNTIL IN.ZREM<RECSIZE;
	BLOCKNO:=IN.ZBLOCK;
	IF OPTEST=0 THEN GOTO 3;
	WAITZONE(OUT);
	OPSTOP; GOTO 2;
	END;
	BEGIN ! PROCESS VARIABLE LENGTH OR UNDEFINED RECORDS !
13:	REPEAT BEGIN
	    GETREC(IN,RECLENGTH);
	    LPLENGTH := RECLENGTH;
	    IF LPLENGTH-DATAINDEX+1+MARGIN>133 THEN
	    LPLENGTH:=133-MARGIN+DATAINDEX-1;
	    IF SELZZZ<256 THEN
	    BEGIN
		MOVE(IN^.DATA,SELECTINDEX,CURZZZ,0,1);
		IF SELY=0 THEN
		BEGIN
		    IF BYTE CURZZZ<>SELZZZ THEN GOTO 16;
		    GOTO 14;
		END;
		IF BYTE CURZZZ AND SELZZZ=0 THEN GOTO 16;
	    END;
14:	    PUTREC(OUT,LPLENGTH-DATAINDEX+1);
	    IF SELX<>1 THEN
	    BEGIN
		OUT^.CCW:=IN^.CCW;
		IF NEWCC=A THEN TRANSLATE(IN^.CCW,OUT^.CCW,ANSITABLE);
		GOTO 15;
	    END;
	    LINES:=LINES+1;
	    IF PAGELENGTH<>0 THEN
	    IF LINES>=PAGELENGTH THEN
	    BEGIN
	      OUT^.CCW:=SK1A;
	      LINES:=0; GOTO 15;
	    END;
	    OUT^.CCW:=SP1A;
15:	    MOVE(IN^.DATA,DATAINDEX,OUT^.DATA,0,LPLENGTH-DATAINDEX);
	    LPDATALENGTH := LPLENGTH - DATAINDEX;
	    PRINTREST;
16:	END UNTIL IN.ZREM<4;
	BLOCKNO:=IN.ZBLOCK;
	IF OPTEST=0 THEN GOTO 13;
	WAITZONE(OUT);
	OPSTOP; GOTO 2;
	END;


«ff»
						! RC36-01048 PAGE 17 !

!	HANDLING OF TAPE MARKS	!

9:	FILENO:=FILENO+1;
	BLOCKNO:=1;
	IF FILENO=DFILE THEN
	BEGIN ! HEADER LABEL GROUP NOW PROCESSED !
	    IF OLDVSEQN=REEL1 THEN OLDVSN:=NEWDSSN;
	    IF OLDVSEQN=REEL1 THEN
	    IF LPRINT=-1 THEN
	    BEGIN
		OUTCHAR(OUT,BYTE SK1A);
		WAITZONE(OUT);
	      LINES:=0;
	    END;
	    REJECT:=0;
	    IF NEWDSSN<>OLDVSN THEN REJECT:=1;
	    IF NEWVSEQN<>OLDVSEQN THEN REJECT:=REJECT+2;
	    IF REJECT<>0 THEN
	    BEGIN ! WRONG DATASET OR REEL MOUNTED !
		SFILENO:=FILENO;
		SBLOCKNO:=BLOCKNO;
		FILENO:=FILENO-1; ! POSITION AT HEADER GROUP !
		BLOCKNO:=1;
		IF REJECT<>2 THEN
		BEGIN
		    OPMESS(MOUNTVSN); DISPVSN;
		END;
		IF REJECT=2 THEN
		BEGIN
		    OPMESS(MOUNTREEL); DISPVSEQN;
		END;
		REPEAT OPSTOP UNTIL OPTEXT=START;
		OPMESS(RUNTXT);
		FILENO:=SFILENO;
		BLOCKNO:=SBLOCKNO;
		OLDVSN:=NEWDSSN;
		OLDVSEQN:=NEWVSEQN;
	    END;
	    REJECT:=0;
	    IF NEWRF<>F THEN IF NEWRF<>V THEN
	    IF NEWRF<>U THEN REJECT:=1;
	    IF NEWBL>BSIZE THEN REJECT:=2;
	    IF NEWCC<>A THEN IF NEWCC<>M THEN IF NEWCC<>SPACE THEN
	    REJECT:=3;
	    IF NEWBA<>SPACE THEN
	    IF NEWBA<>B THEN REJECT:=4;
	    OPSTATUS(1 SHIFT (15-REJECT),LABTXTS);
	    IF REJECT<>0 THEN
	    BEGIN ! REJECT THE TAPE !
		CLOSE(IN,1 ! REWIND AND SET THE TAPE OFFLINE !);
		CLOSE(OUT,1);
		BLOCKNO:=1;
		FILENO:=1;
		DATASET:=1;
	      REPEAT OPSTOP UNTIL OPTEXT=START;
	      OPMESS(RUNTXT);
	    END;
	    INITPOSITION;
	    GOTO 2 ! MAIN LOOP !;
	END;


«ff»
						! RC36-01048 PAGE 18 !

!	HANDLING OF TAPE MARKS (CONTINUED)	!

	IF FILENO=DFILE+1 THEN
	BEGIN ! DATA BLOCK GROUP NOW PROCESSED !
	    INITPOSITION;
	    GOTO 2 ! MAIN LOOP !;
	END;

	IF FILENO=DFILE+2 THEN
	BEGIN ! TRAILER LABEL GROUP NOW PROCESSED !
	    IF OLDVSEQN<>NEWVSEQN THEN
	    IF OLDVSEQN<>REEL1 THEN
	    BEGIN ! CONTINUATION ON NEW REEL !
		CLOSE(IN,1 ! REWIND OLD REEL !);
		CLOSE(OUT,1);
		FILENO:=1;
		DATASET:=1;
		BLOCKNO:=1;
		OPMESS(MOUNTREEL); DISPVSEQN;
		REPEAT OPSTOP UNTIL OPTEXT=START;
		OPMESS(RUNTXT);
		INITPOSITION;
		GOTO 2 ! MAIN LOOP !;
	    END;
	    BEGIN ! END OF DATASET !
10:		CLOSE(OUT,1);
		IF OPTEXT=SUSPEND THEN
		BEGIN
		    CLOSE(IN,1);
		    OPMESS(SUSTXT);
		    GOTO 11;
		END;
		BLOCKNO:=1;
		DATASET:=DATASET+1;
		IF OPCONT = FIVE THEN
		BEGIN
		    CLOSE(IN,1);
		    FILENO:=1;
		    DATASET:=1;
		    OPMESS(MTMOUNTTAPE);
		END;
		IF OPCONT = FIFTEEN THEN
		BEGIN
		    CLOSE(IN,REWIND+2);
		    IF REWIND=-1 THEN
		    BEGIN
			FILENO:=1;
			DATASET:=1;
		    END;
		    OPMESS(EOJTXT);
		END;
11:		REPEAT OPSTOP UNTIL OPTEXT=START;
		OPMESS(RUNTXT);
		INITPOSITION;
		GOTO 2 ! MAIN LOOP !;
	    END;
	END;
    END;


«ff»
«nul»