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

⟦ccbbd980e⟧ Bits:30000867 PROGRAM RC36-00016.00 - MUS SINGLE USER EDITOR, 8-hole paper tape, TextFileEven

    Length: 28842 (0x70aa)
    Description: Bits:30000867 PROGRAM RC36-00016.00 - MUS SINGLE USER EDITOR
    Types: 8-hole paper tape, TextFileEven

TextFileEven

!						RCSL:	43-GL124

						AUTHOR: CAMS

						EDITED: 75.04.23

























			PROGRAM RC36-00016.00

			MUS SINGLE USER EDITOR


















KEYWORDS:	MUSIL,EDITOR,SINGLE USER,LISTING

ABSTRACT:	THIS PROGRAM HAS FOLLOWING INPUT DEVICES:
		PAPERTAPE-READER, CARD-READER, CASSETTE,
		MAGTAPE. OUTPUT DEVICES ON PAPERTAPE-PUNCH
		CASSETTE, MAGTAPE, LINEPRINTER;

ASCII SOURCE	RCSL: 43-GL 125
BINARY / TTY	RCSL: 43-GL 126

«ff»
					  RC36-00016 PAGE 01  

ABSTRACT:	THIS PROGRAM HAS FOLLOWING INPUT DEVICES:
		PAPERTAPE-READER, CARD-READER, CASSETTE,
		MAGTAPE. OUTPUT DEVICES ON PAPERTAPE-PUNCH
		CASSETTE, MAGTAPE, LINEPRINTER.

SIZE:		12960 BYTES. INCLUDING ONE 512 BYTES INPUT BUFFER
		AND ONE 512 BYTES OUTPUT BUFFER.

DATE:		APRIL 23TH 1975.


OUTPUT MESSAGES:


    DEVICE ERROR:	CONSULT THE RC3600 OPERATORS MANUAL

    COMMAND ERROR:	CONSULT THE MUSIL TEXT EDITOR


INPUT MESSAGES:

    INPUT COMMAND	CONSULT THE MUSIL TEXT EDITOR

































SPECIAL REQUIREMENTS: 	NONE
!
«ff»
					! RC36-00016 PAGE 02 !
CONST     
          
ERMS2=          "BUFFER IS FULL - Y OR A INPUT IS TERMINATED<10><0>",
ERMS3=          "STRING NOT FOUND<10><0>",
ERMS4=          "NO SUCH FILE<10><0>",
ERMS5=          'PARITY ERROR IN LINE NUMBER        <10><0>',
ERMS6=          "NO INPUT FILE<10><0>",
ERMS7=          "NO OUTPUT FILE<10><0>",
ERMS8=          '<10>BUFFER CAPACITY EXCEEDED DURING COMMAND INPUT<10>
COMMAND IS TERMINATED<10><0>',
ERMS9=          '??<10><10><0>',
ERMS10=         'WRONG FILENUMBER<10><0>',
ERMS11=         'MACRO CONTENTS X IN COMMAND <10><0>',
ERMS12=         'FILE ALREADY EXIST<10><0>',
ERMS13=         '<10>CORRECT ERROR WRITE STOP/START <0>',
ERMS14=         'MACRO UNDEFINED <10><0>',
NEWLINE=        "<10>",
SPACE=          "<32>",
ESCAPE=         "<36>",
ESCAPENEWLINE=  "<36><10><0>",
ASTERISK=       "<42>",
DOLLAR=         36,
ERRORS=         ' ERROR ',
NEW=            'NEW',
SP=             'SP',
FD=             'FD',
PTP=            'PTP',
CT=             'CT',
MT=             'MT',
LPT=            'LPT',
LPTC=           'LPTC',
DEVICECOUNT=    108,
DEVICES=        'MT0<0><0><0><14><5><3>
MT1<0><0><0><14><5><3>
MT2<0><0><0><14><5><3>
MT3<0><0><0><14><5><3>
SP<0><0><0><0><1><0><3>
CT0<0><0><0><14><1><3>
CT1<0><0><0><14><1><3>
PTR<0><0><0><1><9><0>
PTP<0><0><0><1><0><11>
FD0<0><0><0><14><1><3>
LPT<0><0><0><1><0><3>
LPTC<0><0><1><0><3>
CDRC<0><0><2><9><0>',
STOP=           'STOP',
BINARYZERO=     '<0><0><0><0><0><0>',

«ff»
					! RC36-00016 PAGE 03 !

A=		65,		! COMMAND APPEND PAGE TO BUFFER !
B=		66,		! COMMAND SET POINTER TO BUFFER START !
C=		67,		! COMMAND CHANGE A STRING	!
D=		68,		! COMMAND DELETE A CHARACTER STRING !
E=		69,		! COMMAND TERMINATE, COPY AT END !
F=		70,		! COMMAND PUNCH LEADER OR FF	!
G=		71,		! COMMAND SET FILE		!
H=		72,		! COMMAND AS E PLUS DRIVER RELEASE !
I=		73,		! COMMAND INSERT STRING 	!
J=		74,		! COMMAND SET POINTER TO LINE J !
K=		75,		! COMMAND DELETE A LINE STRING	!
L=		76,		! COMMAND SET POINTER RELATIVE	!
M=		77,		! COMMAND SET POINTER RELATIVE	!
N=		78,		! COMMAND SEARCH STRING OVER MORE PAGES!
P=		80,		! COMMAND PUNCH BUFFER		!
Q=		81,		! COMMAND SEARCH STRING OVER MORE PAGES!
R=		82,		! COMMAND REPLACE BUFFER	!
S=		83,		! COMMAND SEARCH STRING IN BUFFER !
T=		84,		! COMMAND TYPE BUFFER		!
X=		88,		! COMMAND MACRO !
Y=		89,		! COMMAND READ A PAGE TO BUFFER !
W=		87,		! COMMAND HELP CHARACTER !
Z=		90,		! COMMAND SET POINTER TO BUFFER END !
COLON=		58,		! COMMAND DISPLAY NUMBER OF LINES !
DOT=		46,		! COMMAND DISPLAY CURRENT LINE NO !
EQUAL=		61,		! COMMAND DISPLAY NO OF CHARS IN BUF !

