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

⟦3b8c2730d⟧ TextFile

    Length: 14848 (0x3a00)
    Types: TextFile
    Notes: RCSL-43-GL-8228, RCSL-43-GL-8229, RCSL-43-GL-8230
    Names: »SSPEC«

Derivation

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

TextFile

!						RCSL:	43-GL8229

						AUTHOR:  PBP

						EDITED:	 78.12.05
























		PROGRAM RC36-01053.00

		IBM 3740 DISKETTE PRINT IMAGE

















KEYWORDS:	MUSIL,CONVERSION,FD0,A3740,SP,LISTING

ABSTRACT:	THIS PROGRAM HANDLES IBM 3740 FORMATTED DISKETTES.
		EACH SECTOR IS PRINTED AS ONE LINE.
		OUTPUT ON SERIAL PRINTER.
		THE PROGRAM MUST BE OPERATED FROM  TTY.

RCSL 43-GL8228:	ASCII SOURCE TAPE       
RCSL 43-GL8230: REL/BIN	!	
«ff»
!						RC36-01053 PAGE 01


TITLE:		IBM 3740 DISKETTE PRINT IMAGE

ABSTRACT:	THIS PROGRAM HANDLES IBM 3740 FORMATTED DISKETTES.
		EACH SECTOR IS PRINTED AS ONE LINE.
		OUTPUT ON SERIAL PRINTER.
		THE PROGRAM MUST BE OPERATED FROM TTY.

SIZE:		04152 BYTES. INCLUDING TWO 128 BYTES INPUT BUFFERS AND     
		THREE 133 BYTES OUTPUT BUFFERS.
      
DATE:		78.12.05

RUNTIME PARAMETERS:

    DATASET NAME :	NAME OF DATASET TO BE PRINTED.
			IF THIS PARAMETER IS EMPTY ALL DATASETS ON
			THE DISKETTE WILL BE LISTED.

    BLOCK NO     : 1	NEXT BLOCK TO BE READ FROM DISKETTE.

    LABELPRINT   : -	INDICATES IF DISKETTE LABELS SHOULD
			BE PRINTED OR NOT.

    FD UNIT      :      UNIT NUMBER (0 - 1).


OTHER OUTPUT MESSAGES:

    PROG NO  :   1053 	PROGRAM EXECUTION IS STOPPED.

    RUNNING		PROGRAM EXECUTION IS STARTED.

    SUSPENDED		DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED.

    SP ERROR   NNNNN	CONSULT THE RC3600 OPERATOR MANUAL.

    FD ERROR   NNNNN    CONSULT THE RC3600 OPERATOR MANUAL.

    MOUNT DISKETTE	DISKETTE UNIT IS OFFLINE OR EMPTY.

    MOUNT NEXT DISKETTE THE DATASET IS CONTINUING ON NEXT DISKETTE.

    END JOB		PROGRAM EXECUTION IS TERMINATED.

INPUT MESSAGES:

    STOP		STOPS EXECUTION WRITING PROG NO  :    1053.

    SUSPEND		STOPS EXECUTION RELEASING DRIVERS (TTY ONLY).

    <ESC>		NEXT PARAMETER IS DISPLAYED

    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".

    START		PROGRAM EXECUTION IS STARTED.
			NOTE:  AFTER A DEVICE ERROR STOP HAS NO 
			EFFECT.

SPECIAL REQUIREMENTS:	NONE.					!
«ff»
						! RC36-01053 PAGE 02 !

CONST

NOQ=		5,

OPTXTS=
'<10>PROG NO      : 1053<0>
<10>DATASET NAME : <0>
<10>BLOCK NO     : <0>
<10>LABELPRINT   :  <0>
<10>FDUNIT       : <0>',

START=		'START',
STOP=		'STOP',
SUSPEND=	'SUSPEND',
STATE=		'STATE',
MINUS=		'-',
PLUS=		'+',
FIVE=		'<5><0>',
FIFTEEN=	'<15><0>',
NL=		'<10><0>',
NEXTPARAM=	'<27>',
ENDLINE=	'<13><0>',
BELL=		'<7><7><7>',

