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 - metrics - download

⟦89b7bb5a0⟧ TextFile

    Length: 23552 (0x5c00)
    Types: TextFile
    Notes: RCSL-43-GL-2135, RCSL-43-GL-2332, RCSL-43-GL-3715, RCSL-43-GL-3716, RCSL-43-GL-3717, RCSL-43-GL-619, RCSL-43-GL-622, RCSL-43-GL-625, RCSL-43-GL-763
    Names: »S2762«

Derivation

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

TextFile

!						RCSL:	43-GL 3716

						AUTHOR: CAMS

						EDITED:	77.01.16






















			PROGRAM RC36-00276.02

			IBM WORKSTATION INPUT PROGRAM.

			RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE/
			CASSETTE.

















KEYWORDS:	MUSIL,WORKSTATION-DEVICEHANDLER,CDR,PTR,3740,MTA,LISTING.

ABSTRACT:	IBM WORKSTATION DEVICE PROGRAM.
		DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE,
		DISKETTE, CASSETTE. THE DEVICES CAN BE HANDLED BY MEANS
		OF CON MODULE CONTROL CARDS. USE OF CON MUST BE WITH 
		STAT POSIBILITIES.
		BLOCK SIZES: MAGTAPE MAX=1080 BYTES. 
		THE DISKETTE MUST BE IN IBM FORMAT.
		MULTILEAVING, COMPRESSION FEATURE.

RCSL 43-GL 3715:	ASCII SOURCE TAPE.

RCSL 43-GL 3717:	BINARY TTY OBJECT TAPE.


«ff»
TITLE:	RD1 - CARDREADER/MAGTAPE/PAPERTAPE/DISKETTE.

ABSTRACT:	IBMWORKSTATION DEVICE PROGRAM.
		DEVICE HANDLER FOR CARDREADER,PAPERTAPE,MAGTAPE,
		IBM DISKETTES CASSETE. THE DEVICES CAN BE HANDLED BY MEANS
		OF CONTROL CARDS. USE OF CON MUST BE WITH
		STAT POSIBILITIES.
		BLOCK SIZE: MAGTAPE = 1080.
		THE DISKETTES MUST BE IN IBM FORMAT.
		MULTILEAVING, COMPRESSION FEATURE.

	

SIZE:		8204 BYTES. INCLUDING FOUR 80 BYTES CDR BUFFERS.
		COMMON BUFFERS: ONE 1080 BYTES MAGTAPE BUFFER.
		FOUR 80 BYTES PAPERTAPE BUFFERS. FOUR 128 BYTES DISKETTE 
		BUFFERS.

DATE:		JANUARY 16 TH. 77.




«ff»

