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

⟦784bfc179⟧ TextFile

    Length: 13824 (0x3600)
    Types: TextFile
    Notes: RCSL-43-GL-8255, RCSL-43-GL-8256, RCSL-43-GL-8257
    Names: »S1056«

Derivation

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

TextFile

!						RCSL:	43-GL8256

						AUTHOR:	PBP

						EDITED:	78.12.12
























			PROGRAM RC36-01056.00

			MUS PRINT IMAGE

















KEYWORDS:	MUSIL,CONVERSION,MTA,LPT,LISTING

ABSTRACT:	THIS PROGRAM HANDLES NO LABEL TAPES WITH A
		MAXIMUM BLOCK SIZE OF 1340 BYTES, EACH BLOCK
		CONSISTING OF FIXED LENGTH RECORDS WITH 
                STANDARD IBM S/360 CCW CONTROL CHARACTERS
		AND EBCDIC CODE DATA.
		OUTPUT ON RC3600 SERIES PRINTERS WITH 64
		CHARACTER ASCII DRUM.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

RCSL 43-GL8255:	ASCII SOURCE TAPE	
RCSL 43-GL8257: REL/BIN                       !
«ff»
!						 RC36-01056 PAGE 01 							

TITLE:		MUS PRINT IMAGE.

ABSTRACT:	THIS PROGRAM HANDLES NO LABEL TAPES WITH A MAXIMUM
		BLOCK SIZE OF 1340 BYTES, EACH BLOCK CONSISTING OF
		FIXED LENGTH RECORDS WITH STANDARD IBM S/360 CCW
		CONTROL CHARACTERS AND EBCDIC CODE DATA. OUTPUT ON 
		RC3600 SERIES PRINTERS WITH 64 CHARACTER ASCII DRUM.
		THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY.

SIZE:		5738 BYTES. INCLUDING ONE 1340 BYTES INPUT BUFFER
		AND EIGHT 133 BYTES OUTPUT BUFFERS.

DATE:		DECEMBER 12TH 1978.

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 OF TAPE AT EOF.
    MARGIN   : 00000	SPACES TO THE LEFT OF THE PRINT LINE.
    SELECT   : 00999	DEFAULT CCW SWITCH, SELECT MODE/VALUE.
    RECSIZE  : 00133	LENGTH OF INPUT RECORD.

OTHER OUTPUT MESSAGES:
    CONTSTATE:  +/-	STATE OF CONTINUE SWITCH (TTY ONLY).
    PROG NO  :  1056	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  :  1056.
    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:	NONE.
!
«ff»
						! RC36-01056 PAGE 02 !
CONST

NOQ=		7,

OPTXTS=
'<14><6>
<10>PROG NO  :  1056<0>
<10>BLOCK NO : <0>
<10>FILE NO  : <0>
<10>REWIND   :   <0>
<10>SELECT   : <0>
<10>MARGIN   : <0>
<10>RECSIZE  : <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>',
ENDLINE=	'<13><0>',
RETURN=		'<13>',

RUNTXT=		'<8><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-01056 PAGE 03 !
LPTABLE=	! EBCDIC TO 64 CHARACTER ASCII DRUM
	   0   1   2   3   4   5   6   7 !
#
!   0 !  255 255 255 255 255 255 255 255
!   8 !  255 255 255 255 255 255 255 255
!  16 !  255 255 255 255 255 255 255 255
!  24 !  255 255 255 255 255 255 255 255
!  32 !  255 255 255 255 255 255 255 255
!  40 !  255 255 255 255 255 255 255 255
!  48 !  255 255 255 255 255 255 255 255
!  56 !  255 255 255 255 255 255 255 255
!  64 !  255 255 255 255 255 255 255 255
!  72 !  255 255  91  46  60  40  43  92
!  80 !   38 255 255 255 255 255 255 255
!  88 !  255 255  33  36  42  41  59  93
!  96 !   45  47 255 255 255 255 255 255
! 104 !  255 255 255  44  37  94  62  63
! 112 !  255 255 255 255 255 255 255 255
! 120 !  255 255  58  35  64  39  61  34
! 128 !  255  65  66  67  68  69  70  71
! 136 !   72  73 255 255 255 255 255 255
! 144 !  255  74  75  76  77  78  79  80
! 152 !   81  82 255 255 255 255 255 255
! 160 !  255 255  83  84  85  86  87  88
! 168 !   89  90 255 255 255 255 255 255
! 176 !  255 255 255 255 255 255 255 255
! 184 !  255 255 255 255 255 255 255 255
! 192 !  255  65  66  67  68  69  70  71
! 200 !   72  73 255 255 255 255 255 255
! 208 !  255  74  75  76  77  78  79  80
! 216 !   81  82 255 255 255 255 255 255
! 224 !  255 255  83  84  85  86  87  88
! 232 !   89  90 255 255 255 255 255 255
! 240 !   48  49  50  51  52  53  54  55
! 248 !   56  57 255 255 255 255 255 255
#;
«ff»
						! RC36-01056 PAGE 04 !
VAR

