mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 17:34:06 +00:00
3285 lines
152 KiB
Plaintext
3285 lines
152 KiB
Plaintext
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 1
|
||
|
||
|
||
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE ED
|
||
OBJECT MODULE PLACED IN ED.OBJ
|
||
COMPILER INVOKED BY: :F0: ED.PLM XREF OPTIMIZE(3) DEBUG
|
||
|
||
|
||
|
||
$ TITLE(' CONCURRENT CP/M-86 2.0 --- ED')
|
||
1 ED:
|
||
DO;
|
||
/* MODIFIED FOR .PRL OPERATION MAY, 1979 */
|
||
/* MODIFIED FOR OPERATION WITH CP/M 2.0 AUGUST 1979 */
|
||
/* modified for MP/M 2.0 June 1981 */
|
||
/* modified for CP/M 1.1 Oct 1981 */
|
||
/* modified for CONCURRENT CP/M 1.0 Jul 1982 */
|
||
/* modified for CP/M 3.0 July 1982 */
|
||
/* modified for CP/M 3.0 SEPT 1982 */
|
||
/* modified for CONCURRENT CP/M-86 2.0 October 1982 */
|
||
|
||
/* MODIFICATION LOG:
|
||
* July 1982 whf: some code cleanup (grouped logicals, declared BOOL);
|
||
* fixed disk full error handling; fixed read from null files;
|
||
* fixed (some) of the dirty fcb handling (shouldn't use settype
|
||
* function on open fcbs!).
|
||
* July 1982 dh: installed patches to change macro abort command from
|
||
* ^C to ^Y and to not print error message when trying to delete
|
||
* a file that doesn't exist. Added PERROR: PROCEDURE to print
|
||
* error messages in a consistant format and modified error
|
||
* message handler at RESET: entry point. Also corrected Invalid
|
||
* filename error to not abort ED if parsing a R or X command.
|
||
* Modified start (at PLM:) and SETDEST: to prompt for missing
|
||
* filenames. Modified parse$fcb & parse$lib to set a global
|
||
* flag and break if it got an invalid filename for X or R commands.
|
||
* Start sets page size from the system control block (SCB) if
|
||
* ED is running under CP/M-80 (high(ver)=0).
|
||
* The H command now works with new files. (sets newfile=false)
|
||
Sept 82
|
||
* Corrected bug in which ED file b: didn't work. Changed PLM:
|
||
* and SETDEST: routines.
|
||
Oct 82 whf
|
||
* Changed version numbers for Concurrent. ED entry point changed to
|
||
* PLMSTART.
|
||
*/
|
||
|
||
|
||
/**** VAX commands for ED generation.
|
||
|
||
$ util := ED
|
||
$ ccpmsetup ! set up environment
|
||
$ assign 'f$directory()' f1: ! use local dir for temp files
|
||
$ plm86 'util'.plm xref 'p1' optimize(3) debug
|
||
$ link86 f2:scd.obj, 'util'.obj to 'util'.lnk
|
||
$ loc86 'util'.lnk od(sm(code,dats,data,stack,const)) -
|
||
ad(sm(code(0),dats(10000h))) ss(stack(+32)) to 'util'.
|
||
$ h86 'util'
|
||
|
||
***** Then, on a micro:
|
||
A>vax ed.h86 $fans
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 2
|
||
|
||
|
||
A>gencmd ed data[b1000 m80 xfff]
|
||
|
||
***** Notes: Stack is increased for interrupts. Const(ants) are last
|
||
to force hex generation. 'm80' is the min number of pgraphs,
|
||
and is found in ED.MP2.
|
||
|
||
****/
|
||
|
||
$include (:f1:copyrt.lit)
|
||
|
||
2 1 declare
|
||
mpmproduct literally '01h', /* requires mp/m */
|
||
cpm3 literally '30h'; /* requires 3.0 cp/m */
|
||
|
||
3 1 declare plmstart label public; /* entry point for plm86 interface */
|
||
|
||
|
||
/* DECLARE 8080 Interface
|
||
JMP EDCOMMAND - 3 (TO ADDRESS LXI SP)
|
||
EDJMP BYTE DATA(0C3H),
|
||
EDADR ADDRESS DATA(.EDCOMMAND-3); */
|
||
|
||
|
||
/**************************************
|
||
* *
|
||
* B D O S INTERFACE *
|
||
* *
|
||
**************************************/
|
||
|
||
|
||
4 1 mon1:
|
||
procedure (func,info) external;
|
||
5 2 declare func byte;
|
||
6 2 declare info address;
|
||
7 2 end mon1;
|
||
|
||
8 1 mon2:
|
||
procedure (func,info) byte external;
|
||
9 2 declare func byte;
|
||
10 2 declare info address;
|
||
11 2 end mon2;
|
||
|
||
12 1 mon3:
|
||
procedure (func,info) address external;
|
||
13 2 declare func byte;
|
||
14 2 declare info address;
|
||
15 2 end mon3;
|
||
|
||
16 1 declare fcb (1) byte external; /* 1st default fcb */
|
||
17 1 declare fcb16 (1) byte external; /* 2nd default fcb */
|
||
18 1 declare tbuff (1) byte external; /* default dma buffer */
|
||
|
||
|
||
19 1 DECLARE
|
||
MAXB ADDRESS EXTERNAL, /* MAX BASE 0006H */
|
||
BUFF (128)BYTE EXTERNAL, /* BUFFER 0080H */
|
||
SECTSHF LITERALLY '7', /* SHL(1,SECTSHF) = SECTSIZE */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 3
|
||
|
||
|
||
SECTSIZE LITERALLY '80H'; /* SECTOR SIZE */
|
||
|
||
|
||
20 1 BOOT: PROCEDURE ;
|
||
21 2 call mon1(0,0); /* changed for MP/M-86 version */
|
||
/* SYSTEM REBOOT */
|
||
22 2 END BOOT;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 4
|
||
|
||
|
||
$ eject
|
||
|
||
/* E D : T H E C P / M C O N T E X T E D I T O R */
|
||
|
||
/* COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983
|
||
DIGITAL RESEARCH
|
||
BOX 579 PACIFIC GROVE
|
||
CALIFORNIA 93950
|
||
|
||
Revised:
|
||
07 April 81 by Thomas Rolander
|
||
21 July 81 by Doug Huskey
|
||
29 Oct 81 by Doug Huskey
|
||
10 Nov 81 by Doug Huskey
|
||
08 July 82 by Bill Fitler
|
||
26 July 82 by Doug Huskey
|
||
*/
|
||
/* DECLARE COPYRIGHT(*) BYTE DATA
|
||
(' COPYRIGHT (C) 1983, DIGITAL RESEARCH ');
|
||
**** this message should be in the header ***
|
||
*/
|
||
23 1 declare date(*) byte data ('2/83');
|
||
|
||
/* COMMAND FUNCTION
|
||
------- --------
|
||
A APPEND LINES OF TEXT TO BUFFER
|
||
B MOVE TO BEGINNING OR END OF TEXT
|
||
C SKIP CHARACTERS
|
||
D DELETE CHARACTERS
|
||
E END OF EDIT
|
||
F FIND STRING IN CURRENT BUFFER
|
||
H MOVE TO TOP OF FILE (HEAD)
|
||
I INSERT CHARACTERS FROM KEYBOARD
|
||
UP TO NEXT <ENDFILE>
|
||
J JUXTAPOSITION OPERATION - SEARCH FOR FIRST STRING,
|
||
INSERT SECOND STRING, DELETE UNTIL THIRD STRING
|
||
K DELETE LINES
|
||
L SKIP LINES
|
||
M MACRO DEFINITION (SEE COMMENT BELOW)
|
||
N FIND NEXT OCCURRENCE OF STRING
|
||
WITH AUTO SCAN THROUGH FILE
|
||
O RE-EDIT OLD FILE
|
||
P PAGE AND DISPLAY (MOVES UP OR DOWN 24 LINES AND
|
||
DISPLAYS 24 LINES)
|
||
Q QUIT EDIT WITHOUT UPDATING THE FILE
|
||
R<FILENAME> READ FROM FILE <FILENAME> UNTIL <ENDFILE> AND
|
||
INSERT INTO TEXT
|
||
S SEARCH FOR FIRST STRING, REPLACE BY SECOND STRING
|
||
T TYPE LINES
|
||
U TRANSLATE TO UPPER CASE (-U CHANGES TO NO TRANSLATE)
|
||
W WRITE LINES OF TEXT TO FILE
|
||
X<FILENAME> TRANSFER (XFER) LINES TO FILE <FILENAME>
|
||
Z SLEEP FOR 1/2 SECOND (USED IN MACROS TO STOP DISPLAY)
|
||
<CR> MOVE UP OR DOWN AND PRINT ONE LINE
|
||
|
||
|
||
IN GENERAL, THE EDITOR ACCEPTS SINGLE LETTER COMMANDS WITH OPTIONAL
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 5
|
||
|
||
|
||
INTEGER VALUES PRECEDING THE COMMAND. THE EDITOR ACCEPTS BOTH UPPER AND LOWER
|
||
CASE COMMANDS AND VALUES, AND PERFORMS TRANSLATION TO UPPER CASE UNDER THE FOL-
|
||
LOWING CONDITIONS. IF THE COMMAND IS TYPED IN UPPER CASE, THEN THE DATA WHICH
|
||
FOLLOWS IS TRANSLATED TO UPPER CASE. THUS, IF THE "I" COMMAND IS TYPED IN
|
||
UPPER CASE, THEN ALL INPUT IS AUTOMATICALLY TRANSLATED (ALTHOUGH ECHOED IN
|
||
LOWER CASE, AS TYPED). IF THE "A" COMMAND IS TYPED IN UPPER CASE, THEN ALL
|
||
INPUT IS TRANSLATED AS READ FROM THE DISK. GLOBAL TRANSLATION TO UPPER CASE
|
||
CAN BE CONTROLLED BY THE "U" COMMAND (-U TO NEGATE ITS EFFECT). IF YOU ARE
|
||
OPERATING WITH AN UPPER CASE ONLY TERMINAL, THEN OPERATION IS AUTOMATIC.
|
||
SIMILARLY, IF YOU ARE OPERATING WITH A LOWER CASE TERMINAL, AND TRANSLATION
|
||
TO UPPER CASE IS NOT SPECIFIED, THEN LOWER CASE CHARACTERS CAN BE ENTERED.
|
||
|
||
A NUMBER OF COMMANDS CAN BE PRECEDED BY A POSITIVE OR
|
||
NEGATIVE INTEGER BETWEEN 0 AND 65535 (1 IS DEFAULT IF NO VALUE
|
||
IS SPECIFIED). THIS VALUE DETERMINES THE NUMBER OF TIMES THE
|
||
COMMAND IS APPLIED BEFORE RETURNING FOR ANOTHER COMMAND.
|
||
THE COMMANDS
|
||
C D K L T P U <CR>
|
||
CAN BE PRECEDED BY AN UNSIGNED, POSITIVE, OR NEGATIVE NUMBER,
|
||
THE COMMANDS
|
||
A F J N W Z
|
||
CAN BE PRECEDED BY AN UNSIGNED OR POSITIVE NUMBER,
|
||
THE COMMANDS
|
||
E H O Q
|
||
CANNOT BE PRECEDED BY A NUMBER. THE COMMANDS
|
||
F I J M R S
|
||
ARE ALL FOLLOWED BY ONE OR MORE STRINGS OF CHARACTERS WHICH CAN
|
||
BE OPTIONALLY SEPARATED OR TERMINATED BY EITHER <ENDFILE> OR <CR>.
|
||
THE <ENDFILE> IS GENERALLY USED TO SEPARATE THE SEARCH STRINGS
|
||
IN THE S AND J COMMANDS, AND IS USED AT THE END OF THE COMMANDS IF
|
||
ADDITIONAL COMMANDS FOLLOW. FOR EXAMPLE, THE FOLLOWING COMMAND
|
||
SEQUENCE SEARCHES FOR THE STRING 'GAMMA', SUBSTITUTES THE STRING
|
||
'DELTA', AND THEN TYPES THE FIRST PART OF THE LINE WHERE THE
|
||
CHANGE OCCURRED, FOLLOWED BY THE REMAINDER OF THE LINE WHICH WAS
|
||
CHANGED:
|
||
SGAMMA<ENDFILE>DELTA<ENDFILE>0TT<CR>
|
||
|
||
THE CONTROL-L CHARACTER IN SEARCH AND SUBSTITUTE STRINGS IS
|
||
REPLACED ON INPUT BY <CR><LF> CHARACTERS. THE CONTROL-I KEY
|
||
IS TAKEN AS A TAB CHARACTER.
|
||
|
||
THE COMMANDS R & X MUST BE FOLLOWED BY A FILE NAME (WITH default
|
||
FILE TYPE OF 'LIB') WITH A TRAILING <CR> OR <ENDFILE>. THE COMMAND
|
||
I IS FOLLOWED BY A STRING OF SYMBOLS TO INSERT, TERMINATED BY
|
||
A <CR> OR <ENDFILE>. IF SEVERAL LINES OF TEXT ARE TO BE INSERTED,
|
||
THE I CAN BE DIRECTLY FOLLOWED BY AN <ENDFILE> OR <CR> IN WHICH
|
||
CASE THE EDITOR ACCEPTS LINES OF INPUT TO THE NEXT <ENDFILE>.
|
||
THE COMMAND 0T PRINTS THE FIRST PART OF THE CURRENT LINE,
|
||
AND THE COMMAND 0L MOVES THE REFERENCE TO THE BEGINNING OF THE
|
||
CURRENT LINE. THE COMMAND 0P PRINTS THE CURRENT PAGE ONLY, WHILE
|
||
THE COMMAND 0Z READS THE CONSOLE RATHER THAN WAITING (THIS IS USED
|
||
AGAIN WITHIN MACROS TO STOP THE DISPLAY - THE MACRO EXPANSION
|
||
STOPS UNTIL A CHARACTER IS READ. IF THE CHARACTER IS NOT A BREAK
|
||
THEN THE MACRO EXPANSION CONTINUES NORMALLY).
|
||
|
||
NOTE THAT A POUND SIGN IS TAKEN AS THE NUMBER 65535, ALL
|
||
UNSIGNED NUMBERS ARE ASSUMED POSITIVE, AND A SINGLE - IS ASSUMED -1
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 6
|
||
|
||
|
||
|
||
A NUMBER OF COMMANDS CAN BE GROUPED TOGETHER AND EXECUTED
|
||
REPETITIVELY USING THE MACRO COMMAND WHICH TAKES THE FORM
|
||
|
||
<NUMBER>MC1C2...CN<DELIMITER>
|
||
|
||
WHERE <NUMBER> IS A NON-NEGATIVE INTEGER N, AND <DELIMITER> IS
|
||
<ENDFILE> OR <CR>. THE COMMANDS C1 ... CN FOLLOWING THE M ARE
|
||
EXECUTED N TIMES, STARTING AT THE CURRENT POSITION IN THE BUFFER.
|
||
IF N IS 0, 1, OR OMITTED, THE COMMANDS ARE EXECUTED UNTIL THE END
|
||
IF THE BUFFER IS ENCOUNTERED.
|
||
|
||
THE FOLLOWING MACRO, FOR EXAMPLE, CHANGES ALL OCCURRENCES OF
|
||
THE NAME 'GAMMA' TO 'DELTA', AND PRINTS THE LINES WHICH
|
||
WERE CHANGED:
|
||
|
||
MFGAMMA<ENDFILE>-5DIDELTA<ENDFILE>0LT<CR>
|
||
|
||
(NOTE: AN <ENDFILE> IS THE CP/M END OF FILE MARK - CONTROL-Z)
|
||
|
||
IF ANY KEY IS DEPRESSED DURING TYPING OR MACRO EXPANSION, THE
|
||
FUNCTION IS CONSIDERED TERMINATED, AND CONTROL RETURNS TO THE
|
||
OPERATOR.
|
||
|
||
ERROR CONDITIONS ARE INDICATED BY PRINTING ONE OF THE CHARACTERS:
|
||
|
||
SYMBOL ERROR CONDITION
|
||
------ ----------------------------------------------------
|
||
GREATER FREE MEMORY IS EXHAUSTED - ANY COMMAND CAN BE ISSUED
|
||
WHICH DOES NOT INCREASE MEMORY REQUIREMENTS.
|
||
QUESTION UNRECOGNIZED COMMAND OR ILLEGAL NUMERIC FIELD
|
||
POUND CANNOT APPLY THE COMMAND THE NUMBER OF TIMES SPECFIED
|
||
(OCCURS IF SEARCH STRING CANNOT BE FOUND)
|
||
LETTER O CANNOT OPEN <FILENAME>.LIB IN R COMMAND
|
||
|
||
THE ERROR CHARACTER IS ALSO ACCOMPANIED BY THE LAST CHARACTER
|
||
SCANNED WHEN THE ERROR OCCURRED. */
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 7
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * GLOBAL VARIABLES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
24 1 DECLARE LIT LITERALLY 'LITERALLY',
|
||
DCL LIT 'DECLARE',
|
||
PROC LIT 'PROCEDURE',
|
||
ADDR LIT 'ADDRESS',
|
||
BOOLEAN LIT 'BYTE',
|
||
CTLL LIT '0CH',
|
||
CTLR LIT '12H', /* REPEAT LINE IN INSERT MODE */
|
||
CTLU LIT '15H', /* LINE DELETE IN INSERT MODE */
|
||
CTLX LIT '18H', /* EQUIVALENT TO CTLU */
|
||
CTLH LIT '08H', /* BACKSPACE */
|
||
TAB LIT '09H', /* TAB CHARACTER */
|
||
LCA LIT '110$0001B', /* LOWER CASE A */
|
||
LCZ LIT '111$1010B', /* LOWER CASE Z */
|
||
ESC LIT '1BH', /* ESCAPE CHARACTER */
|
||
ENDFILE LIT '1AH'; /* CP/M END OF FILE */
|
||
|
||
25 1 DECLARE
|
||
TRUE LITERALLY '1',
|
||
FALSE LITERALLY '0',
|
||
FOREVER LITERALLY 'WHILE TRUE',
|
||
CTRL$Y LITERALLY '19h',
|
||
CR LITERALLY '13',
|
||
LF LITERALLY '10',
|
||
WHAT LITERALLY '63';
|
||
|
||
26 1 DECLARE
|
||
MAX ADDRESS, /* .MEMORY(MAX)=0 (END) */
|
||
MAXM ADDRESS, /* MINUS 1 */
|
||
HMAX ADDRESS; /* = MAX/2 */
|
||
|
||
27 1 declare
|
||
i byte; /* used by command parsing */
|
||
|
||
28 1 DECLARE
|
||
us literally '8', /* file from user 0 */
|
||
RO LITERALLY '9', /* R/O FILE INDICATOR */
|
||
SY LITERALLY '10', /* SYSTEM FILE ATTRIBUTE */
|
||
EX LITERALLY '12', /* EXTENT NUMBER POSITION */
|
||
UB LITERALLY '13', /* UNFILLED BYTES */
|
||
ck LITERALLY '13', /* checksum */
|
||
MD LITERALLY '14', /* MODULE NUMBER POSITION */
|
||
NR LITERALLY '32', /* NEXT RECORD FIELD */
|
||
FS LITERALLY '33', /* FCB SIZE */
|
||
RFCB (FS) BYTE /* READER FILE CONTROL BLOCK */
|
||
INITIAL(0, /* FILE NAME */ ' ',
|
||
/* FILE TYPE */ 'LIB',0,0,0),
|
||
RBP BYTE, /* READ BUFFER POINTER */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 8
|
||
|
||
|
||
XFCB (FS) BYTE /* XFER FILE CONTROL BLOCK */
|
||
INITIAL(0, 'X$$$$$$$','LIB',0,0,0,0,0,0,0),
|
||
XFCBE BYTE AT(.XFCB(EX)), /* XFCB EXTENT */
|
||
XFCBR BYTE AT(.XFCB(NR)), /* XFCB RECORD # */
|
||
xfcbext byte initial(0), /* save xfcb extent for appends */
|
||
xfcbrec byte initial(0), /* save xfcb record for appends */
|
||
XBUFF (SECTSIZE) BYTE, /* XFER BUFFER */
|
||
XBP BYTE, /* XFER POINTER */
|
||
|
||
NBUF BYTE, /* NUMBER OF BUFFERS */
|
||
BUFFLENGTH ADDRESS, /* NBUF * SECTSIZE */
|
||
SFCB (FS) BYTE AT(.FCB), /* SOURCE FCB = DEFAULT FCB */
|
||
SDISK BYTE AT (.FCB), /* SOURCE DISK */
|
||
SBUFFADR ADDRESS, /* SOURCE BUFFER ADDRESS */
|
||
SBUFF BASED SBUFFADR (128) BYTE, /* SOURCE BUFFER */
|
||
password (16) byte initial(0), /* source password */
|
||
|
||
DFCB (FS) BYTE, /* DEST FILE CONTROL BLOCK */
|
||
DDISK BYTE AT (.DFCB), /* DESTINATION DISK */
|
||
DBUFFADR ADDRESS, /* DESTINATION BUFFER ADDRESS */
|
||
DBUFF BASED DBUFFADR (128) BYTE, /* DEST BUFFER */
|
||
NSOURCE ADDRESS, /* NEXT SOURCE CHARACTER */
|
||
NDEST ADDRESS, /* NEXT DESTINATION CHAR */
|
||
|
||
tmpfcb (FS) BYTE; /* temporary fcb for rename & deletes */
|
||
|
||
29 1 DECLARE /**** some of the logicals *****/
|
||
newfile BOOLEAN initial (false), /* true if no source file */
|
||
onefile BOOLEAN initial (true), /* true if output file=input file */
|
||
XFERON BOOLEAN initial (false), /* TRUE IF XFER ACTIVE */
|
||
reading BOOLEAN initial (false), /* TRUE IF reading RFCB */
|
||
PRINTSUPPRESS BOOLEAN initial (false),/* TRUE IF PRINT SUPPRESSED */
|
||
sys BOOLEAN initial (false), /* true if system file */
|
||
protection BOOLEAN initial (false), /* password protection mode */
|
||
INSERTING BOOLEAN, /* TRUE IF INSERTING CHARACTERS */
|
||
READBUFF BOOLEAN, /* TRUE IF END OF READ BUFFER */
|
||
TRANSLATE BOOLEAN initial (false), /* TRUE IF XLATION TO UPPER CASE */
|
||
UPPER BOOLEAN initial (false), /* TRUE IF GLOBALLY XLATING TO UC */
|
||
LINESET BOOLEAN initial (true), /* TRUE IF LINE #'S PRINTED */
|
||
has$bdos3 BOOLEAN initial (false), /* true if BDOS version >= 3.0 */
|
||
tail BOOLEAN initial (true), /* true if readiing from cmd tail */
|
||
dot$found BOOLEAN initial (false); /* true if dot found in fname parse*/
|
||
|
||
30 1 DECLARE
|
||
dtype (3) byte, /* destination file type */
|
||
libfcb (12) byte initial(0,'X$$$$$$$LIB'),/* default lib name */
|
||
tempfl (3) byte initial('$$$'), /* temporary file type */
|
||
backup (3) byte initial('BAK'); /* backup file type */
|
||
|
||
31 1 declare
|
||
error$code address;
|
||
|
||
32 1 DECLARE
|
||
COLUMN BYTE initial(0), /* CONSOLE COLUMN POSITION */
|
||
SCOLUMN BYTE INITIAL(8), /* STARTING COLUMN IN "I" MODE */
|
||
TCOLUMN BYTE, /* TEMP DURING BACKSPACE */
|
||
QCOLUMN BYTE; /* TEMP DURING BACKSPACE */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 9
|
||
|
||
|
||
|
||
33 1 DECLARE DCNT BYTE; /* RETURN CODE FROM MON? CALLS */
|
||
|
||
/* COMMAND BUFFER */
|
||
34 1 DECLARE (MAXLEN,COMLEN) BYTE, COMBUFF(128) BYTE,
|
||
CBP BYTE initial(0);
|
||
|
||
35 1 DECLARE /* LINE COUNTERS */
|
||
BASELINE ADDRESS, /* CURRENT LINE */
|
||
RELLINE ADDRESS; /* RELATIVE LINE IN TYPEOUT */
|
||
|
||
36 1 DECLARE
|
||
FORWARD LIT '1',
|
||
BACKWARD LIT '0',
|
||
RUBOUT LIT '07FH',
|
||
POUND LIT '23H',
|
||
MACSIZE LIT '128', /* MAX MACRO SIZE */
|
||
SCRSIZE LIT '100', /* SCRATCH BUFFER SIZE */
|
||
COMSIZE LIT 'ADDRESS'; /* DETERMINES MAX COMMAND NUMBER*/
|
||
|
||
37 1 DCL MACRO(MACSIZE) BYTE,
|
||
SCRATCH(SCRSIZE) BYTE, /* SCRATCH BUFFER FOR F,N,S */
|
||
(WBP, WBE, WBJ) BYTE, /* END OF F STRING, S STRING, J STRING */
|
||
(FLAG, MP, MI, XP) BYTE,
|
||
MT COMSIZE;
|
||
|
||
38 1 DCL (START, RESTART, OVERCOUNT, OVERFLOW,
|
||
disk$err, dir$err, RESET, BADCOM) LABEL;
|
||
|
||
/* global variables used by file parsing routines */
|
||
39 1 dcl ncmd byte initial(0);
|
||
|
||
|
||
40 1 DCL (DISTANCE, TDIST) COMSIZE,
|
||
(DIRECTION, CHAR) BYTE,
|
||
( FRONT, BACK, FIRST, LASTC) ADDR;
|
||
|
||
41 1 dcl LPP byte initial(23); /* LINES PER PAGE */
|
||
|
||
/* the following stucture is used near plm: to set
|
||
the lines per page from the BDOS 3 SCB */
|
||
42 1 declare
|
||
pb (2) byte data (28,0);
|
||
|
||
43 1 declare
|
||
ver address; /* VERSION NUMBER */
|
||
|
||
44 1 declare
|
||
err$msg address initial(0),
|
||
invalid (*) byte data ('Invalid Filename$'),
|
||
dirfull (*) byte data ('DIRECTORY FULL$'),
|
||
diskfull (*) byte data ('DISK FULL$'),
|
||
password$err(*) byte data ('Creating Password$'),
|
||
not$found (*) byte data ('File not found$'),
|
||
notavail (*) byte data ('File not available$');
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 10
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * CP/M INTERFACE ROUTINES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
/* IO SECTION */
|
||
|
||
45 1 READCHAR: PROCEDURE BYTE; RETURN MON2(1,0);
|
||
47 2 END READCHAR;
|
||
|
||
48 1 conin:
|
||
procedure byte;
|
||
49 2 return mon2(6,0fdh);
|
||
50 2 end conin;
|
||
|
||
51 1 PRINTCHAR: PROCEDURE(CHAR);
|
||
52 2 DECLARE CHAR BYTE;
|
||
53 2 IF PRINTSUPPRESS THEN RETURN;
|
||
55 2 CALL MON1(2,CHAR);
|
||
56 2 END PRINTCHAR;
|
||
|
||
57 1 TTYCHAR: PROCEDURE(CHAR);
|
||
58 2 DECLARE CHAR BYTE;
|
||
59 2 IF CHAR >= ' ' THEN COLUMN = COLUMN + 1;
|
||
61 2 IF CHAR = LF THEN COLUMN = 0;
|
||
63 2 CALL PRINTCHAR(CHAR);
|
||
64 2 END TTYCHAR;
|
||
|
||
65 1 BACKSPACE: PROCEDURE;
|
||
/* MOVE BACK ONE POSITION */
|
||
66 2 IF COLUMN = 0 THEN RETURN;
|
||
68 2 CALL TTYCHAR(CTLH); /* COLUMN = COLUMN - 1 */
|
||
69 2 CALL TTYCHAR(' ' ); /* COLUMN = COLUMN + 1 */
|
||
70 2 CALL TTYCHAR(CTLH); /* COLUMN = COLUMN - 1 */
|
||
71 2 COLUMN = COLUMN - 2;
|
||
72 2 END BACKSPACE;
|
||
|
||
73 1 PRINTABS: PROCEDURE(CHAR);
|
||
74 2 DECLARE (CHAR,I,J) BYTE;
|
||
75 2 I = CHAR = TAB AND 7 - (COLUMN AND 7);
|
||
76 2 IF CHAR = TAB THEN CHAR = ' ';
|
||
78 2 DO J = 0 TO I;
|
||
79 3 CALL TTYCHAR(CHAR);
|
||
80 3 END;
|
||
81 2 END PRINTABS;
|
||
|
||
82 1 GRAPHIC: PROCEDURE(C) BOOLEAN;
|
||
83 2 DECLARE C BYTE;
|
||
/* RETURN TRUE IF GRAPHIC CHARACTER */
|
||
84 2 IF C >= ' ' THEN RETURN TRUE;
|
||
86 2 RETURN C = CR OR C = LF OR C = TAB;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 11
|
||
|
||
|
||
87 2 END GRAPHIC;
|
||
|
||
88 1 PRINTC: PROCEDURE(C);
|
||
89 2 DECLARE C BYTE;
|
||
90 2 IF NOT GRAPHIC(C) THEN
|
||
91 2 DO; CALL PRINTABS('^');
|
||
93 3 C = C + '@';
|
||
94 3 END;
|
||
95 2 CALL PRINTABS(C);
|
||
96 2 END PRINTC;
|
||
|
||
97 1 CRLF: PROCEDURE;
|
||
98 2 CALL PRINTC(CR); CALL PRINTC(LF);
|
||
100 2 END CRLF;
|
||
|
||
101 1 PRINTM: PROCEDURE(A);
|
||
102 2 DECLARE A ADDRESS;
|
||
103 2 CALL MON1(9,A);
|
||
104 2 END PRINTM;
|
||
|
||
105 1 PRINT: PROCEDURE(A);
|
||
106 2 DECLARE A ADDRESS;
|
||
107 2 CALL CRLF;
|
||
108 2 CALL PRINTM(A);
|
||
109 2 END PRINT;
|
||
|
||
110 1 perror: procedure(a);
|
||
111 2 declare a address;
|
||
112 2 call print(.(tab,'ERROR - $'));
|
||
113 2 call printm(A);
|
||
114 2 call crlf;
|
||
115 2 end perror;
|
||
|
||
116 1 READ: PROCEDURE(A);
|
||
117 2 DECLARE A ADDRESS;
|
||
118 2 CALL MON1(10,A);
|
||
119 2 END READ;
|
||
|
||
/* used for library files */
|
||
120 1 OPEN: PROCEDURE(FCB);
|
||
121 2 DECLARE FCB ADDRESS;
|
||
122 2 if MON2(15,FCB) = 255 then do;
|
||
124 3 flag = 'O';
|
||
125 3 err$msg = .not$found;
|
||
126 3 go to reset;
|
||
127 3 end;
|
||
128 2 END OPEN;
|
||
|
||
/* used for main source file */
|
||
129 1 OPEN$FILE: PROCEDURE(FCB) ADDRESS;
|
||
130 2 DECLARE FCB ADDRESS;
|
||
131 2 RETURN MON3(15,FCB);
|
||
132 2 END OPEN$FILE;
|
||
|
||
133 1 CLOSE: PROCEDURE(FCB);
|
||
134 2 DECLARE FCB ADDRESS;
|
||
135 2 DCNT = MON2(16,FCB);
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 12
|
||
|
||
|
||
136 2 END CLOSE;
|
||
|
||
137 1 DELETE: PROCEDURE(FCB);
|
||
138 2 DECLARE FCB ADDRESS;
|
||
139 2 DCNT = MON2(19,FCB);
|
||
140 2 END DELETE;
|
||
|
||
141 1 DISKREAD: PROCEDURE(FCB) BYTE;
|
||
142 2 DECLARE FCB ADDRESS;
|
||
143 2 RETURN MON2(20,FCB);
|
||
144 2 END DISKREAD;
|
||
|
||
145 1 DISKWRITE: PROCEDURE(FCB) BYTE;
|
||
146 2 DECLARE FCB ADDRESS;
|
||
147 2 RETURN MON2(21,FCB);
|
||
148 2 END DISKWRITE;
|
||
|
||
149 1 RENAME: PROCEDURE(FCB);
|
||
150 2 DECLARE FCB ADDRESS;
|
||
151 2 CALL MON1(23,FCB);
|
||
152 2 END RENAME;
|
||
|
||
153 1 READCOM: PROCEDURE;
|
||
154 2 MAXLEN = 128; CALL READ(.MAXLEN);
|
||
156 2 END READCOM;
|
||
|
||
157 1 BREAK$KEY: PROCEDURE BOOLEAN;
|
||
158 2 IF MON2(11,0) THEN
|
||
159 2 DO; /* CLEAR CHAR */
|
||
160 3 IF MON2(1,0) = CTRL$Y THEN
|
||
161 3 RETURN TRUE;
|
||
162 3 END;
|
||
163 2 RETURN FALSE;
|
||
164 2 END BREAK$KEY;
|
||
|
||
165 1 CSELECT: PROCEDURE BYTE;
|
||
/* RETURN CURRENT DRIVE NUMBER */
|
||
166 2 RETURN MON2(25,0);
|
||
167 2 END CSELECT;
|
||
|
||
168 1 SETDMA: PROCEDURE(A);
|
||
169 2 DECLARE A ADDRESS;
|
||
/* SET DMA ADDRESS */
|
||
170 2 CALL MON1(26,A);
|
||
171 2 END SETDMA;
|
||
|
||
172 1 set$attribute: procedure(FCB);
|
||
173 2 declare fcb address;
|
||
174 2 call MON1(30,FCB);
|
||
175 2 end set$attribute;
|
||
|
||
/* The PL/M built-in procedure "MOVE" can be used to move storage,
|
||
its definition is:
|
||
|
||
MOVE: PROCEDURE(COUNT,SOURCE,DEST);
|
||
DECLARE (COUNT,SOURCE,DEST) ADDRESS;
|
||
/ MOVE DATA FROM SOURCE TO DEST ADDRESSES, FOR COUNT BYTES /
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 13
|
||
|
||
|
||
END MOVE;
|
||
*/
|
||
/* this routine is included solely for
|
||
enconomy of space over the use of the
|
||
equivalent (in-line) code generated by
|
||
the built-in function */
|
||
176 1 move: proc(c,s,d);
|
||
177 2 dcl (s,d) addr, c byte;
|
||
178 2 dcl a based s byte, b based d byte;
|
||
|
||
179 2 do while (c:=c-1)<>255;
|
||
180 3 b=a; s=s+1; d=d+1;
|
||
183 3 end;
|
||
184 2 end move;
|
||
|
||
185 1 write$xfcb: PROCEDURE(FCB);
|
||
186 2 DECLARE FCB ADDRESS;
|
||
187 2 call move(8,.password,.password(8));
|
||
188 2 if MON2(103,FCB)= 0ffh then
|
||
189 2 call perror(.password$err);
|
||
190 2 END write$xfcb;
|
||
|
||
191 1 read$xfcb: PROCEDURE(FCB);
|
||
192 2 DECLARE FCB ADDRESS;
|
||
193 2 call MON1(102,FCB);
|
||
194 2 END read$xfcb;
|
||
|
||
/* 0ff => return BDOS errors */
|
||
195 1 return$errors:
|
||
procedure(mode);
|
||
196 2 declare mode byte;
|
||
197 2 call mon1 (45,mode);
|
||
198 2 end return$errors;
|
||
|
||
199 1 REBOOT: PROCEDURE;
|
||
200 2 IF XFERON THEN
|
||
201 2 CALL DELETE(.libfcb);
|
||
202 2 CALL BOOT;
|
||
203 2 END REBOOT;
|
||
|
||
204 1 version: procedure address;
|
||
/* returns current cp/m version # */
|
||
205 2 return mon3(12,0);
|
||
206 2 end version;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 14
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * SUBROUTINES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
/* INPUT / OUTPUT BUFFERING ROUTINES */
|
||
|
||
|
||
|
||
/* abort ED and print error message */
|
||
207 1 ABORT: PROCEDURE(A);
|
||
208 2 DECLARE A ADDRESS;
|
||
209 2 CALL perror(A);
|
||
210 2 CALL REBOOT;
|
||
211 2 END ABORT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* fatal file error */
|
||
212 1 FERR: PROCEDURE;
|
||
213 2 CALL CLOSE(.DFCB); /* ATTEMPT TO CLOSE FILE FOR LATER RECOVERY */
|
||
214 2 CALL ABORT (.dirfull);
|
||
215 2 END FERR;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set password if cpm 3*/
|
||
216 1 setpassword: procedure;
|
||
217 2 if has$bdos3 then
|
||
218 2 call setdma(.password);
|
||
219 2 end setpassword;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* delete file at afcb */
|
||
220 1 delete$file: procedure(afcb);
|
||
221 2 declare afcb address;
|
||
222 2 call setpassword;
|
||
223 2 call delete(afcb);
|
||
224 2 end delete$file;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* rename file at afcb */
|
||
225 1 rename$file: procedure(afcb);
|
||
226 2 declare afcb address;
|
||
227 2 call delete$file(afcb+16); /* delete new file */
|
||
228 2 call setpassword;
|
||
229 2 call rename(afcb);
|
||
230 2 end rename$file;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 15
|
||
|
||
|
||
|
||
|
||
/* make file at afcb */
|
||
231 1 make$file: procedure(afcb);
|
||
232 2 declare afcb address;
|
||
233 2 call delete$file(afcb); /* delete file */
|
||
234 2 call setpassword;
|
||
235 2 DCNT = MON2(22,afcb); /* create file */
|
||
236 2 end make$file;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* fill string @ s for c bytes with f */
|
||
237 1 fill: proc(s,f,c);
|
||
238 2 dcl s addr,
|
||
(f,c) byte,
|
||
a based s byte;
|
||
|
||
239 2 do while (c:=c-1)<>255;
|
||
240 3 a = f;
|
||
241 3 s = s+1;
|
||
242 3 end;
|
||
243 2 end fill;
|
||
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 16
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * FILE HANDLING ROUTINES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
|
||
/* set destination file type to type at A */
|
||
244 1 SETTYPE: PROCEDURE(afcb,A);
|
||
245 2 DECLARE (afcb, A) ADDRESS;
|
||
246 2 CALL MOVE(3,A,aFCB+9);
|
||
247 2 END SETTYPE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set dma to xfer buffer */
|
||
248 1 SETXDMA: PROCEDURE;
|
||
249 2 CALL SETDMA(.XBUFF);
|
||
250 2 END SETXDMA;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* fill primary source buffer */
|
||
251 1 FILLSOURCE: PROCEDURE;
|
||
252 2 DECLARE I BYTE;
|
||
253 2 ZN: PROCEDURE;
|
||
254 3 NSOURCE = 0;
|
||
255 3 END ZN;
|
||
|
||
256 2 CALL ZN;
|
||
257 2 DO I = 0 TO NBUF;
|
||
258 3 CALL SETDMA(SBUFFADR+NSOURCE);
|
||
259 3 IF (DCNT := DISKREAD(.FCB)) <> 0 THEN
|
||
260 3 DO; IF DCNT > 1 THEN CALL FERR;
|
||
263 4 SBUFF(NSOURCE) = ENDFILE;
|
||
264 4 I = NBUF;
|
||
265 4 END;
|
||
ELSE
|
||
266 3 NSOURCE = NSOURCE + SECTSIZE;
|
||
267 3 END;
|
||
268 2 CALL ZN;
|
||
269 2 END FILLSOURCE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* get next character in source file */
|
||
270 1 GETSOURCE: PROCEDURE BYTE;
|
||
271 2 DECLARE B BYTE;
|
||
272 2 if newfile then return endfile; /* in case they try to #a */
|
||
274 2 IF NSOURCE >= BUFFLENGTH THEN CALL FILLSOURCE;
|
||
276 2 IF (B := SBUFF(NSOURCE)) <> ENDFILE THEN
|
||
277 2 NSOURCE = NSOURCE + 1;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 17
|
||
|
||
|
||
278 2 RETURN B;
|
||
279 2 END GETSOURCE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* try to free space by erasing backup */
|
||
280 1 erase$bak: PROCEDURE BOOLEAN;
|
||
|
||
281 2 if onefile then
|
||
282 2 if newfile then do;
|
||
284 3 call move(fs,.dfcb,.tmpfcb); /* can't diddle with open fcb */
|
||
285 3 CALL SETTYPE(.tmpfcb,.BACKUP);
|
||
286 3 CALL DELETE$file(.tmpfcb);
|
||
287 3 if dcnt <> 255 then
|
||
288 3 return true;
|
||
289 3 end;
|
||
290 2 return false;
|
||
291 2 end erase$bak;
|
||
|
||
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* write output buffer up to (not including)
|
||
ndest (low 7 bits of ndest are 0 */
|
||
292 1 WRITEDEST: PROCEDURE;
|
||
293 2 DECLARE (I,N,save$ndest) BYTE;
|
||
|
||
294 2 n = shr(ndest,sectshf); /* calculate number sectors to write */
|
||
295 2 if n=0 then return; /* no need to write if we haven't filled sector*/
|
||
297 2 save$ndest = ndest; /* save for error recovery */
|
||
298 2 ndest = 0;
|
||
299 2 DO I = 1 TO N;
|
||
300 3 retry:
|
||
CALL SETDMA(DBUFFADR+NDEST);
|
||
301 3 IF DISKWRITE(.DFCB) <> 0 THEN
|
||
302 3 if erase$bak then
|
||
303 3 go to retry;
|
||
304 3 else do; /* reset buffer, let them take action (delete files) */
|
||
305 4 if ndest <> 0 then
|
||
306 4 call move(save$ndest-ndest, dbuffadr+ndest, dbuffadr);
|
||
307 4 ndest = save$ndest-ndest;
|
||
308 4 go to disk$err;
|
||
309 4 end;
|
||
310 3 NDEST = NDEST + SECTSIZE;
|
||
311 3 END;
|
||
312 2 ndest = 0;
|
||
313 2 END WRITEDEST;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* put a character in output buffer */
|
||
314 1 PUTDEST: PROCEDURE(B);
|
||
315 2 DECLARE B BYTE;
|
||
316 2 IF NDEST >= BUFFLENGTH THEN CALL WRITEDEST;
|
||
318 2 DBUFF(NDEST) = B;
|
||
319 2 NDEST = NDEST + 1;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 18
|
||
|
||
|
||
320 2 END PUTDEST;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* put a character in the xfer buffer */
|
||
321 1 PUTXFER: PROCEDURE(C);
|
||
322 2 DECLARE C BYTE;
|
||
323 2 IF XBP >= SECTSIZE THEN /* BUFFER OVERFLOW */
|
||
324 2 DO;
|
||
325 3 retry:
|
||
CALL SETXDMA;
|
||
326 3 xfcbext = xfcbe; /* save for appends */
|
||
327 3 xfcbrec = xfcbr;
|
||
328 3 IF DISKWRITE(.XFCB) <> 0 THEN
|
||
329 3 if erase$bak then
|
||
330 3 go to retry;
|
||
331 3 else do;
|
||
/******** call close(.xfcb); *** commented out whf 8/82 !!!! ********/
|
||
332 4 go to disk$err;
|
||
333 4 end;
|
||
334 3 XBP = 0;
|
||
335 3 END;
|
||
336 2 XBUFF(XBP) = C; XBP = XBP + 1;
|
||
338 2 END PUTXFER;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* empty xfer buffer and close file.
|
||
This routine is added to allow saving lib
|
||
files for future edits - DH 10/18/81 */
|
||
339 1 close$xfer: procedure;
|
||
340 2 dcl i byte;
|
||
|
||
341 2 do i = xbp to sectsize;
|
||
342 3 call putxfer(ENDFILE);
|
||
343 3 end;
|
||
344 2 call close(.xfcb);
|
||
345 2 end close$xfer;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* compare xfcb and rfcb to see if same */
|
||
346 1 compare$xfer: procedure BOOLEAN;
|
||
347 2 dcl i byte;
|
||
|
||
348 2 i = 12;
|
||
349 2 do while (i:=i-1) <> -1;
|
||
350 3 if xfcb(i) <> rfcb(i) then
|
||
351 3 return false;
|
||
352 3 end;
|
||
353 2 return true;
|
||
354 2 end compare$xfer;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* restore xfer file extent and current
|
||
record, read record and set xfer pointer
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 19
|
||
|
||
|
||
to first ENDFILE */
|
||
355 1 append$xfer: procedure;
|
||
|
||
356 2 xfcbe = xfcbext;
|
||
357 2 call open(.xfcb);
|
||
358 2 xfcbr = xfcbrec;
|
||
359 2 call setxdma;
|
||
360 2 if diskread(.xfcb) = 0 then do;
|
||
362 3 xfcbr = xfcbrec; /* write same record */
|
||
363 3 do xbp = 0 to sectsize;
|
||
364 4 if xbuff(xbp) = ENDFILE then
|
||
365 4 return;
|
||
366 4 end;
|
||
367 3 end;
|
||
368 2 end append$xfer;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 20
|
||
|
||
|
||
$ eject
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
* * * END EDIT ROUTINE * * *
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
/* finish edit, close files, rename */
|
||
369 1 FINIS: PROCEDURE;
|
||
370 2 MOVEUP: PROCEDURE(afcb);
|
||
371 3 dcl afcb address;
|
||
/* set second filename (new name) for rename function */
|
||
372 3 CALL MOVE(16,aFCB,aFCB+16);
|
||
373 3 END MOVEUP;
|
||
|
||
/* * * * * * * * WRITE OUTPUT BUFFER * * * * * * * * */
|
||
/* SET UNFILLED BYTES - USED FOR ISIS-II COMPATIBILITY */
|
||
/* DFUB = 0 ; <<<< REMOVE FOR MP/M 2 , CP/M 3 */
|
||
374 2 DO WHILE (LOW(NDEST) AND 7FH) <> 0;
|
||
/* COUNTS UNFILLED BYTES IN LAST RECORD */
|
||
/* DFUB = DFUB + 1; */
|
||
375 3 CALL PUTDEST(ENDFILE);
|
||
376 3 END;
|
||
377 2 CALL WRITEDEST;
|
||
|
||
378 2 if not newfile then
|
||
379 2 call close(.sfcb); /* close this to clean up for mp/m environs */
|
||
|
||
/* * * * * * CLOSE TEMPORARY DESTINATION FILE * * * * * */
|
||
380 2 CALL CLOSE(.DFCB);
|
||
381 2 IF DCNT = 255 THEN CALL FERR;
|
||
383 2 if sys then do;
|
||
385 3 dfcb(sy)=dfcb(sy) or 80h;
|
||
386 3 call setpassword;
|
||
387 3 call set$attribute(.dfcb);
|
||
388 3 end;
|
||
|
||
/* * * * * * RENAME SOURCE TO BACKUP IF ONE FILE * * * * * */
|
||
389 2 if onefile then do;
|
||
391 3 call moveup(.sfcb);
|
||
392 3 CALL SETTYPE(.sfcb+16,.BACKUP); /* set new type to BAK */
|
||
393 3 CALL RENAME$FILE(.SFCB);
|
||
394 3 end;
|
||
|
||
/* * * * * * RENAME TEMPORARY DESTINATION FILE * * * * * */
|
||
395 2 CALL MOVEUP(.DFCB);
|
||
396 2 CALL SETTYPE(.DFCB+16,.DTYPE);
|
||
397 2 CALL RENAME$FILE(.DFCB);
|
||
|
||
398 2 END FINIS;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 21
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * COMMAND ROUTINES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
|
||
/* print a character if not macro expansion */
|
||
399 1 PRINTNMAC: PROCEDURE(CHAR);
|
||
400 2 DECLARE CHAR BYTE;
|
||
401 2 IF MP <> 0 THEN RETURN;
|
||
403 2 CALL PRINTC(CHAR);
|
||
404 2 END PRINTNMAC;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return true if lower case character */
|
||
405 1 LOWERCASE: PROCEDURE(C) BOOLEAN;
|
||
406 2 DECLARE C BYTE;
|
||
407 2 RETURN C >= LCA AND C <= LCZ;
|
||
408 2 END LOWERCASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* translate character to upper case */
|
||
409 1 UCASE: PROCEDURE(C) BYTE;
|
||
410 2 DECLARE C BYTE;
|
||
411 2 IF LOWERCASE(C) THEN RETURN C AND 5FH;
|
||
413 2 RETURN C;
|
||
414 2 END UCASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* get password and place at fcb + 16 */
|
||
415 1 getpasswd: proc;
|
||
416 2 dcl (i,c) byte;
|
||
|
||
417 2 call crlf;
|
||
418 2 call print(.('Password ? ','$'));
|
||
419 2 retry:
|
||
call fill(.password,' ',8);
|
||
420 2 do i = 0 to 7;
|
||
421 3 nxtchr:
|
||
if (c:=ucase(conin)) >= ' ' then
|
||
422 3 password(i)=c;
|
||
423 3 if c = cr then
|
||
424 3 go to exit;
|
||
425 3 if c = CTLX then
|
||
426 3 goto retry;
|
||
427 3 if c = CTLH then do;
|
||
429 4 if i<1 then
|
||
430 4 goto retry;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 22
|
||
|
||
|
||
431 4 else do;
|
||
432 5 password(i:=i-1)=' ';
|
||
433 5 goto nxtchr;
|
||
434 5 end;
|
||
435 4 end;
|
||
436 3 if c = 3 then
|
||
437 3 call reboot;
|
||
438 3 end;
|
||
439 2 exit:
|
||
c = break$key; /* clear raw I/O mode */
|
||
440 2 end getpasswd;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* translate to upercase if translate flag
|
||
is on (also translate ESC to ENDFILE) */
|
||
441 1 UTRAN: PROCEDURE(C) BYTE;
|
||
442 2 DECLARE C BYTE;
|
||
443 2 IF C = ESC THEN C = ENDFILE;
|
||
445 2 IF TRANSLATE THEN RETURN UCASE(C);
|
||
447 2 RETURN C;
|
||
448 2 END UTRAN;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* print the line number */
|
||
449 1 PRINTVALUE: PROCEDURE(V);
|
||
/* PRINT THE LINE VALUE V */
|
||
450 2 DECLARE D BYTE,
|
||
ZERO BOOLEAN,
|
||
(K,V) ADDRESS;
|
||
451 2 K = 10000;
|
||
452 2 ZERO = FALSE;
|
||
453 2 DO WHILE K <> 0;
|
||
454 3 D = LOW(V/K); V = V MOD K;
|
||
456 3 K = K / 10;
|
||
457 3 IF ZERO OR D <> 0 THEN
|
||
458 3 DO; ZERO = TRUE;
|
||
460 4 CALL PRINTC('0'+D);
|
||
461 4 END;
|
||
ELSE
|
||
462 3 CALL PRINTC(' ');
|
||
463 3 END;
|
||
464 2 END PRINTVALUE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* print line with number V */
|
||
465 1 PRINTLINE: PROCEDURE(V);
|
||
466 2 DECLARE V ADDRESS;
|
||
467 2 IF NOT LINESET THEN RETURN;
|
||
469 2 CALL PRINTVALUE(V);
|
||
470 2 CALL PRINTC(':');
|
||
471 2 CALL PRINTC(' ');
|
||
472 2 IF INSERTING THEN
|
||
473 2 CALL PRINTC(' ');
|
||
ELSE
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 23
|
||
|
||
|
||
474 2 CALL PRINTC('*');
|
||
475 2 END PRINTLINE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* print current line (baseline) */
|
||
476 1 PRINTBASE: PROCEDURE;
|
||
477 2 CALL PRINTLINE(BASELINE);
|
||
478 2 END PRINTBASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* print current line if not in a macro */
|
||
479 1 PRINTNMBASE: PROCEDURE;
|
||
480 2 IF MP <> 0 THEN RETURN;
|
||
482 2 CALL PRINTBASE;
|
||
483 2 END PRINTNMBASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* get next character from command tail */
|
||
484 1 getcmd: proc byte;
|
||
485 2 if buff(ncmd+1) <> 0 then
|
||
486 2 return buff(ncmd := ncmd + 1);
|
||
487 2 return cr;
|
||
488 2 end getcmd;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* read next char from command buffer */
|
||
489 1 READC: PROCEDURE BYTE;
|
||
/* MAY BE MACRO EXPANSION */
|
||
490 2 IF MP > 0 THEN
|
||
491 2 DO;
|
||
492 3 IF BREAK$KEY THEN GO TO OVERCOUNT;
|
||
494 3 IF XP >= MP THEN
|
||
495 3 DO; /* START AGAIN */
|
||
496 4 IF MT <> 0 THEN
|
||
497 4 DO; IF (MT:=MT-1) = 0 THEN
|
||
499 5 GO TO OVERCOUNT;
|
||
500 5 END;
|
||
501 4 XP = 0;
|
||
502 4 END;
|
||
503 3 RETURN UTRAN(MACRO((XP := XP + 1) - 1));
|
||
504 3 END;
|
||
505 2 IF INSERTING THEN RETURN UTRAN(READCHAR);
|
||
|
||
/* GET COMMAND LINE */
|
||
507 2 IF READBUFF THEN
|
||
508 2 DO; READBUFF = FALSE;
|
||
510 3 IF LINESET AND COLUMN = 0 THEN
|
||
511 3 DO;
|
||
512 4 IF BACK >= MAXM THEN
|
||
513 4 CALL PRINTLINE(0);
|
||
ELSE
|
||
514 4 CALL PRINTBASE;
|
||
515 4 END;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 24
|
||
|
||
|
||
ELSE
|
||
516 3 CALL PRINTC('*');
|
||
517 3 CALL READCOM; CBP = 0;
|
||
519 3 CALL PRINTC(LF);
|
||
520 3 COLUMN = 0;
|
||
521 3 END;
|
||
522 2 IF (READBUFF := CBP = COMLEN ) THEN
|
||
523 2 COMBUFF(CBP) = CR;
|
||
524 2 RETURN UTRAN(COMBUFF((CBP := CBP +1) -1));
|
||
525 2 END READC;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* get upper case character from command
|
||
buffer or command line */
|
||
526 1 get$uc: proc;
|
||
527 2 if tail then
|
||
528 2 char = ucase(getcmd);
|
||
else
|
||
529 2 char = ucase(readc);
|
||
530 2 end get$uc;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* parse file name
|
||
this routine requires a routine to get
|
||
the next character and put it in a byte
|
||
variable */
|
||
531 1 parse$fcb: proc(fcbadr) byte;
|
||
532 2 dcl fcbadr addr;
|
||
533 2 dcl afcb based fcbadr (33) byte;
|
||
534 2 dcl drive lit 'afcb(0)';
|
||
535 2 dcl (i,delimiter) byte;
|
||
536 2 dcl pflag boolean;
|
||
|
||
537 2 putc: proc;
|
||
538 3 afcb(i := i + 1) = char;
|
||
539 3 pflag = true;
|
||
540 3 end putc;
|
||
|
||
541 2 delim: proc boolean;
|
||
542 3 dcl del(*) byte data (CR,ENDFILE,' ,.;=:<>_[]*?');
|
||
/* 0 1 2345678901234 */
|
||
543 3 do delimiter = 0 to last(del);
|
||
544 4 if char = del(delimiter) then do;
|
||
546 5 if delimiter > 12 then /* * or ? */
|
||
547 5 call perror(.('Cannot Edit Wildcard Filename$'));
|
||
548 5 return (true);
|
||
549 5 end;
|
||
550 4 end;
|
||
551 3 return (false);
|
||
552 3 end delim;
|
||
|
||
|
||
553 2 pflag = false;
|
||
554 2 flag = true; /* global flag set to false if invalid filename */
|
||
555 2 dot$found = false; /* allow null extensions in 'parse$lib' */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 25
|
||
|
||
|
||
556 2 call get$uc;
|
||
557 2 if char <> CR then
|
||
558 2 if char <> ENDFILE then do;
|
||
/* initialize fcb to srce fcb type & drive */
|
||
560 3 call fill(fcbadr+12,0,21);
|
||
561 3 call fill(fcbadr+1,' ',11);
|
||
/* clear leading blanks */
|
||
562 3 do while char = ' ';
|
||
563 4 call get$uc;
|
||
564 4 end;
|
||
/* parse loop */
|
||
565 3 do while not delim;
|
||
566 4 i = 0;
|
||
/* get name */
|
||
567 4 do while not delim;
|
||
568 5 if i > 8 then
|
||
569 5 go to err; /* too long */
|
||
570 5 call putc;
|
||
571 5 call get$uc;
|
||
572 5 end;
|
||
573 4 if char = ':' then do;
|
||
/* get drive from afcb(1) */
|
||
575 5 if i <> 1 then
|
||
576 5 go to err; /* invalid : */
|
||
577 5 if (drive := afcb(1) - 'A' + 1) > 16 then
|
||
578 5 go to err; /* invalid drive */
|
||
579 5 afcb(1) = ' ';
|
||
580 5 call get$uc;
|
||
581 5 end;
|
||
582 4 if char = '.' then do;
|
||
/* get file type */
|
||
584 5 i = 8;
|
||
585 5 dot$found = true; /* .ext specified (may be null)*/
|
||
586 5 call get$uc;
|
||
587 5 do while not delim;
|
||
588 6 if i > 11 then
|
||
589 6 go to err; /* too long */
|
||
590 6 call putc;
|
||
591 6 call get$uc;
|
||
592 6 end;
|
||
593 5 end;
|
||
594 4 if char = ';' then do;
|
||
/* get password */
|
||
596 5 call fill(fcbadr+16,' ',8); /* where fn #152 puts passwd */
|
||
597 5 i = 15; /* passwd is last field */
|
||
598 5 call get$uc;
|
||
599 5 do while not delim;
|
||
600 6 if i > 23 then
|
||
601 6 go to err;
|
||
602 6 call putc;
|
||
603 6 call get$uc;
|
||
604 6 end;
|
||
605 5 call move(8,fcbadr+16,.password); /* where ed wants it */
|
||
606 5 end;
|
||
607 4 end; /* parse loop */
|
||
/* delimiter must be a comma or space */
|
||
608 3 if delimiter > 3 then /* not a CR,ENDFILE,SPACE,COMMA */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 26
|
||
|
||
|
||
609 3 go to err;
|
||
610 3 if not pflag then
|
||
611 3 go to err;
|
||
612 3 end;
|
||
|
||
613 2 return (pflag);
|
||
|
||
614 2 err:
|
||
call perror(.invalid);
|
||
615 2 return (flag:=false);
|
||
616 2 end parse$fcb;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set up destination FCB */
|
||
617 1 setdest: PROCEDURE;
|
||
618 2 dcl i byte;
|
||
|
||
/* onefile = true; (initialized) */
|
||
619 2 if not tail then do;
|
||
621 3 call print(.('Enter Output file: $'));
|
||
622 3 call readcom;
|
||
623 3 cbp,readbuff = 0;
|
||
624 3 call crlf;
|
||
625 3 call crlf;
|
||
626 3 end;
|
||
627 2 if parse$fcb(.dfcb) then do;
|
||
629 3 onefile = false;
|
||
630 3 if dfcb(1) = ' ' then
|
||
631 3 call move(15,.sfcb+1,.dfcb+1);
|
||
632 3 end;
|
||
else
|
||
633 2 CALL MOVE(16,.SFCB,.DFCB);
|
||
634 2 call move(3,.dfcb(9),.dtype); /* save destination type */
|
||
635 2 end setdest;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set read lib file DMA address */
|
||
636 1 SETRDMA: PROCEDURE;
|
||
637 2 CALL SETDMA(.BUFF);
|
||
638 2 END SETRDMA;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* read lib file routine */
|
||
639 1 READFILE: PROCEDURE BYTE;
|
||
640 2 IF RBP >= SECTSIZE THEN
|
||
641 2 DO; CALL SETRDMA;
|
||
643 3 IF DISKREAD(.RFCB) <> 0 THEN RETURN ENDFILE;
|
||
645 3 RBP = 0;
|
||
646 3 END;
|
||
647 2 RETURN UTRAN(BUFF((RBP := RBP + 1) - 1));
|
||
648 2 END READFILE;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 27
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * INITIALIZATION * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
649 1 SETUP: PROCEDURE;
|
||
|
||
/* * * * * * * * * OPEN SOURCE FILE * * * * * * * * */
|
||
|
||
650 2 sfcb(ex), sfcb(md), sfcb(nr) = 0;
|
||
651 2 if has$bdos3 then do;
|
||
653 3 call return$errors(0FEh); /* set error mode */
|
||
654 3 call setpassword;
|
||
655 3 end;
|
||
656 2 error$code = open$file (.SFCB);
|
||
657 2 if has$bdos3 then do; /* extended bdos errors */
|
||
659 3 call return$errors(0); /* reset error mode */
|
||
660 3 if low(error$code) = 0FFh and high(error$code) = 7 then do;
|
||
662 4 call getpasswd; /* let them enter password */
|
||
663 4 call crlf;
|
||
664 4 call crlf;
|
||
665 4 call setpassword; /* set dma to password */
|
||
666 4 error$code = open$file(.fcb); /* reset error$code */
|
||
667 4 end;
|
||
668 3 if low(error$code)=0FFh and high(error$code)<>0 then
|
||
669 3 call abort(.notavail); /* abort anything but not found */
|
||
670 3 end;
|
||
671 2 dcnt=low(error$code);
|
||
672 2 if onefile then do;
|
||
674 3 IF ROL(FCB(RO),1) THEN
|
||
675 3 CALL abort(.('FILE IS READ/ONLY$'));
|
||
676 3 else IF ROL(FCB(SY),1) THEN /* system attribute */
|
||
677 3 do;
|
||
678 4 if rol(FCB(us),1) then
|
||
679 4 dcnt = 255; /* user 0 file so create */
|
||
else
|
||
680 4 sys = true;
|
||
681 4 end;
|
||
end;
|
||
|
||
/* * * * * * NEW FILE IF NO SOURCE FILE * * * * * */
|
||
|
||
683 2 IF DCNT = 255 THEN do;
|
||
685 3 if not onefile then
|
||
686 3 call abort(.not$found);
|
||
687 3 newfile = true;
|
||
688 3 CALL PRINT(.('NEW FILE$'));
|
||
689 3 CALL CRLF;
|
||
690 3 END;
|
||
|
||
/* * * * * * MAKE TEMPORARY DESTINATION FILE * * * * * */
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 28
|
||
|
||
|
||
691 2 CALL SETTYPE(.dfcb,.tempfl);
|
||
692 2 DFCB(EX)=0;
|
||
693 2 CALL MAKE$file(.DFCB);
|
||
694 2 if dcnt = 255 then
|
||
695 2 call ferr;
|
||
/* THE TEMP FILE IS NOW CREATED */
|
||
|
||
/* now create the password if any */
|
||
696 2 if protection <> 0 then do;
|
||
698 3 dfcb(ex) = protection or 1; /* set password */
|
||
699 3 call setpassword;
|
||
700 3 call write$xfcb(.dfcb);
|
||
701 3 end;
|
||
702 2 dfcb(ex),DFCB(32) = 0; /* NEXT RECORD IS ZERO */
|
||
|
||
/* * * * * * * * * RESET BUFFER * * * * * * * * */
|
||
|
||
703 2 NSOURCE = BUFFLENGTH;
|
||
704 2 NDEST = 0;
|
||
705 2 BASELINE = 1; /* START WITH LINE 1 */
|
||
706 2 END SETUP;
|
||
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 29
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * BUFFER MANAGEMENT * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
|
||
/* DISTANCE is the number of lines prefix
|
||
to a command */
|
||
/* set maximum distance (0FFFFH) */
|
||
707 1 SETFF: PROCEDURE;
|
||
708 2 DISTANCE = 0FFFFH;
|
||
709 2 END SETFF;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return true if distance is zero */
|
||
710 1 DISTZERO: PROCEDURE BOOLEAN;
|
||
711 2 RETURN DISTANCE = 0;
|
||
712 2 END DISTZERO;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set distance to zero */
|
||
713 1 ZERODIST: PROCEDURE;
|
||
714 2 DISTANCE = 0;
|
||
715 2 END ZERODIST;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* check for zero distance and decrement */
|
||
716 1 DISTNZERO: PROCEDURE BOOLEAN;
|
||
717 2 IF NOT DISTZERO THEN
|
||
718 2 DO; DISTANCE = DISTANCE - 1;
|
||
720 3 RETURN TRUE;
|
||
721 3 END;
|
||
722 2 RETURN FALSE;
|
||
723 2 END DISTNZERO;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set memory limits of command from
|
||
distance and direction */
|
||
724 1 SETLIMITS: PROC;
|
||
725 2 DCL (I,K,L,M) ADDR, (MIDDLE,LOOPING) BYTE;
|
||
726 2 RELLINE = 1; /* RELATIVE LINE COUNT */
|
||
727 2 IF DIRECTION = BACKWARD THEN
|
||
728 2 DO; DISTANCE = DISTANCE+1; I = FRONT; L = 0; K = 0FFFFH;
|
||
733 3 END;
|
||
ELSE
|
||
734 2 DO; I = BACK; L = MAXM; K = 1;
|
||
738 3 END;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 30
|
||
|
||
|
||
|
||
739 2 LOOPING = TRUE;
|
||
740 2 DO WHILE LOOPING;
|
||
741 3 DO WHILE (MIDDLE := I <> L) AND
|
||
MEMORY(M:=I+K) <> LF;
|
||
742 4 I = M;
|
||
743 4 END;
|
||
744 3 LOOPING = (DISTANCE := DISTANCE - 1) <> 0;
|
||
745 3 IF NOT MIDDLE THEN
|
||
746 3 DO; LOOPING = FALSE;
|
||
748 4 I = I - K;
|
||
749 4 END;
|
||
750 3 ELSE do;
|
||
751 4 RELLINE = RELLINE - 1;
|
||
752 4 IF LOOPING THEN
|
||
753 4 I = M;
|
||
754 4 end;
|
||
755 3 END;
|
||
|
||
756 2 IF DIRECTION = BACKWARD THEN
|
||
757 2 DO; FIRST = I; LASTC = FRONT - 1;
|
||
760 3 END;
|
||
ELSE
|
||
761 2 DO; FIRST = BACK + 1; LASTC = I + 1;
|
||
764 3 END;
|
||
765 2 END SETLIMITS;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* increment current position */
|
||
766 1 INCBASE: PROCEDURE;
|
||
767 2 BASELINE = BASELINE + 1;
|
||
768 2 END INCBASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* decrement current position */
|
||
769 1 DECBASE: PROCEDURE;
|
||
770 2 BASELINE = BASELINE - 1;
|
||
771 2 END DECBASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* increment limits */
|
||
772 1 INCFRONT: PROC; FRONT = FRONT + 1;
|
||
774 2 END INCFRONT;
|
||
775 1 INCBACK: PROCEDURE; BACK = BACK + 1;
|
||
777 2 END INCBACK;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* decrement limits */
|
||
778 1 DECFRONT: PROC; FRONT = FRONT - 1;
|
||
780 2 IF MEMORY(FRONT) = LF THEN
|
||
781 2 CALL DECBASE;
|
||
782 2 END DECFRONT;
|
||
783 1 DECBACK: PROC; BACK = BACK - 1;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 31
|
||
|
||
|
||
785 2 END DECBACK;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* move current page in memory if move flag
|
||
true otherwise delete it */
|
||
786 1 MEM$MOVE: PROC(MOVEFLAG);
|
||
787 2 DECLARE (MOVEFLAG,C) BYTE;
|
||
/* MOVE IF MOVEFLAG IS TRUE */
|
||
788 2 IF DIRECTION = FORWARD THEN
|
||
789 2 DO WHILE BACK < LASTC; CALL INCBACK;
|
||
791 3 IF MOVEFLAG THEN
|
||
792 3 DO;
|
||
793 4 IF (C := MEMORY(BACK)) = LF THEN CALL INCBASE;
|
||
795 4 MEMORY(FRONT) = C; CALL INCFRONT;
|
||
797 4 END;
|
||
798 3 END;
|
||
ELSE
|
||
799 2 DO WHILE FRONT > FIRST; CALL DECFRONT;
|
||
801 3 IF MOVEFLAG THEN
|
||
802 3 DO; MEMORY(BACK) = memory(front); CALL DECBACK;
|
||
805 4 END;
|
||
806 3 END;
|
||
807 2 END MEM$MOVE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* force a memory move */
|
||
808 1 MOVER: PROC;
|
||
809 2 CALL MEM$MOVE(TRUE);
|
||
810 2 END MOVER;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* reset memory limit pointers, deleting
|
||
characters (used by D command) */
|
||
811 1 SETPTRS: PROC;
|
||
812 2 CALL MEM$MOVE(FALSE);
|
||
813 2 END SETPTRS;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set limits and force a move */
|
||
814 1 MOVELINES: PROC;
|
||
815 2 CALL SETLIMITS;
|
||
816 2 CALL MOVER;
|
||
817 2 END MOVELINES;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set front to lower value deleteing
|
||
characters (used by S and J commands) */
|
||
818 1 setfront: proc(newfront);
|
||
819 2 dcl newfront addr;
|
||
|
||
820 2 do while front <> newfront;
|
||
821 3 call decfront;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 32
|
||
|
||
|
||
822 3 end;
|
||
823 2 end setfront;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set limits for memory move */
|
||
824 1 SETCLIMITS: PROC;
|
||
825 2 IF DIRECTION = BACKWARD THEN
|
||
826 2 DO; LASTC = BACK;
|
||
828 3 IF DISTANCE > FRONT THEN
|
||
829 3 FIRST = 1;
|
||
ELSE
|
||
830 3 FIRST = FRONT - DISTANCE;
|
||
831 3 END;
|
||
ELSE
|
||
832 2 DO; FIRST = FRONT;
|
||
834 3 IF DISTANCE >= MAX - BACK THEN
|
||
835 3 LASTC = MAXM;
|
||
ELSE
|
||
836 3 LASTC = BACK + DISTANCE;
|
||
837 3 END;
|
||
838 2 END SETCLIMITS;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* read another line of input */
|
||
839 1 READLINE: PROCEDURE;
|
||
840 2 DECLARE B BYTE;
|
||
/* READ ANOTHER LINE OF INPUT */
|
||
841 2 CTRAN: PROCEDURE(B) BYTE;
|
||
842 3 DECLARE B BYTE;
|
||
/* CONDITIONALLY TRANSLATE TO UPPER CASE ON INPUT */
|
||
843 3 IF UPPER THEN RETURN UTRAN(B);
|
||
845 3 RETURN B;
|
||
846 3 END CTRAN;
|
||
847 2 DO FOREVER;
|
||
848 3 IF FRONT >= BACK THEN GO TO OVERFLOW;
|
||
850 3 IF (B := CTRAN(GETSOURCE)) = ENDFILE THEN
|
||
851 3 DO; CALL ZERODIST; RETURN;
|
||
854 4 END;
|
||
855 3 MEMORY(FRONT) = B;
|
||
856 3 CALL INCFRONT;
|
||
857 3 IF B = LF THEN
|
||
858 3 DO; CALL INCBASE;
|
||
860 4 RETURN;
|
||
861 4 END;
|
||
862 3 END;
|
||
863 2 END READLINE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* write one line out */
|
||
864 1 WRITELINE: PROCEDURE;
|
||
865 2 DECLARE B BYTE;
|
||
866 2 DO FOREVER;
|
||
867 3 IF BACK >= MAXM THEN /* EMPTY */
|
||
868 3 DO; CALL ZERODIST; RETURN;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 33
|
||
|
||
|
||
871 4 END;
|
||
872 3 CALL INCBACK;
|
||
873 3 CALL PUTDEST(B:=MEMORY(BACK));
|
||
874 3 IF B = LF THEN
|
||
875 3 DO; CALL INCBASE;
|
||
877 4 RETURN;
|
||
878 4 END;
|
||
879 3 END;
|
||
880 2 END WRITELINE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* write lines until at least half the
|
||
the buffer is empty */
|
||
881 1 WRHALF: PROCEDURE;
|
||
882 2 CALL SETFF;
|
||
883 2 DO WHILE DISTNZERO;
|
||
884 3 IF HMAX >= (MAXM - BACK) THEN
|
||
885 3 CALL ZERODIST;
|
||
ELSE
|
||
886 3 CALL WRITELINE;
|
||
887 3 END;
|
||
888 2 END WRHALF;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* write lines determined by distance
|
||
called from W and E commands */
|
||
889 1 WRITEOUT: PROCEDURE;
|
||
890 2 DIRECTION = BACKWARD; FIRST = 1; LASTC = BACK;
|
||
893 2 CALL MOVER;
|
||
894 2 IF DISTZERO THEN CALL WRHALF;
|
||
/* DISTANCE = 0 IF CALL WRHALF */
|
||
896 2 DO WHILE DISTNZERO;
|
||
897 3 CALL WRITELINE;
|
||
898 3 END;
|
||
899 2 IF BACK < LASTC THEN
|
||
900 2 DO; DIRECTION = FORWARD; CALL MOVER;
|
||
903 3 END;
|
||
904 2 END WRITEOUT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* clear memory buffer */
|
||
905 1 CLEARMEM: PROCEDURE;
|
||
906 2 CALL SETFF;
|
||
907 2 CALL WRITEOUT;
|
||
908 2 END CLEARMEM;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* clear buffers, terminate edit */
|
||
909 1 TERMINATE: PROCEDURE;
|
||
910 2 CALL CLEARMEM;
|
||
911 2 if not newfile then
|
||
912 2 DO WHILE (CHAR := GETSOURCE) <> ENDFILE;
|
||
913 3 CALL PUTDEST(CHAR);
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 34
|
||
|
||
|
||
914 3 END;
|
||
915 2 CALL FINIS;
|
||
916 2 END TERMINATE;
|
||
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 35
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * COMMAND PRIMITIVES * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
|
||
|
||
/* insert char into memory buffer */
|
||
917 1 INSERT: PROCEDURE;
|
||
918 2 IF FRONT = BACK THEN GO TO OVERFLOW;
|
||
920 2 MEMORY(FRONT) = CHAR; CALL INCFRONT;
|
||
922 2 IF CHAR = LF THEN CALL INCBASE;
|
||
924 2 END INSERT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* read a character and check for endfile
|
||
or CR */
|
||
925 1 SCANNING: PROCEDURE BYTE;
|
||
926 2 RETURN NOT ((CHAR := READC) = ENDFILE OR
|
||
(CHAR = CR AND NOT INSERTING));
|
||
927 2 END SCANNING;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* read command buffer and insert characters
|
||
into scratch 'til next endfile or CR for
|
||
find, next, juxt, or substitute commands
|
||
fill at WBE and increment WBE so it
|
||
addresses the next empty position of scratch */
|
||
928 1 COLLECT: PROCEDURE;
|
||
|
||
929 2 SETSCR: PROCEDURE;
|
||
930 3 SCRATCH(WBE) = CHAR;
|
||
931 3 IF (WBE := WBE + 1) >= SCRSIZE THEN GO TO OVERFLOW;
|
||
933 3 END SETSCR;
|
||
|
||
934 2 DO WHILE SCANNING;
|
||
935 3 IF CHAR = CTLL THEN
|
||
936 3 DO; CHAR = CR; CALL SETSCR;
|
||
939 4 CHAR = LF;
|
||
940 4 END;
|
||
941 3 IF CHAR = 0 THEN GO TO BADCOM;
|
||
943 3 CALL SETSCR;
|
||
944 3 END;
|
||
945 2 END COLLECT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* find the string in scratch starting at
|
||
PA and ending at PB */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 36
|
||
|
||
|
||
946 1 FIND: PROCEDURE(PA,PB) BYTE;
|
||
947 2 DECLARE (PA,PB) BYTE;
|
||
948 2 DECLARE J ADDRESS,
|
||
(K, MATCH) BYTE;
|
||
949 2 J = BACK ;
|
||
950 2 MATCH = FALSE;
|
||
951 2 DO WHILE NOT MATCH AND (MAXM > J);
|
||
952 3 LASTC,J = J + 1; /* START SCAN AT J */
|
||
953 3 K = PA ; /* ATTEMPT STRING MATCH AT K */
|
||
954 3 DO WHILE SCRATCH(K) = MEMORY(LASTC) AND
|
||
NOT (MATCH := K = PB);
|
||
/* MATCHED ONE MORE CHARACTER */
|
||
955 4 K = K + 1; LASTC = LASTC + 1;
|
||
957 4 END;
|
||
958 3 END;
|
||
959 2 IF MATCH THEN /* MOVE STORAGE */
|
||
960 2 DO; LASTC = LASTC - 1; CALL MOVER;
|
||
963 3 END;
|
||
964 2 RETURN MATCH;
|
||
965 2 END FIND;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set up the search string for F, N, and
|
||
S commands */
|
||
966 1 SETFIND: PROCEDURE;
|
||
967 2 WBE = 0; CALL COLLECT; WBP = WBE;
|
||
970 2 END SETFIND;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* check for found string in F and S commands */
|
||
971 1 CHKFOUND: PROCEDURE;
|
||
972 2 IF NOT FIND(0,WBP) THEN /* NO MATCH */ GO TO OVERCOUNT;
|
||
974 2 END CHKFOUND;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* parse read / xfer lib FCB */
|
||
975 1 parse$lib: procedure(fcbadr) byte;
|
||
976 2 dcl fcbadr address;
|
||
977 2 dcl afcb based fcbadr (33) byte;
|
||
978 2 dcl b byte;
|
||
|
||
979 2 b = parse$fcb(fcbadr);
|
||
/* flag = false if invalid */
|
||
980 2 if not flag then do;
|
||
982 3 flag = 'O';
|
||
983 3 goto reset;
|
||
984 3 end;
|
||
985 2 if afcb(9) = ' ' and not dot$found then
|
||
986 2 call move(3,.libfcb(9),fcbadr+9);
|
||
987 2 if afcb(1) = ' ' then
|
||
988 2 call move(8,.libfcb(1),fcbadr+1);
|
||
989 2 return b;
|
||
990 2 end parse$lib;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 37
|
||
|
||
|
||
|
||
|
||
/* print relative position */
|
||
991 1 PRINTREL: PROCEDURE;
|
||
992 2 CALL PRINTLINE(BASELINE+RELLINE);
|
||
993 2 END PRINTREL;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* type lines command */
|
||
994 1 TYPELINES: PROCEDURE;
|
||
995 2 DCL I ADDR;
|
||
996 2 DCL C BYTE;
|
||
997 2 CALL SETLIMITS;
|
||
/* DISABLE THE * PROMPT */
|
||
998 2 INSERTING = TRUE;
|
||
999 2 IF DIRECTION = FORWARD THEN
|
||
1000 2 DO; RELLINE = 0; I = FRONT;
|
||
1003 3 END;
|
||
ELSE
|
||
1004 2 I = FIRST;
|
||
1005 2 IF (C := MEMORY(I-1)) = LF then do;
|
||
1007 3 if COLUMN <> 0 THEN
|
||
1008 3 CALL CRLF;
|
||
1009 3 end;
|
||
else
|
||
1010 2 relline = relline + 1;
|
||
|
||
1011 2 DO I = FIRST TO LASTC;
|
||
1012 3 IF C = LF THEN
|
||
1013 3 DO;
|
||
1014 4 CALL PRINTREL;
|
||
1015 4 RELLINE = RELLINE + 1;
|
||
1016 4 IF BREAK$KEY THEN GO TO OVERCOUNT;
|
||
1018 4 END;
|
||
1019 3 CALL PRINTC(C:=MEMORY(I));
|
||
1020 3 END;
|
||
1021 2 END TYPELINES;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set distance to lines per page (LPP) */
|
||
1022 1 SETLPP: PROCEDURE;
|
||
1023 2 DISTANCE = LPP;
|
||
1024 2 END SETLPP;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* save distance in TDIST */
|
||
1025 1 SAVEDIST: PROCEDURE;
|
||
1026 2 TDIST = DISTANCE;
|
||
1027 2 END SAVEDIST;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* Restore distance from TDIST */
|
||
1028 1 RESTDIST: PROCEDURE;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 38
|
||
|
||
|
||
1029 2 DISTANCE = TDIST;
|
||
1030 2 END RESTDIST;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* page command (move n pages and print) */
|
||
1031 1 PAGE: PROCEDURE;
|
||
1032 2 DECLARE I BYTE;
|
||
1033 2 CALL SAVEDIST;
|
||
1034 2 CALL SETLPP;
|
||
1035 2 CALL MOVELINES;
|
||
1036 2 I = DIRECTION;
|
||
1037 2 DIRECTION = FORWARD;
|
||
1038 2 CALL SETLPP;
|
||
1039 2 CALL TYPELINES;
|
||
1040 2 DIRECTION = I;
|
||
1041 2 IF LASTC = MAXM OR FIRST = 1 THEN
|
||
1042 2 CALL ZERODIST;
|
||
ELSE
|
||
1043 2 CALL RESTDIST;
|
||
1044 2 END PAGE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* wait command (1/2 second time-out) */
|
||
1045 1 WAIT: PROCEDURE;
|
||
1046 2 DECLARE I BYTE;
|
||
1047 2 DO I = 0 TO 19;
|
||
1048 3 IF BREAK$KEY THEN GO TO RESET;
|
||
1050 3 CALL TIME(250);
|
||
1051 3 END;
|
||
1052 2 END WAIT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set direction to forward */
|
||
1053 1 SETFORWARD: PROCEDURE;
|
||
1054 2 DIRECTION = FORWARD;
|
||
1055 2 DISTANCE = 1;
|
||
1056 2 END SETFORWARD;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* append 'til buffer is at least half full */
|
||
1057 1 APPHALF: PROCEDURE;
|
||
1058 2 CALL SETFF; /* DISTANCE = 0FFFFH */
|
||
1059 2 DO WHILE DISTNZERO;
|
||
1060 3 IF FRONT >= HMAX THEN
|
||
1061 3 CALL ZERODIST;
|
||
ELSE
|
||
1062 3 CALL READLINE;
|
||
1063 3 END;
|
||
1064 2 END APPHALF;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* insert CR LF characters */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 39
|
||
|
||
|
||
1065 1 INSCRLF: PROCEDURE;
|
||
/* INSERT CR LF CHARACTERS */
|
||
1066 2 CHAR = CR; CALL INSERT;
|
||
1068 2 CHAR = LF; CALL INSERT;
|
||
1070 2 END INSCRLF;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* test if invalid delete or
|
||
backspace at beginning of inserting */
|
||
1071 1 ins$error$chk: procedure;
|
||
1072 2 if (tcolumn = 255) or (front = 1) then
|
||
1073 2 go to reset;
|
||
1074 2 end ins$error$chk;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 40
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * COMMAND PARSING * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
|
||
|
||
/* test for upper or lower case command
|
||
set translate flag (used to determine
|
||
if following characters should be translated
|
||
to upper case */
|
||
1075 1 TESTCASE: PROCEDURE;
|
||
1076 2 DECLARE T BYTE;
|
||
1077 2 TRANSLATE = TRUE;
|
||
1078 2 T = LOWERCASE(CHAR);
|
||
1079 2 CHAR = UTRAN(CHAR);
|
||
1080 2 TRANSLATE = UPPER OR NOT T;
|
||
1081 2 END TESTCASE;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set translate to false and read next
|
||
character */
|
||
1082 1 READCTRAN: PROCEDURE;
|
||
1083 2 TRANSLATE = FALSE;
|
||
1084 2 CHAR = READC;
|
||
1085 2 CALL TESTCASE;
|
||
1086 2 END READCTRAN;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return true if command is only character
|
||
not in macro or combination on a line */
|
||
1087 1 SINGLECOM: PROCEDURE(C) BOOLEAN;
|
||
1088 2 DECLARE C BYTE;
|
||
1089 2 RETURN CHAR = C AND COMLEN = 1 AND MP = 0;
|
||
1090 2 END SINGLECOM;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return true if command is only character
|
||
not in macro or combination on a line, and
|
||
the operator has responded with a 'Y' to a
|
||
Y/N request */
|
||
1091 1 SINGLERCOM: PROCEDURE(C) BOOLEAN;
|
||
1092 2 DECLARE (C,i) BYTE;
|
||
1093 2 IF SINGLECOM(C) THEN
|
||
1094 2 DO forever;
|
||
1095 3 CALL CRLF; CALL PRINTCHAR(C);
|
||
1097 3 CALL MON1(9,.('-(Y/N)',WHAT,'$'));
|
||
1098 3 i = UCASE(READCHAR); CALL CRLF;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 41
|
||
|
||
|
||
1100 3 IF i = 'N' THEN GO TO START;
|
||
1102 3 if i = 'Y' then
|
||
1103 3 RETURN TRUE;
|
||
1104 3 END;
|
||
1105 2 RETURN FALSE;
|
||
1106 2 END SINGLERCOM;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return true if char is a digit */
|
||
1107 1 DIGIT: PROCEDURE BOOLEAN;
|
||
1108 2 RETURN (I := CHAR - '0') <= 9;
|
||
1109 2 END DIGIT;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* return with distance = number char =
|
||
next command */
|
||
1110 1 NUMBER: PROCEDURE;
|
||
1111 2 DISTANCE = 0;
|
||
1112 2 DO WHILE DIGIT;
|
||
1113 3 DISTANCE = SHL(DISTANCE,3) +
|
||
SHL(DISTANCE,1) + I;
|
||
1114 3 CALL READCTRAN;
|
||
1115 3 END;
|
||
1116 2 END NUMBER;
|
||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
|
||
/* set distance to distance relative to
|
||
the current line */
|
||
1117 1 RELDISTANCE: PROCEDURE;
|
||
1118 2 IF DISTANCE > BASELINE THEN
|
||
1119 2 DO; DIRECTION = FORWARD;
|
||
1121 3 DISTANCE = DISTANCE - BASELINE;
|
||
1122 3 END;
|
||
ELSE
|
||
1123 2 DO; DIRECTION = BACKWARD;
|
||
1125 3 DISTANCE = BASELINE - DISTANCE;
|
||
1126 3 END;
|
||
1127 2 END RELDISTANCE;
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 42
|
||
|
||
|
||
$ eject
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
||
|
||
* * * MAIN PROGRAM * * *
|
||
|
||
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
|
||
1128 1 plmstart: /* entry of MP/M-86 Interface */
|
||
|
||
/* INITIALIZE THE SYSTEM */
|
||
|
||
ver = version;
|
||
1129 1 if low(ver) >= cpm3 then
|
||
1130 1 has$bdos3 = true; /* handles passwords & xfcbs */
|
||
|
||
/* * * * * * * SET UP MEMORY BUFFER * * * * * * * * * */
|
||
|
||
/* I/O BUFFER REGION IS 1/8 AVAILABLE MEMORY */
|
||
1131 1 NBUF = SHR(MAX := MAXB - .MEMORY,SECTSHF+3) - 1;
|
||
/* NBUF IS NUMBER OF BUFFERS - 1 */
|
||
1132 1 BUFFLENGTH = SHL(DOUBLE(NBUF+1),SECTSHF+1);
|
||
/* NOW SET MAX AS REMAINDER OF FREE MEMORY */
|
||
1133 1 IF BUFFLENGTH + 1024 > MAX THEN
|
||
1134 1 DO; CALL perror(.('Insufficient memory$'));
|
||
1136 2 CALL BOOT;
|
||
1137 2 END;
|
||
/* REMOVE BUFFER SPACE AND 00 AT END OF MEMORY VECTOR */
|
||
1138 1 MAX = MAX - BUFFLENGTH - 1;
|
||
/* RESET BUFFER LENGTH FOR I AND O */
|
||
1139 1 BUFFLENGTH = SHR(BUFFLENGTH,1);
|
||
1140 1 SBUFFADR = MAXB - BUFFLENGTH;
|
||
1141 1 DBUFFADR = SBUFFADR - BUFFLENGTH;
|
||
1142 1 MEMORY(MAX) = 0; /* STOPS MATCH AT END OF BUFFER */
|
||
1143 1 MAXM = MAX - 1;
|
||
1144 1 HMAX = SHR(MAXM,1);
|
||
|
||
/* * * * * * SET UP SOURCE & DESTINATION FILES * * * * * */
|
||
|
||
1145 1 if fcb(1)=' ' then do;
|
||
1147 2 call print(.('Enter Input file: $'));
|
||
1148 2 call readcom;
|
||
1149 2 call crlf;
|
||
1150 2 tail = false;
|
||
1151 2 end;
|
||
1152 1 if not parse$fcb(.SFCB) then /* parse source fcb */
|
||
1153 1 call reboot;
|
||
|
||
1154 1 if has$bdos3 then do;
|
||
1156 2 call read$xfcb(.sfcb); /* get prot from source */
|
||
1157 2 protection = sfcb(ex); /* password protection mode */
|
||
1158 2 sfcb(ex) = 0;
|
||
1159 2 if high(ver) = 0 then /* CP/M-80 */
|
||
1160 2 if (lpp:=mon2(49,.pb)) = 0 then
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 43
|
||
|
||
|
||
1161 2 lpp = 23; /* get lines per page from SCB */
|
||
1162 2 end;
|
||
1163 1 call setdest; /* parse destination file */
|
||
1164 1 tail = false; /* parse$fcb from ED command */
|
||
|
||
/* SOURCE AND DESTINATION DISKS SET */
|
||
|
||
/* IF SOURCE AND DESTINATION DISKS DIFFER, CHECK FOR
|
||
AN EXISTING SOURCE FILE ON THE DESTINATION DISK - THERE
|
||
COULD BE A FATAL ERROR CONDITION WHICH COULD DESTROY A
|
||
FILE IF THE USER HAPPENED TO BE ADDRESSING THE WRONG
|
||
DISK */
|
||
1165 1 IF (SDISK <> DDISK) or not onefile THEN
|
||
1166 1 IF mon2(15,.dfcb) <> 255 THEN /* try to open */
|
||
/* SOURCE FILE PRESENT ON DEST DISK */
|
||
1167 1 CALL ABORT(.('Output File Exists, Erase It$'));
|
||
|
||
|
||
|
||
1168 1 RESTART:
|
||
CALL SETUP;
|
||
1169 1 MEMORY(0) = LF;
|
||
1170 1 FRONT = 1; BACK = MAXM;
|
||
1172 1 COLUMN = 0;
|
||
1173 1 GO TO START;
|
||
|
||
1174 1 OVERCOUNT: FLAG = POUND; GO TO RESET;
|
||
|
||
1176 1 BADCOM: FLAG = WHAT; GO TO RESET;
|
||
|
||
1178 1 OVERFLOW: /* ARRIVE HERE ON OVERFLOW CONDITION (I,F,S COMMAND) */
|
||
FLAG = '>'; go to reset;
|
||
|
||
1180 1 disk$err:
|
||
flag = 'F';
|
||
1181 1 err$msg = .diskfull;
|
||
1182 1 go to reset;
|
||
|
||
1183 1 dir$err:
|
||
flag = 'F';
|
||
1184 1 err$msg = .dirfull;
|
||
|
||
1185 1 RESET: /* ARRIVE HERE ON ERROR CONDITION */
|
||
PRINTSUPPRESS = FALSE;
|
||
1186 1 CALL PRINT(.(tab,'BREAK "$'));
|
||
1187 1 CALL PRINTC(FLAG);
|
||
1188 1 CALL PRINTM(.('" AT $'));
|
||
1189 1 if char = CR or char = LF then
|
||
1190 1 call printm(.('END OF LINE$'));
|
||
else
|
||
1191 1 CALL PRINTC(CHAR);
|
||
1192 1 if err$msg <> 0 then do;
|
||
1194 2 call perror(err$msg);
|
||
1195 2 err$msg = 0;
|
||
1196 2 end;
|
||
1197 1 CALL CRLF;
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 44
|
||
|
||
|
||
|
||
1198 1 START:
|
||
READBUFF = TRUE;
|
||
1199 1 MP = 0;
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 45
|
||
|
||
|
||
$ eject
|
||
|
||
1200 1 DO FOREVER; /* OR UNTIL THE POWER IS TURNED OFF */
|
||
|
||
/* **************************************************************
|
||
SIMPLE COMMANDS (CANNOT BE PRECEDED BY DIRECTION/DISTANCE):
|
||
E END THE EDIT NORMALLY
|
||
H MOVE TO HEAD OF EDITED FILE
|
||
I INSERT CHARACTERS
|
||
O RETURN TO THE ORIGINAL FILE
|
||
R READ FROM LIBRARY FILE
|
||
Q QUIT EDIT WITHOUT CHANGES TO ORIGINAL FILE
|
||
************************************************************** */
|
||
|
||
|
||
|
||
1201 2 INSERTING = FALSE;
|
||
1202 2 CALL READCTRAN;
|
||
1203 2 FLAG = 'E';
|
||
1204 2 MI = CBP; /* SAVE STARTING ADDRESS FOR <CR> COMMAND */
|
||
1205 2 IF SINGLECOM('E') THEN
|
||
1206 2 DO; CALL TERMINATE;
|
||
1208 3 CALL REBOOT;
|
||
1209 3 END;
|
||
|
||
1210 2 ELSE IF SINGLECOM('H') THEN /* GO TO TOP */
|
||
1211 2 DO; CALL TERMINATE;
|
||
1213 3 newfile = false;
|
||
1214 3 if onefile then do;
|
||
/* PING - PONG DISKS */
|
||
1216 4 CHAR = DDISK;
|
||
1217 4 DDISK = SDISK;
|
||
1218 4 SDISK = CHAR;
|
||
1219 4 end;
|
||
1220 3 else do;
|
||
1221 4 call settype(.dfcb,.dtype);
|
||
1222 4 call move (16,.dfcb,.sfcb); /* source = destination */
|
||
1223 4 onefile = true;
|
||
1224 4 end;
|
||
1225 3 GO TO RESTART;
|
||
1226 3 END;
|
||
|
||
1227 2 ELSE IF CHAR = 'I' THEN /* INSERT CHARACTERS */
|
||
1228 2 DO;
|
||
1229 3 IF (INSERTING := (CBP = COMLEN) AND (MP = 0)) THEN do;
|
||
1231 4 tcolumn = 255; /* tested in ins$error$chk routine */
|
||
1232 4 distance = 0;
|
||
1233 4 direction = backward;
|
||
1234 4 if memory(front-1) = LF then
|
||
1235 4 call printbase;
|
||
else
|
||
1236 4 call typelines;
|
||
1237 4 end;
|
||
1238 3 DO WHILE SCANNING;
|
||
1239 4 DO WHILE CHAR <> 0;
|
||
1240 5 IF CHAR=CTLU OR CHAR=CTLX OR CHAR=CTLR THEN
|
||
/* LINE DELETE OR RETYPE */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 46
|
||
|
||
|
||
1241 5 DO;
|
||
/* ELIMINATE OR REPEAT THE LINE */
|
||
1242 6 IF CHAR = CTLR THEN
|
||
1243 6 DO; CALL CRLF;
|
||
1245 7 CALL TYPELINES;
|
||
1246 7 END;
|
||
ELSE
|
||
/* LINE DELETE */
|
||
1247 6 DO; CALL SETLIMITS; CALL SETPTRS;
|
||
1250 7 IF CHAR = CTLU THEN
|
||
1251 7 DO; CALL CRLF; CALL PRINTNMBASE;
|
||
1254 8 END;
|
||
ELSE
|
||
/* MUST BE CTLX */
|
||
1255 7 DO WHILE COLUMN > SCOLUMN;
|
||
1256 8 CALL BACKSPACE;
|
||
1257 8 END;
|
||
1258 7 END;
|
||
1259 6 END;
|
||
1260 5 ELSE IF CHAR = CTLH THEN
|
||
1261 5 DO;
|
||
1262 6 call ins$error$chk;
|
||
1263 6 IF (TCOLUMN := COLUMN) > 0 THEN
|
||
1264 6 CALL PRINTNMAC(' '); /* RESTORE AFT BACKSP */
|
||
1265 6 call decfront;
|
||
1266 6 if tcolumn > scolumn then
|
||
1267 6 DO; /* CHARACTER CAN BE ELIMINATED */
|
||
1268 7 PRINTSUPPRESS = TRUE;
|
||
/* BACKSPACE CHARACTER ACCEPTED */
|
||
1269 7 COLUMN = 0;
|
||
1270 7 CALL TYPELINES;
|
||
1271 7 PRINTSUPPRESS = FALSE;
|
||
/* COLUMN POSITION NOW RESET */
|
||
1272 7 IF (QCOLUMN := COLUMN) < SCOLUMN THEN
|
||
1273 7 QCOLUMN = SCOLUMN;
|
||
1274 7 COLUMN = TCOLUMN; /* ORIGINAL VALUE */
|
||
1275 7 DO WHILE COLUMN > QCOLUMN;
|
||
1276 8 CALL BACKSPACE;
|
||
1277 8 END;
|
||
1278 7 END;
|
||
else
|
||
1279 6 do;
|
||
1280 7 if memory(front-1) = CR then
|
||
1281 7 call decfront;
|
||
1282 7 call crlf;
|
||
1283 7 call typelines;
|
||
1284 7 end;
|
||
1285 6 CHAR = 0;
|
||
1286 6 END;
|
||
1287 5 ELSE IF CHAR = RUBOUT THEN
|
||
1288 5 DO; call ins$error$chk;
|
||
1290 6 CALL DECFRONT; CALL PRINTC(CHAR:=MEMORY(FRONT));
|
||
1292 6 CHAR = 0;
|
||
1293 6 END;
|
||
1294 5 else if char = LF and memory(front-1) <> CR then
|
||
1295 5 do;
|
||
1296 6 call printc(CR);
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 47
|
||
|
||
|
||
1297 6 call inscrlf;
|
||
1298 6 end;
|
||
ELSE
|
||
/* NOT A SPECIAL CASE */
|
||
1299 5 DO;
|
||
1300 6 IF NOT GRAPHIC(CHAR) THEN
|
||
1301 6 DO;
|
||
1302 7 CALL PRINTNMAC('^');
|
||
1303 7 CALL PRINTNMAC(CHAR + '@');
|
||
1304 7 end;
|
||
/* COLUMN COUNT GOES UP IF GRAPHIC */
|
||
/* COMPUTE OUTPUT COLUMN POSITION */
|
||
1305 6 if char = CTLL and not inserting then
|
||
1306 6 call inscrlf;
|
||
1307 6 else do;
|
||
1308 7 IF MP = 0 THEN
|
||
1309 7 DO;
|
||
1310 8 IF CHAR >= ' ' THEN
|
||
1311 8 COLUMN = COLUMN + 1;
|
||
1312 8 ELSE IF CHAR = TAB THEN
|
||
1313 8 COLUMN = COLUMN + (8 - (COLUMN AND 111B));
|
||
END;
|
||
1315 7 CALL INSERT;
|
||
1316 7 END;
|
||
1317 6 end;
|
||
1318 5 IF CHAR = LF THEN CALL PRINTNMBASE;
|
||
1320 5 IF CHAR = CR THEN
|
||
1321 5 CALL PRINTNMAC(CHAR:=LF);
|
||
ELSE
|
||
1322 5 CHAR = 0;
|
||
1323 5 tcolumn = 0;
|
||
1324 5 END; /* of while char <> 0 */
|
||
1325 4 END; /* of while scanning */
|
||
1326 3 IF CHAR <> ENDFILE THEN do; /* MUST HAVE STOPPED ON CR */
|
||
1328 4 CALL INSCRLF;
|
||
1329 4 column = 0;
|
||
1330 4 end;
|
||
1331 3 IF INSERTING AND LINESET THEN CALL CRLF;
|
||
1333 3 END;
|
||
|
||
|
||
1334 2 ELSE IF SINGLERCOM('O') THEN /* FORGET THIS EDIT */
|
||
1335 2 do;
|
||
1336 3 call close(.sfcb);
|
||
1337 3 GO TO RESTART;
|
||
1338 3 end;
|
||
|
||
|
||
1339 2 ELSE IF CHAR = 'R' THEN
|
||
1340 2 DO; DECLARE I BYTE;
|
||
/* READ FROM LIB FILE */
|
||
1342 3 CALL SETRDMA;
|
||
1343 3 IF (FLAG := parse$lib(.rfcb)) THEN
|
||
1344 3 reading = false;
|
||
1345 3 if not reading then do;
|
||
1347 4 if not flag then
|
||
/* READ FROM XFER FILE */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 48
|
||
|
||
|
||
1348 4 CALL MOVE(12,.XFCB,.RFCB);
|
||
1349 4 RFCB(12), RFCB(32) = 0; /* zero extent, next record */
|
||
1350 4 rbp = sectsize;
|
||
1351 4 CALL open(.RFCB);
|
||
1352 4 reading = true;
|
||
1353 4 end;
|
||
|
||
1354 3 DO WHILE (CHAR := READFILE) <> ENDFILE;
|
||
1355 4 CALL INSERT;
|
||
1356 4 END;
|
||
1357 3 reading = false;
|
||
1358 3 call close (.rfcb);
|
||
1359 3 END;
|
||
|
||
|
||
1360 2 ELSE IF SINGLERCOM('Q') THEN
|
||
1361 2 DO;
|
||
1362 3 CALL DELETE$file(.DFCB);
|
||
1363 3 if newfile or not onefile then do;
|
||
1365 4 call settype(.dfcb,.dtype);
|
||
1366 4 call delete$file(.dfcb);
|
||
1367 4 end;
|
||
1368 3 CALL REBOOT;
|
||
1369 3 END;
|
||
|
||
|
||
ELSE
|
||
/* MAY BE A COMMAND WHICH HAS AN OPTIONAL DIRECTION AND DISTANCE */
|
||
1370 2 DO; /* SCAN A SIGNED INTEGER VALUE (IF ANY) */
|
||
1371 3 DCL I BYTE;
|
||
|
||
1372 3 CALL SETFORWARD;
|
||
|
||
1373 3 IF CHAR = '-' THEN
|
||
1374 3 DO; CALL READCTRAN; DIRECTION = BACKWARD;
|
||
1377 4 END;
|
||
|
||
1378 3 IF CHAR = POUND THEN
|
||
1379 3 DO; CALL SETFF; CALL READCTRAN;
|
||
1382 4 END;
|
||
|
||
1383 3 ELSE IF DIGIT THEN
|
||
1384 3 DO; CALL NUMBER;
|
||
/* MAY BE ABSOLUTE LINE REFERENCE */
|
||
1386 4 IF CHAR = ':' THEN
|
||
1387 4 DO; CHAR = 'L';
|
||
1389 5 CALL RELDISTANCE;
|
||
1390 5 END;
|
||
1391 4 END;
|
||
|
||
1392 3 ELSE IF CHAR = ':' THEN /* LEADING COLON */
|
||
1393 3 DO; CALL READCTRAN; /* CLEAR THE COLON */
|
||
1395 4 CALL NUMBER;
|
||
1396 4 CALL RELDISTANCE;
|
||
1397 4 IF DIRECTION = FORWARD THEN
|
||
1398 4 DISTANCE = DISTANCE + 1;
|
||
1399 4 END;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 49
|
||
|
||
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 50
|
||
|
||
|
||
$ eject
|
||
|
||
IF DISTZERO THEN
|
||
1401 3 DIRECTION = BACKWARD;
|
||
/* DIRECTION AND DISTANCE ARE NOW SET */
|
||
|
||
|
||
/* **************************************************************
|
||
MAY BE A COMMAND WHICH HAS DIRECTION AND DISTANCE SPECIFIED:
|
||
B BEGINNING/BOTTOM OF BUFFER
|
||
C MOVE CHARACTER POSITIONS
|
||
D DELETE CHARACTERS
|
||
K KILL LINES
|
||
L MOVE LINE POSITION
|
||
P PAGE UP OR DOWN (LPP LINES AND PRINT)
|
||
T TYPE LINES
|
||
U UPPER CASE TRANSLATE
|
||
V VERIFY LINE NUMBERS
|
||
<CR> MOVE UP OR DOWN LINES AND PRINT LINE
|
||
************************************************************** */
|
||
|
||
|
||
1402 3 IF CHAR = 'B' THEN
|
||
1403 3 DO; DIRECTION = 1 - DIRECTION;
|
||
1405 4 FIRST = 1; LASTC = MAXM; CALL MOVER;
|
||
1408 4 END;
|
||
|
||
|
||
1409 3 ELSE IF CHAR = 'C' THEN
|
||
1410 3 DO; CALL SETCLIMITS; CALL MOVER;
|
||
1413 4 END;
|
||
|
||
|
||
1414 3 ELSE IF CHAR = 'D' THEN
|
||
1415 3 DO; CALL SETCLIMITS;
|
||
1417 4 CALL SETPTRS; /* SETS BACK/FRONT */
|
||
1418 4 END;
|
||
|
||
|
||
1419 3 ELSE IF CHAR = 'K' THEN
|
||
1420 3 DO; CALL SETLIMITS;
|
||
1422 4 CALL SETPTRS;
|
||
1423 4 END;
|
||
|
||
|
||
1424 3 ELSE IF CHAR = 'L' THEN
|
||
1425 3 CALL MOVELINES;
|
||
|
||
|
||
1426 3 ELSE IF CHAR = 'P' THEN /* PAGE MODE PRINT */
|
||
1427 3 DO;
|
||
1428 4 IF DISTZERO THEN
|
||
1429 4 DO; DIRECTION = FORWARD;
|
||
1431 5 CALL SETLPP; CALL TYPELINES;
|
||
1433 5 END;
|
||
ELSE
|
||
1434 4 DO WHILE DISTNZERO; CALL PAGE;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 51
|
||
|
||
|
||
1436 5 CALL WAIT;
|
||
1437 5 END;
|
||
1438 4 END;
|
||
|
||
|
||
1439 3 ELSE IF CHAR = 'T' THEN
|
||
1440 3 CALL TYPELINES;
|
||
|
||
|
||
1441 3 ELSE IF CHAR = 'U' THEN
|
||
1442 3 UPPER = DIRECTION = FORWARD;
|
||
|
||
|
||
1443 3 ELSE IF CHAR = 'V' THEN
|
||
1444 3 DO; /* 0V DISPLAYS BUFFER STATE */
|
||
1445 4 IF DISTZERO THEN
|
||
1446 4 DO; CALL PRINTVALUE(BACK-FRONT);
|
||
1448 5 CALL PRINTC('/');
|
||
1449 5 CALL PRINTVALUE(MAXM);
|
||
1450 5 CALL CRLF;
|
||
1451 5 END;
|
||
1452 4 ELSE if (LINESET := DIRECTION = FORWARD) then
|
||
1453 4 scolumn = 8;
|
||
else
|
||
1454 4 scolumn = 0;
|
||
1455 4 END;
|
||
|
||
|
||
|
||
1456 3 ELSE IF CHAR = CR THEN /* MAY BE MOVE/TYPE COMMAND */
|
||
1457 3 DO;
|
||
1458 4 IF MI = 1 AND MP = 0 THEN /* FIRST COMMAND */
|
||
1459 4 DO; CALL MOVELINES; CALL SETFORWARD; CALL TYPELINES;
|
||
1463 5 END;
|
||
1464 4 END;
|
||
|
||
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 52
|
||
|
||
|
||
$ eject
|
||
|
||
1465 3 ELSE IF DIRECTION = FORWARD OR DISTZERO THEN
|
||
1466 3 DO;
|
||
|
||
/* **************************************************************
|
||
COMMANDS WHICH ALLOW ONLY A PRECEDING NUMBER:
|
||
A APPEND LINES
|
||
F FIND NTH OCCURRENCE
|
||
M APPLY MACRO
|
||
N SAME AS F WITH AUTOSCAN THROUGH FILE
|
||
S PERFORM N SUBSTITUTIONS
|
||
W WRITE LINES TO OUTPUT FILE
|
||
X TRANSFER (XFER) LINES TO TEMP FILE
|
||
Z SLEEP
|
||
************************************************************** */
|
||
|
||
|
||
|
||
1467 4 IF CHAR = 'A' THEN
|
||
1468 4 DO; DIRECTION = FORWARD;
|
||
1470 5 FIRST = FRONT; LASTC = MAXM; CALL MOVER;
|
||
/* ALL STORAGE FORWARD */
|
||
1473 5 IF DISTZERO THEN CALL APPHALF;
|
||
/* DISTANCE = 0 IF APPHALF CALLED */
|
||
1475 5 DO WHILE DISTNZERO;
|
||
1476 6 CALL READLINE;
|
||
1477 6 END;
|
||
1478 5 DIRECTION = BACKWARD; CALL MOVER;
|
||
/* POINTERS REPOSITIONED */
|
||
1480 5 END;
|
||
|
||
|
||
1481 4 ELSE IF CHAR = 'F' THEN
|
||
1482 4 DO; CALL SETFIND; /* SEARCH STRING SCANNED
|
||
AND SETUP BETWEEN 0 AND WBP-1 IN SCRATCH */
|
||
1484 5 DO WHILE DISTNZERO; CALL CHKFOUND;
|
||
1486 6 END;
|
||
1487 5 END;
|
||
|
||
|
||
1488 4 ELSE IF CHAR = 'J' THEN /* JUXTAPOSITION OPERATION */
|
||
1489 4 DO; DECLARE T ADDRESS;
|
||
1491 5 CALL SETFIND; CALL COLLECT;
|
||
1493 5 WBJ = WBE; CALL COLLECT;
|
||
/* SEARCH FOR STRING 0 - WBP-1, INSERT STRING WBP TO WBJ-1,
|
||
AND THEN DELETE UP TO STRING WBJ TO WBE-1 */
|
||
1495 5 DO WHILE DISTNZERO; CALL CHKFOUND;
|
||
1497 6 /* INSERT STRING */ MI = WBP - 1;
|
||
1498 6 DO WHILE (MI := MI + 1) < WBJ;
|
||
1499 7 CHAR = SCRATCH(MI); CALL INSERT;
|
||
1501 7 END;
|
||
1502 6 T = FRONT; /* SAVE POSITION FOR DELETE */
|
||
1503 6 IF NOT FIND(WBJ,WBE) THEN GO TO OVERCOUNT;
|
||
/* STRING FOUND, SO MOVE IT BACK */
|
||
1505 6 FIRST = FRONT - (WBE - WBJ);
|
||
1506 6 DIRECTION = BACKWARD; CALL MOVER;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 53
|
||
|
||
|
||
/* NOW REMOVE THE INTERMEDIATE STRING */
|
||
1508 6 call setfront(t);
|
||
1509 6 END;
|
||
1510 5 END;
|
||
|
||
|
||
1511 4 ELSE IF CHAR = 'M' AND MP = 0 THEN /* MACRO DEFINITION */
|
||
1512 4 DO; XP = 255;
|
||
1514 5 IF DISTANCE = 1 THEN CALL ZERODIST;
|
||
1516 5 DO WHILE (MACRO(XP := XP + 1) := READC) <> CR;
|
||
1517 6 END;
|
||
1518 5 MP = XP; XP = 0; MT = DISTANCE;
|
||
1521 5 END;
|
||
|
||
|
||
1522 4 ELSE IF CHAR = 'N' THEN
|
||
1523 4 DO; /* SEARCH FOR STRING WITH AUTOSCAN */
|
||
1524 5 CALL SETFIND; /* SEARCH STRING SCANNED */
|
||
1525 5 DO WHILE DISTNZERO;
|
||
/* FIND ANOTHER OCCURRENCE OF STRING */
|
||
1526 6 DO WHILE NOT FIND(0,WBP); /* NOT IN BUFFER */
|
||
1527 7 IF BREAK$KEY THEN GO TO RESET;
|
||
1529 7 CALL SAVEDIST; CALL CLEARMEM;
|
||
/* MEMORY BUFFER WRITTEN */
|
||
1531 7 CALL APPHALF;
|
||
1532 7 DIRECTION = BACKWARD; FIRST = 1; CALL MOVER;
|
||
1535 7 CALL RESTDIST; DIRECTION = FORWARD;
|
||
/* MAY BE END OF FILE */
|
||
1537 7 IF BACK >= MAXM THEN GO TO OVERCOUNT;
|
||
1539 7 END;
|
||
1540 6 END;
|
||
1541 5 END;
|
||
|
||
|
||
1542 4 ELSE IF CHAR = 'S' THEN /* SUBSTITUTE COMMAND */
|
||
1543 4 DO; CALL SETFIND;
|
||
1545 5 CALL COLLECT;
|
||
/* FIND STRING FROM 0 TO WBP-1, SUBSTITUTE STRING
|
||
BETWEEN WBP AND WBE-1 IN SCRATCH */
|
||
1546 5 DO WHILE DISTNZERO;
|
||
1547 6 CALL CHKFOUND;
|
||
/* FRONT AND BACK NOW POSITIONED AT FOUND
|
||
STRING - REPLACE IT */
|
||
1548 6 call setfront(FRONT - (MI := WBP)); /* BACKED UP */
|
||
1549 6 DO WHILE MI < WBE;
|
||
1550 7 CHAR = SCRATCH(MI);
|
||
1551 7 MI = MI + 1; CALL INSERT;
|
||
1553 7 END;
|
||
1554 6 END;
|
||
1555 5 END;
|
||
|
||
|
||
1556 4 ELSE IF CHAR = 'W' THEN
|
||
1557 4 CALL WRITEOUT;
|
||
|
||
|
||
1558 4 ELSE IF CHAR = 'X' THEN /* TRANSFER LINES */
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 54
|
||
|
||
|
||
1559 4 DO;
|
||
1560 5 flag = parse$lib(.rfcb);
|
||
1561 5 xbp = 0;
|
||
1562 5 IF DISTZERO THEN
|
||
1563 5 DO; /* delete the file */
|
||
1564 6 xferon = false;
|
||
1565 6 CALL DELETE(.rfcb);
|
||
1566 6 if dcnt = 255 then
|
||
1567 6 call perror(.not$found);
|
||
1568 6 END;
|
||
ELSE
|
||
1569 5 do; /* transfer lines */
|
||
1570 6 declare i address;
|
||
|
||
1571 6 if xferon and compare$xfer then
|
||
1572 6 call append$xfer;
|
||
else
|
||
1573 6 DO;
|
||
1574 7 XFERON = TRUE;
|
||
1575 7 call move(12,.rfcb,.xfcb);
|
||
1576 7 xfcbext, xfcbrec, xfcbe, xfcbr = 0;
|
||
1577 7 CALL MAKE$file(.XFCB);
|
||
1578 7 IF DCNT = 255 THEN
|
||
1579 7 goto dir$err;
|
||
1580 7 END;
|
||
1581 6 CALL SETLIMITS;
|
||
1582 6 DO I = FIRST TO LASTC;
|
||
1583 7 CALL PUTXFER(MEMORY(I));
|
||
1584 7 END;
|
||
1585 6 call close$xfer;
|
||
1586 6 END;
|
||
1587 5 END;
|
||
|
||
|
||
1588 4 ELSE IF CHAR = 'Z' THEN /* SLEEP */
|
||
1589 4 DO;
|
||
1590 5 IF DISTZERO THEN
|
||
1591 5 DO; IF READCHAR = ENDFILE THEN GO TO RESET;
|
||
1594 6 END;
|
||
1595 5 DO WHILE DISTNZERO; CALL WAIT;
|
||
1597 6 END;
|
||
1598 5 END;
|
||
1599 4 ELSE IF CHAR <> 0 THEN /* NOT BREAK LEFT OVER FROM STOP */
|
||
/* DIRECTION FORWARD, BUT NOT ONE OF THE ABOVE */
|
||
1600 4 GO TO BADCOM;
|
||
|
||
|
||
END;
|
||
ELSE /* DIRECTION NOT FORWARD */
|
||
1602 3 GO TO BADCOM;
|
||
1603 3 END;
|
||
1604 2 END;
|
||
1605 1 END;
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 55
|
||
|
||
|
||
CROSS-REFERENCE LISTING
|
||
-----------------------
|
||
|
||
|
||
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
|
||
----- ------ ----- --------------------------------
|
||
|
||
|
||
101 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 102 103
|
||
105 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 106 108
|
||
207 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 208 209
|
||
116 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 117 118
|
||
178 0000H 1 A. . . . . . . . . BYTE BASED(S) 180
|
||
244 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 245 246
|
||
110 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 111 113
|
||
168 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 169 170
|
||
238 0000H 1 A. . . . . . . . . BYTE BASED(S) 240
|
||
207 0C2EH 16 ABORT. . . . . . . PROCEDURE STACK=0032H 214 669 675 686 1167
|
||
24 ADDR . . . . . . . LITERALLY 40 177 238 532 725 819 995
|
||
244 0006H 2 AFCB . . . . . . . WORD PARAMETER AUTOMATIC 245 246
|
||
977 0000H 33 AFCB . . . . . . . BYTE BASED(FCBADR) ARRAY(33) 985 987
|
||
220 0004H 2 AFCB . . . . . . . WORD PARAMETER AUTOMATIC 221 223
|
||
370 0004H 2 AFCB . . . . . . . WORD PARAMETER AUTOMATIC 371 372
|
||
225 0004H 2 AFCB . . . . . . . WORD PARAMETER AUTOMATIC 226 227 229
|
||
533 0000H 33 AFCB . . . . . . . BYTE BASED(FCBADR) ARRAY(33) 538 577 579
|
||
231 0004H 2 AFCB . . . . . . . WORD PARAMETER AUTOMATIC 232 233 235
|
||
355 0F10H 77 APPENDXFER . . . . PROCEDURE STACK=0012H 1572
|
||
1057 1C63H 34 APPHALF. . . . . . PROCEDURE STACK=0046H 1474 1531
|
||
978 0309H 1 B. . . . . . . . . BYTE 979 989
|
||
841 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 842 844 845
|
||
178 0000H 1 B. . . . . . . . . BYTE BASED(D) 180
|
||
865 0306H 1 B. . . . . . . . . BYTE 873 874
|
||
840 0305H 1 B. . . . . . . . . BYTE 850 855 857
|
||
314 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 315 318
|
||
271 02F4H 1 B. . . . . . . . . BYTE 276 278
|
||
40 001EH 2 BACK . . . . . . . WORD 512 735 762 776 784 789 793 803 827 834 836 848
|
||
867 873 884 892 899 918 949 1171 1447 1537
|
||
65 0991H 37 BACKSPACE. . . . . PROCEDURE STACK=0014H 1256 1276
|
||
30 0177H 3 BACKUP . . . . . . BYTE ARRAY(3) INITIAL 285 392
|
||
36 BACKWARD . . . . . LITERALLY 727 756 825 890 1124 1233 1376 1401 1478 1506 1532
|
||
38 0148H BADCOM . . . . . . LABEL 942 1176 1600 1602
|
||
35 0012H 2 BASELINE . . . . . WORD 477 705 767 770 992 1118 1121 1125
|
||
24 BOOLEAN. . . . . . LITERALLY 29 82 157 280 346 405 450 536 541 710 716
|
||
1087 1091 1107
|
||
20 0929H 14 BOOT . . . . . . . PROCEDURE STACK=0008H 202 1136
|
||
157 0B42H 39 BREAKKEY . . . . . PROCEDURE BYTE STACK=0008H 439 492 1016 1048 1527
|
||
19 0000H 128 BUFF . . . . . . . BYTE ARRAY(128) EXTERNAL(7) 485 486 637 647
|
||
28 0006H 2 BUFFLENGTH . . . . WORD 274 316 703 1132 1133 1138 1139 1140 1141
|
||
1087 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 1088 1089
|
||
416 02FBH 1 C. . . . . . . . . BYTE 421 422 423 425 427 436 439
|
||
441 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 442 443 444 446 447
|
||
1091 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 1092 1093 1096
|
||
787 0304H 1 C. . . . . . . . . BYTE 793 795
|
||
321 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 322 336
|
||
405 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 406 407
|
||
996 030AH 1 C. . . . . . . . . BYTE 1005 1012 1019
|
||
82 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 83 84 86
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 56
|
||
|
||
|
||
237 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 238 239
|
||
176 0008H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 177 179
|
||
409 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 410 411 412 413
|
||
88 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 89 90 93 95
|
||
34 0201H 1 CBP. . . . . . . . BYTE INITIAL 518 522 523 524 623 1204 1229
|
||
40 02EFH 1 CHAR . . . . . . . BYTE 528 529 538 544 557 558 562 573 582 594 912 913
|
||
920 922 926 930 935 937 939 941 1066 1068 1078 1079 1084 1089
|
||
1108 1189 1191 1216 1218 1227 1239 1240 1242 1250 1260 1285 1287 1291
|
||
1292 1294 1300 1303 1305 1310 1312 1318 1320 1321 1322 1326 1339 1354
|
||
1373 1378 1386 1388 1392 1402 1409 1414 1419 1424 1426 1439 1441 1443
|
||
1456 1467 1481 1488 1499 1511 1522 1542 1550 1556 1558 1588 1599
|
||
73 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 74 75 76 77 79
|
||
399 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 400 403
|
||
57 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 58 59 61 63
|
||
51 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 52 55
|
||
971 1AC1H 24 CHKFOUND . . . . . PROCEDURE STACK=001CH 1485 1496 1547
|
||
28 CK . . . . . . . . LITERALLY
|
||
905 1959H 11 CLEARMEM . . . . . PROCEDURE STACK=0032H 910 1530
|
||
133 0ADBH 19 CLOSE. . . . . . . PROCEDURE STACK=000AH 213 344 379 380 1336 1358
|
||
339 0EC1H 37 CLOSEXFER. . . . . PROCEDURE STACK=0022H 1585
|
||
928 19DEH 47 COLLECT. . . . . . PROCEDURE STACK=0038H 968 1492 1494 1545
|
||
32 017AH 1 COLUMN . . . . . . BYTE INITIAL 60 62 66 71 75 510 520 1007 1172 1255
|
||
1263 1269 1272 1274 1275 1311 1313 1329
|
||
34 0181H 128 COMBUFF. . . . . . BYTE ARRAY(128) 523 524
|
||
34 0180H 1 COMLEN . . . . . . BYTE 522 1089 1229
|
||
346 0EE6H 42 COMPAREXFER. . . . PROCEDURE BYTE STACK=0002H 1571
|
||
36 COMSIZE. . . . . . LITERALLY 37 40
|
||
48 0946H 15 CONIN. . . . . . . PROCEDURE BYTE STACK=0008H 421
|
||
2 CPM3 . . . . . . . LITERALLY 1129
|
||
25 CR . . . . . . . . LITERALLY 86 98 423 487 523 542 557 926 937 1066 1189
|
||
1280 1294 1296 1320 1456 1516
|
||
97 0A51H 17 CRLF . . . . . . . PROCEDURE STACK=0020H 107 114 417 624 625 663 664 689
|
||
1008 1095 1099 1149 1197 1244 1252 1282 1332 1450
|
||
165 0B69H 15 CSELECT. . . . . . PROCEDURE BYTE STACK=0008H
|
||
24 CTLH . . . . . . . LITERALLY 68 70 427 1260
|
||
24 CTLL . . . . . . . LITERALLY 935 1305
|
||
24 CTLR . . . . . . . LITERALLY 1240 1242
|
||
24 CTLU . . . . . . . LITERALLY 1240 1250
|
||
24 CTLX . . . . . . . LITERALLY 425 1240
|
||
841 18A9H 25 CTRAN. . . . . . . PROCEDURE BYTE STACK=0018H 850
|
||
25 CTRLY. . . . . . . LITERALLY 160
|
||
450 02FCH 1 D. . . . . . . . . BYTE 454 457 460
|
||
176 0004H 2 D. . . . . . . . . WORD PARAMETER AUTOMATIC 177 178 180 182
|
||
23 0000H 4 DATE . . . . . . . BYTE ARRAY(4) DATA
|
||
28 0000H 128 DBUFF. . . . . . . BYTE BASED(DBUFFADR) ARRAY(128) 318
|
||
28 000AH 2 DBUFFADR . . . . . WORD 28 300 306 318 1141
|
||
24 DCL. . . . . . . . LITERALLY
|
||
33 017EH 1 DCNT . . . . . . . BYTE 135 139 235 259 261 287 381 671 679 683 694 1566
|
||
1578
|
||
28 0114H 1 DDISK. . . . . . . BYTE AT 1165 1216 1217
|
||
783 176FH 9 DECBACK. . . . . . PROCEDURE STACK=0002H 804
|
||
769 173CH 9 DECBASE. . . . . . PROCEDURE STACK=0002H 781
|
||
778 1757H 24 DECFRONT . . . . . PROCEDURE STACK=0006H 800 821 1265 1281 1290
|
||
542 0064H 15 DEL. . . . . . . . BYTE ARRAY(15) DATA 543 544
|
||
137 0AEEH 19 DELETE . . . . . . PROCEDURE STACK=000AH 201 223 1565
|
||
220 0C64H 16 DELETEFILE . . . . PROCEDURE STACK=0014H 227 233 286 1362 1366
|
||
541 1411H 54 DELIM. . . . . . . PROCEDURE BYTE STACK=0030H 565 567 587 599
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 57
|
||
|
||
|
||
535 02FFH 1 DELIMITER. . . . . BYTE 543 544 546 608
|
||
28 0114H 33 DFCB . . . . . . . BYTE ARRAY(33) 28 213 284 301 380 385 387 395 396 397
|
||
627 630 631 633 634 691 692 693 698 700 702 1166 1221 1222
|
||
1362 1365 1366
|
||
1107 1D66H 20 DIGIT. . . . . . . PROCEDURE BYTE STACK=0002H 1112 1383
|
||
40 02EEH 1 DIRECTION. . . . . BYTE 727 756 788 825 890 901 999 1036 1037 1040 1054 1120
|
||
1124 1233 1376 1397 1401 1404 1430 1442 1452 1465 1469 1478 1506 1532
|
||
1536
|
||
38 0172H DIRERR . . . . . . LABEL 1183 1579
|
||
44 0017H 15 DIRFULL. . . . . . BYTE ARRAY(15) DATA 214 1184
|
||
38 0160H DISKERR. . . . . . LABEL 308 332 1180
|
||
44 0026H 10 DISKFULL . . . . . BYTE ARRAY(10) DATA 1181
|
||
141 0B01H 16 DISKREAD . . . . . PROCEDURE BYTE STACK=000AH 259 360 643
|
||
145 0B11H 16 DISKWRITE. . . . . PROCEDURE BYTE STACK=000AH 301 328
|
||
40 0018H 2 DISTANCE . . . . . WORD 708 711 714 719 729 744 828 830 834 836 1023 1026
|
||
1029 1055 1111 1113 1118 1121 1125 1232 1398 1514 1520
|
||
716 1642H 24 DISTNZERO. . . . . PROCEDURE BYTE STACK=0006H 883 896 1059 1434 1475 1484 1495
|
||
1525 1546 1595
|
||
710 1628H 15 DISTZERO . . . . . PROCEDURE BYTE STACK=0002H 717 894 1400 1428 1445 1465 1473
|
||
1562 1590
|
||
29 0164H 1 DOTFOUND . . . . . BYTE INITIAL 555 585 985
|
||
DOUBLE . . . . . . BUILTIN 1132
|
||
534 DRIVE. . . . . . . LITERALLY 577
|
||
30 0165H 3 DTYPE. . . . . . . BYTE ARRAY(3) 396 634 1221 1365
|
||
1 0002H 2343 ED . . . . . . . . PROCEDURE STACK=0048H
|
||
24 ENDFILE. . . . . . LITERALLY 263 273 276 342 364 375 444 542 558 644 850
|
||
912 926 1326 1354 1592
|
||
280 0D87H 64 ERASEBAK . . . . . PROCEDURE BYTE STACK=0018H 302 329
|
||
614 13E1H ERR. . . . . . . . LABEL 569 576 578 589 601 609 611
|
||
44 0026H 2 ERRMSG . . . . . . WORD INITIAL 125 1181 1184 1192 1194 1195
|
||
31 0010H 2 ERRORCODE. . . . . WORD 656 660 666 668 671
|
||
24 ESC. . . . . . . . LITERALLY 443
|
||
28 EX . . . . . . . . LITERALLY 28 650 692 698 702 1157 1158
|
||
439 10C8H EXIT . . . . . . . LABEL 424
|
||
237 0006H 1 F. . . . . . . . . BYTE PARAMETER AUTOMATIC 238 240
|
||
25 FALSE. . . . . . . LITERALLY 29 163 290 351 452 509 551 553 555 615 629
|
||
722 747 812 950 1083 1105 1150 1164 1185 1201 1213 1271 1344 1357
|
||
1564
|
||
149 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 150 151
|
||
145 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 146 147
|
||
141 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 142 143
|
||
137 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 138 139
|
||
133 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 134 135
|
||
129 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 130 131
|
||
120 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 121 122
|
||
16 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(3) 28 259 666 674 676 678 1145
|
||
191 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 192 193
|
||
185 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 186 188
|
||
172 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 173 174
|
||
17 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(4)
|
||
975 0004H 2 FCBADR . . . . . . WORD PARAMETER AUTOMATIC 976 977 979 985 986 987 988
|
||
531 002AH 2 FCBADR . . . . . . WORD PARAMETER 532 533 538 560 561 577 579 596 605
|
||
212 0C3EH 19 FERR . . . . . . . PROCEDURE STACK=0036H 262 382 695
|
||
237 0CAAH 32 FILL . . . . . . . PROCEDURE STACK=0008H 419 560 561 596
|
||
251 0CEDH 91 FILLSOURCE . . . . PROCEDURE STACK=003AH 275
|
||
946 1A2DH 129 FIND . . . . . . . PROCEDURE BYTE STACK=0018H 972 1503 1526
|
||
369 0F5DH 135 FINIS. . . . . . . PROCEDURE STACK=003AH 915
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 58
|
||
|
||
|
||
40 0020H 2 FIRST. . . . . . . WORD 758 762 799 829 830 833 891 1004 1011 1041 1405 1470
|
||
1505 1533 1582
|
||
37 02E9H 1 FLAG . . . . . . . BYTE 124 554 615 980 982 1174 1176 1178 1180 1183 1187 1203
|
||
1343 1347 1560
|
||
25 FOREVER. . . . . . LITERALLY 847 866 1094 1200
|
||
36 FORWARD. . . . . . LITERALLY 788 901 999 1037 1054 1120 1397 1430 1442 1452 1465
|
||
1469 1536
|
||
40 001CH 2 FRONT. . . . . . . WORD 730 759 773 779 780 795 799 803 820 828 830 833
|
||
848 855 918 920 1002 1060 1072 1170 1234 1280 1291 1294 1447 1470
|
||
1502 1505 1548
|
||
28 FS . . . . . . . . LITERALLY 28 284
|
||
12 0000H 1 FUNC . . . . . . . BYTE PARAMETER 13
|
||
8 0000H 1 FUNC . . . . . . . BYTE PARAMETER 9
|
||
4 0000H 1 FUNC . . . . . . . BYTE PARAMETER 5
|
||
484 11A0H 34 GETCMD . . . . . . PROCEDURE BYTE STACK=0002H 528
|
||
415 1048H 136 GETPASSWD. . . . . PROCEDURE STACK=002AH 662
|
||
270 0D53H 52 GETSOURCE. . . . . PROCEDURE BYTE STACK=003EH 850 912
|
||
526 1294H 27 GETUC. . . . . . . PROCEDURE STACK=0034H 556 563 571 580 586 591 598 603
|
||
82 09F9H 53 GRAPHIC. . . . . . PROCEDURE BYTE STACK=0006H 90 1300
|
||
29 0162H 1 HASBDOS3 . . . . . BYTE INITIAL 217 651 657 1130 1154
|
||
HIGH . . . . . . . BUILTIN 660 668 1159
|
||
26 0004H 2 HMAX . . . . . . . WORD 884 1060 1144
|
||
27 003CH 1 I. . . . . . . . . BYTE 1108 1113
|
||
1371 0310H 1 I. . . . . . . . . BYTE
|
||
74 02F1H 1 I. . . . . . . . . BYTE 75 78
|
||
1341 030FH 1 I. . . . . . . . . BYTE
|
||
1092 030EH 1 I. . . . . . . . . BYTE 1098 1100 1102
|
||
1570 003AH 2 I. . . . . . . . . WORD 1582 1583
|
||
618 0301H 1 I. . . . . . . . . BYTE
|
||
725 002CH 2 I. . . . . . . . . WORD 730 735 741 742 748 753 758 763
|
||
535 02FEH 1 I. . . . . . . . . BYTE 538 566 568 575 584 588 597 600
|
||
416 02FAH 1 I. . . . . . . . . BYTE 420 422 429 432
|
||
347 02F9H 1 I. . . . . . . . . BYTE 348 349 350
|
||
340 02F8H 1 I. . . . . . . . . BYTE 341
|
||
995 0036H 2 I. . . . . . . . . WORD 1002 1004 1005 1011 1019
|
||
293 02F5H 1 I. . . . . . . . . BYTE 299
|
||
1046 030CH 1 I. . . . . . . . . BYTE 1047
|
||
252 02F3H 1 I. . . . . . . . . BYTE 257 264
|
||
1032 030BH 1 I. . . . . . . . . BYTE 1036 1040
|
||
775 174EH 9 INCBACK. . . . . . PROCEDURE STACK=0002H 790 872
|
||
766 1733H 9 INCBASE. . . . . . PROCEDURE STACK=0002H 794 859 876 923
|
||
772 1745H 9 INCFRONT . . . . . PROCEDURE STACK=0002H 796 856 921
|
||
8 0000H 2 INFO . . . . . . . WORD PARAMETER 10
|
||
12 0000H 2 INFO . . . . . . . WORD PARAMETER 14
|
||
4 0000H 2 INFO . . . . . . . WORD PARAMETER 6
|
||
1065 1C85H 21 INSCRLF. . . . . . PROCEDURE STACK=000AH 1297 1306 1328
|
||
1071 1C9AH 25 INSERRORCHK. . . . PROCEDURE STACK=0002H 1262 1289
|
||
917 198BH 41 INSERT . . . . . . PROCEDURE STACK=0006H 1067 1069 1315 1355 1500 1552
|
||
29 015DH 1 INSERTING. . . . . BYTE 472 505 926 998 1201 1229 1305 1331
|
||
44 0006H 17 INVALID. . . . . . BYTE ARRAY(17) DATA 614
|
||
74 02F2H 1 J. . . . . . . . . BYTE 78
|
||
948 0034H 2 J. . . . . . . . . WORD 949 951 952
|
||
725 002EH 2 K. . . . . . . . . WORD 732 737 741 748
|
||
948 0307H 1 K. . . . . . . . . BYTE 953 954 955
|
||
450 0028H 2 K. . . . . . . . . WORD 451 453 454 455 456
|
||
725 0030H 2 L. . . . . . . . . WORD 731 736 741
|
||
LAST . . . . . . . BUILTIN 543
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 59
|
||
|
||
|
||
40 0022H 2 LASTC. . . . . . . WORD 759 763 789 827 835 836 892 899 952 954 956 961
|
||
1011 1041 1406 1471 1582
|
||
24 LCA. . . . . . . . LITERALLY 407
|
||
24 LCZ. . . . . . . . LITERALLY 407
|
||
25 LF . . . . . . . . LITERALLY 61 86 99 519 741 780 793 857 874 922 939
|
||
1005 1012 1068 1169 1189 1234 1294 1318 1321
|
||
30 0168H 12 LIBFCB . . . . . . BYTE ARRAY(12) INITIAL 201 986 988
|
||
29 0161H 1 LINESET. . . . . . BYTE INITIAL 467 510 1331 1452
|
||
24 LIT. . . . . . . . LITERALLY 24 36 534
|
||
725 0303H 1 LOOPING. . . . . . BYTE 739 740 744 747 752
|
||
LOW. . . . . . . . BUILTIN 374 454 660 668 671 1129
|
||
405 1010H 29 LOWERCASE. . . . . PROCEDURE BYTE STACK=0006H 411 1078
|
||
41 02F0H 1 LPP. . . . . . . . BYTE INITIAL 1023 1160 1161
|
||
725 0032H 2 M. . . . . . . . . WORD 741 742 753
|
||
37 0202H 128 MACRO. . . . . . . BYTE ARRAY(128) 503 1516
|
||
36 MACSIZE. . . . . . LITERALLY 37
|
||
231 0C8EH 28 MAKEFILE . . . . . PROCEDURE STACK=001AH 693 1577
|
||
948 0308H 1 MATCH. . . . . . . BYTE 950 951 954 959 964
|
||
26 0000H 2 MAX. . . . . . . . WORD 834 1131 1133 1138 1142 1143
|
||
19 0000H 2 MAXB . . . . . . . WORD EXTERNAL(6) 1131 1140
|
||
34 017FH 1 MAXLEN . . . . . . BYTE 154 155
|
||
26 0002H 2 MAXM . . . . . . . WORD 512 736 835 867 884 951 1041 1143 1144 1171 1406 1449
|
||
1471 1537
|
||
28 MD . . . . . . . . LITERALLY 650
|
||
786 1778H 107 MEMMOVE. . . . . . PROCEDURE STACK=000CH 809 812
|
||
0000H MEMORY . . . . . . BYTE ARRAY(0) 741 780 793 795 803 855 873 920 954 1005
|
||
1019 1131 1142 1169 1234 1280 1291 1294 1583
|
||
37 02EBH 1 MI . . . . . . . . BYTE 1204 1458 1497 1498 1499 1548 1549 1550 1551
|
||
725 0302H 1 MIDDLE . . . . . . BYTE 741 745
|
||
195 0004H 1 MODE . . . . . . . BYTE PARAMETER AUTOMATIC 196 197
|
||
4 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 21 55 103 118 151 170
|
||
174 193 197 1097
|
||
8 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 46 49 122 135 139
|
||
143 147 158 160 166 188 235 1160 1166
|
||
12 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(2) STACK=0000H 131 205
|
||
176 0B98H 37 MOVE . . . . . . . PROCEDURE STACK=0008H 187 246 284 306 372 605 631 633
|
||
634 986 988 1222 1348 1575
|
||
786 0004H 1 MOVEFLAG . . . . . BYTE PARAMETER AUTOMATIC 787 791 801
|
||
814 17F9H 11 MOVELINES. . . . . PROCEDURE STACK=0014H 1035 1425 1460
|
||
808 17E3H 11 MOVER. . . . . . . PROCEDURE STACK=0010H 816 893 902 962 1407 1412 1472 1479
|
||
1507 1534
|
||
370 0FE4H 24 MOVEUP . . . . . . PROCEDURE STACK=000EH 391 395
|
||
37 02EAH 1 MP . . . . . . . . BYTE 401 480 490 494 1089 1199 1229 1308 1458 1511 1518
|
||
2 MPMPRODUCT . . . . LITERALLY
|
||
37 0016H 2 MT . . . . . . . . WORD 496 498 1520
|
||
293 02F6H 1 N. . . . . . . . . BYTE 294 295 299
|
||
28 0103H 1 NBUF . . . . . . . BYTE 257 264 1131 1132
|
||
39 02EDH 1 NCMD . . . . . . . BYTE INITIAL 485 486
|
||
28 000EH 2 NDEST. . . . . . . WORD 294 297 298 300 305 306 307 310 312 316 318 319
|
||
374 704
|
||
29 0156H 1 NEWFILE. . . . . . BYTE INITIAL 272 282 378 687 911 1213 1363
|
||
818 0004H 2 NEWFRONT . . . . . WORD PARAMETER AUTOMATIC 819 820
|
||
44 0051H 19 NOTAVAIL . . . . . BYTE ARRAY(19) DATA 669
|
||
44 0042H 15 NOTFOUND . . . . . BYTE ARRAY(15) DATA 125 686 1567
|
||
28 NR . . . . . . . . LITERALLY 28 650
|
||
28 000CH 2 NSOURCE. . . . . . WORD 254 258 263 266 274 276 277 703
|
||
1110 1D7AH 49 NUMBER . . . . . . PROCEDURE STACK=0038H 1385 1395
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 60
|
||
|
||
|
||
421 106EH NXTCHR . . . . . . LABEL 433
|
||
29 0157H 1 ONEFILE. . . . . . BYTE INITIAL 281 389 629 672 685 1165 1214 1223 1363
|
||
120 0AA9H 34 OPEN . . . . . . . PROCEDURE STACK=000AH 357 1351
|
||
129 0ACBH 16 OPENFILE . . . . . PROCEDURE WORD STACK=000AH 656 666
|
||
38 013CH OVERCOUNT. . . . . LABEL 493 499 973 1017 1174 1504 1538
|
||
38 0154H OVERFLOW . . . . . LABEL 849 919 932 1178
|
||
946 0006H 1 PA . . . . . . . . BYTE PARAMETER AUTOMATIC 947 953
|
||
1031 1BE7H 61 PAGE . . . . . . . PROCEDURE STACK=0034H 1435
|
||
531 12AFH 322 PARSEFCB . . . . . PROCEDURE BYTE STACK=0038H 627 979 1152
|
||
975 1AD9H 89 PARSELIB . . . . . PROCEDURE BYTE STACK=003EH 1343 1560
|
||
28 0104H 16 PASSWORD . . . . . BYTE ARRAY(16) INITIAL 187 218 419 422 432 605
|
||
44 0030H 18 PASSWORDERR. . . . BYTE ARRAY(18) DATA 189
|
||
42 0004H 2 PB . . . . . . . . BYTE ARRAY(2) DATA 1160
|
||
946 0004H 1 PB . . . . . . . . BYTE PARAMETER AUTOMATIC 947 954
|
||
110 0A82H 23 PERROR . . . . . . PROCEDURE STACK=002CH 189 209 547 614 1135 1194 1567
|
||
536 0300H 1 PFLAG. . . . . . . BYTE 539 553 610 613
|
||
3 0010H PLMSTART . . . . . LABEL PUBLIC 1128
|
||
36 POUND. . . . . . . LITERALLY 1174 1378
|
||
105 0A72H 16 PRINT. . . . . . . PROCEDURE STACK=0026H 112 418 621 688 1147 1186
|
||
73 09B6H 67 PRINTABS . . . . . PROCEDURE STACK=0016H 92 95
|
||
476 1183H 12 PRINTBASE. . . . . PROCEDURE STACK=002CH 482 514 1235
|
||
88 0A2EH 35 PRINTC . . . . . . PROCEDURE STACK=001CH 98 99 403 460 462 470 471 473
|
||
474 516 519 1019 1187 1191 1291 1296 1448
|
||
51 0955H 26 PRINTCHAR. . . . . PROCEDURE STACK=000AH 63 1096
|
||
465 1150H 51 PRINTLINE. . . . . PROCEDURE STACK=0028H 477 513 992
|
||
101 0A62H 16 PRINTM . . . . . . PROCEDURE STACK=000AH 108 113 1188 1190
|
||
399 0FFCH 20 PRINTNMAC. . . . . PROCEDURE STACK=0022H 1264 1302 1303 1321
|
||
479 118FH 17 PRINTNMBASE. . . . PROCEDURE STACK=0030H 1253 1319
|
||
991 1B32H 16 PRINTREL . . . . . PROCEDURE STACK=002CH 1014
|
||
29 015AH 1 PRINTSUPPRESS. . . BYTE INITIAL 53 1185 1268 1271
|
||
449 10F3H 93 PRINTVALUE . . . . PROCEDURE STACK=0022H 469 1447 1449
|
||
24 PROC . . . . . . . LITERALLY 176 237 415 484 526 531 537 541 724 772 778
|
||
783 786 808 811 814 818 824
|
||
29 015CH 1 PROTECTION . . . . BYTE INITIAL 696 698 1157
|
||
537 13F1H 32 PUTC . . . . . . . PROCEDURE STACK=0002H 570 590 602
|
||
314 0E53H 36 PUTDEST. . . . . . PROCEDURE STACK=0022H 375 873 913
|
||
321 0E77H 74 PUTXFER. . . . . . PROCEDURE STACK=001EH 342 1583
|
||
32 017DH 1 QCOLUMN. . . . . . BYTE 1272 1273 1275
|
||
28 005EH 1 RBP. . . . . . . . BYTE 640 645 647 1350
|
||
116 0A99H 16 READ . . . . . . . PROCEDURE STACK=000AH 155
|
||
29 015EH 1 READBUFF . . . . . BYTE 507 509 522 623 1198
|
||
489 11C2H 210 READC. . . . . . . PROCEDURE BYTE STACK=0030H 529 926 1084 1516
|
||
45 0937H 15 READCHAR . . . . . PROCEDURE BYTE STACK=0008H 506 1098 1592
|
||
153 0B31H 17 READCOM. . . . . . PROCEDURE STACK=000EH 517 622 1148
|
||
1082 1CDDH 19 READCTRAN. . . . . PROCEDURE STACK=0034H 1114 1202 1375 1381 1394
|
||
639 14BAH 56 READFILE . . . . . PROCEDURE BYTE STACK=0016H 1354
|
||
29 0159H 1 READING. . . . . . BYTE INITIAL 1344 1345 1352 1357
|
||
839 1869H 64 READLINE . . . . . PROCEDURE STACK=0042H 1062 1476
|
||
191 0BE6H 16 READXFCB . . . . . PROCEDURE STACK=000AH 1156
|
||
199 0C09H 22 REBOOT . . . . . . PROCEDURE STACK=000EH 210 437 1153 1208 1368
|
||
1117 1DABH 40 RELDISTANCE. . . . PROCEDURE STACK=0002H 1389 1396
|
||
35 0014H 2 RELLINE. . . . . . WORD 726 751 992 1001 1010 1015
|
||
149 0B21H 16 RENAME . . . . . . PROCEDURE STACK=000AH 229
|
||
225 0C74H 26 RENAMEFILE . . . . PROCEDURE STACK=001AH 393 397
|
||
38 017DH RESET. . . . . . . LABEL 126 983 1049 1073 1175 1177 1179 1182 1185 1528 1593
|
||
38 0120H RESTART. . . . . . LABEL 1168 1225 1337
|
||
1028 1BDCH 11 RESTDIST . . . . . PROCEDURE STACK=0002H 1043 1535
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 61
|
||
|
||
|
||
419 1055H RETRY. . . . . . . LABEL 426 430
|
||
325 0E81H RETRY. . . . . . . LABEL 330
|
||
300 0DF7H RETRY. . . . . . . LABEL 303
|
||
195 0BF6H 19 RETURNERRORS . . . PROCEDURE STACK=000AH 653 659
|
||
28 003DH 33 RFCB . . . . . . . BYTE ARRAY(33) INITIAL 350 643 1343 1348 1349 1351 1358 1560
|
||
1565 1575
|
||
28 RO . . . . . . . . LITERALLY 674
|
||
ROL. . . . . . . . BUILTIN 674 676 678
|
||
36 RUBOUT . . . . . . LITERALLY 1287
|
||
237 0008H 2 S. . . . . . . . . WORD PARAMETER AUTOMATIC 238 240 241
|
||
176 0006H 2 S. . . . . . . . . WORD PARAMETER AUTOMATIC 177 178 180 181
|
||
1025 1BD1H 11 SAVEDIST . . . . . PROCEDURE STACK=0002H 1033 1529
|
||
293 02F7H 1 SAVENDEST. . . . . BYTE 297 306 307
|
||
28 0000H 128 SBUFF. . . . . . . BYTE BASED(SBUFFADR) ARRAY(128) 263 276
|
||
28 0008H 2 SBUFFADR . . . . . WORD 28 258 263 276 1140 1141
|
||
925 19B4H 42 SCANNING . . . . . PROCEDURE BYTE STACK=0034H 934 1238
|
||
32 017BH 1 SCOLUMN. . . . . . BYTE INITIAL 1255 1266 1272 1273 1453 1454
|
||
37 0282H 100 SCRATCH. . . . . . BYTE ARRAY(100) 930 954 1499 1550
|
||
36 SCRSIZE. . . . . . LITERALLY 37 931
|
||
28 0000H 1 SDISK. . . . . . . BYTE EXTERNAL(3) AT 1165 1217 1218
|
||
19 SECTSHF. . . . . . LITERALLY 294 1131 1132
|
||
19 SECTSIZE . . . . . LITERALLY 28 266 310 323 341 363 640 1350
|
||
172 0B88H 16 SETATTRIBUTE . . . PROCEDURE STACK=000AH 387
|
||
824 1818H 81 SETCLIMITS . . . . PROCEDURE STACK=0002H 1411 1416
|
||
617 1447H 103 SETDEST. . . . . . PROCEDURE STACK=003CH 1163
|
||
168 0B78H 16 SETDMA . . . . . . PROCEDURE STACK=000AH 218 249 258 300 637
|
||
707 161DH 11 SETFF. . . . . . . PROCEDURE STACK=0002H 882 906 1058 1380
|
||
966 1AAEH 19 SETFIND. . . . . . PROCEDURE STACK=003CH 1483 1491 1524 1544
|
||
1053 1C53H 16 SETFORWARD . . . . PROCEDURE STACK=0002H 1372 1461
|
||
818 1804H 20 SETFRONT . . . . . PROCEDURE STACK=000CH 1508 1548
|
||
724 165AH 217 SETLIMITS. . . . . PROCEDURE STACK=0004H 815 997 1248 1421 1581
|
||
1022 1BC4H 13 SETLPP . . . . . . PROCEDURE STACK=0002H 1034 1038 1431
|
||
216 0C51H 19 SETPASSWORD. . . . PROCEDURE STACK=000EH 222 228 234 386 654 665 699
|
||
811 17EEH 11 SETPTRS. . . . . . PROCEDURE STACK=0010H 1249 1417 1422
|
||
636 14AEH 12 SETRDMA. . . . . . PROCEDURE STACK=000EH 642 1342
|
||
929 1A0DH 32 SETSCR . . . . . . PROCEDURE STACK=0002H 938 943
|
||
244 0CCAH 23 SETTYPE. . . . . . PROCEDURE STACK=0010H 285 392 396 691 1221 1365
|
||
649 14F2H 299 SETUP. . . . . . . PROCEDURE STACK=003AH 1168
|
||
248 0CE1H 12 SETXDMA. . . . . . PROCEDURE STACK=000EH 325 359
|
||
28 0000H 33 SFCB . . . . . . . BYTE ARRAY(33) EXTERNAL(3) AT 379 391 392 393 631 633 650
|
||
656 1152 1156 1157 1158 1222 1336
|
||
SHL. . . . . . . . BUILTIN 1113 1132
|
||
SHR. . . . . . . . BUILTIN 294 1131 1139 1144
|
||
1087 1CF0H 46 SINGLECOM. . . . . PROCEDURE BYTE STACK=0006H 1093 1205 1210
|
||
1091 1D1EH 72 SINGLERCOM . . . . PROCEDURE BYTE STACK=0026H 1334 1360
|
||
38 01D1H START. . . . . . . LABEL 1101 1173 1198
|
||
28 SY . . . . . . . . LITERALLY 385 676
|
||
29 015BH 1 SYS. . . . . . . . BYTE INITIAL 383 680
|
||
1490 0038H 2 T. . . . . . . . . WORD 1502 1508
|
||
1076 030DH 1 T. . . . . . . . . BYTE 1078 1080
|
||
24 TAB. . . . . . . . LITERALLY 75 76 86 112 1186 1312
|
||
29 0163H 1 TAIL . . . . . . . BYTE INITIAL 527 619 1150 1164
|
||
18 0000H 1 TBUFF. . . . . . . BYTE ARRAY(1) EXTERNAL(5)
|
||
32 017CH 1 TCOLUMN. . . . . . BYTE 1072 1231 1263 1266 1274 1323
|
||
40 001AH 2 TDIST. . . . . . . WORD 1026 1029
|
||
30 0174H 3 TEMPFL . . . . . . BYTE ARRAY(3) INITIAL 691
|
||
909 1964H 39 TERMINATE. . . . . PROCEDURE STACK=0042H 1207 1212
|
||
PL/M-86 COMPILER CONCURRENT CP/M-86 2.0 --- ED PAGE 62
|
||
|
||
|
||
1075 1CB3H 42 TESTCASE . . . . . PROCEDURE STACK=0016H 1085
|
||
TIME . . . . . . . BUILTIN 1050
|
||
28 0135H 33 TMPFCB . . . . . . BYTE ARRAY(33) 284 285 286
|
||
29 015FH 1 TRANSLATE. . . . . BYTE INITIAL 445 1077 1080 1083
|
||
25 TRUE . . . . . . . LITERALLY 29 85 161 288 353 459 539 548 554 585 680
|
||
687 720 739 809 847 866 998 1077 1094 1103 1130 1198 1200 1223
|
||
1268 1352 1574
|
||
57 096FH 34 TTYCHAR. . . . . . PROCEDURE STACK=0010H 68 69 70 79
|
||
994 1B42H 130 TYPELINES. . . . . PROCEDURE STACK=0030H 1039 1236 1245 1270 1283 1432 1440 1462
|
||
28 UB . . . . . . . . LITERALLY
|
||
409 102DH 27 UCASE. . . . . . . PROCEDURE BYTE STACK=000CH 421 446 528 529 1098
|
||
29 0160H 1 UPPER. . . . . . . BYTE INITIAL 843 1080 1442
|
||
28 US . . . . . . . . LITERALLY 678
|
||
441 10D0H 35 UTRAN. . . . . . . PROCEDURE BYTE STACK=0012H 503 506 524 647 844 1079
|
||
465 0004H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 466 469
|
||
449 0004H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 450 454 455
|
||
43 0024H 2 VER. . . . . . . . WORD 1128 1129 1159
|
||
204 0C1FH 15 VERSION. . . . . . PROCEDURE WORD STACK=0008H 1128
|
||
1045 1C24H 47 WAIT . . . . . . . PROCEDURE STACK=000CH 1436 1596
|
||
37 02E7H 1 WBE. . . . . . . . BYTE 930 931 967 969 1493 1503 1505 1549
|
||
37 02E8H 1 WBJ. . . . . . . . BYTE 1493 1498 1503 1505
|
||
37 02E6H 1 WBP. . . . . . . . BYTE 969 972 1497 1526 1548
|
||
25 WHAT . . . . . . . LITERALLY 1097 1176
|
||
881 18F3H 38 WRHALF . . . . . . PROCEDURE STACK=002AH 895
|
||
292 0DC7H 140 WRITEDEST. . . . . PROCEDURE STACK=001CH 317 377
|
||
864 18C2H 49 WRITELINE. . . . . PROCEDURE STACK=0026H 886 897
|
||
889 1919H 64 WRITEOUT . . . . . PROCEDURE STACK=002EH 907 1557
|
||
185 0BBDH 41 WRITEXFCB. . . . . PROCEDURE STACK=0032H 700
|
||
28 0102H 1 XBP. . . . . . . . BYTE 323 334 336 337 341 363 364 1561
|
||
28 0082H 128 XBUFF. . . . . . . BYTE ARRAY(128) 249 336 364
|
||
28 005FH 33 XFCB . . . . . . . BYTE ARRAY(33) INITIAL 28 328 344 350 357 360 1348 1575
|
||
1577
|
||
28 006BH 1 XFCBE. . . . . . . BYTE AT 326 356 1576
|
||
28 0080H 1 XFCBEXT. . . . . . BYTE INITIAL 326 356 1576
|
||
28 007FH 1 XFCBR. . . . . . . BYTE AT 327 358 362 1576
|
||
28 0081H 1 XFCBREC. . . . . . BYTE INITIAL 327 358 362 1576
|
||
29 0158H 1 XFERON . . . . . . BYTE INITIAL 200 1564 1571 1574
|
||
37 02ECH 1 XP . . . . . . . . BYTE 494 501 503 1513 1516 1518 1519
|
||
450 02FDH 1 ZERO . . . . . . . BYTE 452 457 459
|
||
713 1637H 11 ZERODIST . . . . . PROCEDURE STACK=0002H 852 869 885 1042 1061 1515
|
||
253 0D48H 11 ZN . . . . . . . . PROCEDURE STACK=0002H 256 268
|
||
|
||
|
||
|
||
MODULE INFORMATION:
|
||
|
||
CODE AREA SIZE = 1DD3H 7635D
|
||
CONSTANT AREA SIZE = 013EH 318D
|
||
VARIABLE AREA SIZE = 0311H 785D
|
||
MAXIMUM STACK SIZE = 0048H 72D
|
||
2639 LINES READ
|
||
0 PROGRAM ERROR(S)
|
||
|
||
END OF PL/M-86 COMPILATION
|