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

⟦c27c5e22d⟧ TextFile

    Length: 8704 (0x2200)
    Types: TextFile
    Notes: RCSL-43-GL-0619, RCSL-43-GL-2621, RCSL-43-GL-4403, RCSL-43-GL-5110, RCSL-43-GL-5681, RCSL-43-GL-5692, RCSL-43-GL-5704, RCSL-43-GL-7836, RCSL-43-GL-9392, RCSL-43-GL-9393, RCSL-43-GL-9394
    Names: »SRDAT«

Derivation

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

TextFile


!						RCSL:43-GL9393

						AUTHOR: PBP

						EDITED: 79.08.31


















			PROGRAM RC36-01186.00

			RECIEVE MODULE ON 
			MAGTAPE AT AN MCC

		** BRNO INTERNATIONAL TECHNICAL FAIR 79. **

				RDAT





















KEYWORDS:	MUSIL DEVICEHANDLER,MT0,LISTING

ABSTRACT:	DEVICEPROGRAM, OUTPUT ON MAGTAPE WITH
		A BLOCKSIZE OF 130 BYTES. THE PROGRAM RECIEVES
		FLOPPY DATA FROM AN RCC.

ASCII SOURCE:	RCSL: 43-GL9392
REL/BIN:	RCSL: 43-GL9394  MODIF X

!

«ff»

!

PROGRAM:	RC36-00000

TITLE:		RECIEVE MODULE ON MAGTAPE

ABSTRACT:	DEVICEPROGRAM. OUTPUT ON MAGTAPE WITH
		A BLOCKSIZE OF 130 BYTES. THE PROGRAM RECIEVES
		FLOPPY OR PAPERTAPE DATA FROM AN RCC.

SIZE:		XXXX BYTES.


RUNTIME PARAMETERS:
		THE PARAMETERS ARE GIVEN TO THIS MODULE VIA THE MAIN
		MODULE.

	:SF.	STARTS THE RECIEVE MODULE.  (HAS NO PARAMETERS)
	:FF.	FINIS THE RECIEVE MODULE.   (HAS NO PARAMETERS)

	:PS.	PROCESSING STATE. TYPES THE NUMBER OF BLOCKS
		ON MAGTAPE  (HAS NO PARAMETERS)

	:ER.	ERROR REPLY. THIS COMMAND MUST BE USED AS A REPLY TO
		A DEVICE ERROR MESSAGE.
		PARAMETERS	DESCRIPTION
		R		REPEAT THE FAULTY OPERATION.
		A		ACCEPT THE ERRONEUS DATA.



OUTPUT MESSAGES:
	    PAR ERROR		PARAMETER ERROR
	    COM ERROR		COMMAND ERROR
	    MOUNT NEXT TAPE	MOUNT A NEW TAPE TO CONTINUE
!

«ff»


!

SPECIAL REQUIREMENTS:
	CODEPROCEDURE	ARESERVE	RCSL: 43-GL4403.
	CODEPROCEDURE	SEARCHVALUE	RCSL: 43-GL2621.
	CODEPROCEDURE 	DELAY		RCSL: 43-GL0619.
	CODEPROCEDURE   OUTSTATUS	RCSL: 43-GL7836.
	CODEPROCEDURE	SETSHARE	RCSL: 43-GL5110.
	CODEPROCEDURE	GETTABLEADDRESS	RCSL: 43-GL5692.
	CODEPROCEDURE	OUTVALUE	RCSL: 43-GL5681.
	CODEPROCEDURE	MOVOUT		RCSL:43-GL5704.


!

«ff»


CONST

MAINKIND=	1,
MAINMASK=	8'000422,

MTKIND=		14,
MTSHARES=	1,
MTSHARESIZE=	130,
MTMASK=		8'163776,

RUNNING=	1,
STOPPED=	0,

MAINMODE=	1,
MTMODE=		3,

TRUE=		1,
FALSE=		0,

EM=		'<13><0>',
R=		'<82>',

B711=		8'000420,
B11=		8'000020,
HARDBITS=	8'101356,

TABNAME=	'CCM<0><0><0>',

«ff»


ERRORTXT=
'    <0>
****<0>',

BLOCKDISP=	'    NNNN BLOCKS=NNNNN<13><0>',
ENDFUNC=	'    END FUNCTION<13>',
PARAMERROR=	'    PAR ERROR<13>',
MOUNTTAPE=	'    MOUNT NEXT TAPE<13>',
COMERR=		'    COM ERROR<13>',

MTERRTXTS=
' DISCONNECTED<0>
 OFF-LINE<0>
 REWINDING<0>
 <0>
 <0>
 WRITE LOCK<0>
 ILLEGAL<0>
 <0>
 BLOCK ERROR<0>
 DATA LATE<0>
 PARITY ERROR<0>
 EOT<0>
 POSITION ERROR<0>
 DRIVER MISSING<0>
 TIMEOUT<0>
 <0>',