OPDUMMY:	STRING(2);	! RUNTIME PARAMETERS !
PROGNO:		INTEGER;
BLOCKNO:	INTEGER;
FILENO:		INTEGER;
REWIND:		INTEGER;
SELECT:		INTEGER;
MARGIN:		INTEGER;
RECSIZE:	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);
SELX:		INTEGER;
SELY:		INTEGER;
SELZZZ:		INTEGER;
DATAINDEX:	INTEGER;
SELECTINDEX:	INTEGER;
ERRORNO:        INTEGER;
MASK:           INTEGER;
TOM:		INTEGER;
SIGN:		INTEGER;
Q:		INTEGER;
PAR:		INTEGER;
LENGTH:		INTEGER;
RECLENGTH:	INTEGER;
LPLENGTH:	INTEGER;
LPDATALENGTH:	INTEGER;
P1:		INTEGER;
P2:		INTEGER;
P3:		INTEGER;
S1:		STRING(2);
S2:		STRING(2);
NEXTLP:		INTEGER;
CHAR:           INTEGER;«ff»
						! RC36-01056 PAGE 05 !

IN:	FILE			! INPUT FILE DESCRIPTION !
	'MT0',			! NAME OF INPUT DRIVER !
	14,			! KIND=	REPEATABLE, !
				!	POSITIONABLE, !
				!	BLOCKED. !
	1,			! BUFFERS !
	1340,			! SHARESIZE !
	FB;			! FIXED BLOCKED !

	GIVEUP
	MTINERROR,		! MT ERROR PROCEDURE !
	2'0110001111011011	! GIVE UP MASK !
				! ALL REPEATABLE BITS OFF !
				! AND BIT 15 ON !

	OF RECORD		! RECORD STRUCTURE !
	   CCW:		STRING(1);
	   SELECT1:	STRING(1)	FROM 1;
	   DATA:	STRING(1)	FROM 1;
	   SELECT2:	STRING(1)	FROM 2
	END;

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

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

	CONV
	LPTABLE			! CONVERSION TABLE !

	OF RECORD		! RECORD STRUCTURE !
	   CCW:		STRING(1);
	   DATA:	STRING(1)
	END;
«ff»
						! RC36-01056 PAGE 06 !

	PROCEDURE INITPOSITION;
	BEGIN
	    IF IN.ZMODE=0 THEN OPEN(IN,1);
	    IF OUT.ZMODE=0 THEN OPEN(OUT,7);
	    SETPOSITION(IN,FILENO,BLOCKNO);
	    SETPOSITION(OUT,MARGIN,0);
	    IN.ZLENGTH:=RECSIZE;
	    SELX:=SELECT/10000;
	    SELY:=(SELECT-SELX*10000)/1000;
	    SELZZZ:=(SELECT-SELX*10000)-SELY*1000;
	    DATAINDEX:=1-SELX;
	    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;
	END;

	PROCEDURE CONTINUE;
	BEGIN
	    GLCONT:=OPCONT;
	    OPCONT:=NEXTCONT;
	    NEXTCONT:=GLCONT;
	    OPMESS(OPCONT);
	END;
«ff»
						! RC36-01056 PAGE 07 !

	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-01056 PAGE 08 !
	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 9;
		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-01056 PAGE 09 !
	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 9;
	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-01056 PAGE 10 !
	BEGIN
	IN.ZBLOCK:=1; BLOCKNO:=1; FILENO:=1; REWIND:=-1;
	SELECT:=999; MARGIN:=0; RECSIZE:=133; NEXTLP:=0;
	OPCONT:=FIFTEEN; NEXTCONT:=FIVE; OPIN(OPSTRING);
1:	OPCOM;
	INITPOSITION; IF OPTEST<>0 THEN OPSTOP;

2:	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 5;
		    GOTO 3;
		END;
		IF BYTE CURZZZ AND SELZZZ=0 THEN GOTO 5;
	    END;
3:	    PUTREC(OUT,LPLENGTH);
	    IF SELX=0 THEN
	    BEGIN
              CHAR:=BYTE IN^.CCW;
              CHAR:=CHAR SHIFT 14;
              CHAR:=CHAR SHIFT (-15);
              IF CHAR = 1 THEN
              BEGIN
                CHAR:=(BYTE IN^.CCW) + 4;
                INSERT (CHAR,OUT^,0)
              END ELSE
		OUT^.CCW:=IN^.CCW;
		GOTO 4;
	    END;
	  OUT^.CCW:=SP1A;
4:	    MOVE(IN^.DATA,DATAINDEX,OUT^.DATA,0,LPDATALENGTH);
5:	END UNTIL IN.ZREM<RECSIZE;
	BLOCKNO:=IN.ZBLOCK;
	IF OPTEST=0 THEN GOTO 2;
	WAITZONE(OUT);
	OPSTOP; GOTO 2;

9:	CLOSE(OUT,1);
	IF OPTEXT=SUSPEND THEN
	BEGIN
	    CLOSE(IN,1);
	    OPMESS(SUSTXT);
	  GOTO 10;
	END;
	BLOCKNO:=1; FILENO:=FILENO+1;
	IF OPCONT = FIVE THEN
	BEGIN
	    CLOSE(IN,1);
	    FILENO:=1;
	    OPMESS(MTMOUNTTAPE);
	END;
	IF OPCONT = FIFTEEN THEN
	BEGIN
	    CLOSE(IN,REWIND+2);
	    IF REWIND=-1 THEN FILENO:=1;
	    OPMESS(EOJTXT);
	END;
10:	REPEAT OPSTOP UNTIL OPTEXT=START;
	INITPOSITION; OPMESS(RUNTXT); GOTO 2;

	END;
«ff»
«ff»
«nul»