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

⟦8553dd03e⟧ TextFile

    Length: 19456 (0x4c00)
    Types: TextFile
    Notes: RCSL-43-GL-1519, RCSL-43-GL-8808, RCSL-43-GL-8809, RCSL-43-GL-8810
    Names: »S699«

Derivation

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

TextFile

S699!						RCSL:	43-GL8809

						AUTHOR:	PBP

						EDITED:	79.03.20
























			PROGRAM RC36-00699.01

			HEXADECIMAL PRINT

















KEYWORDS:	MUSIL,CONVERSION,MTA,LPT,LISTING

ABSTRACT:	THIS PROGRAM HANDLES UNDEFINED LENGTH FORMAT
		INPUT, WITH A MAXIMUM BLOCK SIZE OF 4096 BYTES.
		OUTPUT ON SERIAL PRINTER.
		THE PROGRAM USES CODEPROCEDURE CHANGETABLE.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

RCSL: 43-GL8808	ASCII SOURCE
RCSL: 43-GL8810 REL.BIN/TTY
!

«ff»
!						 RC36-00699 PAGE 01 							
TITLE:		HEXADECIMAL PRINT

ABSTRACT:	THIS PROGRAM HANDLES UNDEFINED LENGTH FORMAT INPUT,
		WITH A MAXIMUM BLOCK SIZE OF 4096 BYTES. OUTPUT ON
		SERIAL PRINTER.
		THE PROGRAM USES CODEPROCEDURE CHANGETABLE.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

SIZE:		9606 BYTES. INCLUDING ONE 4096 BYTES INPUT BUFFER
		AND EIGHT 134 BYTES OUTPUT BUFFER.

DATE:		NOVEMBER 1ST 1977.

RUNTIME PARAMETERS:

    BLOCK NO : 00001	NEXT BLOCK TO BE READ FROM CURRENT FILE.
    FILE NO  : 00001	THE FILE FROM WHICH THE BLOCK IS READ.
    REWIND   :   +	INDICATES IF REWIND AT TAPEMARK.
    RECSIZE  : 00080	LENGTH OF INPUT RECORD.
    PRINT LGT: 00120	LENGTH OF OUTPUT RECORD WITHOUT THE PROGRAM
			GENERATED STANDARD TEXTS OF 12 BYTES.
			00001 <= PRINT LGT <= 120.
    NEWPAGE  : 00000	INDICATES PAGE SHIFT AFTER EACH
			"NEWPAGE" PRINTED LINES.
			00000 <= NEWPAGE <= 00099.
			NEWPAGE = 0 MEANS NO PAGE SHIFT.
    MARGIN   : 00000	SPACES TO THE LEFT OF THE PRINT LINE.

OTHER OUTPUT MESSAGES:

    CONTSTATE:  +/-	STATE OF CONTINUE SWITCH (TTY ONLY).
    PROG NO  :   699	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.
    MT ERROR NNNNN	CONSULT THE RC3600 OPERATORS MANUAL.
    LP ERROR NNNNN      CONSULT THE RC3600 OPERATORS MANUAL.
    END JOB		PROGRAM EXECUTION IS TERMINATED.

INPUT MESSAGES:

    STOP		STOPS EXECUTION WRITING PROG NO  :   699.
    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 PARAMETER 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:   CODEPROCEDURE CHANGETABLE RCSL: 43-GL1519
!

«ff»
						! RC36-00699 PAGE 02 !
CONST

NOQ=		8,

OPTXTS=
'<14><6>
<10>PROG NO  :   699<0>
<10>BLOCK NO : <0>
<10>FILE NO  : <0>
<10>REWIND   :   <0>
<10>RECSIZE  : <0>
<10>PRINT LGT: <0>
<10>NEWPAGE  : <0>
<10>MARGIN   : <0>',

START=		'START',
STOP=		'STOP',
SUSPEND=	'SUSPEND',
CONT=		'CONT',
INT=		'INT',
STATE=		'STATE',
TABNAME=	'IBMLP',
MINUS=		'-',
PLUS=		'+',
FIVE=		'<5><0>',
FIFTEEN=	'<15><0>',
NL=		'<10>',
NEXTPARAM=	'<27>',
SK1B=		'<143>',
SP1B=		'<15>',
SP2B=		'<23>',
ENDLINE=	'<13><0>',
RETURN=		'<13>',