RUNTXT=		'<8><4><10>RUNNING<13><0>',
SUSTXT=		'<7><10>SUSPENDED<13><10>',
FDTXT=		'<7><10>FD ERROR   ',
LPTXT=		'<7><10>SP ERROR   ',
EOJTXT=		'<14><7><10>END JOB<13><0>',
MOUNTDISK=	'<7><10>MOUNT DISKETTE<13><0>',
FDEOF=		'<7><10>MOUNT NEXT DISKETTE<13><0>',
WRONGUNIT=     '<7><10>FD UNIT CONFLICT<13><0>',
INITINF= '<0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0>',


READ=		8'122,
ZERO=		8'60,

D3740=		'A3740',
FD0=		'FD0<0><0>',
TRUE=		-1,
FALSE=		-2,

FF=		'<143>',
SP1A=		'<9>',
SP2A=		'<17>',

ASCIISPS=	'                  ',
«ff»

! SPECIAL TABLE POST & TELEGRAFVAESNET !
						! RC36-01053 PAGE 03 !
LPTABLE=#

 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   50   32   53   48   46   50
 58   31   31   31   31   31   31   31
 31   31   60   70   59   49   35   50
 47   55   31   31   31   31   31   31
 31   31   31   33   57   56   54   63
 31   31   31   31   31   31   31   31
 31   31   34   72   71   61   52   62
 31   95   94   93   92   91   90   89
 88   87   31   31   31   31   31   31
 31   86   85   84   83   82   81   80
 79   78   31   31   31   31   31   31
 31   31   77   76   75   74   73   69
 68   67   66   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   31   31   31   31   31   31   31
 31   95   94   93   92   91   90   89
 88   87   31   31   31   31   31   31
 31   86   85   84   83   82   81   80
 79   78   31   31   31   31   31   31
 31   31   77   76   75   74   73   69
 68    67   31   31   31   31   31   31
 36   37   38   39   40   41   42   43
 44   45   94   31   31   31   31   31

#,
«ff»
						! RC36-01053 PAGE 04 !


! ASCII TO EBCDIC CONVERSION TABLE : !

AETAB= !       0   1   2   3   4   5   6   7!
#
!     0 !     75  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 !      75  90 127 123  91 108  80 125
!   40 !      77  93  92  78 107  96  75  97
!   48 !      77  93 242 243 244 245 246 247
!   56 !     248 249 122  94  76 126 110 111
!   64 !     124 193 170 195 168 197 198 199
!   72 !     200 166 209 210 211 162 213 214
!   80 !     215 216 149 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
#;
«ff»
						! RC36-01053 PAGE 05 !

VAR


OPDUMMY:	STRING(2);	! RUNTIME PARAMETERS !
PROGNO:		INTEGER;
TPAR1:		INTEGER;
INBLOK:		INTEGER;
LABELPRINT:	INTEGER;
FDUNIT:         INTEGER;

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

OPCONT:		STRING(2);	! INTERNAL VARIABLES !
NEXTCONT:	STRING(1);	! USED BY STANDARD   !
GLCONT:		STRING(1);	! PROCEDURES.        !
ERRORNO:        INTEGER;
MASK:           INTEGER;
TOM:		INTEGER;
SIGN:		INTEGER;
Q:		INTEGER;
PAR:		INTEGER;
LENGTH:		INTEGER;
P1:		INTEGER;
P2:		INTEGER;
P3:		INTEGER;
S1:		STRING(2);
S2:		STRING(2);

NEXTLP:		INTEGER;
SAVEZCONV:	INTEGER;
BLOCKNO:	INTEGER;
STOPPED:	INTEGER;
RECLENGTH:	INTEGER;
SEQCHECK:	INTEGER;
INDEX:		INTEGER;
OFFLINE:	INTEGER;

STR3740:	STRING(18);


DATASETNAME:	STRING(9);
«ff»
						! RC36-01053 PAGE 06 !