BUFFERSIZE=	4800,		! SIZE OF TEXT/COMMAND BUFFER	!
BUFFERSIZEM3=	4797;		! LAST COMMAND POSITION IN BUF. !

«ff»
					! RC36-00016 PAGE 04 !
VAR

OPSTRING:	STRING(80);	! OPERATOR INPUT BUFFER 	!
BUFFER: 	STRING(BUFFERSIZE);  ! TEXT + COMMAND BUFFER	!
NEWNAME:	STRING(6);
COMPT:		INTEGER;	! COMMAND POINTER		!
PRVCH:		STRING(2);	! SAVED PREVIOUS CHARACTER	!
TABSIM: 	INTEGER;	! TABULATOR SIMULATION COUNT	!
OPLENGTH:	INTEGER;	! OPERATOR INPUT LENGTH 	!
LAST:		INTEGER;	! FIRST FREE POSITION IN BUFFER !
SAVPT:		INTEGER;	! SAVED COMMAND POINTER 	!
ARGUMENT:	INTEGER;	! COMMAND ARGUMENT		!
RADIX:		INTEGER;	! COMMAND ARGUMENT RADIX	!
SIGN:		INTEGER;	! COMMAND ARGUMENT SIGN 	!
COMCHAR:	INTEGER;	! CHARACTER FROM COMMAND STRING !
COMMAND:	INTEGER;	! COMMAND FROM COMMAND STRING	!
CURPT:		INTEGER;	! TEXT POINTER			!
LINENO: 	INTEGER;	! LINE NUMBER BINARY		!
DECLINENO:	STRING(6);	! LINE NUMBER DECIMAL		!
SCANPT: 	INTEGER;	! POINTER FROM WHICH CR IS SCANNED !
SLIDELENGTH:	INTEGER;	! NO OF CHARACTERS TO SLIDE TEXT !
LOOPARGUMENT:	INTEGER;	! LOOP COUNT FOR REPLACE COMMAND !
TEGN:		INTEGER;	! I/O CHARACTER BUFFER		!
BUFFERPT:	INTEGER;	! POINTS AT END OF COMPT BUFFER !
CHAR1:		STRING(1);	! HELP CHARACTER		!
CHAR2:		STRING(1);	! HELP CHARACTER		!
VAR1:		INTEGER;	! HELP VARIABEL 		!
VAR2:		INTEGER;	! HELP VARIABEL 		!
VAR3:		INTEGER;	! HELP VARIABEL 		!
OLDDRIVENO:	INTEGER;	! TEST FOR INIT OF DISC 	!
LPTCHECK:	INTEGER;	! LINEPRINTER CALL CHECK	!
MACROPT:	INTEGER;	! POINTS AT START OF MACRO	!
MACROCHECK:	INTEGER;	! TEST FOR MACRO ARE RECURSIVE	!
SAVCOMPT:	INTEGER;	! SAVE COMPT DURING MACRO	!
ERRO1:		INTEGER;	! DEVICE ERROR VARIABEL 	!
ERRO2:		INTEGER;	! DEVICE ERROR VARIABEL 	!
FILECOUNT:	INTEGER;	! FILECOUNT FOR BOT		!
LAZYARG:	INTEGER;	! COUNTS FOR EXECUTION OF MACRO !
DRIVENO:	INTEGER;	! DISC DRIVE NUMBER		!
BLOCKNO:	INTEGER;	! BLOCKNUMBER			!
FILENO: 	INTEGER;	! FILENUMBER			!
KIND:		INTEGER;	! KIND FOR DEVICE		!
INMODE: 	INTEGER;	! MODE FOR INPUT DEVICE 	!
OUTMODE:	INTEGER;	! MODE FOR OUTPUT DEVICE	!

OPOUT:	FILE 'TTY',
	2,
	1,
	40,
	UB
	OF STRING(1);

IN:	FILE "PTR",		! INPUT ZONE DESCRIPTOR 	!
	1,			! KIND				!
	1,			! SHARES		      !
	255,			! SHARESIZE			!
	U;			! UNFORMATTED			!
	GIVEUP INERROR, 8'161777
	OF STRING(512); 	!				!

OUT:	FILE "PTP",		! OUTPUT ZONE DESCRIPTOR	!
	1,			! KIND				!
	1,			! SHARES		      !
	255,			! SHARESIZE			!
	UB;			! UNFORMATTED BLOCKED		!
	GIVEUP OUTERROR, 8'143777
	OF STRING(512); 	!				!

«ff»
					! RC36-00016 PAGE 05 !
	PROCEDURE FILEMARK;
	BEGIN
	    IF COMMAND = N THEN
	    BEGIN
		VAR3:=OUT.ZFILE+1;
		CLOSE(OUT,0); OPEN(OUT,3);
		SETPOSITION(OUT,VAR3,1);
	    END;
	END;

	PROCEDURE ERROROPMESS;
	BEGIN
	    OPMESS(ERRORS);
	    ERRO2:=20;
	    WHILE ERRO1 > 0 DO
	    BEGIN
		ERRO2:=ERRO2+1;
		ERRO1:=ERRO1 SHIFT 1;
	    END;
	    BINDEC(ERRO2,DECLINENO);
	    OPMESS(DECLINENO);
	    OPMESS(NEWLINE);
	    OPMESS(ERMS13);
	    OPIN(OPSTRING);
	    OPWAIT(ERRO1);
	    IF OPSTRING = STOP THEN GOTO 1000;
	END;

	PROCEDURE INERROR;
	BEGIN
	    IF IN.Z0 AND 8'000040 <> 0 THEN GOTO 5095;
	    IF IN.Z0 AND 8'000020 <> 0 THEN
	    BEGIN
		IF IN.ZREM <> 0 THEN GOTO 5095;
		IN.ZFIRST:=IN.ZTOP; INSERT(25,IN^,0);
		IN.ZREM:=1;
		GOTO 5095;
	    END;
	    IF IN.Z0 AND 8'040000 <> 0 THEN
	    IF IN.ZKIND = 8'76 THEN
	    BEGIN
		OPMESS(ERMS4);
		GOTO 2060;
	    END;
	    IF IN.Z0 AND 8'000400 <> 0 THEN
	    BEGIN
		IF COMMAND <> N THEN GOTO 5093;
		FILECOUNT:=FILECOUNT+1;
		IF FILECOUNT = 2 THEN
		BEGIN