RUNTXT=		'<16><4><10>RUNNING<13><0>',
MTTXT=		'<7><10>MT ERROR   ',
LPTXT=		'<7><10>LP ERROR   ',
EOJTXT=		'<14><7><10>END JOB<13><0>',
SUSTXT=		'<7><10>SUSPENDED<13><0>',
MTMOUNTTAPE=	'<14><7><10>MOUNT DATA TAPE<13><0>',
CONTSTATE=	'<10>CONTSTATE:   <0>',


«ff»
						! RC36-00699 PAGE 03 !

HEADING=
	'<217><195><243><246><240><240><64><64>
	<200><197><231><193><196><197>
	<195><201><212><193><211><64><215><217><201><213>
	<227><64><64><64><64><64>',

PAGETXT=
	'<215><193><199><197>',

BLOCKTXT=
	'<194><211><214><195><210><226><201><233><197><64><64>
	<64><64><64><64><64><64><64><64><64><64><64><64>
	<194><211><214><195><210><213><228><212><194><197><217>
	<64><64><64><64><64><64><64><64><64><64><64><64><64><64>
	<198><201><211><197><213><228><212><194><197><217>
	<64><64><64><64><64><64>',

RECTXT=
	'<217><197><195><211><197><213><199><227><200>',

POSTXT=
	'<64><64><64><64><64><64><64><64><64><64><64><64>
	<241><75><75><75><92><75><75><75><241><240>
	<075><75><75><75><92><75><75><75><242><240>
	<075><75><75><75><92><75><75><75><243><240>
	<075><75><75><75><92><75><75><75><244><240>
	<075><75><75><75><92><75><75><75><245><240>
	<075><75><75><75><92><75><75><75><246><240>
	<075><75><75><75><92><75><75><75><247><240>
	<075><75><75><75><92><75><75><75><248><240>
	<075><75><75><75><92><75><75><75><249><240>
	<075><75><75><75><92><75><75><241><240><240>
	<075><75><75><75><92><75><75><241><241><240>
	<075><75><75><75><92><75><75><241><242><240>',

ZONETXT=
	'<64><64><64><64><64><64><64><233><214><213><197><64>',

NUMRTXT=
	'<64><64><64><64><64><64><64><213><228><212><217><64>',

CHARTXT=
	'<64><64><64><64><64><64><64><195><200><193><217><64>',


«ff»
						! RC36-00699 PAGE 04 !

ZONETAB=
!          0   1   2   3   4   5   6   7   8   9 !
#
!   0 !  240 240 240 240 240 240 240 240 240 240
!  10 !  240 240 240 240 240 240 241 241 241 241
!  20 !  241 241 241 241 241 241 241 241 241 241
!  30 !  241 241 242 242 242 242 242 242 242 242
!  40 !  242 242 242 242 242 242 242 242 243 243
!  50 !  243 243 243 243 243 243 243 243 243 243
!  60 !  243 243 243 243 244 244 244 244 244 244
!  70 !  244 244 244 244 244 244 244 244 244 244
!  80 !  245 245 245 245 245 245 245 245 245 245
!  90 !  245 245 245 245 245 245 246 246 246 246
! 100 !  246 246 246 246 246 246 246 246 246 246
! 110 !  246 246 247 247 247 247 247 247 247 247
! 120 !  247 247 247 247 247 247 247 247 248 248
! 130 !  248 248 248 248 248 248 248 248 248 248
! 140 !  248 248 248 248 249 249 249 249 249 249
! 150 !  249 249 249 249 249 249 249 249 249 249
! 160 !  193 193 193 193 193 193 193 193 193 193
! 170 !  193 193 193 193 193 193 194 194 194 194
! 180 !  194 194 194 194 194 194 194 194 194 194
! 190 !  194 194 195 195 195 195 195 195 195 195
! 200 !  195 195 195 195 195 195 195 195 196 196
! 210 !  196 196 196 196 196 196 196 196 196 196
! 220 !  196 196 196 196 197 197 197 197 197 197
! 230 !  197 197 197 197 197 197 197 197 197 197
! 240 !  198 198 198 198 198 198 198 198 198 198
! 250 !  198 198 198 198 198 198
#,


NUMRTAB=
      !    0   1   2   3   4   5   6   7   8   9 !