RUNTIME PARAMETERS:

    PRIMARY INPUT= CARDREADER.
    SECONDARY INPUT= PAPERTAPE/MAGTAPE/DISKETTE/CASSETTE.


    SECONDARY INPUT CAN BE SELECTED BY MEANS OF CONTROL CARDS.
    AFTER END MEDIUM OR END OF FILE PROGRAM WILL SWITCH BACK
    TO CARD INPUT AGAIN.

    DEVICE: CARDREADER		WILL ALLWAYS BE READY FOR INPUT,
				UNLESS OTHERS COMMANDS HAVE
				BEEN GIVEN FROM MOTHER MODULE.
				( CON ).




    DEVICE: PAPERTAPE

	/*  READ PAPER		WILL SELECT PAPERTAPE AS INPUT.





    DEVICE: MAGTAPE OR CASSETTE TAPE

	/*  READ TAPE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE>


	/*  READ CASSETTE FILE=<NUMBER(S)> UNIT=<NUMBER> RECL=<RECSIZE>

	/*  READ CASSETTE F=X U=Y R=Z FORMAT=QQQ

				WILL SELECT MAG- OR CASSETTETAPE AS INPUT.
				MINIMUM OF ANSWERS MUST BE A FILE-
				NUMBER. DEFAULTS: UNIT=0, RECSIZE:=80.
				DEFAULT CASSETTE FORMAT IS:
				ECMA 34 VERSION 2 STANDARD.



    DEVICE: DISKETTE

 	/*  READ 3740 VOLID=<VOLNAME> DSN=<DATASETNAME> UNIT=<NUMBER>

				WILL SELECT IBM DISKETTES AS INPUT.
				MINIMUM OF ANSWERS MUST BE A DATASET-
				NAME. DEFAULT: UNIT=0. MAX NUMBER OF
				DATASET = 4 IN ONE CARD. 

«ff»
KEY WORDS AND THEIR MEANING:

	FORMAT=				CASSETTE TAPE STANDARDS:
					E2 MEANS ECMA 34 VERSION 2.
					E1 MEANS ECMA 34 VERSION 1.
					FREE MEANS NO CHECK IS PERFORMED.

	VOLID=				THE VOLUME LABEL ON THE
					DISKETTE. MAX 6 CHARACTERS.


	DSN=				THE DATASETNAME ON THE DISKETTE
					MAX 8 CHARACTERS.

	FILE= EQUAL TO F=		FILENUMBER ON THE MAGTAPE.

	UNIT= EQUAL TO U=		UNIT NUMBER ON DEVICE.

	RECL= EQUAL TO R=		MEANS RECSIZE ON MAGTAPE.
					IF SIZE > 80. 80 BYTES WILL
					BE TRANSFERRED UNTIL BLOCK <= 80.
					REST WILL BE FILLED UP WITH
					SPACES.

********NOTE THAT SPACE IS USED AS A TERMINATOR FOR STRING SO
********ITS NOT ALLOWED TO HAVE DATASETNAME WITH SPACES IN BETWEEN.
********ALSO THAT ITS NOT ALLOWED TO HAVE SPACES IN BETWEEN
********THE PARENTHESES IN COMMAND.


«ff»

EXAMPLES OF PARAMETER STRINGS:


    /*  READ PAPER			PAPERTAPE. 




    /*  READ TAPE FILE=1		MAGTAPE. MINIMUM OF ANSWERS.

    /*  READ TAPE F=1 U=2 R=70		READ FILE 1 UNIT NUMBER 2
					WITH RECORDSIZE = 70.

    /*  READ TAPE F=(1,4,2,3,5) R=60	READ THE FIVE FILES
					IN THE SEQUENCE MADE IN THE
					PARENTHESE.


  
    /*  READ CASSETTE FILE=1	        CASSETTE TAPE. MINIMUM OF ANSWERS.
					MEANING OF COMMANDS CORRESPONDS
					TO AS IF IT WAS A MAGTAPE.

    /*  READ CASSETTE R=70 U=1 F=(1,2,3) FORMAT=E1

					READ FROM CASSETTE WITH RECORD
					SIZE = 70 ON UNIT ONE AND
					THE FIRST THREE FILES.
					FORMAT IS ECMA 34 VERSION 1.


    /*  READ 3740 DSN=ALL		DISKETTE. MINIMUM OF ANSWERS
					WILL TRANSFER ALL DATASETS ON THE
					DISKETTE UNTIL A DDR1 IS MET.

    /*  READ 3740 DSN=(ALL)		WILL READ DATASET WITH NAME=
					ALL.

    /*  READ 3740 DSN=DATASETN		WILL READ DATASET WITH NAME=
					DATASETN.

    /*  READ 3740 VOLID=IBMIRD DSN=(JOB1,JOB2,JOB3,JOB4) U=1

					READ THE DATASET ON THE DISKETTE
					IN THIS SEQUENCE FROM UNIT = 1.
					MAX NUMBER OF DATASETS ON SAME
					CARD IS FOUR.
«ff»
DEVICE NAME AND THEIR MEANING:

	CDR				CARDREADER.
	MT0				MAGTAPE UNIT 0.
        CT0				CASSETTE TAPE UNIT 0.
	PTR				PAPERTAPE.
	3740				DISKETTE HANDLER.

HANDLING OF ERRORS:

SYNTAX ERRORS:

	SYNTAX ERRORS FROM A CONTROL CARD WILL BE DISPLAYED ON THE
	CONSOL WITH A OPERATOR INTERVENTION REQUIRED. THE ANSWER
	SHOULD BE EITHER TO CORRECT THE CARD BY WRITING
	THE COMMAND VIA  CON. OR IGNORE THE CARD VIA CON.


	EXAMPLE:
	/*  READ TAPE FILE=#
	WILL BE DISPLAYED AS:

	>RD1
	SYNTAX ERROR IN COMMAND:
	TAPE FILE=#

	OPERATOR INTERVENTION REQUIRED

	TO CORRECT THE ERROR WRITE:
	>CON
	RESTART RD1 TAPE FILE=1

	IF REGRETTING THE CARD WRITE:
	>CON
	RESTART RD1 IGNORE		PROGRAM WILL SKIP THIS
					COMMAND.


ERRORS WITH AUTOMATIC RESTART:


	ERROR WITH AUTOMATIC RESTART WILL RESULT IN A DISPLAY
	OF A LINE WITH THE STATUS AND THE DEVICENAME. TO HANDLE
	THIS MAKE DEVICE READY AND PROGRAM
	WILL START IT SELF.

	EXAMPLE:
	STATUS: MT0
		NOT READY		MEANS THAT DEVICE IS OFFLINE
					AND WAITING FOR CORRECTIONS.
				
					CORRECT ERROR BY MAKING THE
					DEVICE ONLINE.

	STATUS: PTR
		ENDMEDIUM		PAPERTAPE ERROR. THERE
					WAS NO ROLL AT INPUT 
					START.
					ACTION = LOAD PAPERTAPE.«ff»
HARD ERRORS BY MEANS OF OPERATOR INTERVENTION REQUIRED:

    ALL COMMANDS SHOULD START WITH A RESTART RD1 <ACTION>
    FROM CON.

>CON
RESTART RD1		MEANS REPEAT THE OPERATION.
RESTART RD1 SKIP	MEANS SKIP THE BLOCK.
RESTART RD1 ACCEPT	MEANS ACCEPT THE BLOCK.
RESTART RD1 IGNORE 	MEANS IGNORE DEVICE (UNLESS CARDREADER).





DEVICE	STATUS		REPEAT	ACCEPT  SKIP	IGNORE

PTR	NOT AVAILABLE	-	-	-	+
CDR	/RESERVED	-	-	-	+
3740			-	-	-	+
MT-			-	-	-	+



MT-	BLOCK LENGTH ERROR
			-	-	-	+




PTR	DATA LATE	+	+	+	+
CDR			+	+	+	+
3740			+	+	+	+
MT-			+	+	+	+

CDR	PARITY ERROR    +   	+	+	+
MT0			+	+	+	+
CT0			+	+	+	+


MT-	END MEDIUM	-	+	+	+



3740	POSITION ERROR	-	-	-	+
MT			-	-	-	+



PTR	DRIVER MISSING	-	-	-	+
CDR			-	-	-	+
3740			-	-	-	+
MT-			-	-	-	+



PTR	TIMEOUT		+	+	+	+
CDR			+	+	+	+
3740			+	+	+	+
MT-			-	+	+	+



«ff»
HOW TO HANDLE DISKETTE ERRORS:

    NORMAL JOB SEQUENCE IS THAT THE SELECT CARD IS READY FOR
    INPUT. AFTER "MOUNT DISKETTE" THEN MOUNT THE DISKETTE WITH
    CORRECT NAME AND PROGRAM WILL START AS SOON AS DEVICE
    IS READY. AT END OF DISKETTE A DISPLAY WILL OCCUR:
    "END OF DISKETTE". AND DISKETTE CAN BE TAKEN OUT. 
    FOR EACH SELECT CARD, DOOR MUST HAVE BEEN OPENED ONCE.
    IF THERE IS MORE DATASETNAMES WHICH SHOULD BE TRANSFERRED
    ON SAME CARD THEN DO NOT TOUCH DEVICE BEFORE END OF DISKETTE
    UNLESS AN ERROR COMMAND OCCURS.


    EXAMPLE:
 	>RD1
	MOUNT DISKETTE		MOUNT THE DISKETTE.
	END OF DISKETTE	 	TAKE DISKETTE OUT.

OUTPUT MESSAGES FROM 3740:

    VOLUME LABEL MISSING	VOLUME LABEL SECTOR NOT FOUND
				OR VOLUME ID ILLEGAL

    HEADER LABEL MISSING	HEADER LABEL SECTOR NOT FOUND

    DATASET NAME MISSING	THE TRANSFERRED DATASET NAME IS
				IS NOT FOUND BETWEEN SECTOR 8 AND 26

    FILE STARTS IN TRACK 0	THE DATASET IS PLACED ILLEGAL ON DISCETTE

    FILE ENDS ILLEGAL		THE DATASET IS PLACED ILLEGAL ON DISCETTE

   RECORD LENGTH ERROR		THE RECORD IS GREATER THEN 128
				OR LESS THAN 1 CHARACTERS

    SEQUENCE ERROR		THE SEQUENCE ARE NOT CONSECUTIVE 
				OR DO NOT START WITH 01.

    DEVICE RESERVED		ANOTHER PROGRAM USING FD DRIVER.

    FD DRIVER MISSING		FD DRIVER NOT IN CORE.

	AFTER ERROR THE LABEL WILL BE DISPLAYED ON THE CONSOLE   




    IF SOME OF ERRORS OCCURS ABOVE A RESTART COMMAND TO CON
    MUST BE GIVEN. AND EITHER THE CORRECT DISKETTE MUST BE
    MOUNTED OR A IGNORE COMMAND SHOULD BE GIVEN. IF SEQUENCE
    ERROR OCCURS THEN A RESTART RD1 COMMAND MEANS THAT
    ERROR WILL BE ACCEPTED AND THE REST OF THE SEQUENCE 
    CHECK WILL BE OUT OF SEQUENCE.
 ******** NOTE *********



    IF "PARITY ERROR" OR "POSITION ERROR" OR "TIMEOUT" OCCURS ON SCREEN
    THEN IT MEANS THAT THE DICETTE WAS IMPOSSIBLE TO
    READ. CONTACT RC AND GIVE A LOG WITH IF POSSIBLE.
!«ff»
!
AUTHOR:		DATE:		CHANGES:
CAMS		76.03.16	USING RC36-00217.01 TO MODIFY FOR
				DISKETTE INPUT.

CAMS		76.04.12	MODIFY PROGRAM FOR TAKING INPUT
				FROM CASSETTE.

CAMS		77.01.17	CHANGE MULTIPLE FILES COMMAND.




SPECIAL REQUIREMENTS:
   		RCSL: 43-GL622	CODEPROCEDURE FILL.
		RCSL: 43-GL763	CODEPROCEDURE COMPRESS.
		RCSL: 43-GL625	CODEPROCEDURE FINDPROCESS.
		RCSL: 43-GL2332	CODEPROCEDURE BUFRETUR. P0045.
		RCSL: 43-GL2135	CODEPROCEDURE GETEVENT. P0047.
		RCSL: 43-GL619	CODEPROCEDURE DELAY.

!«ff»
CONST
FD0=		"FD0<0><0><0>",
PTR=		"PTR<0><0><0>",
P3740=		"3740<0><0>",
CDR=		'CDR<0><0><0>',
CON=		'CON<0><0><0>',
MT0=		'MT0<0><0><0>',
CT0=		'CT0<0><0><0>',

PARAM="
	VOLID=<0>
	DSN=<0>
	FILE=<0>
	UNIT=<0>
	RECL=<0>
	F=<0>
	U=<0>
	R=<0>
	FORMAT=<0>
	",

NUMPAR=		48,	!NUMBER OF CHARACTER IN PARAM !
VVOLID=		1,
VDSN=		2,
VFILE=		3,
VUNIT=		4,
VRECL=		5,
VFORMAT=	6,
REDUNSPT=	5,	! NUMBER OF DIFFERENT POINTERS !
COMREDUNS=	3,	! NUMBER OF PARAMETERS WITH EQUAL MEANING !
LEFTPAR=	'(',
RIGHTPAR=	')',
EQUAL=		"=",
COMMA=		',',
SPACE=		' ',
ALL=		"ALL",




NORMALREAD=	1,
ECMAVER1=	9,
NOCHECK=	17,

E1=		"E1",
E2=		"E2",
FREE=		"FREE",
«ff»

STATUSTXT=	'STATUS: <0>',

RD1STATUS=	'<0>
		        NOT READY<10><0>
		<0>
		<0>
		<0>
		<0>
		        NOT AVAILABLE<10><0>
		<0>
		        BLOCKLENGTH ERROR<10><0>
		        DATA LATE<10><0>
		        PARITY ERROR<10><0>
		        END MEDIUM<10><0>
		        POSITION ERROR<10><0>
		        DRIVER MISSING<10><0>
		        TIMEOUT<10><0>
		<0>',


SYNTAXERROR=	"SYNTAX ERROR IN COMMAND: <10><0>",
INTERVTXT=	'<10>*** OPERATOR INTERVENTION REQUIRED<10><10>',
«ff»
MTMASK=			8'161776,
CTMASK=			8'171776,
MTMASKACTION=		2'0111001111111110,
MTMASKDISPLAY=		2'0100001011111110,
MTMASKRESTART=		2'0000001011101110,
MTMASKREP=		2'0110001011101110,

CRMASKACTION=		2'0110001011110110,
CRMASKDISPLAY=		2'0000001011100110,
CRMASKRESTART=		2'0000001011100110,
CRMASKREP=		2'0110001011010110,

DVMASKACTION=		2'0100011111010110,
DVMASKDISPLAY=		2'0100011011010110,
DVMASKRESTART=		2'0000011010000110,
DVMASKREP=		2'0110011000010110,

NOPROCESS=	1,
NOTPROCESSED=	8'4,

TRUE=		1,
FALSE=		0,
ZERO=		'<0><0><0><0><0><0><0><0>',
READCARD=	0,
READTAP=	1,
READPTR=	2,
READ3740=	3,

BLANK=		64,

MAXCARDS=	10,
SRCB=		'<8'200><0>',

SLASHSTAR=	'<97><92>',      ! /* !

B5B6B14=	8'003002, ! NO DISPLAY FROM RD1 MODUL	!
			  ! ONLY INTERVENTIONTEXT	!
SEQILLE=	8'003000, ! SEQUENCE ERROR FROM 3740 !
			  ! OR ILLEGAL		     !
OFFLINE=	8'040000,
EOF=		8'010400,	! BIT 3 IS FOR CASSETTE !
SOFTBLOKERROR=  8'201,
OFFLINENEEDED=	-1,
EOFCARD=	'<97><92><64><64><197><213><196><64>',   ! /*  END !

READ=		'<97><92><64><64><217><197><193><196><64>', ! /*  READ !


FILEPOS=	19,

LOGICALEOF=	'<3><8'200><0>',

DSKIP=		1,
DACCEPT=	2,

MINDUPL=	3,


«ff»
EO3740=		"END OF DISKETTE<10><0>",
LOAD3740=	"MOUNT DISKETTE <0>",


D3740=		"3740 ",
PAPER=		"PAPER ",
TAPE=		"TAPE ",
CASSETTE=	"CASSETTE ",

ONESEC=		10,
UNTILFOREVER=	-1,
REPRATE=	20,
NONEXISTING=	0,
NOTFOUND=	1,


IDLE=		0,
RUNNING=	1,
STOPPING=	2,

RESERVATION=	8'4,
RESTART=	8'400,
SENSE=		8'000000,

IMMEDIATE=	10000,
FIRSTLIM=	60,
SECONDLIM=	300,

SPANNED=	8'200,

MAXDATASET=	4,
MAXSIZE=	1080,
SIZE3740=	128,
PTRSIZE=	80,
ONE=		1,
FOUR=		4,

ACCEPT=		"ACCEPT",
IGNORE=		"IGNORE",
SKIP=		"SKIP",

NL=		"<10>",
«ff»
CRTABLE=	! CR CONTROLLER FORMAT TO EBCDIC
	   0   1   2   3   4   5   6   7 !
#
!   0 !   64 241 242 243 244 245 246 247
!   8 !  249  49  50  51  52  53  54  55
!  16 !  248 121 122 123 124 125 126 127
!  24 !   56  57  58  59  60  61  62  63
!  32 !  240  97 226 227 228 229 230 231
!  40 !  233  33  34  35  36  37  38  39
!  48 !  232 105 224 107 108 109 110 111
!  56 !   40  41  42  43  44  45  46  47
!  64 !   96 209 210 211 212 213 214 215
!  72 !  217  17  18  19  20  21  22  23
!  80 !  216  89  90  91  92  93  94  95
!  88 !   24  25  26  27  28  29  30  31
!  96 !  208 161 162 163 164 165 166 167
! 104 !  169 225  98  99 100 101 102 103
! 112 !  168 160 170 171 172 173 174 175
! 120 !  104  32 234 235 236 237 238 239
! 128 !   80 193 194 195 196 197 198 199
! 136 !  201   1   2   3   4   5   6   7
! 144 !  200  73  74  75  76  77  78  79
! 152 !    8   9  10  11  12  13  14  15
! 160 !  192 129 130 131 132 133 134 135
! 168 !  137  65  66  67  68  69  70  71
! 176 !  136 128 138 139 140 141 142 143
! 184 !   72   0 202 203 204 205 206 207
! 192 !  106 145 146 147 148 149 150 151
! 200 !  153  81  82  83  84  85  86  87
! 208 !  152 144 154 155 156 157 158 159
! 216 !   88  16 218 219 220 221 222 223
! 224 !  112 177 178 179 180 181 182 183
! 232 !  185 113 114 115 116 117 118 119
! 240 !  184 176 186 187 188 189 190 191
! 248 !  120  48 250 251 252 253 254 255
#,





«ff»
					! RC36-00184 PAGE 07 !
!    EBCDIC  => ASCII                      !

ASCIITAB = #
          

!          0   1   2   3   4   5   6   7   !

!   0 !   31  31  31  31  31  31  31  31
!   8 !   31  31  31  31  31  31  31  31
!  16 !   31  31  31  31  31  31  31  31
!  24 !   31  31  31  31  31  31  31  31
          
!  32 !   31  31  31  31  31  31  31  31
!  40 !   31  31  31  31  31  31  31  31
!  48 !   31  31  31  31  31  31  31  31
!  56 !   31  31  31  31  31  31  31  31
          
!  64 !   32  31  31  31  31  31  31  31
!  72 !   31  31  91  46  60  40  43  94
!  80 !   38  31  31  31  31  31  31  31
!  88 !   31  31  33  36  42  41  59  92
          
!  96 !   45  47  31  31  31  31  31  31
! 104 !   31  31  31  44  37  95  62  63
! 112 !   31  31  31  31  31  31  31  31
! 120 !   31  31  58  35  64  39  61  34
          
! 128 !   31  65  66  67  68  69  70  71
! 136 !   72  73  31  31  31  31  31  31
! 144 !   31  74  75  76  77  78  79  80
! 152 !   81  82  31  31  31  31  31  31
          
! 160 !   31  31  83  84  85  86  87  88
! 168 !   89  90  31  31  31  31  31  31
! 176 !   31  31  31  31  31  31  31  31
! 184 !   31  31  31  31  31  31  31  31
          
! 192 !   31  65  66  67  68  69  70  71
! 200 !   72  73  31  31  31  31  31  31
! 208 !   31  74  75  76  77  78  79  80
! 216 !   81  82  31  31  31  31  31  31
          
! 224 !   93  31  83  84  85  86  87  88
! 232 !   89  90  31  31  31  31  31  31
! 240 !   48  49  50  51  52  53  54  55
! 248 !   56  57  94  31  31  31  31  31
          
#;    ! END KEYOUTTAB !




«ff»
VAR
MASKACTION, MASKDISPLAY, MASKRESTART, MASKREP: INTEGER;

BUFFER:		STRING(MAXSIZE); ! COMMON BUFFER FOR TAP AND DEV !

STACK:		STRING(42);
STACKPT:	INTEGER;	! POINTER IN STACK !
RESULT:		INTEGER;
INDEX:		INTEGER;	! COMMAND INDEX	   !
READMODE:	INTEGER;	! INPUT MODE	   !

COMMAND:	RECORD
		MAX:		STRING(80) FROM 1;
		ACCEPT:		STRING(6) FROM 1;
		IGNORE:		STRING(6) FROM 1;
		SKIP:		STRING(4) FROM 1;
		NEXT:		STRING(5) FROM 3
		END;

COMADR:		INTEGER;

HELPI:		INTEGER; ! MUST ONLY BE MINUS IN 3740 OPSTART !
HELPA:		INTEGER;
HELPS:		STRING(1);
HELP:		STRING(12);
LINEMANAGER:	INTEGER;	! PROCESS DESCRIPTOR ADRESSES !
DRIVER:		INTEGER;
SENDER:		INTEGER;

DLIMIT:		INTEGER;	! CONTROL PARAMETERS !
DISPLAY:	INTEGER;
ENDMEDIUM:	INTEGER;
READFLAG:	INTEGER;

FILENO:		INTEGER;
CARDIMAGE:	STRING(80);

RCB:		STRING(2);	! DATA CONTROL PARAMETERS !
CARDNUMBER:	INTEGER;
COLUMNS:	INTEGER;
RESLENGTH:	INTEGER;
RECORDLENGTH:	INTEGER;
INDEXANDFLAG:	INTEGER;
WAITTIME:	INTEGER;

BUF:		INTEGER;	! MESSAGE BUFFER POINTERS !
SAVEBUF:	INTEGER;

KEYCOMMAND:	INTEGER;
CONVADR:	INTEGER;	! MUST NOT BE USED	!


STATUS:		INTEGER; ! THIS SEQUENCE MUST NOT BE MOVED !
RUNNINGSTATUS:	INTEGER;
FILECOUNT:	INTEGER;
RECORDCOUNT:	INTEGER;

BYTEADR:	INTEGER;
BYTECOUNT:	INTEGER;
BUFFERLENGTH:	INTEGER;

MESS0:		INTEGER;
MESS1:		INTEGER;
MESS2:		INTEGER;
MESS3:		INTEGER; ! END OF UNTOUCHNABLE SEQUENCE !
«ff»
IN:	FILE		! INPUT FILE DESCRIPTION !
	'CDR',		! NAME OF OUTPUT DRIVER !
	2,		! KIND =  BLOCKED. !
	4,		! NUMBER OF BUFFERS !
	80,		! SHARESIZE !
	U;		! UNDEFINED FORMAT !

	CONV
	CRTABLE;	! CONVERSIONTABLE !

	GIVEUP
	RD1ERROR,	! GIVEUPPROCEDURE !
	2'0110001011110110	! GIVEUPMASK !

	OF STRING(80);	! RECORD STRUCTURE !


TAP:	FILE		! MAGTAPE FILE DESCRIPTION !
	'MT0',		! NAME OF DRIVER !
	14,		! KIND: REPEATABLE, POSITIONABLE, BLOCKED !
	ONE,		! BUFFERS !
	ONE,		! SHARESIZE !
	FB;		! FIXEDLENGTH,BLOCKED FORMAT !

	GIVEUP
	TAPERROR,	! GIVEUP PROCEDURE !
	2'1110001111111110	! GIVEUPMASK !

	OF STRING(ONE);	! RECORD STRUCTURE !


DEV:	FILE		! DEVICE FILE DESCRIPTION !
	'XXX',		! NAME OF DRIVER		!
	14,		! KIND				!
	FOUR,		! BUFFERS			!
	ONE,		! SHARESIZE			!
	U;		! UNDEFINED			!
	GIVEUP 
	DEVERROR,	!				!
	2'0110011111010110;	! GIVEUPMASK		!
	CONV STACK    ! STRING FOR PARAMETERS TO 3740 !
	OF STRING(ONE);

«ff»
PROCEDURE MOVIN(	CONST	FROMSTR:	STRING(1);
			CONST	FROMINDX:	INTEGER;
			CONST	TOADR:		INTEGER;
			CONST	LENGTH:		INTEGER);
CODEBODY;

PROCEDURE MOVOUT(	CONST	FROMADR:	INTEGER;
			VAR	TO:		STRING(1);
			CONST	TOINDEX:	INTEGER;
			CONST   LENGTH:		INTEGER);
CODEBODY;


PROCEDURE GETEVENT(	VAR	SENDER:		INTEGER;
			VAR	BUF:		INTEGER;
			CONST	WAITTIME:	INTEGER;
			VAR	MESS0:		INTEGER);
CODEBODY P0047;


PROCEDURE BUFRETURN(	CONST	SENDER:		INTEGER;
			VAR	BUF: 		INTEGER;
			VAR	STATUS:		INTEGER);
CODEBODY P0045;


PROCEDURE FINDPROCESS(  VAR	PROCNAME:	STRING(6);
			VAR	PROCADDRESS:	INTEGER);
CODEBODY;


PROCEDURE COMPRESS(	VAR	STR:		STRING(1);
			CONST	STRLENGTH:	INTEGER;
			CONST	RESULT:		INTEGER;
			VAR	RESLENGTH:	INTEGER;
			CONST	MINDUP:		INTEGER);
CODEBODY;


PROCEDURE FILL(		CONST	VALUE:		INTEGER;
			CONST	T0:		STRING(1);
			CONST 	TOINDEX:	INTEGER;
			CONST	LENGTH:		INTEGER);
CODEBODY;



PROCEDURE SETSHARES(	FILE Z;
			CONST SHARES: INTEGER;
			CONST SHAREL: INTEGER;
			VAR BUFAREA:  STRING(1));
CODEBODY;


PROCEDURE DELAY(	CONST TIME:INTEGER);

CODEBODY;
«ff»

PROCEDURE SENDANSWER;
BEGIN
    BUFRETURN(LINEMANAGER, BUF, STATUS);
END;

PROCEDURE RETURNALL;
BEGIN
    RUNNINGSTATUS:= IDLE;
    STATUS:=0;
    WHILE BUF <> 0 DO SENDANSWER;
END;


PROCEDURE WAIT;
BEGIN				! WAIT FOR TIMER OR CONTROLMESSAGE !
31: SENDER:= LINEMANAGER;
    GETEVENT(SENDER,BUF,WAITTIME,MESS0);
    IF SENDER <> 0 THEN				! MESSAGE RECEIVED! 
    BEGIN
	IF COMADR = 0 THEN
	BEGIN
	    IF MESS0 AND RESERVATION <> 0 THEN COMADR:=MESS1; 
	    IF COMADR <> 0 THEN MOVOUT(COMADR,COMMAND,0,72); 
	    SENDANSWER;
	END ELSE
	BEGIN
	    IF MESS0 EXTRACT 2 <> 0 THEN GOTO 31;
	    MOVOUT(COMADR,COMMAND,0,72); 
	    SENDANSWER;
	END;
    END;
END;



PROCEDURE SETDISPLAY;
BEGIN
    DISPLAY:=IMMEDIATE;
    DLIMIT:=FIRSTLIM;
END;

«ff»
PROCEDURE SETMASK;
BEGIN
    IF READFLAG = READTAP THEN
    BEGIN
	MASKACTION:=MTMASKACTION;
	MASKDISPLAY:=MTMASKDISPLAY;
	MASKRESTART:=MTMASKRESTART;
	MASKREP:=MTMASKREP;
    END;
	
    IF READFLAG >= READPTR THEN
    BEGIN
	MASKACTION:=DVMASKACTION;
	MASKDISPLAY:=DVMASKDISPLAY;
	MASKRESTART:=DVMASKRESTART;
	MASKREP:=DVMASKREP;
    END;
    IF READFLAG = READCARD THEN
    BEGIN
	MASKACTION:=CRMASKACTION;
	MASKDISPLAY:=CRMASKDISPLAY;
	MASKRESTART:=CRMASKRESTART;
	MASKREP:=CRMASKREP;
    END;
END;



«ff»
PROCEDURE SCAN;
BEGIN
    HELPI:=0; HELPA:=INDEX;
0:
    MOVE(COMMAND,INDEX,HELP,HELPI,1);
    MOVE(COMMAND,INDEX,HELPS,0,1);
    IF INDEX > 80       THEN GOTO 2;
    IF HELPS = SPACE    THEN GOTO 2;
    IF HELPS = NL       THEN GOTO 2;
    IF HELPS = LEFTPAR  THEN GOTO 2;
    IF HELPS = RIGHTPAR THEN GOTO 2;
    IF HELPS = COMMA    THEN GOTO 2;
    INDEX:=INDEX+1;
    HELPI:=HELPI+1;
    IF HELPI < 10 THEN GOTO 0;

2:  HELPA:=INDEX-HELPA;
    INDEX:=INDEX+1;

END;


PROCEDURE TABLELOOKUP;
BEGIN
    HELPI:=0; HELPA:=INDEX; RESULT:=1; HELP:=ZERO;
0:  REPEAT
	MOVE(PARAM,HELPI,HELPS,0,1);
        MOVE(COMMAND,INDEX,HELP,0,1);
	IF HELP = NL THEN HELPI:=NUMPAR+1;
	IF HELP = SPACE THEN
	IF HELPA = INDEX THEN
	BEGIN
	    INDEX:=INDEX+1; HELPA:=INDEX;
	    GOTO 0;
	END;
	IF HELP = HELPS THEN
	BEGIN
	    HELPI:=HELPI+1;
	    INDEX:=INDEX+1;
	    GOTO 0;
	END;

	IF HELPS = ZERO THEN
	BEGIN
	    IF INDEX <> HELPA THEN
	    BEGIN
		IF RESULT > REDUNSPT THEN RESULT:=RESULT-COMREDUNS;
		GOTO 2;
	    END;
	    RESULT:=RESULT+1;
	END;

	HELPI:=HELPI+1;
	INDEX:=HELPA
    UNTIL HELPI >= NUMPAR;
    RESULT:=FALSE; HELPS:=HELP; GOTO 4;
2:
    SCAN;
4:
END;


«ff»
PROCEDURE ERROR;
BEGIN
    READFLAG:=READCARD;
    HELPI:=0;
    REPEAT
	MOVE(COMMAND,HELPI,HELPS,0,1);
	IF HELPI>= 78 THEN HELPS:=NL;
	HELPI:=HELPI+1
    UNTIL HELPS=NL;
    INSERT(0,COMMAND,HELPI); ! TO STOP OPMESS CORECTLY !
    OPMESS(SYNTAXERROR);
    OPMESS(COMMAND);
    OPMESS(INTERVTXT);
    SAVEBUF:=BUF;
    INSERT(0,COMMAND,2);

0:
    STATUS:=0;
    WAITTIME:=REPRATE;
    WAIT;
    IF COMMAND.IGNORE = IGNORE THEN
    BEGIN
	STATUS:=0; BUF:=SAVEBUF; GOTO 10;
    END;
    IF COMMAND.MAX <> CASSETTE THEN
    IF COMMAND.MAX <> TAPE     THEN
    IF COMMAND.MAX <> D3740    THEN
    IF COMMAND.MAX <> PAPER    THEN GOTO 0;

    BUF:=SAVEBUF;
END;
«ff»
PROCEDURE ANALYZE;
BEGIN
  «ff»
«ff»
«nul»