5093:		    IN.ZFIRST:=IN.ZTOP; INSERT(25,IN^,0); IN.ZREM:=1;
		    LAST:=0;
		END;
		IF OUT.ZNAME = CT THEN FILEMARK;
		IF OUT.ZNAME = MT THEN FILEMARK;
		GOTO 5095;
	    END;
	    OPMESS(IN.ZNAME);
	    ERRO1:=IN.Z0;
	    ERROROPMESS;
	    REPEATSHARE(IN);
5095:	END;

«ff»
					! RC36-00016 PAGE 06 !
	PROCEDURE OUTERROR;
	BEGIN
	    IF OUT.ZKIND = 8'76 THEN
	    BEGIN
		IF OUT.Z0 AND 8'040000 <> 0 THEN OPMESS(ERMS4);
		IF OUT.Z0 AND 8'020000 <> 0 THEN OPMESS(ERMS12);
		IF OUT.Z0 AND 8'117777 <> 0 THEN GOTO 5085;
		GOTO 2060;
	    END;
5085:	    OPMESS(OUT.ZNAME);
	    ERRO1:=OUT.Z0;
	    ERROROPMESS;
	    REPEATSHARE(OUT);
	END;

	PROCEDURE GETACHARACTER;
	BEGIN
	    REPEAT
	    MOVE(BUFFER,COMPT,CHAR1,0,1);
	    COMCHAR:=BYTE CHAR1;
	    COMPT:=COMPT+1
	    UNTIL COMCHAR <> 13;
	END;

	PROCEDURE SIMULATETABS;
	BEGIN
	    REPEAT
		OUTCHAR(OPOUT,32);
		TABSIM:=TABSIM+1
	    UNTIL TABSIM AND 7 = 0;
	    OUTBLOCK(OPOUT);
	END;

	PROCEDURE SLIDESTRING;
	BEGIN
	    VAR1:=LAST; VAR3:=80;
	    REPEAT
		IF VAR1-CURPT < 80 THEN VAR3:=VAR1-CURPT;
		MOVE(BUFFER,VAR1-VAR3,OPSTRING,0,VAR3);
		VAR1:=VAR1-VAR3;
		MOVE(OPSTRING,0,BUFFER,VAR1+SLIDELENGTH,VAR3)
	    UNTIL VAR1= CURPT;
	    LAST:=LAST+SLIDELENGTH;
	END;


	PROCEDURE FEED;
	BEGIN
	    VAR3:=10;
	    REPEAT
		OUTCHAR(OUT,0);
		VAR3:=VAR3-1
	    UNTIL VAR3 <= 0;
	END;

	PROCEDURE CALCULATELINENO;
	BEGIN
	    VAR1:=0;
	    WHILE VAR1 < LAST DO
	    BEGIN
		MOVE(BUFFER,VAR1,CHAR1,0,1);
		IF BYTE CHAR1 = 13 THEN LINENO:=LINENO+1;
		VAR1:=VAR1+1
	    END;
	END;

«ff»
					! RC36-00016 PAGE 07 !
	PROCEDURE INSERTSTRING;
	BEGIN
	    VAR2:=COMPT;
	    MOVE(BUFFER,COMPT,CHAR1,0,1);
	    WHILE BYTE CHAR1 <> 27 DO
	    BEGIN
		MOVE(BUFFER,COMPT,CHAR1,0,1);
		COMPT:=COMPT+1;
	    END;
	    IF COMPT = VAR2 THEN GOTO 5025;
	    SLIDELENGTH:=COMPT-(VAR2+1);
	    IF SLIDELENGTH + LAST > BUFFERPT - 25 THEN
	    BEGIN
		OPMESS(ERMS8);
		COMPT:=0; LAZYARG:=0; GOTO 1000;
	    END;
	    SLIDESTRING;
	    MOVE(BUFFER,VAR2,BUFFER,CURPT,SLIDELENGTH);
	    CURPT:=CURPT+SLIDELENGTH;
5025:	END;

	PROCEDURE SCANCR;
	BEGIN
	    IF ARGUMENT > 0 THEN
	    BEGIN
		REPEAT
		MOVE(BUFFER,SCANPT,CHAR1,0,1);
		IF BYTE CHAR1 = 13 THEN ARGUMENT:=ARGUMENT-1;
		IF SCANPT >= LAST THEN
		BEGIN
		    SCANPT:=LAST;
		    GOTO 5010;
		END;
		SCANPT:=SCANPT+1
		UNTIL ARGUMENT <1;
		GOTO 5010;
	    END;
	    IF ARGUMENT <=0 THEN
	    BEGIN
		MOVE(BUFFER,SCANPT,CHAR1,0,1);
		IF BYTE CHAR1 = 13 THEN SCANPT:=SCANPT-1;
		REPEAT
		MOVE(BUFFER,SCANPT,CHAR1,0,1);
		IF BYTE CHAR1 = 13 THEN ARGUMENT:=ARGUMENT+1;
		SCANPT:=SCANPT-1;
		IF SCANPT < -1 THEN ARGUMENT:=1
		UNTIL ARGUMENT > 0;
		SCANPT:=SCANPT+2;
	    IF SCANPT < 0 THEN SCANPT:=0;
	    END;
5010:	END;