#
!   0 !  240 241 242 243 244 245 246 247 248 249
!  10 !  193 194 195 196 197 198 240 241 242 243
!  20 !  244 245 246 247 248 249 193 194 195 196
!  30 !  197 198 240 241 242 243 244 245 246 247
!  40 !  248 249 193 194 195 196 197 198 240 241
!  50 !  242 243 244 245 246 247 248 249 193 194
!  60 !  195 196 197 198 240 241 242 243 244 245
!  70 !  246 247 248 249 193 194 195 196 197 198
!  80 !  240 241 242 243 244 245 246 247 248 249
!  90 !  193 194 195 196 197 198 240 241 242 243
! 100 !  244 245 246 247 248 249 193 194 195 196
! 110 !  197 198 240 241 242 243 244 245 246 247
! 120 !  248 249 193 194 195 196 197 198 240 241
! 130 !  242 243 244 245 246 247 248 249 193 194
! 140 !  195 196 197 198 240 241 242 243 244 245
! 150 !  246 247 248 249 193 194 195 196 197 198
! 160 !  240 241 242 243 244 245 246 247 248 249
! 170 !  193 194 195 196 197 198 240 241 242 243
! 180 !  244 245 246 247 248 249 193 194 195 196
! 190 !  197 198 240 241 242 243 244 245 246 247
! 200 !  248 249 193 194 195 196 197 198 240 241
! 210 !  242 243 244 245 246 247 248 249 193 194
! 220 !  195 196 197 198 240 241 242 243 244 245
! 230 !  246 247 248 249 193 194 195 196 197 198
! 240 !  240 241 242 243 244 245 246 247 248 249
! 250 !  193 194 195 196 197 198
#;


«ff»
						! RC36-00699 PAGE 05 !
VAR

OPDUMMY:	STRING(2);	! RUNTIME PARAMETERS !
PROGNO:		INTEGER;
BLOCKNO:	INTEGER;
FILENO:		INTEGER;
REWIND:		INTEGER;
RECSIZE:	INTEGER;
PRINTLENGTH:	INTEGER;
NEWPAGE:	INTEGER;
MARGIN:		INTEGER;

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

OPCONT:		STRING(2);	! INTERNAL VARIABLES !
NEXTCONT:	STRING(2);
GLCONT:		STRING(2);
ERRORNO:        INTEGER;
MASK:           INTEGER;
TOM:		INTEGER;
SIGN:		INTEGER;
Q:		INTEGER;
PAR:		INTEGER;
LENGTH:		INTEGER;
LPLENGTH:	INTEGER;
P1:		INTEGER;
P2:		INTEGER;
P3:		INTEGER;
S1:		STRING(2);
S2:		STRING(2);
NEXTLP:		INTEGER;
STOPPED:	INTEGER;
BLOCKREM:	INTEGER;
BLOCKCHANGE:	INTEGER;
RECREM:		INTEGER;
RECCHANGE:	INTEGER;
LINES:		INTEGER;
PAGE:		INTEGER;
COUNT:		INTEGER;
PARAM:		INTEGER;
NOBY:		INTEGER;
REMAIN:		INTEGER;
DIGITS:		STRING(6);


«ff»
						! RC36-00699 PAGE 06 !

IN:	FILE			! INPUT FILE DESCRIPTION !
	'MT0',			! NAME OF INPUT DRIVER !
	14,			! KIND=	REPEATABLE, !
				!	POSITIONABLE, !
				!	BLOCKED. !
	1,			! BUFFERS !
	4096,			! SHARESIZE !
	U;			! UNDEFINED !

	GIVEUP
	MTERROR,		! MT ERROR PROCEDURE !
	2'0110001111011011	! GIVE UP MASK !
				! ALL REPEATABLE BITS OFF !
				! AND BIT 15 ON !
	OF RECORD
	   INPUT:	STRING(4096)
	END;



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

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

	OF RECORD		! RECORD STRUCTURE !
	   CCW:		STRING(1);
	   DATA:	STRING(132);
	   LINE:	STRING(120)	FROM 14;
	   BSIZE:	STRING(5)	FROM 12;
	   BNUMBER:	STRING(5)	FROM 37;
	   FNUMBER:	STRING(5)	FROM 61
	END;