«ff»


START=		':SF',
FINIS=		':FF',
ERROR=		':ER',
GETPR=		':PS';



«ff»


VAR
AREA:	RECORD
	CONNECT:	INTEGER;
	STREAMNO:	INTEGER;
	SENDER:		INTEGER
	END;

PROGSTATE:	INTEGER;
COMMAND:	STRING(80);
COML:		INTEGER;
RECLENGTH:	INTEGER;
HELPST:		STRING(6);
EOV:		INTEGER;
MTERRORCODE:	INTEGER;
LENGTH:		INTEGER;
TEXTLINE:	STRING(80);
REST:		INTEGER;
RCCNO:		INTEGER;
ADR:		INTEGER;
CDADR:		INTEGER;
NAME:		STRING(4);
X:		INTEGER;
RCCID:		INTEGER;

DUMMY:		STRING(2);	! FROM DUMMY TO RCC7 THE !
BLOCKCOUNT:	INTEGER;	! SEQUENCE MUST NOT BE   !
RCC1,RCC2,RCC3:	INTEGER;	! CHANGED		 !
RCC4,RCC5,RCC6:	INTEGER;
RCC7:		INTEGER;


«ff»

MAIN:	FILE
	'XXX',
	MAINKIND,
	1,
	1,
	U;
	GIVEUP MAINERROR, MAINMASK
	OF STRING(1);

MT:	FILE
	'MT0',
	MTKIND,
	MTSHARES,
	MTSHARESIZE,
	U;
	GIVEUP MTERROR, MTMASK
	OF STRING(MTSHARESIZE);




«ff»



	PROCEDURE SEARCHVALUE	(VAR COMMAND:	STRING(2);
				 CONST VALUE:	INTEGER;
				 VAR LENGTH:	INTEGER);
	CODEBODY P0059;

	PROCEDURE ARESERVE	(VAR SENDER:	INTEGER;
				 VAR ZNAME:	STRING(6);
				 VAR AREA:	INTEGER);
	CODEBODY P0138;

	PROCEDURE DELAY		(CONST TIME:	INTEGER);
	CODEBODY;

	PROCEDURE OUTSTATUS	(CONST BITS:	INTEGER;
				 CONST TEXTARRAY: STRING(1);
				 VAR TEXTLINE:	STRING(1);
				 VAR INDEX:	INTEGER);
	CODEBODY P0209;

	PROCEDURE SETSHARE	(FILE FILENAME;
				 CONST  NOOFSHARES:    INTEGER;
				 CONST  SHARELENGTH:   INTEGER;
				 VAR  SHAREADR:	     INTEGER;
				 CONST  OFFSET:	     INTEGER);
	CODEBODY P0130;

	PROCEDURE OUTVALUE	(VAR RESULT:	INTEGER;
				 CONST FROMADR: INTEGER;
				 CONST ATYPE:	INTEGER);
	CODEBODY P0122;

	PROCEDURE GETTABLEADDRESS (VAR ADR:	INTEGER;
				   CONST IDENT:	STRING(6));
	CODEBODY P0125;

	PROCEDURE MOVOUT	(CONST FROMADR:	INTEGER;
				 VAR TOSTR:	STRING(1);
				 CONST TOINDEX:	INTEGER;
				 CONST COUNT:   INTEGER);
	CODEBODY P0161;

«ff»


PROCEDURE PROCESSSTATE;
BEGIN
    GETTABLEADDRESS(ADR,TABNAME);
    ADR:=ADR+26;
    OUTVALUE(CDADR,ADR,2);		! ADDRESS OF CDTABLE !
    X:=4;
    REPEAT
	REPEAT
	    CDADR:=CDADR+8;
	    OUTVALUE(RCCID,CDADR,2);
	    IF RCCID=0 THEN GOTO 5;
	    MOVOUT(CDADR+2,NAME,0,4)
	UNTIL RCCID AND AREA.STREAMNO<>0;
	MOVE(NAME,0,BLOCKDISP,4,4);
	MOVE(DUMMY,X,DUMMY,2,2);
	BINDEC(BLOCKCOUNT,HELPST);
	MOVE(HELPST,0,BLOCKDISP,16,5);
	OPMESS(BLOCKDISP);
	X:=X+2
    UNTIL 1<>1;
5:
END;



«ff»


PROCEDURE OPERATOR;
BEGIN
    OPWAIT(COML);
    IF COMMAND=START THEN GOTO 99
    ELSE
    IF COMMAND=FINIS THEN GOTO 11000
    ELSE
    IF COMMAND=GETPR THEN PROCESSSTATE
    ELSE
    IF COMMAND=ERROR THEN
    BEGIN
	MOVE(COMMAND,COML-2,HELPST,0,1);
	MTERRORCODE:=0;
    END
    ELSE
    OPMESS(COMERR);