«ff»
					! RC36-00016 PAGE 08 !

	PROCEDURE LASTESCAPE;
	BEGIN
	    MOVE(BUFFER,VAR1+1,CHAR1,0,1);
	    IF BYTE CHAR1 = 27 THEN
	    BEGIN
		IF BYTE PRVCH <> 8 THEN OUTCHAR(OPOUT,36);
		VAR1:=BUFFERSIZEM3;
	    END;
	    TEGN:=36;
	END;

	PROCEDURE HELPPRINT;
	BEGIN
		IF OPTEST <> 0 THEN LINENO:=0;
		MOVE(BUFFER,VAR1,CHAR1,0,1);
		TEGN:=BYTE CHAR1;
		IF TEGN > 31 THEN TABSIM:=TABSIM+1;
		IF TEGN < 32 THEN
		BEGIN
		    IF TEGN = 12 THEN
		    BEGIN
			OUTCHAR(OPOUT,94);
			OUTCHAR(OPOUT,76);
			TABSIM:=0;
			GOTO 5030;
		    END;
		    IF TEGN = 27 THEN LASTESCAPE;
		    IF TEGN = 13 THEN
		    BEGIN
			TABSIM:=0;
			LINENO:=LINENO-1;
		    END;
		    IF TEGN = 9 THEN
		    BEGIN
			SIMULATETABS;
			GOTO 5030;
		    END;
		END;
		OUTCHAR(OPOUT,TEGN);
5030:		VAR1:=VAR1+1;
		IF VAR1 = LAST THEN LINENO:=0;
	END;

«ff»
					! RC36-00016 PAGE 09 !

	PROCEDURE TYPECOMMAND;
	BEGIN
	    TABSIM:=0; LAZYARG:=0;  VAR1:=SAVPT; COMPT:=0;
	    WHILE VAR1 < BUFFERSIZEM3 DO HELPPRINT;
	    OUTBLOCK(OPOUT);
	END;

	PROCEDURE SEARCHSTRING;
	BEGIN
	    VAR2:=COMPT;
	    WHILE CURPT <= LAST DO
	    BEGIN
		MOVE(BUFFER,CURPT,CHAR1,0,1);
		MOVE(BUFFER,VAR2,CHAR2,0,1);
		IF BYTE CHAR2 = 27 THEN GOTO 5000;
		IF BYTE CHAR1 <> BYTE CHAR2 THEN
		BEGIN
		    CURPT:=CURPT-(VAR2-COMPT)+1;
		    VAR2:=COMPT;
		    GOTO 5004;
		END;
		CURPT:=CURPT+1;
		VAR2:=VAR2+1;
5004:	    END;
	    IF CURPT >=LAST THEN CURPT:=0;
5000:	    ARGUMENT:=VAR2-COMPT;
	    COMPT:=VAR2+1;
	END;

	PROCEDURE LINEPRINT;
	BEGIN
	    IF TEGN = 12 THEN
	    BEGIN
		TABSIM:=0;
		OUTCHAR(OUT,12);
		GOTO 5060;
	    END;

	    IF TEGN = 9 THEN
	    BEGIN
		REPEAT
		    OUTCHAR(OUT,31);
		    TABSIM:=TABSIM+1
		UNTIL TABSIM AND 7 = 0;
		GOTO 5060;
	    END;
	    IF TEGN > 31 THEN TABSIM:=TABSIM+1;
	    IF TEGN = 32 THEN
	    BEGIN
		OUTCHAR(OUT,31);
		GOTO 5060;
	    END;
	END;

«ff»
					! RC36-00016 PAGE 10 !

	PROCEDURE PUNCHPAGE;
	BEGIN
	    IF OUT.ZMODE = 0 THEN
	    BEGIN
		OPMESS(ERMS7);
		GOTO 2060;
	    END;
	    IF CURPT = LAST THEN IF ARGUMENT <> 0 THEN GOTO 5050;
	    IF LAST = 0 THEN GOTO 5050;
	    TABSIM:=0;
	    VAR1:=CURPT;
	    IF ARGUMENT = 0 THEN
	    BEGIN
		VAR1:=0;
		ARGUMENT:=10000;
	    END;
	    REPEAT
	    BEGIN
		MOVE(BUFFER,VAR1,CHAR1,0,1);
		TEGN:=BYTE CHAR1;
		IF LPTCHECK = 1 THEN LINEPRINT;
		IF TEGN < 32 THEN
		BEGIN
		    IF TEGN=9 THEN
		    BEGIN
			OUTCHAR(OUT,127);
			OUTCHAR(OUT,9);
			GOTO 5060;
		    END;
		    IF TEGN=13 THEN
		    BEGIN
			TABSIM:=0;
			OUTCHAR(OUT,10);
			OUTCHAR(OUT,13);
			ARGUMENT:=ARGUMENT-1;
			IF ARGUMENT <= 0 THEN VAR1:=LAST;
			GOTO 5060;
		    END;
		    IF TEGN=12 THEN
		    BEGIN
			IF OUT.ZNAME = PTP THEN FEED;
			OUTCHAR(OUT,12);
			IF OUT.ZNAME = PTP THEN FEED;
		    END;
		    GOTO 5060;
		END;
	    OUTCHAR(OUT,TEGN);
5060:	    VAR1:=VAR1+1;
	    END
	    UNTIL VAR1 >=LAST;
	    IF COMCHAR <> 87 THEN
	    BEGIN
		IF OUT.ZNAME = PTP THEN FEED;
		OUTCHAR(OUT,12);
		IF OUT.ZNAME = PTP THEN FEED;
	   END;
5050:	END;