«ff»
						! RC36-00699 PAGE 07 !

	PROCEDURE CHANGETABLE
	    (FILE OUT;
	     CONST TABNAME: STRING(6));
	CODEBODY;


	PROCEDURE INITPOSITION;
	BEGIN
	    IF IN.ZMODE=0 THEN OPEN(IN,1);
	    IF BLOCKNO <> IN.ZBLOCK THEN GOTO 2000;
	    IF FILENO <> IN.ZFILE THEN
	    BEGIN
2000:		OUT.ZMODE:= 0;
		WAITZONE(OUT);
	    END;
	    SETPOSITION(IN,FILENO,BLOCKNO);
	    IF OUT.ZMODE=0 THEN
		BEGIN
		CHANGETABLE(OUT,TABNAME);
		OPEN(OUT,7);
		END;
	    SETPOSITION(OUT,MARGIN,0);
	    NEWPAGE:= NEWPAGE - (NEWPAGE / 100 * 100);
	    IF PRINTLENGTH > 120 THEN PRINTLENGTH:= 120;
	END;



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



	PROCEDURE BINTOEBCDIC;
	BEGIN
	    COUNT:= 0;
	    REPEAT
	    BEGIN
		COUNT:= COUNT + 1;
		REMAIN:= PARAM / 10 * 10;
		INSERT(PARAM-REMAIN+240, DIGITS, 5-COUNT);
		PARAM:= PARAM / 10;
	    END UNTIL PARAM = 0;
	END;


«ff»
						! RC36-00699 PAGE 08 !

	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-00699 PAGE 09 !
	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-00699 PAGE 10 !
	PROCEDURE OPSTOP;
	BEGIN
	    OPWAIT(LENGTH);
	    OPTEXT:=OPSTRING;
	    OPIN(OPSTRING);
	    STOPPED:= 0;
	    IF OPTEXT=CONT THEN CONTINUE;
	    IF OPTEXT=STOP THEN STOPPED:= 1;
	    IF OPTEXT=SUSPEND THEN
	    BEGIN
	        STOPPED:= 1;
	        GOTO 10;
	    END;
	    IF OPTEXT=START THEN STOPPED:= 2;
	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;




«ff»
						! RC36-00699 PAGE 11 !
	PROCEDURE MTERROR;
	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
		IF OPTEST <> 0 THEN OPSTOP;
		OPMESS(MTTXT);
		MASK:=IN.Z0;
		SHOWERROR;
	    END;
	    REPEAT OPSTOP UNTIL STOPPED <> 0;
	    IF STOPPED = 1 THEN GOTO 1;
	    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 STOPPED <> 0;
		IF STOPPED = 1 THEN GOTO 1;
		OPMESS(RUNTXT);
		IF OUT.Z0 AND 8'141342 <> 0 THEN
		REPEATSHARE(OUT);
	    END;
	END;


«ff»
						! RC36-00699 PAGE 12 !

	BEGIN
	    !**************************
	     * PROGRAM INITIALIZATION *
	     **************************!

	    BLOCKNO:= 1;
	    FILENO:= 1;
	    REWIND:= -1;
	    MARGIN:= 0;
	    RECSIZE:= 80;
	    PRINTLENGTH:= 120;
	    NEWPAGE:= 0;
	    NEXTLP:= 0;
	    OPCONT:= FIFTEEN;
	    NEXTCONT:= FIVE;
	    LINES:= 100;
	    PAGE:= 0;
	    OPIN(OPSTRING);

1:	    OPCOM;

2:	    INITPOSITION;

	    !*************
	     * MAIN LOOP *
	     *************!

3:	    IF OPTEST <> 0 THEN
	    BEGIN
		OPSTOP;
		IF STOPPED = 1 THEN
		BEGIN
		    WAITZONE(OUT);
		    BLOCKNO:= IN.ZBLOCK;
		    GOTO 1;
		END;
	    END;
	    GETREC(IN, BLOCKREM);
	    BLOCKCHANGE:= 1;

4:	    RECCHANGE:= 1;
	    RECREM:= RECSIZE;
	    IF BLOCKREM < RECSIZE THEN RECREM:= BLOCKREM;

