|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 28842 (0x70aa) Description: Bits:30000867 PROGRAM RC36-00016.00 - MUS SINGLE USER EDITOR Types: 8-hole paper tape, 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»