«ff»
					! RC36-00016 PAGE 11 !
	PROCEDURE APPENDPAGE;
	BEGIN
	    IF IN.ZMODE = 0 THEN
	    BEGIN
		OPMESS(ERMS6);
		GOTO 2060;
	    END;
	    IF COMPT-LAST <= 50 THEN GOTO 7;
	    LINENO:= 1;
	    CALCULATELINENO;
	    FILECOUNT:=0;
	    REPEAT
		INCHAR(IN,TEGN);
		TEGN:=TEGN AND 127;
		INSERT(TEGN,BUFFER,LAST);
		IF TEGN < 32 THEN
		BEGIN
		    IF TEGN = 0 THEN LAST:=LAST-1;
		    IF TEGN =10 THEN LAST:=LAST-1;
		    IF TEGN = 12 THEN GOTO 9;
		    IF TEGN = 13 THEN LINENO:= LINENO+1;
		    IF TEGN = 25 THEN GOTO 9;
		    IF TEGN = 26 THEN
		    BEGIN
			BINDEC(LINENO,DECLINENO);
			MOVE(DECLINENO,1,ERMS5,28,4);
			OPMESS(ERMS5);
			INSERT(92,BUFFER,LAST);
			KIND:=0;
		    END;
		    END;
		IF TEGN < 127 THEN LAST:=LAST+1
	    UNTIL COMPT-LAST < 50;
	    IF COMPT-LAST <= 50 THEN
	    BEGIN
7:		OPMESS(ERMS2);
		GOTO 2060;
	    END;
	9:  INSERT(27,BUFFER,LAST);
	END;

	PROCEDURE FILECHECK;
	BEGIN
	    IF FILENO = 0 THEN
	    BEGIN
		OPMESS(ERMS10);
		GOTO 2060;
	    END;
	END;

«ff»
					! RC36-00016 PAGE 12 !

	PROCEDURE DISPLAY;
	BEGIN
	    BINDEC(ARGUMENT,DECLINENO);
	    OPMESS(DECLINENO);
	    OPMESS(NEWLINE);
	END;

	PROCEDURE DELETESTRING;
	BEGIN
	    IF ARGUMENT < 0 THEN
	    BEGIN
		MOVE(BUFFER,CURPT,BUFFER,CURPT+ARGUMENT,LAST-CURPT+1);
		CURPT:= CURPT+ARGUMENT;
		LAST:= LAST+ARGUMENT;
	    END;
	    IF ARGUMENT > 0 THEN
	    BEGIN
		MOVE(BUFFER,CURPT+ARGUMENT,BUFFER,CURPT,
		    LAST-CURPT-ARGUMENT+1);
		LAST:= LAST-ARGUMENT;
	    END;
	END;

	PROCEDURE DELETECOMMAND;
	BEGIN
	    IF COMPT >= BUFFERPT - 1 THEN
	    BEGIN
		OPMESS(NEWLINE);
		GOTO 1000;
	    END;
	    VAR2:=TABSIM; TABSIM:=0;
	    VAR1:=BUFFERPT-2;
	    HELPPRINT;
	    ERRO1:= LAST; ERRO2:=CURPT;
	    CURPT:=COMPT; LAST:=BUFFERPT-2;
	    SLIDELENGTH:=2; SLIDESTRING;
	    LAST:=ERRO1; CURPT:=ERRO2;
	    TABSIM:=VAR2-1; COMPT:=COMPT+2;
	    OUTBLOCK(OPOUT);
	END;

	PROCEDURE INIT;
	BEGIN
	    IF OLDDRIVENO SHIFT (-DRIVENO) EXTRACT 1 = 0 THEN
	    BEGIN
		IF COMMAND = R THEN INITCAT(IN,DRIVENO,0);
		IF COMMAND = W THEN INITCAT(OUT,DRIVENO,0);
		LINENO:=1;
		OLDDRIVENO:=OLDDRIVENO + (LINENO SHIFT DRIVENO);
	    END;
	END;

	PROCEDURE CLOSEOUT;
	BEGIN
	    IF OUT.ZMODE <> 0 THEN
	    BEGIN
		IF OUT.ZKIND = 8'76 THEN
		WHILE OUT.ZREM > 0 DO OUTCHAR(OUT,25);
		CLOSE(OUT,1);
	    END;
	END;

«ff»
					! RC36-00016 PAGE 13 !
	PROCEDURE GETNAME;
	BEGIN
	    MOVE(BINARYZERO,0,NEWNAME,0,6);
	    VAR1:=0; VAR2:=1;
	    BLOCKNO:=1; FILENO:=0;
	    GETACHARACTER;
	    IF COMCHAR= DOLLAR THEN
	    BEGIN
		VAR2:=0;
		GETACHARACTER;
	    END;
	    REPEAT
		IF COMCHAR = 27 THEN GOTO 500;
		IF COMCHAR = COLON THEN GOTO 400;
		INSERT(COMCHAR,NEWNAME,VAR1);
		GETACHARACTER;
		VAR1:=VAR1+1
	    UNTIL VAR1 > 6;
300:	    OPMESS(ERMS4);
	    GOTO 2060;

400:			! READ IN A FILENUMBER !
	    MOVE(BUFFER,COMPT,DECLINENO,0,6);
	    DECBIN(DECLINENO,FILENO);
	    REPEAT
		GETACHARACTER
	    UNTIL COMCHAR = 27;

500:	    IF VAR2 <> 0 THEN
	    BEGIN			! DISCFILE	!
		BLOCKNO:=0;
		INMODE:=1;
		OUTMODE:=3;
		KIND:= 8'76;
		DRIVENO:=FILENO; FILENO:=0;
		INSERT(DRIVENO,NEWNAME,5);
		GOTO 600;
	    END;

	    IF VAR2 = 0 THEN		! NORMAL DEVICE !
	    REPEAT
		MOVE(DEVICES,VAR2,DECLINENO,0,6);
		IF NEWNAME = DECLINENO THEN
		BEGIN
		    MOVE(DEVICES,VAR2+6,DECLINENO,0,3);
		    KIND:=BYTE DECLINENO;
		    INMODE:=WORD DECLINENO EXTRACT 8;
		    MOVE(DECLINENO,2,DECLINENO,0,1);
		    OUTMODE:=BYTE DECLINENO;
		    IF NEWNAME = MT THEN FILECHECK;
		    IF NEWNAME = CT THEN FILECHECK;
		    IF NEWNAME = FD THEN FILECHECK;
		    GOTO 600;
		END;
		VAR2:=VAR2+9
	    UNTIL VAR2 > DEVICECOUNT;
	    GOTO 300;	! ERROR !