IN:	FILE			! INPUT FILE DESCRIPTION !
	'A3740',			! NAME OF INPUT DRIVER !
	14,			! KIND=	BLOCKED, !
				!       REPEATABLE, !
				!       POSITIONABLE, !
	2,			! BUFFERS !
	128,			! SHARESIZE !
	U;			! UNDEFINED !
	CONV STR3740;
	GIVEUP
	RDERROR,		! FD ERROR PROCEDURE !
	2'1110001111111110	! GIVE UP MASK !

	OF STRING(128);		! RECORD STRUCTURE !


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

	CONV LPTABLE;

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

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

«ff»
						! RC36-01053 PAGE 07 !


	PROCEDURE OPSTOP;
	BEGIN
	    OPWAIT(LENGTH);
	    OPTEXT:=OPSTRING;
	    OPIN(OPSTRING);
	    STOPPED:= 0;
	    IF OPTEXT=STOP THEN STOPPED:= 1;
	    IF OPTEXT=START THEN STOPPED:= 2;
	    IF OPTEXT=SUSPEND THEN STOPPED:=3;
	END;


	PROCEDURE OPEN3740;
	BEGIN
		! TRANSFER VOL-ID + DATASETNAME + INFORMATION  !
		! ABOUT CHECK OF SEQUENCE-NUMBER ON	       !
		!  MULTI-VOLUME-DATASETS		       !


	    STR3740:=ASCIISPS;
	    INSERT(READ,STR3740,0);
	    INSERT(FDUNIT+48,STR3740,1);
	    MOVE(ASCIISPS,0,STR3740,3,6);
	    MOVE(DATASETNAME,0,STR3740,9,8);
	    CONVERT(STR3740,STR3740,AETAB,18);
	    CONVERT(STR3740,STR3740,LPTABLE,18);
		
	    OPEN(IN,1);
	END;

«ff»
  						! RC 36-01053 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,20);
			    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-001053 PAGE 09 !
	PROCEDURE OPCOM;
	BEGIN
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 = -3 THEN OPMESS(DATASETNAME);
		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 12;
		IF LENGTH > 6 THEN DIRECTUPDATE;
		IF OPTEXT = START THEN GOTO 1070;
		IF OPTEXT = STOP  THEN GOTO 1000;
		IF OPTEXT = NEXTPARAM THEN GOTO 1060;
		IF OPTEXT = NL THEN GOTO 1020;
		IF OPTEXT = ENDLINE THEN GOTO 1020;
		IF PAR = -3 THEN
		BEGIN
		  IF LENGTH >9 THEN LENGTH:=9;
		  DATASETNAME:=INITINF;
		  MOVE(OPTEXT,0,DATASETNAME,0,LENGTH-1);
		  GOTO 1055;
		END;
		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);
1055:		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-01053 PAGE 10 !

	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 RDERROR;
	BEGIN
	    IF IN.Z0 SHIFT 1 < 0 THEN
	    BEGIN
		OFFLINE:=OFFLINE-1;
		IF OFFLINE > 0 THEN REPEATSHARE(IN);
	        OPMESS(MOUNTDISK);
		OFFLINE:=5;
	    END;
	    IF IN.Z0 AND 8'400 <> 0 THEN GOTO 9;
	    IF IN.Z0 AND 8'20 <> 0 THEN GOTO 10;

	    IF IN.Z0 SHIFT 1 > 0 THEN
	    BEGIN
		OPMESS(FDTXT);
		MASK:=IN.Z0;
		SHOWERROR;
	    END;
	    REPEAT OPSTOP;
		   IF OPTEXT = STOP THEN GOTO 1;
		   IF OPTEXT = SUSPEND THEN GOTO 12
	    UNTIL OPTEXT = START;
100:	    OPMESS(RUNTXT);
	    REPEATSHARE(IN);

	END;