5:	    IF NEWPAGE = 0 THEN GOTO 6;
	    IF LINES >= NEWPAGE THEN
	    BEGIN
		LPLENGTH:= PRINTLENGTH + 13;
		IF PRINTLENGTH < 60 THEN LPLENGTH:= 73;
		PUTREC(OUT, LPLENGTH);
		OUT^.CCW:= SK1B;
		LINES:= 1;
		OUT^.DATA:= HEADING;
		MOVE(OUT^, 28, OUT^, 30, 104);
		MOVE(PAGETXT, 0, OUT^, LPLENGTH-10, 4);
		PAGE:= PAGE + 1;
		PARAM:= PAGE;
		BINTOEBCDIC;
		MOVE(DIGITS, 5-COUNT, OUT^, LPLENGTH-5, COUNT);
	    END;


«ff»
						! RC36-00699 PAGE 13 !

6:	    IF BLOCKCHANGE = 1 THEN
	    BEGIN
		PUTREC(OUT, 65);
		OUT^.CCW:= SP2B;
		LINES:= LINES + 2;
		OUT^.DATA:= BLOCKTXT;
		PARAM:= BLOCKREM;
		BINTOEBCDIC;
		MOVE(DIGITS, 5-COUNT, OUT^.BSIZE, 0, COUNT);
		PARAM:= IN.ZBLOCK - 1;
		BINTOEBCDIC;
		MOVE(DIGITS, 5-COUNT, OUT^.BNUMBER, 0, COUNT);
		PARAM:= IN.ZFILE;
		BINTOEBCDIC;
		MOVE(DIGITS, 5-COUNT, OUT^.FNUMBER, 0, COUNT);
		BLOCKCHANGE:= 0;
	    END;

	    NOBY:= PRINTLENGTH;
	    IF RECREM < PRINTLENGTH THEN NOBY:= RECREM;
	    LPLENGTH:= NOBY + 13;

	    PUTREC(OUT, LPLENGTH);
	    OUT^.CCW:= SP2B;
	    LINES:= LINES + 2;
	    MOVE(POSTXT, 0, OUT^.DATA, 0, NOBY+12);
	    IF RECCHANGE = 1 THEN OUT^.DATA:= RECTXT;

	    PUTREC(OUT, LPLENGTH);
	    OUT^.CCW:= SP1B;
	    LINES:= LINES + 1;
	    OUT^.DATA:= ZONETXT;
	    IF RECCHANGE = 1 THEN
	    BEGIN
		PARAM:= RECREM;
		BINTOEBCDIC;
		MOVE(DIGITS, 5-COUNT, OUT^.DATA, 0, COUNT);
		RECCHANGE:= 0;
	    END;
	    CONVERT(IN^, OUT^.LINE, ZONETAB, NOBY);

	    PUTREC(OUT, LPLENGTH);
	    OUT^.CCW:= SP1B;
	    LINES:= LINES + 1;
	    OUT^.DATA:= NUMRTXT;
	    CONVERT(IN^, OUT^.LINE, NUMRTAB, NOBY);

	    PUTREC(OUT, LPLENGTH);
	    OUT^.CCW:= SP1B;
	    LINES:= LINES + 1;
	    OUT^.DATA:= CHARTXT;
	    MOVE(IN^, 0, OUT^.LINE, 0, NOBY);
	    IN.ZFIRST:= IN.ZFIRST + NOBY;
	    RECREM:= RECREM - NOBY;
	    BLOCKREM:= BLOCKREM - NOBY;
	    IF RECREM <> 0 THEN GOTO 5;
	    IF BLOCKREM <> 0 THEN GOTO 4;
	    GOTO 3;


«ff»
						! RC36-00699 PAGE 14 !

	    !***********
	     * END JOB *
	     ***********!

9:	    OPMESS(EOJTXT);
10:	    CLOSE(OUT, 1);
	    IF OPTEXT=SUSPEND THEN
	    BEGIN
	        CLOSE(IN,1);
	        OPMESS(SUSTXT);
	        GOTO 11;
	    END;
	    CLOSE(IN, REWIND + 2);
	    BLOCKNO:= 1;
	    FILENO:= FILENO + 1;
	    IF REWIND = -1 THEN FILENO:= 1;
	    PAGE:= 0;
	    LINES:= 100;
11:	    REPEAT OPSTOP UNTIL STOPPED <> 0;
	    IF STOPPED = 1 THEN GOTO 1;
	    OPMESS(RUNTXT);
	    GOTO 2;
	END;

«ff»
«nul»