600:	END;

«ff»
					! RC36-00016 PAGE 14 !
    BEGIN

10:	OPMESS(NEWLINE);
	IN.ZMODE:=0; OUT.ZMODE:=0;
	OLDDRIVENO:=0;
	BUFFERPT:=BUFFERSIZEM3;
	LAZYARG:=0; MACROPT:=BUFFERSIZEM3;
	OPEN(OPOUT,3);
	INSERT(27,BUFFER,BUFFERSIZEM3);
	INSERT(27,BUFFER,BUFFERSIZEM3+1);
	INSERT(27,BUFFER,BUFFERSIZEM3+2);
	LAST:= 0; CURPT:= 0; COMPT:= 0;

1000:	IF LAZYARG > 0 THEN GOTO 5090;
	IF COMPT - 2 > BUFFERPT THEN
	BEGIN
	    COMPT:=SAVCOMPT;
	    GOTO 2000;
	END;
1005:	COMPT:=BUFFERPT;
	OPMESS(ASTERISK);
	MACROCHECK:=0;
	PRVCH:=SPACE;
	TABSIM:=1;

1010:	OPIN(OPSTRING);
	OPWAIT(OPLENGTH);
	TABSIM:=TABSIM+OPLENGTH;

1020:	IF BYTE PRVCH = 27 THEN IF BYTE OPSTRING = 27 THEN
	BEGIN
	    OPMESS(ESCAPENEWLINE);
	    GOTO 2000;
	END;

1030:	MOVE(OPSTRING,OPLENGTH-1,PRVCH,0,1);
	IF BYTE PRVCH = 9 THEN
	BEGIN
	    TABSIM:= TABSIM-1;
	    SIMULATETABS;
	END;
	IF BYTE PRVCH = 10 THEN
	BEGIN
	    INSERT(13,OPSTRING,OPLENGTH-1);
	    TABSIM:=0;
	END;
	IF BYTE PRVCH = 13 THEN TABSIM:=0;
	IF BYTE PRVCH = 12 THEN
	BEGIN
	    OUTCHAR(OPOUT,94);
	    OUTCHAR(OPOUT,76);
	    OUTBLOCK(OPOUT);
	    TABSIM:= 0;
	END;
	IF BYTE PRVCH = 27 THEN OPMESS(ESCAPE);

1040:	IF COMPT < LAST+OPLENGTH+10 THEN
	BEGIN
	    OPMESS(ERMS8);
	    LAST:=LAST-20;
	    GOTO 1000;
	END;
	MOVE(BUFFER,COMPT,BUFFER,COMPT-OPLENGTH,BUFFERPT-COMPT);
	COMPT:= COMPT-OPLENGTH;
	MOVE(OPSTRING,0,BUFFER,BUFFERPT-OPLENGTH,OPLENGTH);
	IF BYTE PRVCH = 8 THEN DELETECOMMAND;
	GOTO 1010;

«ff»
					! RC36-00016 PAGE 15 !
2060:	OPMESS(ERMS9);
	TYPECOMMAND;
	GOTO 1000;
2000:	SAVPT:= COMPT;
	ARGUMENT:= 0;
	RADIX:= 10;
	SIGN:= 1;
	GETACHARACTER;
	IF COMCHAR = 34 THEN
	BEGIN
	    RADIX:= 8;
	    GETACHARACTER;
	END;
	IF COMCHAR = 43 THEN GOTO 2020;
	IF COMCHAR = 45 THEN
	BEGIN
	    SIGN:=-SIGN;
2020:	    GETACHARACTER;
	END;