«ff»

						! RC36-01053 PAGE 11 !

	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);
		MASK:=OUT.Z0;
		SHOWERROR;
		NEXTLP:=0;
		REPEAT OPSTOP UNTIL STOPPED > 1;
		IF STOPPED = 3 THEN GOTO 12;
		OPMESS(RUNTXT);
		IF OUT.Z0 AND 8'141362 <> 0 THEN
		REPEATSHARE(OUT);
	    END;
	END;

	PROCEDURE INITPOSITION;
	BEGIN
	    IF OUT.ZMODE = 0 THEN
	    BEGIN
		OPEN(OUT,7);
		PUTREC(OUT,1);
		OUT^.CCW:=FF;
	    END;
             IF FDUNIT >=0 THEN IF FDUNIT <=1 THEN GOTO 200;
             OPMESS(WRONGUNIT);
             REPEAT OPSTOP UNTIL STOPPED <>0;
             IF STOPPED = 1 THEN GOTO 1;
             IF STOPPED = 3 THEN GOTO 12;


	200: END;


«ff»

						! RC36-01053 PAGE 12 !


	BEGIN

	!INITIALIZATION !

	OPIN(OPSTRING);
	DATASETNAME:=INITINF;
	TPAR1:=-3;
	INBLOK:=1;
	BLOCKNO:=1;
	LABELPRINT:=FALSE;
	OFFLINE:=5;
	SAVEZCONV:=IN.ZCONV;
        FDUNIT:=0;


1:	OPCOM;

2:	INITPOSITION;
	! MAIN LOOP !
	IF LABELPRINT = TRUE THEN
	BEGIN
	  IF IN.ZMODE = 0 THEN
	  BEGIN
	    IN.ZNAME:=FD0;
	    IN.ZCONV:=0;
	    OPEN(IN,FDUNIT*256+17);
	    SETPOSITION(IN,0,7);


	    REPEAT
	    BEGIN
	      GETREC(IN,RECLENGTH);
	      BLOCKNO:=IN.ZBLOCK;
	      PUTREC(OUT,81);
	      OUT^.CCW:=SP2A;
	      MOVE(IN^,0,OUT^.DATA,0,80);
	    END
	    UNTIL BLOCKNO > 26;

  
	  CLOSE(IN,1);
	  CLOSE(OUT,0);
	  END;
	END; ! LABELPRINT !


«ff»

						! RC36-01053 PAGE 13 !


	! DATA PRINT !

3:	IN.ZNAME := D3740;
	IN.ZCONV:=SAVEZCONV;
	IF IN.ZMODE = 0 THEN OPEN3740;

	SETPOSITION(IN, 0, INBLOK);
	INITPOSITION;

7:	REPEAT
	BEGIN
	  GETREC(IN,RECLENGTH);
	  INBLOK:=IN.ZBLOCK;
	  PUTREC(OUT,RECLENGTH+1);
	  OUT^.CCW:=SP1A;
	  MOVE(IN^,0,OUT^.DATA,0,RECLENGTH);
	END
	UNTIL OPTEST <> 0;

	OPSTOP;
	IF STOPPED = 1 THEN GOTO 1;
	IF STOPPED = 3 THEN GOTO 12;
	GOTO 7;

	! END OF FILE HANDELING !

10:	CLOSE(IN,1);
	OPMESS(FDEOF);
	REPEAT OPSTOP UNTIL STOPPED <> 0;
	IF STOPPED = 1 THEN GOTO 1;
	IF STOPPED = 3 THEN GOTO 12;
	OPMESS(RUNTXT);
	INBLOK:=1;
	GOTO 3;


9:	OPMESS(EOJTXT);
	GOTO 13;

12:	OUT.ZMODE:=0;
	OPMESS(SUSTXT);

13:	CLOSE(IN,1);
	CLOSE(OUT,1);
	BLOCKNO:=1;
	INBLOK:=1;
	OFFLINE:=5;

	REPEAT OPSTOP UNTIL STOPPED <> 0;
	IF STOPPED = 1 THEN GOTO 1;
	IF STOPPED = 3 THEN GOTO 12;
	OPMESS(RUNTXT);
	GOTO 2;

	END;
«ff»
«nul»