99:    OPIN(COMMAND);
END;


«ff»


PROCEDURE CHANGETAPE;
BEGIN
    CLOSE(MT,TRUE);
    OPMESS(MOUNTTAPE);
    OPEN(MT,MTMODE);
    MTERRORCODE:=0;
    SETPOSITION(MT,1,1);
    EOV:=FALSE;
END;



«ff»



PROCEDURE OUTERROR;
BEGIN
    IF LENGTH AND HARDBITS=0 THEN LENGTH:=8'100000
			     ELSE LENGTH:=8'040000;
    COML:=0;
    OUTSTATUS(LENGTH,ERRORTXT,TEXTLINE,COML);
END;

PROCEDURE MAINERROR;
BEGIN
    IF MAIN.Z0 AND B711 <> 0 THEN GOTO 200;
    IF MAIN.Z0 AND 2<>0 THEN
    BEGIN
	REST:=REST+MAIN.ZREM;
	IF OPTEST<>0 THEN OPERATOR;
	REPEATSHARE(MAIN);
    END;
END;

PROCEDURE MTERROR;
BEGIN
    IF MT.Z0=B11 THEN IF MT.ZMODE EXTRACT 2=3 THEN
    BEGIN
	EOV:=TRUE;
	GOTO 999;
    END;
    IF MTERRORCODE=0 THEN
    BEGIN
	MTERRORCODE:=MT.Z0;
	LENGTH:=MT.Z0;
	OUTERROR;
	OUTSTATUS(8'100000,MT.ZNAME,TEXTLINE,COML);
	OUTSTATUS(MT.Z0,MTERRTXTS,TEXTLINE,COML);
	MOVE(EM,0,TEXTLINE,COML,2);
	OPMESS(TEXTLINE);
    END;
    IF MTERRORCODE AND HARDBITS=0 THEN
    BEGIN
	DELAY(10);
	IF OPTEST<>0 THEN OPERATOR;
	REPEATSHARE(MT);
    END;
    REPEAT OPERATOR UNTIL COMMAND=ERROR;
    IF HELPST=R THEN REPEATSHARE(MT);
999:
END;


«ff»

    BEGIN
100:	AREA.SENDER:=0;
	ARESERVE(AREA.SENDER,MAIN.ZNAME,AREA.CONNECT);
	INSERT(0,COMMAND,0);
	INSERT(0,COMMAND,1);
	MOVE(COMMAND,0,COMMAND,2,78);
	WAITZONE(MT);
	SETSHARE(MAIN,1,130,MT.ZTOP,0);
	MTERRORCODE:=0;      

	OPIN(COMMAND);
110:    PROGSTATE:=STOPPED;
	REPEAT OPERATOR UNTIL COMMAND=START;
	PROGSTATE:=RUNNING;
	
	EOV:=FALSE;  
	OPEN(MT,MTMODE);
	MTERRORCODE:=0;
	SETPOSITION(MT,1,1);
	OPEN(MAIN,AREA.STREAMNO+MAINMODE);	!CONNECT MODULE!




«ff»



200:	REPEAT
	BEGIN
	    ARESERVE(AREA.SENDER,MAIN.ZNAME,AREA.CONNECT);
	    REST:=0;
	    GETREC(MAIN,RECLENGTH);
	    RCCNO:=BYTE MAIN^ SHIFT (-4);	! RCCNO !
	    IF RCCNO>=20 THEN RCCNO:=RCCNO-4;
	    RCCNO:=RCCNO*2;
	    RECLENGTH:=RECLENGTH+REST;
	    MAIN.ZTOP:=MAIN.ZTOP+REST;
	    MTERRORCODE:=0;
	    MT.ZREM:=0;
	    IF RECLENGTH<130 THEN MT.ZREM:=130-RECLENGTH;
	    OUTBLOCK(MT);
	    MOVE(DUMMY,RCCNO,DUMMY,2,2);
	    BLOCKCOUNT:=BLOCKCOUNT+1;
	    MOVE(DUMMY,2,DUMMY,RCCNO,2);
	    IF EOV=TRUE THEN CHANGETAPE;
	END
	UNTIL OPTEST<>0;
	OPERATOR;
	GOTO 200;


«ff»


10000:
	CLOSE(MAIN,TRUE);		!DISCONNECT MODULE!
	CLOSE(MT,TRUE);			
	PROCESSSTATE;
	OPMESS(ENDFUNC);
	PROGSTATE:=STOPPED;
	GOTO 110;

11000:
    IF MTERRORCODE<>0 THEN MT.ZMODE:=0;
    IF MT.ZMODE<>0 THEN CLOSE(MT,TRUE);
    IF MAIN.ZMODE<>0 THEN CLOSE(MAIN,TRUE);
    PROCESSSTATE;
    OPMESS(ENDFUNC);
    OPMESS(COMMAND);
    GOTO 100;

    END;
«ff»
«nul»