2010:	IF COMCHAR >= 48 THEN
	IF COMCHAR <= 57 THEN
	BEGIN
	    IF COMCHAR-48 > RADIX THEN GOTO 2060;
	    ARGUMENT:= ARGUMENT*RADIX+COMCHAR-48;
	    GOTO 2020;
	END;

	ARGUMENT:= (ARGUMENT AND 8'3777)*SIGN;
	IF COMCHAR = 27 THEN
	BEGIN
	    GETACHARACTER;
	    IF COMCHAR = 27 THEN GOTO 1000;
	    COMPT:=COMPT-1;
	    GOTO 2000;
	END;
	COMMAND:=COMCHAR;

	IF COMMAND = A THEN
	BEGIN
	    CURPT:= LAST;
	    APPENDPAGE;
	    IF LAST = CURPT THEN GOTO 2060;
	    GOTO 2000;
	END;

	IF COMMAND = B THEN
	BEGIN
	    CURPT:= 0;
	    GOTO 2000;
	END;

	IF COMMAND = C THEN
	BEGIN
	    SEARCHSTRING;
	    IF CURPT = 0 THEN
	    BEGIN
		OPMESS(ERMS3);
		GOTO 2060;
	    END;
	    ARGUMENT:= -ARGUMENT;
	    DELETESTRING;
	    INSERTSTRING;
	    GOTO 2000;
	END;

«ff»
					! RC36-00016 PAGE 16 !

	IF COMMAND = D THEN
	BEGIN
	    IF CURPT + ARGUMENT > LAST THEN
	    ARGUMENT:= LAST-CURPT;
	    IF ARGUMENT < 0 THEN
	    IF CURPT + ARGUMENT < 0 THEN
	    ARGUMENT:= -CURPT;
	    DELETESTRING;
	    GOTO 2000;
	END;

	IF COMMAND = E THEN
	BEGIN
	    REPEAT
		ARGUMENT:= 0;
		PUNCHPAGE;
		LAST:= 0;
		CURPT:= 0;
		APPENDPAGE;
		IF KIND = 0 THEN GOTO 1000
	    UNTIL LAST = 0;
	    GOTO 2000;
	END;

	IF COMMAND = F THEN
	BEGIN
	    IF OUT.ZMODE = 0 THEN
	    BEGIN
		OPMESS(ERMS7);
		GOTO 2060;
	    END;
	    IF OUT.ZNAME <> PTP THEN
	    BEGIN
		IF ARGUMENT = 0 THEN OUTCHAR(OUT,12);
		GOTO 2000;
	    END;
	    IF ARGUMENT < 0 THEN GOTO 2000;
	    IF ARGUMENT = 0 THEN
	    BEGIN
		FEED;
		OUTCHAR(OUT,12);
		FEED;
		GOTO 2000;
	    END;
	    IF ARGUMENT > 1000 THEN ARGUMENT:= 1000;
	    ARGUMENT:= ARGUMENT*10;
	    WHILE ARGUMENT > 0 DO
	    BEGIN
		OUTCHAR(OUT,0);
		ARGUMENT:= ARGUMENT-1;
	    END;
	    GOTO 2000;
	END;

«ff»
					! RC36-00016 PAGE 17 !

	IF COMMAND = G THEN
	BEGIN
	    GETACHARACTER;
	    COMMAND:=COMCHAR;

	    IF COMCHAR = K THEN
	    BEGIN
		GETNAME;
		OUT.ZKIND:=KIND;
		OUT.ZNAME:=NEWNAME;
		REMOVEENTRY(OUT);
		GOTO 2000;
	    END;

	    IF COMCHAR = R THEN
	    BEGIN
			! CHANGE OF INPUT FILES !
		IF IN.ZMODE <> 0 THEN CLOSE(IN,1);
		GETNAME;
		IF INMODE = 0 THEN
		BEGIN
		    OPMESS(ERMS6);
		    GOTO 2060;
		END;
		IN.ZKIND:=KIND;
		IN.ZNAME:=NEWNAME;
		IF IN.ZKIND = 8'76 THEN INIT;
		OPEN(IN,INMODE);
		SETPOSITION(IN,FILENO,BLOCKNO);
		GOTO 2000;
	    END;

	    IF COMCHAR = C THEN
	    BEGIN
			! CLOSE ALL FILES !
		IF IN.ZMODE <> 0 THEN CLOSE(IN,1);
		CLOSEOUT;
		GOTO 2000;
	    END;


«ff»
					! RC36-00016 PAGE 18 !
	    IF COMCHAR = W THEN
	    BEGIN
			! CHANGE OF OUTPUT FILES !
	        LPTCHECK:=0;
		CLOSEOUT;
		GETNAME;
		IF OUTMODE = 0 THEN
		BEGIN
		    OPMESS(ERMS7);
		    GOTO 2060;
		END;
		OUT.ZKIND:=KIND;
		OUT.ZNAME:=NEWNAME;
		IF OUT.ZNAME = LPTC THEN LPTCHECK:=1;
		IF OUT.ZNAME = LPT  THEN LPTCHECK:=1;
		IF OUT.ZNAME = SP   THEN LPTCHECK:=1;
		IF KIND = 8'76 THEN
		BEGIN
		    INIT;
		    CREATEENTRY(OUT,10,1);
		END;
		OUT.ZSHAREL:=512;
		IF OUT.ZNAME = CT THEN OUT.ZSHAREL:=80;
		IF OUT.ZNAME = MT THEN OUT.ZSHAREL:=80;
		OPEN(OUT,OUTMODE);
		SETPOSITION(OUT,FILENO,BLOCKNO);
		GOTO 2000;
	    END;

	    IF COMCHAR = I THEN
	    BEGIN
		GETNAME;
		IF NEWNAME <> NEW THEN GOTO 2060;
		OUT.ZKIND:=KIND;
		OUT.ZNAME:=NEWNAME;
		INITCAT(OUT,DRIVENO,1);
		GOTO 2000;
	    END;

			! COMCHAR <> R/W/C !
	    COMPT:=SAVPT;
	    GOTO 2060;
	END;

«ff»
					! RC36-00016 PAGE 19 !
	IF COMMAND = H THEN
	BEGIN
	    REPEAT
		ARGUMENT:= 0;
		PUNCHPAGE;
		LAST:= 0;
		CURPT:= 0;
		APPENDPAGE;
		IF KIND = 0 THEN GOTO 1000
	    UNTIL LAST = 0;
	    CLOSE(IN,1);
	    CLOSEOUT;
	    GOTO 1000;
	END;

	IF COMMAND = I THEN
	BEGIN
	    IF ARGUMENT = 0 THEN
	    BEGIN
		INSERTSTRING;
		GOTO 2000;
	    END;
	    IF ARGUMENT < 0 THEN GOTO 2060;
	    SLIDELENGTH:= 1;
	    SLIDESTRING;
	    ARGUMENT:= ARGUMENT AND 127;
	    INSERT(ARGUMENT,BUFFER,CURPT);
	    CURPT:= CURPT+1;
	    GOTO 2000;
	END;

	IF COMMAND = J THEN
	BEGIN
	    ARGUMENT:= ARGUMENT-1;
	    IF ARGUMENT <=0 THEN ARGUMENT:=0;
	    SCANPT:= 0;
	    SCANCR;
	    CURPT:= SCANPT;
	    GOTO 2000;
	END;

«ff»
					! RC36-00016 PAGE 20 !
	IF COMMAND = K THEN
	BEGIN
	    SCANPT:= CURPT;
	    SCANCR;
	    ARGUMENT:= SCANPT-CURPT;
	    DELETESTRING;
	    GOTO 2000;
	END;

	IF COMMAND = L THEN
	BEGIN
	    SCANPT:= CURPT;
	    SCANCR;
	    CURPT:= SCANPT;
	    GOTO 2000;
	END;

	IF COMMAND = M THEN
	BEGIN
	    CURPT:=ARGUMENT+CURPT;
	    IF CURPT<0 THEN CURPT:=0;
	    IF CURPT>LAST THEN CURPT:=LAST;
	    GOTO 2000;
	END;

	IF COMMAND = N THEN
	BEGIN
	    SEARCHSTRING;
	    WHILE CURPT = 0 DO
	    BEGIN
		ARGUMENT:= 0;
		PUNCHPAGE;
		CURPT:= 0;
		LAST:= 0;
		APPENDPAGE;
		IF KIND = 0 THEN GOTO 1000;
		IF LAST = CURPT THEN
		BEGIN
		    OPMESS(ERMS3);
		    GOTO 2060;
		END;
		COMPT:=COMPT-1;
		SEARCHSTRING;
	    END;
	    GOTO 2000;
	END;



«ff»
					! RC36-00016 PAGE 21 !
	IF COMMAND = P THEN
	BEGIN
	    IF ARGUMENT < 0 THEN GOTO 2060;
	    GETACHARACTER;
	    IF COMCHAR <> 87 THEN COMPT:=COMPT-1;
	    PUNCHPAGE;
	    GOTO 2000;
	END;

	IF COMMAND = Q THEN
	BEGIN
	    SEARCHSTRING;
	    WHILE CURPT = 0 DO
	    BEGIN
		CURPT:=0;
		LAST:= 0;
		APPENDPAGE;
		IF KIND = 0 THEN GOTO 1000;
		IF LAST = CURPT THEN
		BEGIN
		    OPMESS(ERMS3);
		    GOTO 2060;
		END;
		COMPT:=COMPT-1;
		SEARCHSTRING;
	    END;
	    GOTO 2000;
	END;

	IF COMMAND = R THEN
	BEGIN
	    IF ARGUMENT < 0 THEN GOTO 2060;
	    LOOPARGUMENT:= ARGUMENT;
	    ARGUMENT:= 0;
	    REPEAT
		PUNCHPAGE;
		CURPT:= 0;
		LAST:= 0;
		APPENDPAGE;
		IF KIND = 0 THEN GOTO 1000;
		IF LAST = CURPT THEN GOTO 2060;
		LOOPARGUMENT:= LOOPARGUMENT-1
	    UNTIL LOOPARGUMENT <=0;
	    GOTO 2000;
	END;

	IF COMMAND = S THEN
	BEGIN
	    SEARCHSTRING;
	    IF CURPT = 0 THEN
	    BEGIN
		OPMESS(ERMS3);
		GOTO 2060;
	    END;
	    GOTO 2000;
	END;

«ff»
					! RC36-00016 PAGE 22 !
	IF COMMAND = T THEN
	BEGIN
	    IF ARGUMENT < 0 THEN GOTO 2060;
	    IF LAST = 0 THEN GOTO 2000;
	    IF ARGUMENT > 0 THEN LINENO:=ARGUMENT;
	    IF CURPT >= LAST THEN
	    IF ARGUMENT > 0 THEN LINENO:=0;
	    IF ARGUMENT = 0 THEN LINENO:=10000;
	    VAR1:=CURPT;
	    IF ARGUMENT = 0 THEN VAR1:=0;
	    TABSIM:=0;
	    OPIN(OPSTRING);
	    WHILE LINENO > 0 DO HELPPRINT;
	    OUTBLOCK(OPOUT);
	    GOTO 2000;
	END;

	IF COMMAND = X THEN
	BEGIN
	    IF ARGUMENT < 0 THEN GOTO 2060;
	    GETACHARACTER;

	    IF COMCHAR = M THEN
	    BEGIN
	    MACROPT:=COMPT;
	    BUFFERPT:=SAVPT;
	    INSERT(27,BUFFER,SAVPT);
	    INSERT(27,BUFFER,SAVPT+1);
	    GOTO 1005;
	    END;

	    IF COMCHAR = D THEN
	    BEGIN
		MACROPT:=BUFFERSIZEM3;
		BUFFERPT:=BUFFERSIZEM3;
		GOTO 1000;
	    END;

	    IF MACROPT = BUFFERSIZEM3 THEN
	    BEGIN
		OPMESS(ERMS14);
		GOTO 2060;
	    END;

	    IF MACROCHECK = X THEN
	    BEGIN
		OPMESS(ERMS11);
		BUFFERPT:=BUFFERSIZEM3;
		MACROPT:=BUFFERSIZEM3;
	    END;
	    MACROCHECK:=X;
	    COMPT:=COMPT-1;
	    SAVCOMPT:=COMPT;
	    LAZYARG:=ARGUMENT;
5090:	    COMPT:=MACROPT;
	    LAZYARG:=LAZYARG-1;
	    GOTO 2000;
	END;

«ff»
					! RC36-00016 PAGE 23 !
	IF COMMAND = Y THEN
	BEGIN
	    LAST:= 0;
	    CURPT:= 0;
	    APPENDPAGE;
	    IF LAST = CURPT THEN GOTO 2060;
	    GOTO 2000;
	END;

	IF COMMAND = Z THEN
	BEGIN
	    CURPT:= LAST;
	    GOTO 2000;
	END;

	IF COMMAND = DOT THEN
	BEGIN
	    ARGUMENT:=LAST;
	    LAST:=CURPT;
	    LINENO:= 1;
	    CALCULATELINENO;
	    LAST:=ARGUMENT;
	    ARGUMENT:= LINENO;
	    DISPLAY;
	    GOTO 2000;
	END;

	IF COMMAND = COLON THEN
	BEGIN
	    LINENO:= 0;
	    CALCULATELINENO;
	    ARGUMENT:= LINENO;
	    DISPLAY;
	    GOTO 2000;
	END;

	IF COMMAND = EQUAL THEN
	BEGIN
	    ARGUMENT:= LAST;
	    DISPLAY;
	    GOTO 2000;
	END;

	GOTO 2060;


	END;
«ff»