mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 17:34:06 +00:00
2562 lines
122 KiB
Plaintext
2562 lines
122 KiB
Plaintext
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 1
|
||
|
||
|
||
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE PIPMOD
|
||
OBJECT MODULE PLACED IN PIP.OBJ
|
||
COMPILER INVOKED BY: :F0: PIP.PLM XREF OPTIMIZE(3) DEBUG DATE(2/9/83)
|
||
|
||
|
||
|
||
$title('PERIPHERAL INTERCHANGE PROGRAM')
|
||
1 PIPMOD:
|
||
DO;
|
||
/* P E R I P H E R A L I N T E R C H A N G E P R O G R A M
|
||
|
||
COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983
|
||
DIGITAL RESEARCH
|
||
BOX 579
|
||
PACIFIC GROVE, CA
|
||
93950
|
||
|
||
Revised:
|
||
17 Jan 80 by Thomas Rolander (MP/M 1.1)
|
||
05 Oct 81 by Ray Pedrizetti (MP/M-86 2.0)
|
||
18 Dec 81 by Ray Pedrizetti (CP/M-86 1.1)
|
||
29 Jun 82 by Ray Pedrizetti (CCP/M-86 3.0) */
|
||
|
||
/* Command lines used for CMD file generation */
|
||
|
||
/* (on VAX)
|
||
asm86 scd1.a86
|
||
asm86 inpout.a86
|
||
plm86 pip.plm debug xref optimize(3)
|
||
link86 scd1.obj,inpout.obj,pip.obj, to pip.lnk
|
||
loc86 pip.lnk od(sm(code,dats,data,const,stack)) -
|
||
ad(sm(code(0), dats(10000h))) ss(stack(+32)) to pip.
|
||
h86 pip
|
||
|
||
(on a micro)
|
||
vax pip.h86 $fans
|
||
gencmd pip data[b1000 m280 xfff]
|
||
|
||
* note the beginning of the data segment will change when
|
||
* the program is changed. see the 'MP2' file generated
|
||
* by LOC86. the constants are last to force hex generation
|
||
*/
|
||
|
||
/* Compiler Directives */
|
||
$set (mpm)
|
||
$reset (cpm3)
|
||
$cond
|
||
|
||
2 1 declare /* resets stack for error handling */
|
||
reset label external;
|
||
|
||
3 1 DECLARE
|
||
MAXB ADDRESS EXTERNAL, /* ADDR FIELD OF JMP BDOS */
|
||
FCB (33) BYTE EXTERNAL, /* DEFAULT FILE CONTROL BLOCK */
|
||
BUFF(128)BYTE EXTERNAL; /* DEFAULT BUFFER */
|
||
|
||
4 1 declare
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 2
|
||
|
||
|
||
retry byte initial(0); /* true if error has occured */
|
||
|
||
5 1 OUTD: PROCEDURE(B) external;
|
||
6 2 DECLARE B BYTE;
|
||
/* SEND B TO OUT: DEVICE */
|
||
7 2 END OUTD;
|
||
|
||
8 1 INPD: PROCEDURE BYTE external;
|
||
9 2 END INPD;
|
||
|
||
10 1 MON1: PROCEDURE(F,A) EXTERNAL;
|
||
11 2 DECLARE F BYTE,
|
||
A ADDRESS;
|
||
12 2 END MON1;
|
||
|
||
13 1 MON2: PROCEDURE(F,A) BYTE EXTERNAL;
|
||
14 2 DECLARE F BYTE,
|
||
A ADDRESS;
|
||
15 2 END MON2;
|
||
|
||
16 1 MON3: PROCEDURE(F,A) ADDRESS EXTERNAL;
|
||
17 2 DECLARE F BYTE,
|
||
A ADDRESS;
|
||
18 2 END MON3;
|
||
|
||
|
||
19 1 plm: procedure public;
|
||
|
||
20 2 DECLARE
|
||
$if mpm
|
||
VERSION LITERALLY '0031H', /* REQUIRED FOR BDOS 3.1 OPERATION */
|
||
$else
|
||
VERSION LITERALLY '0022H', /* REQUIRED FOR OPERATION */
|
||
$endif
|
||
|
||
ENDFILE LITERALLY '1AH'; /* END OF FILE MARK */
|
||
|
||
21 2 DECLARE COPYRIGHT(*) BYTE DATA (
|
||
$if cpm3
|
||
' (02/07/83) CP/M 3 PIP VERS 3.1 ');
|
||
$else
|
||
' (02/07/83) CCP/M-86 PIP VERS 3.1 ');
|
||
$endif
|
||
|
||
|
||
/* LITERAL DECLARATIONS */
|
||
22 2 DECLARE
|
||
LIT LITERALLY 'LITERALLY',
|
||
LPP LIT '60', /* LINES PER PAGE */
|
||
TAB LIT '09H', /* HORIZONTAL TAB */
|
||
FF LIT '0CH', /* FORM FEED */
|
||
LA LIT '05FH', /* LEFT ARROW */
|
||
LB LIT '05BH', /* LEFT BRACKET */
|
||
RB LIT '05DH', /* RIGHT BRACKET */
|
||
|
||
FSIZE LIT '33',
|
||
FRSIZE LIT '36', /* SIZE OF RANDOM FCB */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 3
|
||
|
||
|
||
NSIZE LIT '8',
|
||
FNSIZE LIT '11',
|
||
FEXT LIT '9',
|
||
FEXTL LIT '3',
|
||
|
||
/* scanner return type code */
|
||
outt LIT '0', /* output device */
|
||
PRNT LIT '1', /* PRINTER */
|
||
LSTT LIT '2', /* list device */
|
||
axot lit '3', /* auxilary output device */
|
||
FILE LIT '4', /* file type */
|
||
auxt lit '5', /* auxilary input/output device */
|
||
CONS LIT '6', /* CONSOLE */
|
||
axit LIT '7', /* auxilary input device */
|
||
inpt lit '8', /* input device */
|
||
NULT LIT '9', /* nul characters */
|
||
EOFT LIT '10', /* EOF character */
|
||
ERR LIT '11', /* error type */
|
||
SPECL LIT '12', /* special character */
|
||
DISKNAME LIT '13'; /* diskname letter */
|
||
|
||
23 2 DECLARE
|
||
SEARFCB LIT 'FCB'; /* SEARCH FCB IN MULTI COPY */
|
||
|
||
24 2 DECLARE
|
||
TRUE LIT '1',
|
||
FALSE LIT '0',
|
||
FOREVER LIT 'WHILE TRUE',
|
||
cntrlc lit '3',
|
||
CR LIT '13',
|
||
LF LIT '10',
|
||
WHAT LIT '63';
|
||
|
||
$if mpm
|
||
25 2 declare
|
||
maxmcnt lit '128', /* maximum multi sector count */
|
||
maxmbuf lit '16384'; /* maximum multi sector buffer size */
|
||
$endif
|
||
|
||
26 2 DECLARE
|
||
COLUMN BYTE, /* COLUMN COUNT FOR PRINTER TABS */
|
||
LINENO BYTE, /* LINE WITHIN PAGE */
|
||
FEEDBASE BYTE, /* USED TO FEED SEARCH CHARACTERS */
|
||
FEEDLEN BYTE, /* LENGTH OF FEED STRING */
|
||
MATCHLEN BYTE, /* USED IN MATCHING STRINGS */
|
||
QUITLEN BYTE, /* USED TO TERMINATE QUIT COMMAND */
|
||
CDISK BYTE, /* CURRENT DISK */
|
||
SBLEN ADDRESS, /* SOURCE BUFFER LENGTH */
|
||
DBLEN ADDRESS, /* DEST BUFFER LENGTH */
|
||
tblen address, /* temp buffer length */
|
||
SBASE ADDRESS, /* SOURCE BUFFER BASE */
|
||
|
||
/* THE VECTORS DBUFF AND SBUFF ARE DECLARED WITH DIMENSION
|
||
1024, BUT ACTUALLY VARY WITH THE FREE MEMORY SIZE */
|
||
DBUFF(1024) BYTE AT (.MEMORY), /* DESTINATION BUFFER */
|
||
SBUFF BASED SBASE (1024) BYTE, /* SOURCE BUFFER */
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 4
|
||
|
||
|
||
/* source fcb, password and password mode */
|
||
source structure (
|
||
fcb(frsize) byte,
|
||
$if mpm
|
||
pwnam(nsize) byte,
|
||
pwmode byte,
|
||
$endif
|
||
user byte,
|
||
type byte ),
|
||
|
||
/* temporary destination fcb, password and password mode */
|
||
dest structure (
|
||
fcb(frsize) byte,
|
||
$if mpm
|
||
pwnam(nsize) byte,
|
||
pwmode byte,
|
||
$endif
|
||
user byte,
|
||
type byte ),
|
||
|
||
/* original destination fcb, password and password mode */
|
||
odest structure (
|
||
fcb(frsize) byte,
|
||
$if mpm
|
||
pwnam(nsize) byte,
|
||
pwmode byte,
|
||
$endif
|
||
user byte,
|
||
type byte ),
|
||
|
||
filsize(3) byte, /* file size random record number */
|
||
|
||
DESTR ADDRESS AT(.DEST.FCB(33)), /* RANDOM RECORD POSITION */
|
||
SOURCER ADDRESS AT(.SOURCE.FCB(33)), /* RANDOM RECORD POSITION */
|
||
DESTR2 BYTE AT(.DEST.FCB(35)), /* RANDOM RECORD POSITION R2 */
|
||
SOURCER2 BYTE AT(.SOURCE.FCB(35)), /* RANDOM RECORD POSITION R2 */
|
||
|
||
extsave byte, /* temp extent byte for bdos bug */
|
||
|
||
nsbuf address, /* next source buffer */
|
||
$if mpm
|
||
bufsize address, /* multsect buffer size */
|
||
mseccnt byte, /* last multi sector count value */
|
||
$endif
|
||
NSOURCE ADDRESS, /* NEXT SOURCE CHARACTER */
|
||
NDEST ADDRESS; /* NEXT DESTINATION CHARACTER */
|
||
|
||
27 2 DECLARE
|
||
fastcopy byte, /* true if copy directly to dbuf */
|
||
dblbuf byte, /* true if both source and dest buffer used */
|
||
concat byte, /* true if concatination command */
|
||
ambig byte, /* true if file is ambig type */
|
||
dfile byte, /* true if dest is file type */
|
||
sfile byte, /* true if source is file type */
|
||
made byte, /* true if destination file already made */
|
||
opened byte, /* true if source file open */
|
||
endofsrc byte, /* true if end of source file */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 5
|
||
|
||
|
||
nendcmd byte, /* true if not end of command tail */
|
||
insparc byte, /* true if in middle of sparce file */
|
||
sparfil byte, /* true if sparce file being copied */
|
||
MULTCOM BYTE, /* true if processing multiple commands */
|
||
PUTNUM BYTE, /* SET WHEN READY FOR NEXT LINE NUM */
|
||
CONCNT BYTE, /* COUNTER FOR CONSOLE READY CHECK */
|
||
CHAR BYTE, /* LAST CHARACTER SCANNED */
|
||
FLEN BYTE; /* FILE NAME LENGTH */
|
||
|
||
28 2 declare
|
||
f1 byte, /* f1 user attribute flag */
|
||
f2 byte, /* f2 user attribute flag */
|
||
f3 byte, /* f3 user attribute flag */
|
||
f4 byte, /* f4 user attribute flag */
|
||
ro byte, /* read only attribute flag */
|
||
sys byte, /* system attribute flag */
|
||
$if mpm
|
||
exten byte, /* extention error code */
|
||
odcnt byte, /* saves dcnt for open dest file */
|
||
eretry byte, /* error return flag */
|
||
$endif
|
||
dcnt byte; /* error code or directory code */
|
||
|
||
|
||
29 2 DECLARE CBUFF(130) BYTE, /* COMMAND BUFFER */
|
||
MAXLEN BYTE AT (.CBUFF(0)), /* MAX BUFFER LENGTH */
|
||
COMLEN BYTE AT (.CBUFF(1)), /* CURRENT LENGTH */
|
||
COMBUFF(128) BYTE AT (.CBUFF(2)), /* COMMAND BUFFER CONTENTS */
|
||
CBP BYTE; /* COMMAND BUFFER POINTER */
|
||
|
||
30 2 DECLARE
|
||
CUSER BYTE, /* CURRENT USER NUMBER */
|
||
last$user byte;
|
||
|
||
31 2 DECLARE /* CONTROL TOGGLE VECTOR */
|
||
CONT(26) BYTE, /* ONE FOR EACH ALPHABETIC */
|
||
/* 00 01 02 03 04 05 06 07 08 09 10 11 12 13
|
||
A B C D E F G H I J K L M N
|
||
14 15 16 17 18 19 20 21 22 23 24 25
|
||
O P Q R S T U V W X Y Z */
|
||
archiv byte at(.cont(0)), /* file archive */
|
||
confrm byte at(.cont(2)), /* confirm copy */
|
||
DELET BYTE AT(.CONT(3)), /* DELETE CHARACTERS */
|
||
ECHO BYTE AT(.CONT(4)), /* ECHO CONSOLE CHARACTERS */
|
||
FORMF BYTE AT(.CONT(5)), /* FORM FILTER */
|
||
GETU BYTE AT(.CONT(6)), /* GET FILE, USER # */
|
||
HEXT BYTE AT(.CONT(7)), /* HEX FILE TRANSFER */
|
||
IGNOR BYTE AT(.CONT(8)), /* IGNORE :00 RECORD ON FILE */
|
||
kilds byte at(.cont(10)), /* kill filename display */
|
||
LOWER BYTE AT(.CONT(11)), /* TRANSLATE TO LOWER CASE */
|
||
NUMB BYTE AT(.CONT(13)), /* NUMBER OUTPUT LINES */
|
||
OBJ BYTE AT(.CONT(14)), /* OBJECT FILE TRANSFER */
|
||
PAGCNT BYTE AT(.CONT(15)), /* PAGE LENGTH */
|
||
QUITS BYTE AT(.CONT(16)), /* QUIT COPY */
|
||
RSYS BYTE AT(.CONT(17)), /* READ SYSTEM FILES */
|
||
STARTS BYTE AT(.CONT(18)), /* START COPY */
|
||
TABS BYTE AT(.CONT(19)), /* TAB SET */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 6
|
||
|
||
|
||
UPPER BYTE AT(.CONT(20)), /* UPPER CASE TRANSLATE */
|
||
VERIF BYTE AT(.CONT(21)), /* VERIFY EQUAL FILES ONLY */
|
||
WRROF BYTE AT(.CONT(22)), /* WRITE TO R/O FILE */
|
||
ZEROP BYTE AT(.CONT(25)); /* ZERO PARITY ON INPUT */
|
||
|
||
32 2 DECLARE ZEROSUP BYTE, /* ZERO SUPPRESSION */
|
||
(C3,C2,C1) BYTE; /* LINE COUNT ON PRINTER */
|
||
|
||
|
||
$if mpm
|
||
33 2 retcodes: procedure(a);
|
||
34 3 declare a address;
|
||
35 3 dcnt = low(a);
|
||
36 3 exten = high(a);
|
||
37 3 end retcodes;
|
||
$endif
|
||
|
||
38 2 BOOT: PROCEDURE;
|
||
/* SYSTEM REBOOT */
|
||
39 3 CALL MON1(0,0);
|
||
40 3 END BOOT;
|
||
|
||
|
||
41 2 RDCHAR: PROCEDURE BYTE;
|
||
/* READ CONSOLE CHARACTER */
|
||
42 3 RETURN MON2(1,0);
|
||
43 3 END RDCHAR;
|
||
|
||
44 2 PRINTCHAR: PROCEDURE(CHAR);
|
||
45 3 DECLARE CHAR BYTE;
|
||
46 3 CALL MON1(2,CHAR AND 7FH);
|
||
47 3 END PRINTCHAR;
|
||
|
||
48 2 CRLF: PROCEDURE;
|
||
49 3 CALL PRINTCHAR(CR);
|
||
50 3 CALL PRINTCHAR(LF);
|
||
51 3 END CRLF;
|
||
|
||
52 2 printx: procedure(a);
|
||
53 3 declare a address;
|
||
54 3 call mon1(9,a);
|
||
55 3 end printx;
|
||
|
||
56 2 PRINT: PROCEDURE(A);
|
||
57 3 DECLARE A ADDRESS;
|
||
/* PRINT THE STRING STARTING AT ADDRESS A UNTIL THE
|
||
NEXT DOLLAR SIGN IS ENCOUNTERED */
|
||
58 3 CALL CRLF;
|
||
59 3 CALL printx(A);
|
||
60 3 END PRINT;
|
||
|
||
61 2 RDCOM: PROCEDURE;
|
||
/* READ INTO COMMAND BUFFER */
|
||
62 3 MAXLEN = 128;
|
||
63 3 CALL MON1(10,.MAXLEN);
|
||
64 3 END RDCOM;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 7
|
||
|
||
|
||
65 2 CVERSION: PROCEDURE ADDRESS;
|
||
66 3 RETURN MON3(12,0); /* VERSION NUMBER */
|
||
67 3 END CVERSION;
|
||
|
||
68 2 SETDMA: PROCEDURE(A);
|
||
69 3 DECLARE A ADDRESS;
|
||
70 3 CALL MON1(26,A);
|
||
71 3 END SETDMA;
|
||
|
||
$if mpm
|
||
72 2 setpw: procedure(fcba);
|
||
73 3 declare fcba address;
|
||
74 3 declare fcbs based fcba structure (
|
||
fcb(frsize) byte,
|
||
pwnam(nsize) byte );
|
||
75 3 call setdma(.fcbs.pwnam(0));
|
||
76 3 end setpw;
|
||
$endif
|
||
|
||
77 2 OPEN: PROCEDURE(fcba);
|
||
78 3 DECLARE fcba ADDRESS;
|
||
79 3 declare fcb based fcba (frsize) byte;
|
||
$if mpm
|
||
80 3 CALL SETPW(fcba);
|
||
81 3 call retcodes(mon3(15,fcba));
|
||
$else
|
||
dcnt = mon2(15,fcba);
|
||
$endif
|
||
82 3 if dcnt <> 255 and rol(fcb(8),1) then
|
||
83 3 do; call mon1(16,fcba);
|
||
85 4 dcnt = 255;
|
||
$if mpm
|
||
86 4 exten = 0;
|
||
$endif
|
||
87 4 end;
|
||
88 3 END OPEN;
|
||
|
||
89 2 CLOSE: PROCEDURE(FCB);
|
||
90 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
91 3 call retcodes(MON3(16,FCB));
|
||
$else
|
||
dcnt = MON2(16,FCB);
|
||
$endif
|
||
92 3 END CLOSE;
|
||
|
||
93 2 SEARCH: PROCEDURE(FCB);
|
||
94 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
95 3 call retcodes(MON3(17,FCB));
|
||
$else
|
||
dcnt = MON2(17,FCB);
|
||
$endif
|
||
96 3 END SEARCH;
|
||
|
||
97 2 SEARCHN: PROCEDURE;
|
||
$if mpm
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 8
|
||
|
||
|
||
98 3 call retcodes(MON3(18,0));
|
||
$else
|
||
dcnt = MON2(18,0);
|
||
$endif
|
||
99 3 END SEARCHN;
|
||
|
||
100 2 DELETE: PROCEDURE(FCB);
|
||
101 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
102 3 CALL SETPW(FCB);
|
||
103 3 call retcodes(MON3(19,FCB));
|
||
$else
|
||
CALL MON1(19,FCB);
|
||
$endif
|
||
104 3 END DELETE;
|
||
|
||
105 2 DISKRD: PROCEDURE(FCB);
|
||
106 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
107 3 call retcodes(MON3(20,FCB));
|
||
$else
|
||
dcnt = MON2(20,FCB);
|
||
$endif
|
||
108 3 END DISKRD;
|
||
|
||
109 2 DISKWRITE: PROCEDURE(FCB);
|
||
110 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
111 3 call retcodes(MON3(21,FCB));
|
||
$else
|
||
dcnt = MON2(21,FCB);
|
||
$endif
|
||
112 3 END DISKWRITE;
|
||
|
||
113 2 MAKE: procedure(fcba);
|
||
114 3 declare fcba address;
|
||
$if mpm
|
||
115 3 declare fcbs based fcba structure (
|
||
fcb(frsize) byte,
|
||
pwnam(nsize) byte );
|
||
116 3 if fcbs.pwnam(0) = 0 then /* zero if no password */
|
||
117 3 fcbs.fcb(6) = fcbs.fcb(6) and 7fh; /* reset password attribute */
|
||
118 3 else do;
|
||
119 4 fcbs.fcb(6) = fcbs.fcb(6) or 80h; /* set password attribute */
|
||
120 4 call setdma(.fcbs.pwnam(0)); /* set password dma */
|
||
121 4 end;
|
||
122 3 call retcodes(mon3(22,fcba));
|
||
$else
|
||
dcnt = mon2(22,fcba);
|
||
$endif
|
||
123 3 END MAKE;
|
||
|
||
124 2 RENAME: PROCEDURE(FCB);
|
||
125 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
126 3 CALL SETPW(FCB);
|
||
127 3 call retcodes(MON3(23,FCB)) ;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 9
|
||
|
||
|
||
$else
|
||
dcnt = MON2(23,FCB);
|
||
$endif
|
||
128 3 END RENAME;
|
||
|
||
129 2 getdisk: procedure byte;
|
||
130 3 return mon2(25,0);
|
||
131 3 end getdisk;
|
||
|
||
132 2 SETIND: PROCEDURE(FCB);
|
||
133 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
134 3 call retcodes(MON3(30,FCB));
|
||
$else
|
||
dcnt = MON2(30,FCB);
|
||
$endif
|
||
135 3 END SETIND;
|
||
|
||
136 2 GETUSER: PROCEDURE BYTE;
|
||
137 3 RETURN MON2(32,0FFH);
|
||
138 3 END GETUSER;
|
||
|
||
139 2 SETUSER: PROCEDURE(USER);
|
||
140 3 DECLARE USER BYTE;
|
||
141 3 if last$user <> user then
|
||
142 3 CALL MON1(32,(last$user:=USER));
|
||
143 3 END SETUSER;
|
||
|
||
144 2 SETCUSER: PROCEDURE;
|
||
145 3 CALL SETUSER(CUSER);
|
||
146 3 END SETCUSER;
|
||
|
||
147 2 setduser: procedure;
|
||
148 3 call setuser(odest.user);
|
||
149 3 end setduser;
|
||
|
||
150 2 SETSUSER: PROCEDURE;
|
||
151 3 CALL SETUSER(source.user);
|
||
152 3 END SETSUSER;
|
||
|
||
153 2 RD$RANDOM: PROCEDURE(FCB) BYTE;
|
||
154 3 DECLARE FCB ADDRESS;
|
||
$if mpm
|
||
155 3 call retcodes(mon3(33,fcb));
|
||
$else
|
||
dcnt = mon2(33,fcb);
|
||
$endif
|
||
156 3 return dcnt;
|
||
157 3 END RD$RANDOM;
|
||
|
||
158 2 write$random: procedure(fcb) byte;
|
||
159 3 declare fcb address;
|
||
$if mpm
|
||
160 3 call retcodes(mon3(34,fcb));
|
||
$else
|
||
dcnt = mon2(34,fcb);
|
||
$endif
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 10
|
||
|
||
|
||
161 3 return dcnt;
|
||
162 3 end write$random;
|
||
|
||
163 2 retfsize: procedure(fcb) byte;
|
||
164 3 declare fcb address;
|
||
165 3 return mon2(35,fcb);
|
||
166 3 end retfsize;
|
||
|
||
167 2 SET$RANDOM: PROCEDURE(FCB);
|
||
168 3 DECLARE FCB ADDRESS;
|
||
/* SET RANDOM RECORD POSITION */
|
||
169 3 CALL MON1(36,FCB);
|
||
170 3 END SET$RANDOM;
|
||
|
||
$if mpm
|
||
171 2 multsect: procedure(cnt);
|
||
172 3 declare cnt byte;
|
||
173 3 if mseccnt <> cnt then
|
||
174 3 call mon1(44,(mseccnt := cnt));
|
||
175 3 end multsect;
|
||
|
||
176 2 flushbuf: procedure;
|
||
177 3 call mon1(48, 0ffh); /* 0FFH = flush and discard buffers */
|
||
178 3 end flushbuf;
|
||
|
||
179 2 conatlst: procedure byte;
|
||
180 3 return mon2(161,0);
|
||
181 3 end conatlst;
|
||
$endif
|
||
|
||
|
||
182 2 MOVE: PROCEDURE(S,D,N);
|
||
183 3 DECLARE (S,D) ADDRESS, N BYTE;
|
||
184 3 DECLARE A BASED S BYTE, B BASED D BYTE;
|
||
185 3 DO WHILE (N:=N-1) <> 255;
|
||
186 4 B = A; S = S+1; D = D+1;
|
||
189 4 END;
|
||
190 3 END MOVE;
|
||
|
||
/* errtype error messages */
|
||
191 2 declare er00(*) byte data ('DISK READ$');
|
||
192 2 declare er01(*) byte data ('DISK WRITE$');
|
||
193 2 declare er02(*) byte data ('VERIFY$');
|
||
194 2 declare er03(*) byte data ('INVALID DESTINATION$');
|
||
195 2 declare er04(*) byte data ('INVALID SOURCE$');
|
||
196 2 declare er05(*) byte data ('USER ABORTED$');
|
||
197 2 declare er06(*) byte data ('BAD PARAMETER$');
|
||
198 2 declare er07(*) byte data ('INVALID USER NUMBER$');
|
||
199 2 declare er08(*) byte data ('INVALID FORMAT$');
|
||
200 2 declare er09(*) byte data ('HEX RECORD CHECKSUM$');
|
||
201 2 declare er10(*) byte data ('FILE NOT FOUND$');
|
||
202 2 declare er11(*) byte data ('START NOT FOUND$');
|
||
203 2 declare er12(*) byte data ('QUIT NOT FOUND$');
|
||
204 2 declare er13(*) byte data ('INVALID HEX DIGIT$');
|
||
205 2 declare er14(*) byte data ('CLOSE FILE$');
|
||
206 2 declare er15(*) byte data ('UNEXPECTED END OF HEX FILE$');
|
||
207 2 declare er16(*) byte data ('INVALID SEPARATOR$');
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 11
|
||
|
||
|
||
208 2 declare er17(*) byte data ('NO DIRECTORY SPACE$');
|
||
209 2 declare er18(*) byte data ('INVALID FORMAT WITH SPARCE FILE$');
|
||
$if mpm
|
||
210 2 declare er19(*) byte data ('MAKE FILE$');
|
||
211 2 declare er20(*) byte data ('OPEN FILE$');
|
||
212 2 declare er21(*) byte data ('PRINTER BUSY$');
|
||
213 2 declare er22(*) byte data ('CAN''T DELETE TEMP FILE$');
|
||
$endif
|
||
|
||
214 2 declare errmsg(*) address data(
|
||
.er00,.er01,.er02,.er03,.er04,
|
||
.er05,.er06,.er07,.er08,.er09,
|
||
.er10,.er11,.er12,.er13,.er14,
|
||
.er15,.er16,.er17,.er18
|
||
$if mpm
|
||
,.er19,.er20,.er21,.er22
|
||
$endif
|
||
);
|
||
|
||
215 2 declare sper00(*) byte data ('NO DIRECTORY SPACE$');
|
||
216 2 declare sper01(*) byte data ('NO DATA BLOCK$');
|
||
217 2 declare sper02(*) byte data ('CAN''T CLOSE CURRENT EXTENT$');
|
||
218 2 declare sper03(*) byte data ('SEEK TO UNWRITTEN EXTENT$');
|
||
219 2 declare sper05(*) byte data ('RANDOM RECORD OUT OF RANGE$');
|
||
220 2 declare sper06(*) byte data ('RECORDS DON''T MATCH$');
|
||
221 2 declare sper07(*) byte data ('RECORD LOCKED$');
|
||
222 2 declare sper08(*) byte data ('INVALID FILENAME$');
|
||
223 2 declare sper09(*) byte data ('FCB CHECKSUM$');
|
||
|
||
224 2 declare numspmsgs lit '10'; /* number of extended messages */
|
||
225 2 declare special$msg(numspmsgs) address data(
|
||
.sper00,.sper01,.sper02,.sper03,.sper00,
|
||
.sper05,.sper06,.sper07,.sper08,.sper09);
|
||
|
||
$if mpm
|
||
/* extended error messages */
|
||
226 2 declare ex00(*) byte data ('$'); /* NO MESSAGE */
|
||
227 2 declare ex01(*) byte data ('NONRECOVERABLE$');
|
||
228 2 declare ex02(*) byte data ('R/O DISK$');
|
||
229 2 declare ex03(*) byte data ('R/O FILE$');
|
||
230 2 declare ex04(*) byte data ('INVALID DISK SELECT$');
|
||
231 2 declare ex05(*) byte data ('INCOMPATIBLE MODE$');
|
||
232 2 declare ex07(*) byte data ('INVALID PASSWORD$');
|
||
233 2 declare ex08(*) byte data ('ALREADY EXISTS$');
|
||
234 2 declare ex10(*) byte data ('LIMIT EXCEEDED$');
|
||
|
||
235 2 declare nummsgs lit '11'; /* number of extended messages */
|
||
236 2 declare extmsg(nummsgs) address data(
|
||
.ex00,.ex01,.ex02,.ex03,.ex04,
|
||
.ex05,.sper09,.ex07,.ex08,.sper08,
|
||
.ex10);
|
||
$endif
|
||
|
||
237 2 error$cleanup: procedure;
|
||
$if mpm
|
||
238 3 call multsect(1);
|
||
$endif
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 12
|
||
|
||
|
||
239 3 eretry = 0; /* initialize to no error retry */
|
||
240 3 if opened then /* if source file opened */
|
||
241 3 do; call setsuser;
|
||
243 4 call close(.source);
|
||
244 4 opened = false;
|
||
245 4 end;
|
||
246 3 if made then
|
||
247 3 do; call setduser;
|
||
249 4 call close(.dest);
|
||
250 4 call delete(.dest); /* delete destination scratch file */
|
||
251 4 end;
|
||
/* Zero the command length in case this is a single command */
|
||
252 3 comlen = 0;
|
||
253 3 retry = true;
|
||
254 3 call print(.('ERROR: $'));
|
||
255 3 end error$cleanup;
|
||
|
||
256 2 error: procedure (errtype);
|
||
257 3 declare errtype byte;
|
||
|
||
258 3 call error$cleanup;
|
||
259 3 call printx(errmsg(errtype));
|
||
260 3 call crlf;
|
||
261 3 go to reset;
|
||
262 3 end error;
|
||
|
||
263 2 xerror: procedure (funcno,fileadr);
|
||
264 3 declare temp byte,
|
||
i byte,
|
||
sdcnt byte,
|
||
sexten byte,
|
||
funcno byte,
|
||
fileadr address,
|
||
fcb based fileadr (fsize) byte;
|
||
|
||
265 3 declare message$index$tbl(17) byte data
|
||
(2,18,13,15,9,3,10,20,14,10,22,17,19,0,1,0,1);
|
||
|
||
266 3 sdcnt = dcnt;
|
||
267 3 sexten = exten;
|
||
268 3 call error$cleanup;
|
||
|
||
269 3 if (funcno < 6) or (sdcnt <> 0ffh) then
|
||
270 3 sexten = 0;
|
||
271 3 else sexten = sexten and 0fh;
|
||
|
||
272 3 call printx(errmsg(message$index$tbl(funcno)));
|
||
|
||
273 3 if (funcno > 12) and (funcno < 17) and
|
||
(sdcnt <> 0ffh) and (sdcnt <= numspmsgs) then
|
||
274 3 do; call printchar(' ');
|
||
276 4 call printx(special$msg(sdcnt-1));
|
||
277 4 sexten = 0;
|
||
278 4 end;
|
||
|
||
$if mpm
|
||
279 3 if sexten < nummsgs then
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 13
|
||
|
||
|
||
280 3 do; call printchar(' ');
|
||
282 4 call printx(extmsg(sexten));
|
||
283 4 end;
|
||
$endif
|
||
|
||
284 3 call printx(.(' - $'));
|
||
285 3 if fileadr <> 0 then
|
||
286 3 do; call printchar('A' + fcb(0) - 1);
|
||
288 4 call printchar(':');
|
||
289 4 do i = 1 to fnsize;
|
||
290 5 if (temp := fcb(i) and 07fh) <> ' ' then
|
||
291 5 do; if i = fext then call printchar('.');
|
||
294 6 call printchar(temp);
|
||
295 6 end;
|
||
296 5 end;
|
||
297 4 end;
|
||
298 3 call crlf;
|
||
|
||
299 3 if (sdcnt = 3) or (sdcnt = 4) or (sdcnt = 6) or (sdcnt = 8) then
|
||
300 3 eretry = ambig;
|
||
else
|
||
301 3 if (sexten = 3) or ((sexten > 4) and (sexten < 9)) or (sexten > 9) then
|
||
302 3 eretry = ambig;
|
||
|
||
go to reset;
|
||
304 3 end xerror;
|
||
|
||
305 2 FORMERR: PROCEDURE;
|
||
306 3 call error(8); /* invalid format */
|
||
307 3 END FORMERR;
|
||
|
||
308 2 CONBRK: PROCEDURE;
|
||
/* CHECK CONSOLE CHARACTER READY */
|
||
309 3 if mon2(11,0) <> 0 then
|
||
310 3 if mon2(6,0fdh) = cntrlc then
|
||
311 3 call error(5);
|
||
312 3 END CONBRK;
|
||
|
||
313 2 MAXSIZE: procedure byte;
|
||
/* three byte compare of random record field
|
||
returns true if source.fcb.ranrec >= filesize */
|
||
|
||
314 3 if (source.fcb(35) < filsize(2)) then
|
||
315 3 return false;
|
||
316 3 if (source.fcb(35) = filsize(2)) then
|
||
317 3 do;
|
||
318 4 if (source.fcb(34) < filsize(1)) then
|
||
319 4 return false;
|
||
320 4 if (source.fcb(34) = filsize(1)) then
|
||
321 4 do;
|
||
322 5 if (source.fcb(33) < filsize(0)) then
|
||
323 5 return false;
|
||
324 5 end;
|
||
325 4 end;
|
||
326 3 return true;
|
||
327 3 end maxsize;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 14
|
||
|
||
|
||
328 2 SETUPDEST: PROCEDURE;
|
||
329 3 call setduser; /* destination user */
|
||
$if mpm
|
||
330 3 call move(.odest,.dest,(frsize + nsize + 1)); /* save original dest */
|
||
$else
|
||
call move(.odest,.dest,(frsize + 1)); /* save original dest */
|
||
$endif
|
||
/* MOVE THREE CHARACTER EXTENT INTO DEST FCB */
|
||
331 3 CALL MOVE(.('$$$'),.DEST.FCB(FEXT),FEXTL);
|
||
$if mpm
|
||
332 3 odest.fcb(6) = odest.fcb(6) or 80h;
|
||
333 3 call open(.odest); /* try to open destination file */
|
||
334 3 odcnt = dcnt; /* and save error code */
|
||
335 3 if odcnt <> 255 then
|
||
336 3 call close(.odest);
|
||
337 3 else if (exten and 0fh) <> 0 then /* file exists */
|
||
338 3 call xerror(7,.odest); /* but can't open - error */
|
||
|
||
CALL DELETE(.DEST); /* REMOVE OLD $$$ FILE */
|
||
340 3 if dcnt = 255 and exten <> 0 then
|
||
/* cant delete temp file */
|
||
341 3 call xerror(10,.dest);
|
||
342 3 CALL MAKE(.DEST); /* CREATE A NEW ONE */
|
||
343 3 IF DCNT = 255 THEN
|
||
344 3 if (exten and 0fh) = 0 then
|
||
345 3 call xerror(11,.dest); /* no directory space */
|
||
346 3 else call xerror(12,.dest); /* make file error */
|
||
$else
|
||
CALL DELETE(.DEST); /* REMOVE OLD $$$ FILE */
|
||
CALL MAKE(.DEST); /* CREATE A NEW ONE */
|
||
IF DCNT = 255 THEN
|
||
call 17,.dest); /* no directory space */
|
||
$endif
|
||
347 3 DEST.FCB(32) = 0;
|
||
348 3 made = true;
|
||
349 3 END SETUPDEST;
|
||
|
||
350 2 SETUPSOURCE: PROCEDURE;
|
||
351 3 declare (i,j) byte;
|
||
352 3 CALL SETSUSER; /* SOURCE USER */
|
||
$if mpm
|
||
353 3 source.fcb(6) = source.fcb(6) or 80h;
|
||
$endif
|
||
354 3 CALL OPEN(.SOURCE); /* open source */
|
||
355 3 if dcnt <> 255 then
|
||
356 3 opened = true;
|
||
357 3 IF (NOT RSYS) AND ROL(SOURCE.FCB(10),1) THEN
|
||
/* skip system file */
|
||
358 3 DCNT = 255;
|
||
359 3 IF DCNT = 255 THEN
|
||
$if mpm
|
||
360 3 if (exten and 0fh) = 0 then
|
||
361 3 call xerror(6,.source); /* file not found */
|
||
else
|
||
362 3 call xerror(7,.source); /* open file error */
|
||
$else
|
||
call xerror(6,.source); /* file not found */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 15
|
||
|
||
|
||
$endif
|
||
363 3 f1 = source.fcb(1) and 80h; /* save file atributes */
|
||
364 3 f2 = source.fcb(2) and 80h;
|
||
365 3 f3 = source.fcb(3) and 80h;
|
||
366 3 f4 = source.fcb(4) and 80h;
|
||
367 3 ro = source.fcb(9) and 80h;
|
||
368 3 sys = source.fcb(10) and 80h;
|
||
369 3 dcnt = retfsize(.source);
|
||
370 3 call move(.source.fcb(33),.filsize,3);
|
||
371 3 SOURCE.FCB(32) = 0;
|
||
372 3 source.fcb(33),source.fcb(34),source.fcb(35) = 0;
|
||
/* cause immediate read with no preceding write */
|
||
373 3 NSOURCE = 0ffffh;
|
||
374 3 END SETUPSOURCE;
|
||
|
||
375 2 WRITEDEST: PROCEDURE;
|
||
/* WRITE OUTPUT BUFFERS UP TO BUT NOT INCLUDING POSITION
|
||
NDEST - THE LOW ORDER 7 BITS OF NDEST ARE ZERO */
|
||
376 3 DECLARE (J,DATAOK) BYTE,
|
||
(tdest,n) address;
|
||
377 3 if not made then call setupdest;
|
||
379 3 if (n := ndest and 0ff80h) = 0 then return;
|
||
381 3 tdest = 0;
|
||
382 3 call setduser; /* destination user */
|
||
383 3 if (sparfil := (sparfil or insparc)) then
|
||
/* set up fcb from random record no. */
|
||
384 3 do;
|
||
$if mpm
|
||
385 4 call multsect(1);
|
||
$endif
|
||
386 4 CALL SETDMA(.dbuff(tdest));
|
||
387 4 if write$random(.dest) <> 0 then
|
||
388 4 call xerror(16,.dest); /* DISK WRITE ERROR */
|
||
389 4 end;
|
||
else
|
||
390 3 CALL SETRANDOM(.DEST); /* SET BASE RECORD FOR VERIFY */
|
||
$if mpm
|
||
391 3 if fastcopy then
|
||
392 3 do; bufsize = maxmbuf;
|
||
394 4 call multsect(maxmcnt);
|
||
395 4 end;
|
||
else
|
||
396 3 do; bufsize = 128;
|
||
398 4 call multsect(1);
|
||
399 4 end;
|
||
$endif
|
||
|
||
400 3 do while n - tdest > 127;
|
||
$if mpm
|
||
401 4 if fastcopy and (n - tdest < maxmbuf) then
|
||
402 4 do; bufsize = n - tdest;
|
||
404 5 call multsect(low(shr(bufsize,7)));
|
||
405 5 end;
|
||
$endif
|
||
/* SET DMA ADDRESS TO NEXT BUFFER */
|
||
406 4 CALL SETDMA(.dbuff(tdest));
|
||
407 4 call diskwrite(.dest);
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 16
|
||
|
||
|
||
408 4 IF dcnt <> 0 THEN
|
||
409 4 call xerror(14,.dest); /* DISK WRITE ERROR */
|
||
$if mpm
|
||
410 4 tdest = tdest + bufsize;
|
||
$else
|
||
tdest = tdest + 128;
|
||
$endif
|
||
411 4 END;
|
||
|
||
412 3 IF VERIF THEN /* VERIFY DATA WRITTEN OK */
|
||
413 3 DO;
|
||
414 4 call flushbuf;
|
||
415 4 tdest = 0;
|
||
$if mpm
|
||
416 4 call multsect(1);
|
||
$endif
|
||
417 4 CALL SETDMA(.BUFF); /* FOR COMPARE */
|
||
418 4 do while tdest < n;
|
||
419 5 DATAOK = (RDRANDOM(.DEST) = 0);
|
||
420 5 if (DESTR := DESTR + 1) = 0 then /* 3 byte inc for */
|
||
421 5 destr2 = destr2 + 1; /* next random record */
|
||
422 5 J = 0;
|
||
/* PERFORM COMPARISON */
|
||
423 5 DO WHILE DATAOK AND J < 80H;
|
||
424 6 DATAOK = (BUFF(J) = DBUFF(tdest+J));
|
||
425 6 J = J + 1;
|
||
426 6 END;
|
||
427 5 tdest = tdest + 128;
|
||
428 5 IF NOT DATAOK THEN
|
||
429 5 call xerror(0,.dest); /* VERIFY ERROR */
|
||
430 5 END;
|
||
431 4 call diskrd(.dest);
|
||
/* NOW READY TO CONTINUE THE WRITE OPERATION */
|
||
432 4 END;
|
||
433 3 CALL SETRANDOM(.DEST); /* set base record for sparce copy */
|
||
434 3 call move(.dbuff(tdest),.dbuff(0),low(ndest := ndest - tdest));
|
||
435 3 END WRITEDEST;
|
||
|
||
436 2 FILLSOURCE: PROCEDURE;
|
||
/* FILL THE SOURCE BUFFER */
|
||
437 3 call conbrk;
|
||
$if mpm
|
||
438 3 if fastcopy then
|
||
439 3 do; bufsize = maxmbuf;
|
||
441 4 call multsect(maxmcnt);
|
||
442 4 end;
|
||
443 3 else do;
|
||
444 4 bufsize = 128;
|
||
445 4 call multsect(1);
|
||
446 4 end;
|
||
$endif
|
||
447 3 CALL SETSUSER; /* SOURCE USER NUMBER SET */
|
||
448 3 nsource = nsbuf;
|
||
449 3 do while sblen - nsbuf > 127;
|
||
450 4 if fastcopy and (sblen - nsbuf < maxmbuf) then
|
||
451 4 do; bufsize = (sblen - nsbuf) and 0ff80h;
|
||
453 5 call multsect(low(shr(bufsize,7)));
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 17
|
||
|
||
|
||
454 5 end;
|
||
/* SET DMA ADDRESS TO NEXT BUFFER POSIITION */
|
||
455 4 CALL SETDMA(.SBUFF(nsbuf));
|
||
456 4 extsave = source.fcb(12); /* save extent field */
|
||
457 4 call diskrd(.source);
|
||
458 4 IF dcnt <> 0 THEN
|
||
459 4 DO; IF dcnt <> 1 THEN
|
||
461 5 call xerror(13,.source); /* DISK READ ERROR */
|
||
/* END - OF - FILE */
|
||
$if mpm
|
||
462 5 if fastcopy then /* add no. sectors copied */
|
||
463 5 nsbuf = nsbuf + shl(double(exten),7);
|
||
/* nsbuf = nsbuf + shl(double(exten and 0f0h),3); */
|
||
$endif
|
||
/* check boundry condition for bug in bdos and correct */
|
||
464 5 if (source.fcb(12) <> extsave) and (source.fcb(32) = 80h) then
|
||
465 5 source.fcb(32) = 0; /* zero current record */
|
||
466 5 call set$random(.source);
|
||
467 5 if (insparc := not maxsize) then
|
||
468 5 do;
|
||
469 6 if concat or (not fastcopy) then
|
||
/* invalid format with sparce file */
|
||
470 6 call xerror(1,.source);
|
||
471 6 end;
|
||
else
|
||
472 5 do;
|
||
473 6 call close(.source);
|
||
474 6 opened = false;
|
||
475 6 end;
|
||
476 5 endofsrc = true; /* set end of source file */
|
||
477 5 SBUFF(nsbuf) = ENDFILE; return;
|
||
479 5 END;
|
||
ELSE
|
||
$if mpm
|
||
480 4 nsbuf = nsbuf + bufsize;
|
||
$else
|
||
nsbuf = nsbuf + 128;
|
||
$endif
|
||
481 4 END;
|
||
482 3 END FILLSOURCE;
|
||
|
||
483 2 PUTDCHAR: PROCEDURE(B);
|
||
484 3 DECLARE B BYTE;
|
||
/* WRITE BYTE B TO THE DESTINATION DEVICE GIVEN BY ODEST.TYPE */
|
||
485 3 IF B >= ' ' THEN
|
||
486 3 DO; COLUMN = COLUMN + 1;
|
||
488 4 IF DELET > 0 THEN /* MAY BE PAST RIGHT SIDE */
|
||
489 4 DO; IF COLUMN > DELET THEN RETURN;
|
||
492 5 END;
|
||
493 4 END;
|
||
494 3 if echo then call mon1(2,b); /* echo to console */
|
||
496 3 do case odest.type;
|
||
/* CASE 0 IS OUT */
|
||
497 4 CALL OUTD(B);
|
||
/* CASE 1 IS PRN, TABS EXPANDED, LINES LISTED */
|
||
498 4 call mon1(5,b);
|
||
/* CASE 2 IS LST */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 18
|
||
|
||
|
||
499 4 CALL MON1(5,B);
|
||
/* CASE 3 IS axo */
|
||
500 4 axocase:
|
||
$if not mpm
|
||
CALL MON1(4,B);
|
||
$else
|
||
call error(3); /* invalid destination */
|
||
$endif
|
||
/* CASE 4 IS DESTINATION FILE */
|
||
501 4 DO;
|
||
502 5 IF NDEST >= DBLEN THEN CALL WRITEDEST;
|
||
504 5 DBUFF(NDEST) = B;
|
||
505 5 NDEST = NDEST+1;
|
||
506 5 END;
|
||
/* CASE 5 IS AUX */
|
||
507 4 goto axocase;
|
||
/* CASE 6 IS CON */
|
||
508 4 CALL MON1(2,B);
|
||
509 4 END; /* of case */
|
||
510 3 END PUTDCHAR;
|
||
|
||
511 2 PUTDESTC: PROCEDURE(B);
|
||
512 3 DECLARE (B,I) BYTE;
|
||
/* WRITE DESTINATION CHARACTER, TAB EXPANSION */
|
||
513 3 IF B <> TAB THEN CALL PUTDCHAR(B);
|
||
515 3 ELSE IF TABS = 0 THEN CALL PUTDCHAR(B);
|
||
ELSE /* B IS TAB CHAR, TABS > 0 */
|
||
517 3 DO; I = COLUMN;
|
||
519 4 DO WHILE I >= TABS;
|
||
520 5 I = I - TABS;
|
||
521 5 END;
|
||
522 4 I = TABS - I;
|
||
523 4 DO WHILE I > 0;
|
||
524 5 I = I - 1;
|
||
525 5 CALL PUTDCHAR(' ');
|
||
526 5 END;
|
||
527 4 END;
|
||
528 3 IF B = CR THEN COLUMN = 0;
|
||
530 3 END PUTDESTC;
|
||
|
||
531 2 PRINT1: PROCEDURE(B);
|
||
532 3 DECLARE B BYTE;
|
||
533 3 IF (ZEROSUP := ZEROSUP AND B = 0) THEN
|
||
534 3 CALL PUTDESTC(' ');
|
||
ELSE
|
||
535 3 CALL PUTDESTC('0'+B);
|
||
536 3 END PRINT1;
|
||
|
||
537 2 PRINTDIG: PROCEDURE(D);
|
||
538 3 DECLARE D BYTE;
|
||
539 3 CALL PRINT1(SHR(D,4)); CALL PRINT1(D AND 1111B);
|
||
541 3 END PRINTDIG;
|
||
|
||
542 2 NEWLINE: PROCEDURE;
|
||
543 3 DECLARE ONE BYTE;
|
||
544 3 ONE = 1;
|
||
545 3 ZEROSUP = (NUMB = 1);
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 19
|
||
|
||
|
||
546 3 C1 = DEC(C1+ONE); C2 = DEC(C2 PLUS 0); C3 = DEC(C3 PLUS 0);
|
||
549 3 CALL PRINTDIG(C3); CALL PRINTDIG(C2); CALL PRINTDIG(C1);
|
||
552 3 IF NUMB = 1 THEN /* USUALLY PRINTER OUTPUT */
|
||
553 3 DO; CALL PUTDESTC(':'); CALL PUTDESTC(' ');
|
||
556 4 END;
|
||
ELSE
|
||
557 3 CALL PUTDESTC(TAB);
|
||
558 3 END NEWLINE;
|
||
|
||
559 2 PUTDEST: PROCEDURE(B);
|
||
560 3 DECLARE (I,B) BYTE;
|
||
/* WRITE DESTINATION CHARACTER, CHECK TABS AND LINES */
|
||
561 3 IF FORMF THEN /* SKIP FORM FEEDS */
|
||
562 3 DO; IF B = FF THEN RETURN;
|
||
565 4 END;
|
||
566 3 IF PUTNUM THEN /* END OF LINE OR START OF FILE */
|
||
567 3 DO;
|
||
568 4 IF (B <> FF) and (b <> endfile) THEN
|
||
569 4 DO; /* NOT FORM FEED or end of file */
|
||
570 5 IF (I:=PAGCNT) <> 0 THEN /* PAGE EJECT */
|
||
571 5 DO; IF I=1 THEN I=LPP;
|
||
574 6 IF (LINENO := LINENO + 1) >= I THEN
|
||
575 6 DO; LINENO = 0; /* NEW PAGE */
|
||
577 7 CALL PUTDESTC(FF);
|
||
578 7 END;
|
||
579 6 END;
|
||
580 5 IF NUMB > 0 THEN
|
||
581 5 CALL NEWLINE;
|
||
582 5 PUTNUM = FALSE;
|
||
583 5 END;
|
||
584 4 END;
|
||
585 3 IF B = FF THEN LINENO = 0;
|
||
587 3 CALL PUTDESTC(B);
|
||
588 3 IF B = LF THEN PUTNUM = TRUE;
|
||
590 3 END PUTDEST;
|
||
|
||
|
||
591 2 UTRAN: PROCEDURE(B) BYTE;
|
||
592 3 DECLARE B BYTE;
|
||
/* TRANSLATE ALPHA TO UPPER CASE */
|
||
593 3 IF B >= 110$0001B AND B <= 111$1010B THEN /* LOWER CASE */
|
||
594 3 B = B AND 101$1111B; /* TO UPPER CASE */
|
||
595 3 RETURN B;
|
||
596 3 END UTRAN;
|
||
|
||
597 2 LTRAN: PROCEDURE(B) BYTE;
|
||
598 3 DECLARE B BYTE;
|
||
/* TRANSLATE TO LOWER CASE ALPHA */
|
||
599 3 IF B >= 'A' AND B <= 'Z' THEN
|
||
600 3 B = B OR 10$0000B; /* TO LOWER */
|
||
601 3 RETURN B;
|
||
602 3 END LTRAN;
|
||
|
||
603 2 GETSOURCEC: PROCEDURE BYTE;
|
||
/* READ NEXT SOURCE CHARACTER */
|
||
604 3 DECLARE (B,CONCHK) BYTE;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 20
|
||
|
||
|
||
605 3 CONCHK = TRUE; /* CONSOLE STATUS CHECK BELOW */
|
||
606 3 DO CASE source.type;
|
||
/* CASE 0 IS out */
|
||
607 4 go to notsource;
|
||
/* CASE 1 IS prn */
|
||
608 4 go to notsource;
|
||
/* CASE 2 IS lst */
|
||
609 4 notsource:
|
||
call error(4); /* INVALID SOURCE */
|
||
/* CASE 3 IS axo */
|
||
610 4 go to notsource;
|
||
/* CASE 4 IS SOURCE FILE */
|
||
611 4 DO;
|
||
612 5 IF NSOURCE >= SBLEN THEN
|
||
613 5 do; if dblbuf or (not dfile) then
|
||
615 6 nsbuf = 0;
|
||
616 6 else if (nsource <> 0ffffh) then
|
||
617 6 do; call writedest;
|
||
619 7 nsbuf = ndest;
|
||
620 7 end;
|
||
CALL FILLSOURCE;
|
||
622 6 end;
|
||
623 5 B = SBUFF(NSOURCE);
|
||
624 5 NSOURCE = NSOURCE + 1;
|
||
625 5 END;
|
||
/* CASE 5 IS AUX */
|
||
626 4 goto axicase;
|
||
/* CASE 6 IS CON */
|
||
627 4 DO; CONCHK = FALSE; /* DON'T CHECK CONSOLE STATUS */
|
||
629 5 B = MON2(1,0);
|
||
630 5 END;
|
||
/* CASE 7 IS axi */
|
||
631 4 axicase:
|
||
$if not mpm
|
||
B = MON2(3,0) AND 7FH;
|
||
$else
|
||
go to notsource;
|
||
$endif
|
||
/* CASE 7 IS INP */
|
||
632 4 B = INPD;
|
||
633 4 END; /* OF CASES */
|
||
|
||
634 3 IF CONCHK THEN /* TEST FOR CONSOLE CHAR READY */
|
||
635 3 DO;
|
||
636 4 IF obj THEN /* SOURCE IS AN OBJECT FILE */
|
||
637 4 CONCHK = ((CONCNT := CONCNT + 1) = 0);
|
||
ELSE /* ASCII */
|
||
638 4 CONCHK = (B = LF);
|
||
639 4 IF CONCHK THEN
|
||
640 4 DO;
|
||
641 5 call CONBRK;
|
||
642 5 END;
|
||
643 4 END;
|
||
644 3 IF ZEROP THEN B = B AND 7FH;
|
||
646 3 IF UPPER THEN RETURN UTRAN(B);
|
||
648 3 IF LOWER THEN RETURN LTRAN(B);
|
||
650 3 RETURN B;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 21
|
||
|
||
|
||
651 3 END GETSOURCEC;
|
||
|
||
652 2 GETSOURCE: PROCEDURE BYTE;
|
||
/* GET NEXT SOURCE CHARACTER */
|
||
653 3 DECLARE CHAR BYTE;
|
||
654 3 MATCH: PROCEDURE(B) BYTE;
|
||
/* MATCH START AND QUIT STRINGS */
|
||
655 4 DECLARE (B,C) BYTE;
|
||
656 4 IF (C:=COMBUFF(B:=(B+MATCHLEN))) = ENDFILE THEN /* END MATCH */
|
||
657 4 DO; COMBUFF(B) = CHAR; /* SAVE CURRENT CHARACTER */
|
||
659 5 RETURN TRUE;
|
||
660 5 END;
|
||
661 4 IF C = CHAR THEN MATCHLEN = MATCHLEN + 1;
|
||
ELSE
|
||
663 4 MATCHLEN = 0; /* NO MATCH */
|
||
664 4 RETURN FALSE;
|
||
665 4 END MATCH;
|
||
|
||
666 3 IF QUITLEN > 0 THEN
|
||
667 3 DO; IF (QUITLEN := QUITLEN - 1) = 1 THEN RETURN LF;
|
||
670 4 RETURN ENDFILE; /* TERMINATED WITH CR,LF,ENDFILE */
|
||
671 4 END;
|
||
672 3 DO FOREVER; /* LOOKING FOR START */
|
||
673 4 IF FEEDLEN > 0 THEN /* GET SEARCH CHARACTERS */
|
||
674 4 DO; FEEDLEN = FEEDLEN - 1;
|
||
676 5 CHAR = COMBUFF(FEEDBASE);
|
||
677 5 FEEDBASE = FEEDBASE + 1;
|
||
678 5 RETURN CHAR;
|
||
679 5 END;
|
||
680 4 IF (CHAR := GETSOURCEC) = ENDFILE THEN RETURN ENDFILE;
|
||
682 4 IF STARTS > 0 THEN /* LOOKING FOR START STRING */
|
||
683 4 DO; IF MATCH(STARTS) THEN
|
||
685 5 DO; FEEDBASE = STARTS; STARTS = 0;
|
||
688 6 FEEDLEN = MATCHLEN + 1;
|
||
689 6 matchlen = 0;
|
||
690 6 END; /* OTHERWISE NO MATCH, SKIP CHARACTER */
|
||
691 5 END;
|
||
692 4 ELSE IF QUITS > 0 THEN /* PASS CHARACTERS TIL MATCH */
|
||
693 4 DO; IF MATCH(QUITS) THEN
|
||
695 5 DO; QUITS = 0; QUITLEN = 2;
|
||
/* SUBSEQUENTLY RETURN CR, LF, ENDFILE */
|
||
698 6 RETURN CR;
|
||
699 6 END;
|
||
700 5 RETURN CHAR;
|
||
701 5 END;
|
||
ELSE
|
||
702 4 RETURN CHAR;
|
||
703 4 END; /* OF DO FOREVER */
|
||
704 3 END GETSOURCE;
|
||
|
||
705 2 RD$EOF: PROCEDURE BYTE;
|
||
/* RETURN TRUE IF END OF FILE */
|
||
706 3 CHAR = GETSOURCE;
|
||
707 3 IF obj THEN RETURN (endofsrc and (nsource > nsbuf));
|
||
709 3 RETURN (CHAR = ENDFILE);
|
||
710 3 END RD$EOF;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 22
|
||
|
||
|
||
|
||
711 2 HEXRECORD: PROCEDURE;
|
||
712 3 DECLARE (h, hbuf, RL, CS, RT) BYTE,
|
||
zerorec byte, /* true if last record had length of zero */
|
||
LDA ADDRESS; /* LOAD ADDRESS WHICH FOLLOWS : */
|
||
|
||
713 3 ckhex: procedure byte;
|
||
714 4 IF H - '0' <= 9 THEN
|
||
715 4 RETURN H-'0';
|
||
716 4 IF H - 'A' > 5 THEN
|
||
717 4 CALL xerror(2,.source); /* invalid hex digit */
|
||
718 4 RETURN H - 'A' + 10;
|
||
719 4 end ckhex;
|
||
|
||
720 3 rdhex: procedure byte;
|
||
721 4 call putdest(h := getsource);
|
||
722 4 return ckhex;
|
||
723 4 end rdhex;
|
||
|
||
724 3 RDCS: PROCEDURE BYTE;
|
||
/* READ BYTE WITH CHECKSUM */
|
||
725 4 RETURN CS := CS + (SHL(RDHEX,4) OR RDHEX);
|
||
726 4 END RDCS;
|
||
|
||
727 3 RDADDR: PROCEDURE ADDRESS;
|
||
/* READ DOUBLE BYTE WITH CHECKSUM */
|
||
728 4 RETURN SHL(DOUBLE(RDCS),8) OR RDCS;
|
||
729 4 END RDADDR;
|
||
|
||
/* READ HEX FILE AND CHECK EACH RECORD
|
||
FOR VALID DIGITS, AND PROPER CHECKSUM */
|
||
730 3 zerorec = false;
|
||
/* READ NEXT RECORD */
|
||
731 3 h = getsource;
|
||
732 3 do forever;
|
||
/* SCAN FOR THE ':' */
|
||
733 4 DO WHILE h <> ':';
|
||
734 5 IF (h = ENDFILE) THEN
|
||
735 5 do; if zerorec then return;
|
||
738 6 CALL xerror(3,.source); /* unexpected end of hex file */
|
||
739 6 end;
|
||
740 5 call putdest(h);
|
||
741 5 h = getsource;
|
||
742 5 END;
|
||
|
||
/* ':' FOUND */
|
||
/* check for end of hex record */
|
||
743 4 h = getsource;
|
||
744 4 rl = shl(ckhex,4);
|
||
745 4 hbuf = h; h = getsource;
|
||
747 4 rl = rl or ckhex;
|
||
748 4 if (rl = 0) then zerorec = true;
|
||
750 4 else zerorec = false;
|
||
751 4 if (zerorec and ignor) then
|
||
752 4 do while (h <> ':') and (h <> endfile);
|
||
753 5 h = getsource;
|
||
754 5 end;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 23
|
||
|
||
|
||
755 4 else do; call putdest(':');
|
||
757 5 call putdest(hbuf);
|
||
758 5 call putdest(h);
|
||
759 5 cs = rl;
|
||
760 5 LDA = RDADDR; /* LOAD ADDRESS */
|
||
|
||
/* READ WORDS UNTIL RECORD LENGTH EXHAUSTED */
|
||
761 5 RT = RDCS; /* RECORD TYPE */
|
||
762 5 DO WHILE RL <> 0; RL = RL - 1;
|
||
764 6 hbuf = RDCS;
|
||
/* INCREMENT LA HERE FOR EXACT ADDRESS */
|
||
765 6 END;
|
||
|
||
/* CHECK SUM */
|
||
766 5 IF rdcs <> 0 THEN
|
||
767 5 CALL xerror(4,.source); /* hex record checksum */
|
||
768 5 h = getsource;
|
||
769 5 end;
|
||
770 4 end; /* do forever */
|
||
771 3 END HEXRECORD;
|
||
|
||
772 2 CK$STRINGS: PROCEDURE;
|
||
773 3 IF STARTS > 0 THEN
|
||
774 3 call error(11); /* START NOT FOUND */
|
||
775 3 IF QUITS > 0 THEN
|
||
776 3 call error(12); /* QUIT NOT FOUND */
|
||
777 3 END CK$STRINGS;
|
||
|
||
778 2 CLOSEDEST: PROCEDURE;
|
||
779 3 DO WHILE (LOW(NDEST) AND 7FH) <> 0;
|
||
780 4 CALL PUTDEST(ENDFILE);
|
||
781 4 END;
|
||
782 3 CALL CK$STRINGS;
|
||
783 3 CALL WRITEDEST;
|
||
784 3 call setduser; /* destination user */
|
||
785 3 CALL CLOSE(.DEST);
|
||
786 3 IF DCNT = 255 THEN
|
||
$if mpm
|
||
787 3 call xerror(8,.dest); /* CLOSE FILE */
|
||
788 3 IF odcnt <> 255 THEN /* FILE EXISTS */
|
||
789 3 do;
|
||
$else
|
||
call xerror(8,.dest); /* CLOSE FILE */
|
||
call open(.odest);
|
||
IF DCNT <> 255 THEN /* FILE EXISTS */
|
||
DO; call close(.odest);
|
||
$endif
|
||
790 4 IF ROL(odest.fcb(9),1) THEN /* READ ONLY */
|
||
791 4 DO;
|
||
792 5 IF NOT WRROF THEN
|
||
793 5 DO;
|
||
794 6 do while ((dcnt <> 'Y') and (dcnt <> 'N'));
|
||
795 7 CALL PRINT (.('DESTINATION IS R/O, DELETE (Y/N)? $'));
|
||
796 7 dcnt = utran(rdchar);
|
||
797 7 end;
|
||
798 6 IF dcnt <> 'Y' THEN
|
||
799 6 DO; CALL PRINT(.('**NOT DELETED**$'));
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 24
|
||
|
||
|
||
801 7 CALL CRLF;
|
||
802 7 CALL DELETE(.DEST);
|
||
803 7 RETURN;
|
||
804 7 END;
|
||
805 6 CALL CRLF;
|
||
806 6 END;
|
||
807 5 END;
|
||
/* reset r/o and sys attributes */
|
||
808 4 odest.fcb(9) = odest.fcb(9) and 7fh;
|
||
809 4 odest.fcb(10) = odest.fcb(10) AND 7FH;
|
||
810 4 CALL SETIND(.odest);
|
||
811 4 CALL DELETE(.odest);
|
||
812 4 END;
|
||
813 3 CALL MOVE(.odest.fcb,.dest.fcb(16),16); /* READY FOR RENAME */
|
||
814 3 CALL RENAME(.DEST);
|
||
/* set destination attributes same as source */
|
||
815 3 odest.fcb(1) = (odest.fcb(1) and 07fh) or f1;
|
||
816 3 odest.fcb(2) = (odest.fcb(2) and 07fh) or f2;
|
||
817 3 odest.fcb(3) = (odest.fcb(3) and 07fh) or f3;
|
||
818 3 odest.fcb(4) = (odest.fcb(4) and 07fh) or f4;
|
||
819 3 odest.fcb(8) = (odest.fcb(8) and 07fh);
|
||
820 3 odest.fcb(9) = (odest.fcb(9) and 07fh) or ro;
|
||
821 3 odest.fcb(10) = (odest.fcb(10) and 07fh) or sys;
|
||
822 3 odest.fcb(11) = (odest.fcb(11) and 07fh);
|
||
823 3 call setind(.odest);
|
||
824 3 if archiv then /* set archive bit */
|
||
825 3 do; call setsuser;
|
||
827 4 source.fcb(11) = source.fcb(11) or 080h;
|
||
828 4 source.fcb(12) = 0;
|
||
829 4 call setind(.source);
|
||
830 4 end;
|
||
831 3 END CLOSEDEST;
|
||
|
||
832 2 SIZE$MEMORY: PROCEDURE;
|
||
/* SET UP SOURCE AND DESTINATION BUFFERS */
|
||
833 3 if not dblbuf then
|
||
834 3 do; /* ABSORB THE SOURCE BUFFER INTO THE DEST BUFFER */
|
||
835 4 sbase = .memory;
|
||
836 4 sblen,dblen = ((maxb - .memory) and 0ff80h) - 128;
|
||
837 4 end;
|
||
838 3 else do; /* may need to write destination buffer */
|
||
839 4 sblen,dblen = (shr((maxb - .memory),1) and 0ff80h) - 128;
|
||
840 4 sbase = .memory + dblen + 128;
|
||
841 4 if ndest >= dblen then call writedest;
|
||
843 4 nsbuf = 0;
|
||
844 4 end;
|
||
845 3 END SIZE$MEMORY;
|
||
|
||
846 2 setupeob: procedure;
|
||
/* sets nsbuf to end of source buffer */
|
||
847 3 declare i byte;
|
||
848 3 if (not obj) and (nsbuf <> 0) then
|
||
849 3 do; tblen = nsbuf - 128;
|
||
851 4 do i = 0 to 128;
|
||
852 5 if (sbuff(tblen + i)) = endfile then
|
||
853 5 do; nsbuf = tblen + i;
|
||
855 6 return;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 25
|
||
|
||
|
||
856 6 end;
|
||
857 5 end;
|
||
858 4 end;
|
||
859 3 end setupeob;
|
||
|
||
860 2 SIMPLECOPY: PROCEDURE;
|
||
861 3 DECLARE I BYTE;
|
||
862 3 declare
|
||
fast lit '0', /* fast file to file copy */
|
||
chrt lit '1', /* character transfer option */
|
||
dubl lit '2'; /* double buffer required for file copy */
|
||
863 3 declare optype(26) byte data (
|
||
/* option type for each option character */
|
||
fast, /* for A option */
|
||
fast, /* for B option */
|
||
fast, /* for C option */
|
||
dubl, /* for D option */
|
||
chrt, /* for E option */
|
||
dubl, /* for F option */
|
||
fast, /* for G option */
|
||
chrt, /* for H option */
|
||
dubl, /* for I option */
|
||
fast, /* for J option */
|
||
fast, /* for K option */
|
||
chrt, /* for L option */
|
||
fast, /* for M option */
|
||
dubl, /* for N option */
|
||
fast, /* for O option */
|
||
dubl, /* for P option */
|
||
dubl, /* for Q option */
|
||
fast, /* for R option */
|
||
dubl, /* for S option */
|
||
dubl, /* for T option */
|
||
chrt, /* for U option */
|
||
fast, /* for V option */
|
||
fast, /* for W option */
|
||
fast, /* for X option */
|
||
fast, /* for Y option */
|
||
chrt); /* for Z option */
|
||
|
||
864 3 chkrandom: procedure;
|
||
865 4 call setsuser;
|
||
866 4 call set$random(.source);
|
||
$if mpm
|
||
867 4 call multsect(1);
|
||
$endif
|
||
868 4 call setdma(.buff);
|
||
869 4 do forever;
|
||
870 5 if (((dcnt := rd$random(.source)) = 0) or maxsize) then
|
||
871 5 do; destr = sourcer;
|
||
873 6 destr2 = sourcer2;
|
||
874 6 endofsrc = false;
|
||
875 6 return;
|
||
876 6 end;
|
||
877 5 if dcnt = 1 then
|
||
878 5 do; if (sourcer := sourcer + 1) = 0 then
|
||
880 6 sourcer2 = sourcer2 + 1;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 26
|
||
|
||
|
||
881 6 end;
|
||
882 5 else if dcnt = 4 then
|
||
883 5 do;
|
||
884 6 if (sourcer := (sourcer + 128) and 0ff80h) = 0 then
|
||
885 6 sourcer2 = sourcer2 + 1;
|
||
886 6 end;
|
||
else
|
||
887 5 call xerror(15,.source);
|
||
888 5 end;
|
||
889 4 end chkrandom;
|
||
|
||
890 3 fastcopy = (sfile and dfile);
|
||
891 3 endofsrc = false;
|
||
892 3 dblbuf = false;
|
||
893 3 sparfil = false;
|
||
894 3 insparc = false;
|
||
/* LOOK FOR PARAMETERS */
|
||
895 3 DO I = 0 TO 25;
|
||
896 4 IF CONT(I) <> 0 THEN
|
||
897 4 DO;
|
||
898 5 IF optype(i) = chrt THEN
|
||
899 5 FASTCOPY = FALSE;
|
||
else
|
||
900 5 if optype(i) = dubl then
|
||
901 5 do; dblbuf = (sfile and dfile);
|
||
903 6 fastcopy = false;
|
||
904 6 end;
|
||
END;
|
||
906 4 END;
|
||
|
||
907 3 CALL SIZE$MEMORY;
|
||
908 3 if sfile then
|
||
909 3 CALL SETUPSOURCE;
|
||
/* FILES READY FOR COPY */
|
||
|
||
910 3 if fastcopy then
|
||
911 3 do while not endofsrc;
|
||
912 4 CALL FILLSOURCE;
|
||
913 4 if endofsrc and concat then
|
||
914 4 do; call setupeob;
|
||
916 5 ndest = nsbuf;
|
||
917 5 if nendcmd then return;
|
||
919 5 end;
|
||
920 4 ndest = nsbuf;
|
||
921 4 CALL WRITEDEST;
|
||
922 4 nsbuf = ndest;
|
||
923 4 if (endofsrc and insparc) then
|
||
924 4 call chkrandom;
|
||
925 4 end;
|
||
|
||
926 3 else do;
|
||
/* PERFORM THE ACTUAL COPY FUNCTION */
|
||
927 4 IF HEXT OR IGNOR THEN /* HEX FILE */
|
||
928 4 call hexrecord;
|
||
ELSE
|
||
929 4 DO WHILE NOT RD$EOF;
|
||
930 5 CALL PUTDEST(CHAR);
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 27
|
||
|
||
|
||
931 5 END;
|
||
932 4 if concat and nendcmd then
|
||
933 4 do; nsbuf = ndest;
|
||
935 5 return;
|
||
936 5 end;
|
||
937 4 end;
|
||
|
||
938 3 if dfile then
|
||
939 3 CALL CLOSEDEST;
|
||
940 3 END SIMPLECOPY;
|
||
|
||
941 2 MULTCOPY: PROCEDURE;
|
||
942 3 DECLARE (NEXTDIR, NDCNT, NCOPIED) ADDRESS;
|
||
|
||
943 3 PRNAME: PROCEDURE;
|
||
/* PRINT CURRENT FILE NAME */
|
||
944 4 DECLARE (I,C) BYTE;
|
||
945 4 CALL CRLF;
|
||
946 4 DO I = 1 TO FNSIZE;
|
||
947 5 IF (C := odest.fcb(I)) <> ' ' THEN
|
||
948 5 DO; IF I = FEXT THEN CALL PRINTCHAR('.');
|
||
951 6 CALL PRINTCHAR(C);
|
||
952 6 END;
|
||
953 5 END;
|
||
954 4 END PRNAME;
|
||
|
||
955 3 archck: procedure byte;
|
||
/* check if archive bit is set in any extent of source file */
|
||
956 4 if not archiv then
|
||
957 4 return 1;
|
||
958 4 call setsuser;
|
||
959 4 source.fcb(12) = what;
|
||
960 4 call search(.source);
|
||
961 4 do while dcnt <> 255;
|
||
962 5 call move(.buff+shl(dcnt and 11b,5)+1,.source.fcb(1),15);
|
||
963 5 if not rol(source.fcb(11),1) then
|
||
964 5 return 1;
|
||
965 5 call searchn;
|
||
966 5 end;
|
||
967 4 return 0;
|
||
968 4 end archck;
|
||
|
||
$if mpm
|
||
/* initialize counters if not error retry */
|
||
969 3 if eretry = 0 then NEXTDIR, NCOPIED = 0;
|
||
$else
|
||
/* initialize counters */
|
||
NEXTDIR, NCOPIED = 0;
|
||
$endif
|
||
|
||
971 3 DO FOREVER;
|
||
/* FIND A MATCHING ENTRY */
|
||
972 4 CALL SETSUSER; /* SOURCE USER */
|
||
973 4 CALL SETDMA(.BUFF);
|
||
974 4 searfcb(12) = 0;
|
||
975 4 CALL SEARCH(.SEARFCB);
|
||
976 4 NDCNT = 0;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 28
|
||
|
||
|
||
977 4 DO WHILE (DCNT <> 255) AND NDCNT < NEXTDIR;
|
||
978 5 NDCNT = NDCNT + 1;
|
||
979 5 CALL SEARCHN;
|
||
980 5 END;
|
||
/* FILE CONTROL BLOCK IN BUFFER */
|
||
981 4 IF DCNT = 255 THEN
|
||
982 4 DO; IF NCOPIED = 0 THEN
|
||
984 5 call xerror(9,.searfcb); /* file not found */
|
||
985 5 if not kilds then
|
||
986 5 CALL CRLF;
|
||
987 5 RETURN;
|
||
988 5 END;
|
||
989 4 NEXTDIR = NDCNT + 1;
|
||
/* GET THE FILE CONTROL BLOCK NAME TO DEST */
|
||
990 4 CALL MOVE(.BUFF + SHL(DCNT AND 11B,5)+1,.odest.fcb(1),15);
|
||
991 4 CALL MOVE(.odest.fcb(1),.SOURCE.FCB(1),15); /* FILL BOTH FCB'S */
|
||
992 4 if archck then
|
||
993 4 do; odest.fcb(12) = 0;
|
||
995 5 source.fcb(12) = 0;
|
||
996 5 IF RSYS OR NOT ROL(odest.fcb(10),1) THEN /* OK TO READ */
|
||
997 5 DO; if not kilds then /* kill display option */
|
||
999 6 do; IF NCOPIED = 0 THEN
|
||
1001 7 CALL PRINT(.('COPYING -$'));
|
||
1002 7 dcnt = false;
|
||
1003 7 do while ((dcnt <> 'Y') and (dcnt <> 'N'));
|
||
1004 8 call prname;
|
||
1005 8 if confrm then
|
||
1006 8 do; call printx(.(' (Y/N)? $'));
|
||
1008 9 dcnt = utran(rdchar);
|
||
1009 9 end;
|
||
else
|
||
1010 8 dcnt = 'Y';
|
||
1011 8 end;
|
||
1012 7 end;
|
||
1013 6 ncopied = ncopied + 1;
|
||
1014 6 made = false; /* destination file not made */
|
||
1015 6 if (dcnt = 'Y') or (kilds) then
|
||
1016 6 CALL SIMPLECOPY;
|
||
1017 6 END;
|
||
1018 5 end;
|
||
1019 4 END;
|
||
1020 3 END MULTCOPY;
|
||
|
||
1021 2 CK$DISK: PROCEDURE;
|
||
/* error if same user and same disk */
|
||
1022 3 IF (odest.user = source.user) and (odest.fcb(0) = source.fcb(0)) THEN
|
||
1023 3 CALL FORMERR;
|
||
1024 3 END CK$DISK;
|
||
|
||
1025 2 GNC: PROCEDURE BYTE;
|
||
1026 3 IF (CBP := CBP + 1) >= COMLEN THEN RETURN CR;
|
||
1028 3 RETURN UTRAN(COMBUFF(CBP));
|
||
1029 3 END GNC;
|
||
|
||
1030 2 DEBLANK: PROCEDURE;
|
||
1031 3 DO WHILE (CHAR := GNC) = ' ';
|
||
1032 4 END;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 29
|
||
|
||
|
||
1033 3 END DEBLANK;
|
||
|
||
1034 2 CK$EOL: PROCEDURE;
|
||
1035 3 CALL DEBLANK;
|
||
1036 3 IF CHAR <> CR THEN CALL FORMERR;
|
||
1038 3 END CK$EOL;
|
||
|
||
1039 2 SCAN: PROCEDURE(FCBA);
|
||
1040 3 DECLARE FCBA ADDRESS, /* ADDRESS OF FCB TO FILL */
|
||
fcbs based fcba structure ( /* FCB STRUCTURE */
|
||
fcb(frsize) byte,
|
||
$if mpm
|
||
pwnam(nsize) byte,
|
||
pwmode byte,
|
||
$endif
|
||
user byte,
|
||
type byte );
|
||
1041 3 DECLARE (I,K) BYTE; /* TEMP COUNTERS */
|
||
|
||
/* SCAN LOOKS FOR THE NEXT DELIMITER, DEVICE NAME, OR FILE NAME.
|
||
THE VALUE OF CBP MUST BE 255 UPON ENTRY THE FIRST TIME */
|
||
|
||
1042 3 DELIMITER: PROCEDURE(C) BYTE;
|
||
1043 4 DECLARE (I,C) BYTE;
|
||
1044 4 DECLARE DEL(*) BYTE DATA
|
||
(' =.:;,<>',CR,LA,LB,RB);
|
||
1045 4 DO I = 0 TO LAST(DEL);
|
||
1046 5 IF C = DEL(I) THEN RETURN TRUE;
|
||
1048 5 END;
|
||
1049 4 RETURN FALSE;
|
||
1050 4 END DELIMITER;
|
||
|
||
1051 3 PUTCHAR: PROCEDURE;
|
||
1052 4 FCBS.FCB(FLEN:=FLEN+1) = CHAR;
|
||
1053 4 IF CHAR = WHAT THEN AMBIG = TRUE; /* CONTAINS AMBIGUOUS REF */
|
||
1055 4 END PUTCHAR;
|
||
|
||
1056 3 FILLQ: PROCEDURE(LEN);
|
||
/* FILL CURRENT NAME OR TYPE WITH QUESTION MARKS */
|
||
1057 4 DECLARE LEN BYTE;
|
||
1058 4 CHAR = WHAT; /* QUESTION MARK */
|
||
1059 4 DO WHILE FLEN < LEN;
|
||
1060 5 CALL PUTCHAR;
|
||
1061 5 END;
|
||
1062 4 END FILLQ;
|
||
|
||
1063 3 SCANPAR: PROCEDURE;
|
||
1064 4 DECLARE (I,J) BYTE;
|
||
/* SCAN OPTIONAL PARAMETERS */
|
||
1065 4 CHAR = GNC; /* SCAN PAST BRACKET */
|
||
1066 4 DO WHILE NOT(CHAR = CR OR CHAR = RB);
|
||
1067 5 IF (I := CHAR - 'A') > 25 THEN /* NOT ALPHA */
|
||
1068 5 DO; IF CHAR = ' ' THEN
|
||
1070 6 CHAR = GNC;
|
||
ELSE
|
||
1071 6 call error(6); /* BAD PARAMETER */
|
||
1072 6 END;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 30
|
||
|
||
|
||
ELSE
|
||
1073 5 DO; /* SCAN PARAMETER VALUE */
|
||
1074 6 IF CHAR = 'S' OR CHAR = 'Q' THEN
|
||
1075 6 DO; /* START OR QUIT COMMAND */
|
||
1076 7 J = CBP + 1; /* START OF STRING */
|
||
1077 7 DO WHILE NOT ((CHAR := GNC) = ENDFILE OR CHAR = CR);
|
||
1078 8 END;
|
||
1079 7 CHAR=GNC;
|
||
1080 7 END;
|
||
1081 6 ELSE IF (J := (CHAR := GNC) - '0') > 9 THEN
|
||
1082 6 J = 1;
|
||
ELSE
|
||
1083 6 DO WHILE (K := (CHAR := GNC) - '0') <= 9;
|
||
1084 7 J = J * 10 + K;
|
||
1085 7 END;
|
||
1086 6 CONT(I) = J;
|
||
1087 6 IF I = 6 THEN /* SET SOURCE USER */
|
||
1088 6 DO;
|
||
1089 7 IF J > 15 THEN
|
||
1090 7 call error(7); /* INVALID USER NUMBER */
|
||
1091 7 fcbs.user = J;
|
||
1092 7 END;
|
||
1093 6 END;
|
||
1094 5 END;
|
||
1095 4 CHAR = GNC;
|
||
1096 4 END SCANPAR;
|
||
|
||
|
||
/* scan procedure entry point */
|
||
|
||
/* INITIALIZE FILE CONTROL BLOCK TO EMPTY */
|
||
1097 3 fcbs.type = ERR; CHAR = ' '; FLEN = 0;
|
||
$if mpm
|
||
1100 3 DO WHILE FLEN < (FRSIZE + NSIZE);
|
||
1101 4 IF FLEN = FNSIZE THEN CHAR = 0;
|
||
1103 4 ELSE IF FLEN = FRSIZE THEN CHAR = ' ';
|
||
call putchar;
|
||
1106 4 END;
|
||
1107 3 fcbs.pwnam(0) = 0;
|
||
1108 3 fcbs.pwmode = 1;
|
||
$else
|
||
DO WHILE FLEN < FRSIZE -1;
|
||
IF FLEN = FNSIZE THEN CHAR = 0;
|
||
CALL PUTCHAR;
|
||
END;
|
||
$endif
|
||
1109 3 fcbs.fcb(0) = cdisk +1; /* initialize to current disk */
|
||
1110 3 fcbs.user = cuser; /* and current user */
|
||
/* CLEAR PARAMETERS */
|
||
1111 3 DO I = 0 TO 25; CONT(I) = 0;
|
||
1113 4 END;
|
||
1114 3 FEEDLEN,MATCHLEN,QUITLEN = 0;
|
||
|
||
/* DEBLANK COMMAND BUFFER */
|
||
1115 3 CALL DEBLANK;
|
||
|
||
/* CHECK PERIPHERALS AND DISK FILES */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 31
|
||
|
||
|
||
/* SCAN NEXT NAME */
|
||
1116 3 DO FOREVER;
|
||
1117 4 FLEN = 0;
|
||
1118 4 DO WHILE NOT DELIMITER(CHAR);
|
||
1119 5 IF FLEN >= NSIZE THEN /* ERROR, FILE NAME TOO LONG */
|
||
1120 5 RETURN;
|
||
1121 5 IF CHAR = '*' THEN CALL FILLQ(NSIZE);
|
||
1123 5 ELSE CALL PUTCHAR;
|
||
1124 5 CHAR = GNC;
|
||
1125 5 END;
|
||
|
||
/* CHECK FOR DISK NAME OR DEVICE NAME */
|
||
1126 4 IF CHAR = ':' THEN
|
||
1127 4 DO; IF FLEN = 1 THEN
|
||
/* MAY BE DISK NAME A ... P */
|
||
1129 5 DO;
|
||
1130 6 IF (fcbs.fcb(0) := fcbs.fcb(1) - 'A' + 1) > 16 THEN
|
||
1131 6 RETURN; /* ERROR, INVALID DISK NAME */
|
||
1132 6 CALL DEBLANK; /* MAY BE DISK NAME ONLY */
|
||
1133 6 IF DELIMITER(CHAR) THEN
|
||
1134 6 DO; IF CHAR = LB THEN
|
||
1136 7 CALL SCANPAR;
|
||
1137 7 CBP = CBP - 1;
|
||
1138 7 fcbs.type = DISKNAME;
|
||
1139 7 RETURN;
|
||
1140 7 END;
|
||
1141 6 END;
|
||
ELSE
|
||
/* MAY BE A THREE CHARACTER DEVICE NAME */
|
||
1142 5 IF FLEN <> 3 THEN /* ERROR, CANNOT BE DEVICE NAME */
|
||
1143 5 RETURN;
|
||
ELSE
|
||
/* LOOK FOR DEVICE NAME */
|
||
1144 5 DO; DECLARE (I,J,K) BYTE, M LITERALLY '10',
|
||
IO(*) BYTE DATA
|
||
('OUTPRNLSTAXO',
|
||
0,0,0, /* fake area for file type */
|
||
'AUX',
|
||
'CONAXIINPNULEOF',0);
|
||
|
||
1146 6 J = 255;
|
||
1147 6 DO K = 0 TO M;
|
||
1148 7 I = 0;
|
||
1149 7 DO WHILE ((I:=I+1) <= 3) AND
|
||
IO(J+I) = fcbs.fcb(I);
|
||
1150 8 END;
|
||
1151 7 IF I = 4 THEN /* COMPLETE MATCH */
|
||
1152 7 DO; fcbs.type = k;
|
||
/* SCAN PARAMETERS */
|
||
1154 8 IF GNC = LB THEN CALL SCANPAR;
|
||
1156 8 CBP = CBP - 1;
|
||
1157 8 RETURN;
|
||
1158 8 END;
|
||
1159 7 J = J + 3; /* OTHERWISE TRY NEXT DEVICE */
|
||
1160 7 END;
|
||
1161 6 RETURN; /* ERROR, NO DEVICE NAME MATCH */
|
||
1162 6 END;
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 32
|
||
|
||
|
||
1163 5 IF CHAR = LB THEN /* PARAMETERS FOLLOW */
|
||
1164 5 CALL SCANPAR;
|
||
1165 5 END;
|
||
ELSE
|
||
/* CHAR IS NOT ':', SO FILE NAME IS SET. SCAN REMAINDER */
|
||
1166 4 DO; IF FLEN = 0 THEN /* ERROR, NO PRIMARY NAME */
|
||
1168 5 RETURN;
|
||
1169 5 FLEN = NSIZE;
|
||
1170 5 IF CHAR = '.' THEN /* SCAN FILE TYPE */
|
||
1171 5 DO WHILE NOT DELIMITER(CHAR := GNC);
|
||
1172 6 IF FLEN >= FNSIZE THEN
|
||
1173 6 RETURN; /* ERROR, TYPE FIELD TOO LONG */
|
||
1174 6 IF CHAR = '*' THEN CALL FILLQ(FNSIZE);
|
||
1176 6 ELSE CALL PUTCHAR;
|
||
1177 6 END;
|
||
$if mpm
|
||
1178 5 FLEN = 0;
|
||
1179 5 IF CHAR = ';' THEN /* SCAN PASSWORD */
|
||
1180 5 DO WHILE NOT DELIMITER(CHAR := GNC);
|
||
1181 6 IF FLEN >= NSIZE THEN
|
||
1182 6 /* ERROR, PW TOO LONG */ RETURN;
|
||
ELSE /* SAVE PASSWORD */
|
||
1183 6 FCBS.PWNAM(FLEN) = CHAR;
|
||
1184 6 FLEN = FLEN + 1;
|
||
1185 6 END;
|
||
$endif
|
||
1186 5 IF CHAR = LB THEN
|
||
1187 5 CALL SCANPAR;
|
||
/* RESCAN DELIMITER NEXT TIME AROUND */
|
||
1188 5 CBP = CBP - 1;
|
||
1189 5 fcbs.type = FILE;
|
||
1190 5 FCBS.FCB(32) = 0;
|
||
1191 5 RETURN;
|
||
1192 5 END;
|
||
1193 4 END;
|
||
1194 3 END SCAN;
|
||
|
||
|
||
/* PLM (PIP) ENTRY POINT */
|
||
/* BUFFER AT 80H CONTAINS REMAINDER OF LINE TYPED
|
||
FOLLOWING THE COMMAND 'PIP' - IF ZERO THEN PROMPT TIL CR */
|
||
|
||
1195 2 if not retry then
|
||
1196 2 do; CALL MOVE(.BUFF,.COMLEN,80H);
|
||
1198 3 MULTCOM = (COMLEN = 0);
|
||
|
||
/* GET CURRENT CP/M VERSION */
|
||
1199 3 IF low(CVERSION) < VERSION THEN
|
||
1200 3 DO;
|
||
$if cpm3
|
||
CALL PRINT(.('REQUIRES CP/M 3$'));
|
||
$else
|
||
1201 4 CALL PRINT(.('REQUIRES CONCURRENT CP/M-86$'));
|
||
$endif
|
||
1202 4 CALL BOOT;
|
||
1203 4 END;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 33
|
||
|
||
|
||
1204 3 call mon1(45,255); /* set return error mode */
|
||
|
||
$if cpm3
|
||
call mon1(109,1); /* set CP/M 3 control-C status mode */
|
||
$endif
|
||
|
||
1205 3 if multcom then
|
||
1206 3 do;
|
||
$if cpm3
|
||
call printx(.('CP/M 3 PIP VERSION 3.1$'));
|
||
$else
|
||
1207 4 call printx(.('CONCURRENT CP/M-86 PIP VERSION 3.1$'));
|
||
$endif
|
||
1208 4 call crlf;
|
||
1209 4 end;
|
||
|
||
1210 3 cuser,last$user = getuser; /* GET CURRENT USER */
|
||
1211 3 cdisk = getdisk; /* GET CURRENT DISK */
|
||
$if mpm
|
||
1212 3 mseccnt = 1;
|
||
$endif
|
||
1213 3 eretry = false; /* need to initialize here for first time */
|
||
1214 3 end;
|
||
|
||
|
||
/* START HERE ON RESET EXIT FROM THE PROCEDURE 'ERROR' */
|
||
$if mpm
|
||
1215 2 if eretry <> 0 then
|
||
1216 2 do; call multcopy;
|
||
1218 3 comlen = multcom;
|
||
1219 3 end;
|
||
$endif
|
||
/* MAIN PROCESSING LOOP. PROCESS UNTIL CR ONLY */
|
||
1220 2 DO FOREVER;
|
||
1221 3 C1, C2, C3 = 0; /* LINE COUNT = 000000 */
|
||
1222 3 CONCNT,COLUMN = 0; /* PRINTER TABS */
|
||
1223 3 ndest,nsbuf = 0;
|
||
1224 3 ambig = false;
|
||
1225 3 made = false; /* destination file not made */
|
||
1226 3 opened = false; /* source file not opened */
|
||
1227 3 concat = false;
|
||
1228 3 eretry = false;
|
||
1229 3 PUTNUM = TRUE; /* ACTS LIKE LF OCCURRED ON ASCII FILE */
|
||
1230 3 dfile,sfile = true;
|
||
1231 3 nendcmd = true;
|
||
1232 3 LINENO = 254; /* INCREMENTED TO 255 > PAGCNT */
|
||
/* READ FROM CONSOLE IF NOT A ONELINER */
|
||
1233 3 IF MULTCOM THEN
|
||
1234 3 DO; CALL PRINTCHAR('*'); CALL RDCOM;
|
||
1237 4 CALL CRLF;
|
||
1238 4 END;
|
||
1239 3 CBP = 255;
|
||
1240 3 IF COMLEN = 0 THEN /* character = <CR> */
|
||
1241 3 do; call setcuser; /* restore current user */
|
||
1243 4 CALL BOOT; /* normal exit from pip here */
|
||
1244 4 end;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 34
|
||
|
||
|
||
/* LOOK FOR SPECIAL CASES FIRST */
|
||
|
||
1245 3 CALL SCAN(.odest);
|
||
1246 3 if ambig then
|
||
1247 3 call xerror(5,.odest); /* invalid destination */
|
||
1248 3 call deblank; /* check for equal sign or left arrow */
|
||
1249 3 if (char <> '=') and (char <> la) then call formerr;
|
||
1251 3 call scan(.source);
|
||
|
||
1252 3 IF odest.type = DISKNAME THEN
|
||
1253 3 DO;
|
||
1254 4 IF source.type <> file then call formerr;
|
||
1256 4 CALL CK$EOL;
|
||
1257 4 CALL CK$DISK;
|
||
1258 4 odest.type = file; /* set for character transfer */
|
||
/* MAY BE MULTI COPY */
|
||
1259 4 IF AMBIG THEN /* FORM IS A:=B:AFN */
|
||
1260 4 DO;
|
||
1261 5 CALL MOVE(.source.fcb(0),.searfcb(0),frsize);
|
||
1262 5 CALL MULTCOPY;
|
||
1263 5 END;
|
||
1264 4 ELSE DO; /* FORM IS A:=B:UFN */
|
||
1265 5 CALL MOVE(.source.fcb(1),.odest.fcb(1),frsize - 1);
|
||
1266 5 CALL SIMPLECOPY;
|
||
1267 5 END;
|
||
1268 4 END;
|
||
|
||
1269 3 else IF (odest.type = FILE) and (source.type = DISKNAME) THEN
|
||
1270 3 DO;
|
||
1271 4 CALL CK$EOL;
|
||
1272 4 CALL CK$DISK;
|
||
1273 4 source.type = file; /* set for character transfer */
|
||
$if mpm
|
||
1274 4 call move(.odest.fcb(1),.source.fcb(1),(frsize+nsize));
|
||
$else
|
||
call move(.odest.fcb(1),.source.fcb(1),(frsize - 1));
|
||
$endif
|
||
1275 4 CALL SIMPLECOPY;
|
||
1276 4 END;
|
||
|
||
1277 3 else if (odest.type > cons) then
|
||
1278 3 call error(3); /* invalid destination */
|
||
1279 3 else do;
|
||
1280 4 IF odest.type <> FILE THEN dfile = false;
|
||
$if not mpm
|
||
/* no conditional attach list device */
|
||
$else
|
||
1282 4 if (odest.type = prnt or odest.type = lstt) then
|
||
1283 4 if conatlst = 255 then
|
||
1284 4 call error(21); /* printer busy */
|
||
$endif
|
||
/* SCAN AND COPY UNTIL CR */
|
||
1285 4 DO WHILE nendcmd;
|
||
1286 5 sfile = true;
|
||
1287 5 call deblank;
|
||
1288 5 IF (CHAR <> ',' AND CHAR <> CR) THEN
|
||
1289 5 call error(16); /* invalid separator */
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 35
|
||
|
||
|
||
1290 5 concat = concat or (nendcmd := (char = ','));
|
||
1291 5 IF odest.type = PRNT THEN
|
||
1292 5 DO; NUMB = 1;
|
||
1294 6 IF TABS = 0 THEN TABS = 8;
|
||
1296 6 IF PAGCNT = 0 THEN PAGCNT = 1;
|
||
1298 6 END;
|
||
1299 5 IF (source.type < file) or (source.type > eoft) or ambig THEN
|
||
1300 5 call error(4); /* invalid source */
|
||
1301 5 IF source.type <> FILE THEN /* NOT A SOURCE FILE */
|
||
1302 5 sfile = false;
|
||
1303 5 IF source.type = NULT THEN
|
||
/* SEND 40 NULLS TO OUTPUT DEVICE */
|
||
1304 5 DO sfile = 0 TO 39; CALL PUTDEST(0);
|
||
1306 6 END;
|
||
1307 5 ELSE IF source.type = EOFT THEN
|
||
1308 5 CALL PUTDEST(ENDFILE);
|
||
1309 5 else call simplecopy;
|
||
|
||
1310 5 CALL CK$STRINGS;
|
||
/* READ ENDFILE, GO TO NEXT SOURCE */
|
||
|
||
1311 5 if nendcmd then call scan(.source);
|
||
1313 5 END;
|
||
1314 4 end;
|
||
|
||
/* COMLEN SET TO 0 IF NOT PROCESSING MULTIPLE COMMANDS */
|
||
1315 3 COMLEN = MULTCOM;
|
||
|
||
1316 3 END; /* DO FOREVER */
|
||
1317 2 end plm;
|
||
1318 1 END;
|
||
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 36
|
||
|
||
|
||
CROSS-REFERENCE LISTING
|
||
-----------------------
|
||
|
||
|
||
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
|
||
----- ------ ----- --------------------------------
|
||
|
||
|
||
52 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 53 54
|
||
10 0000H 2 A. . . . . . . . . WORD PARAMETER 11
|
||
68 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 69 70
|
||
184 0000H 1 A. . . . . . . . . BYTE BASED(S) 186
|
||
13 0000H 2 A. . . . . . . . . WORD PARAMETER 14
|
||
33 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 34 35 36
|
||
56 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 57 59
|
||
16 0000H 2 A. . . . . . . . . WORD PARAMETER 17
|
||
27 00BBH 1 AMBIG. . . . . . . BYTE 300 302 1054 1224 1246 1259 1299
|
||
955 15F7H 84 ARCHCK . . . . . . PROCEDURE BYTE STACK=0012H 992
|
||
31 0158H 1 ARCHIV . . . . . . BYTE AT 824 956
|
||
22 AUXT . . . . . . . LITERALLY
|
||
631 0E1CH AXICASE. . . . . . LABEL 626
|
||
22 AXIT . . . . . . . LITERALLY
|
||
500 0BC1H AXOCASE. . . . . . LABEL 507
|
||
22 AXOT . . . . . . . LITERALLY
|
||
531 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 532 533 535
|
||
597 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 598 599 600 601
|
||
654 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 655 656 658
|
||
184 0000H 1 B. . . . . . . . . BYTE BASED(D) 186
|
||
559 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 560 563 568 585 587 588
|
||
591 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 592 593 594 595
|
||
483 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 484 485 495 497 498 499 504 508
|
||
511 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 512 513 514 516 528
|
||
5 0000H 1 B. . . . . . . . . BYTE PARAMETER 6
|
||
604 0181H 1 B. . . . . . . . . BYTE 623 629 632 638 645 647 649 650
|
||
38 029DH 14 BOOT . . . . . . . PROCEDURE STACK=0008H 1202 1243
|
||
3 0000H 128 BUFF . . . . . . . BYTE ARRAY(128) EXTERNAL(3) 417 424 868 962 973 990 1197
|
||
26 000AH 2 BUFSIZE. . . . . . WORD 393 397 403 404 410 440 444 452 453 480
|
||
655 0184H 1 C. . . . . . . . . BYTE 656 661
|
||
944 018EH 1 C. . . . . . . . . BYTE 947 951
|
||
1042 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 1043 1046
|
||
32 0175H 1 C1 . . . . . . . . BYTE 546 551 1221
|
||
32 0174H 1 C2 . . . . . . . . BYTE 547 550 1221
|
||
32 0173H 1 C3 . . . . . . . . BYTE 548 549 1221
|
||
29 0155H 1 CBP. . . . . . . . BYTE 1026 1028 1076 1137 1156 1188 1239
|
||
29 00D3H 130 CBUFF. . . . . . . BYTE ARRAY(130) 29
|
||
26 0025H 1 CDISK. . . . . . . BYTE 1109 1211
|
||
27 00C7H 1 CHAR . . . . . . . BYTE 706 709 930 1031 1036 1052 1053 1058 1065 1066 1067 1069
|
||
1070 1074 1077 1079 1081 1083 1095 1098 1102 1104 1118 1121 1124 1126
|
||
1133 1135 1163 1170 1171 1174 1179 1180 1183 1186 1249 1288 1290
|
||
44 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 45 46
|
||
653 0183H 1 CHAR . . . . . . . BYTE 658 661 676 678 680 700 702
|
||
864 13F2H 127 CHKRANDOM. . . . . PROCEDURE STACK=0026H 924
|
||
862 CHRT . . . . . . . LITERALLY 863 898
|
||
1021 164BH 26 CKDISK . . . . . . PROCEDURE STACK=0028H 1257 1272
|
||
1034 1699H 18 CKEOL. . . . . . . PROCEDURE STACK=0028H 1256 1271
|
||
713 1096H 42 CKHEX. . . . . . . PROCEDURE BYTE STACK=0026H 722 744 747
|
||
772 1103H 31 CKSTRINGS. . . . . PROCEDURE STACK=0024H 782 1310
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 37
|
||
|
||
|
||
89 0382H 20 CLOSE. . . . . . . PROCEDURE STACK=000AH 243 249 336 473 785
|
||
778 1122H 315 CLOSEDEST. . . . . PROCEDURE STACK=0050H 939
|
||
171 0004H 1 CNT. . . . . . . . BYTE PARAMETER AUTOMATIC 172 173 174
|
||
24 CNTRLC . . . . . . LITERALLY 310
|
||
26 001FH 1 COLUMN . . . . . . BYTE 487 490 518 529 1222
|
||
29 00D5H 128 COMBUFF. . . . . . BYTE ARRAY(128) AT 656 658 676 1028
|
||
29 00D4H 1 COMLEN . . . . . . BYTE AT 252 1026 1197 1198 1218 1240 1315
|
||
179 0535H 15 CONATLST . . . . . PROCEDURE BYTE STACK=0008H 1283
|
||
308 0715H 39 CONBRK . . . . . . PROCEDURE STACK=0024H 437 641
|
||
27 00BAH 1 CONCAT . . . . . . BYTE 469 913 932 1227 1290
|
||
604 0182H 1 CONCHK . . . . . . BYTE 605 628 634 637 638 639
|
||
27 00C6H 1 CONCNT . . . . . . BYTE 637 1222
|
||
31 015AH 1 CONFRM . . . . . . BYTE AT 1005
|
||
22 CONS . . . . . . . LITERALLY 1277
|
||
31 0158H 26 CONT . . . . . . . BYTE ARRAY(26) 31 896 1086 1112
|
||
21 0058H 34 COPYRIGHT. . . . . BYTE ARRAY(34) DATA
|
||
24 CR . . . . . . . . LITERALLY 49 528 698 1027 1036 1044 1066 1077 1288
|
||
48 02CFH 17 CRLF . . . . . . . PROCEDURE STACK=000EH 58 260 298 801 805 945 986 1208
|
||
1237
|
||
712 0188H 1 CS . . . . . . . . BYTE 725 759
|
||
30 0156H 1 CUSER. . . . . . . BYTE 145 1110 1210
|
||
65 0314H 15 CVERSION . . . . . PROCEDURE WORD STACK=0008H 1199
|
||
182 0006H 2 D. . . . . . . . . WORD PARAMETER AUTOMATIC 183 184 186 188
|
||
537 0004H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 538 539 540
|
||
376 017DH 1 DATAOK . . . . . . BYTE 419 423 424 428
|
||
27 00B9H 1 DBLBUF . . . . . . BYTE 614 833 892 902
|
||
26 0002H 2 DBLEN. . . . . . . WORD 502 836 839 840 841
|
||
26 0000H 1024 DBUFF. . . . . . . BYTE ARRAY(1024) AT 386 406 424 434 504
|
||
28 00D2H 1 DCNT . . . . . . . BYTE 35 82 85 156 161 266 334 340 343 355 358 359
|
||
369 408 458 460 786 794 796 798 870 877 882 961 962 977
|
||
981 990 1002 1003 1008 1010 1015
|
||
1030 168AH 15 DEBLANK. . . . . . PROCEDURE STACK=000CH 1035 1115 1132 1248 1287
|
||
DEC. . . . . . . . BUILTIN 546 547 548
|
||
1044 0340H 12 DEL. . . . . . . . BYTE ARRAY(12) DATA 1045 1046
|
||
31 015BH 1 DELET. . . . . . . BYTE AT 488 490
|
||
100 03BDH 26 DELETE . . . . . . PROCEDURE STACK=0016H 250 339 802 811
|
||
1042 18E4H 46 DELIMITER. . . . . PROCEDURE BYTE STACK=0004H 1118 1133 1171 1180
|
||
26 0055H 47 DEST . . . . . . . STRUCTURE 26 249 250 330 331 339 341 342 345 346 347
|
||
387 388 390 407 409 419 429 431 433 785 787 802 813 814
|
||
26 0076H 2 DESTR. . . . . . . WORD AT 420 872
|
||
26 0078H 1 DESTR2 . . . . . . BYTE AT 421 873
|
||
27 00BCH 1 DFILE. . . . . . . BYTE 614 890 902 938 1230 1281
|
||
22 DISKNAME . . . . . LITERALLY 1138 1252 1269
|
||
105 03D7H 20 DISKRD . . . . . . PROCEDURE STACK=000AH 431 457
|
||
109 03EBH 20 DISKWRITE. . . . . PROCEDURE STACK=000AH 407
|
||
DOUBLE . . . . . . BUILTIN 463 728
|
||
862 DUBL . . . . . . . LITERALLY 863 900
|
||
31 015CH 1 ECHO . . . . . . . BYTE AT 494
|
||
20 ENDFILE. . . . . . LITERALLY 477 568 656 670 680 681 709 734 752 780 852
|
||
1077 1308
|
||
27 00C0H 1 ENDOFSRC . . . . . BYTE 476 708 874 891 911 913 923
|
||
22 EOFT . . . . . . . LITERALLY 1299 1307
|
||
191 007AH 10 ER00 . . . . . . . BYTE ARRAY(10) DATA 214
|
||
192 0084H 11 ER01 . . . . . . . BYTE ARRAY(11) DATA 214
|
||
193 008FH 7 ER02 . . . . . . . BYTE ARRAY(7) DATA 214
|
||
194 0096H 20 ER03 . . . . . . . BYTE ARRAY(20) DATA 214
|
||
195 00AAH 15 ER04 . . . . . . . BYTE ARRAY(15) DATA 214
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 38
|
||
|
||
|
||
196 00B9H 13 ER05 . . . . . . . BYTE ARRAY(13) DATA 214
|
||
197 00C6H 14 ER06 . . . . . . . BYTE ARRAY(14) DATA 214
|
||
198 00D4H 20 ER07 . . . . . . . BYTE ARRAY(20) DATA 214
|
||
199 00E8H 15 ER08 . . . . . . . BYTE ARRAY(15) DATA 214
|
||
200 00F7H 20 ER09 . . . . . . . BYTE ARRAY(20) DATA 214
|
||
201 010BH 15 ER10 . . . . . . . BYTE ARRAY(15) DATA 214
|
||
202 011AH 16 ER11 . . . . . . . BYTE ARRAY(16) DATA 214
|
||
203 012AH 15 ER12 . . . . . . . BYTE ARRAY(15) DATA 214
|
||
204 0139H 18 ER13 . . . . . . . BYTE ARRAY(18) DATA 214
|
||
205 014BH 11 ER14 . . . . . . . BYTE ARRAY(11) DATA 214
|
||
206 0156H 27 ER15 . . . . . . . BYTE ARRAY(27) DATA 214
|
||
207 0171H 18 ER16 . . . . . . . BYTE ARRAY(18) DATA 214
|
||
208 0183H 19 ER17 . . . . . . . BYTE ARRAY(19) DATA 214
|
||
209 0196H 32 ER18 . . . . . . . BYTE ARRAY(32) DATA 214
|
||
210 01B6H 10 ER19 . . . . . . . BYTE ARRAY(10) DATA 214
|
||
211 01C0H 10 ER20 . . . . . . . BYTE ARRAY(10) DATA 214
|
||
212 01CAH 13 ER21 . . . . . . . BYTE ARRAY(13) DATA 214
|
||
213 01D7H 23 ER22 . . . . . . . BYTE ARRAY(23) DATA 214
|
||
28 00D1H 1 ERETRY . . . . . . BYTE 239 300 302 969 1213 1215 1228
|
||
22 ERR. . . . . . . . LITERALLY 1097
|
||
214 0000H 46 ERRMSG . . . . . . WORD ARRAY(23) DATA 259 272
|
||
256 05B8H 26 ERROR. . . . . . . PROCEDURE STACK=0020H 306 311 500 609 774 776 1071 1090
|
||
1278 1284 1289 1300
|
||
237 0569H 79 ERRORCLEANUP . . . PROCEDURE STACK=001AH 258 268
|
||
256 0004H 1 ERRTYPE. . . . . . BYTE PARAMETER AUTOMATIC 257 259
|
||
226 029EH 1 EX00 . . . . . . . BYTE ARRAY(1) DATA 236
|
||
227 029FH 15 EX01 . . . . . . . BYTE ARRAY(15) DATA 236
|
||
228 02AEH 9 EX02 . . . . . . . BYTE ARRAY(9) DATA 236
|
||
229 02B7H 9 EX03 . . . . . . . BYTE ARRAY(9) DATA 236
|
||
230 02C0H 20 EX04 . . . . . . . BYTE ARRAY(20) DATA 236
|
||
231 02D4H 18 EX05 . . . . . . . BYTE ARRAY(18) DATA 236
|
||
232 02E6H 17 EX07 . . . . . . . BYTE ARRAY(17) DATA 236
|
||
233 02F7H 15 EX08 . . . . . . . BYTE ARRAY(15) DATA 236
|
||
234 0306H 15 EX10 . . . . . . . BYTE ARRAY(15) DATA 236
|
||
28 00CFH 1 EXTEN. . . . . . . BYTE 36 86 267 337 340 344 360 463
|
||
236 0042H 22 EXTMSG . . . . . . WORD ARRAY(11) DATA 282
|
||
26 00B6H 1 EXTSAVE. . . . . . BYTE 456 464
|
||
16 0000H 1 F. . . . . . . . . BYTE PARAMETER 17
|
||
13 0000H 1 F. . . . . . . . . BYTE PARAMETER 14
|
||
10 0000H 1 F. . . . . . . . . BYTE PARAMETER 11
|
||
28 00C9H 1 F1 . . . . . . . . BYTE 363 815
|
||
28 00CAH 1 F2 . . . . . . . . BYTE 364 816
|
||
28 00CBH 1 F3 . . . . . . . . BYTE 365 817
|
||
28 00CCH 1 F4 . . . . . . . . BYTE 366 818
|
||
24 FALSE. . . . . . . LITERALLY 244 315 319 323 474 582 628 664 730 750 874
|
||
891 892 893 894 899 903 1002 1014 1049 1213 1224 1225 1226 1227
|
||
1228 1281 1302
|
||
862 FAST . . . . . . . LITERALLY 863
|
||
27 00B8H 1 FASTCOPY . . . . . BYTE 391 401 438 450 462 469 890 899 903 910
|
||
109 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 110 111
|
||
105 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 106 107
|
||
100 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 101 102 103
|
||
93 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 94 95
|
||
89 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 90 91
|
||
74 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(FCBS)
|
||
3 0000H 33 FCB. . . . . . . . BYTE ARRAY(33) EXTERNAL(2) 974 975 984 1261
|
||
264 0000H 33 FCB. . . . . . . . BYTE BASED(FILEADR) ARRAY(33) 287 290
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 39
|
||
|
||
|
||
167 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 168 169
|
||
79 0000H 36 FCB. . . . . . . . BYTE BASED(FCBA) ARRAY(36) 82
|
||
115 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(FCBS) 117 119
|
||
124 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 125 126 127
|
||
26 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(ODEST) 332 790 808 809 813 815 816
|
||
817 818 819 820 821 822 947 990 991 994 996 1022 1265 1274
|
||
26 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(DEST) 26 331 347 813
|
||
163 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 164 165
|
||
158 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 159 160
|
||
153 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 154 155
|
||
1040 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(FCBS) 1052 1109 1130 1149 1190
|
||
26 0000H 36 FCB. . . . . . . . BYTE ARRAY(36) MEMBER(SOURCE) 26 314 316 318 320 322 353
|
||
357 363 364 365 366 367 368 370 371 372 456 464 465 827
|
||
828 959 962 963 991 995 1022 1261 1265 1274
|
||
132 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 133 134
|
||
1039 001CH 2 FCBA . . . . . . . WORD PARAMETER 1040 1052 1091 1097 1107 1108 1109 1110 1130 1138
|
||
1149 1153 1183 1189 1190
|
||
77 0004H 2 FCBA . . . . . . . WORD PARAMETER AUTOMATIC 78 79 80 81 82 84
|
||
72 0004H 2 FCBA . . . . . . . WORD PARAMETER AUTOMATIC 73 74 75
|
||
113 0004H 2 FCBA . . . . . . . WORD PARAMETER AUTOMATIC 114 115 116 117 119 120 122
|
||
74 0000H 44 FCBS . . . . . . . STRUCTURE BASED(FCBA) 75
|
||
1040 0000H 47 FCBS . . . . . . . STRUCTURE BASED(FCBA) 1052 1091 1097 1107 1108 1109 1110 1130
|
||
1138 1149 1153 1183 1189 1190
|
||
115 0000H 44 FCBS . . . . . . . STRUCTURE BASED(FCBA) 116 117 119 120
|
||
26 0021H 1 FEEDBASE . . . . . BYTE 676 677 686
|
||
26 0022H 1 FEEDLEN. . . . . . BYTE 673 675 688 1114
|
||
22 FEXT . . . . . . . LITERALLY 292 331 949
|
||
22 FEXTL. . . . . . . LITERALLY 331
|
||
22 FF . . . . . . . . LITERALLY 563 568 577 585
|
||
22 FILE . . . . . . . LITERALLY 1189 1254 1258 1269 1273 1280 1299 1301
|
||
263 0004H 2 FILEADR. . . . . . WORD PARAMETER AUTOMATIC 264 285 287 290
|
||
1056 1937H 25 FILLQ. . . . . . . PROCEDURE STACK=0008H 1122 1175
|
||
436 0A5CH 273 FILLSOURCE . . . . PROCEDURE STACK=0028H 621 912
|
||
26 00B3H 3 FILSIZE. . . . . . BYTE ARRAY(3) 314 316 318 320 322 370
|
||
27 00C8H 1 FLEN . . . . . . . BYTE 1052 1059 1099 1100 1101 1103 1117 1119 1128 1142 1167 1169
|
||
1172 1178 1181 1183 1184
|
||
176 0526H 15 FLUSHBUF . . . . . PROCEDURE STACK=0008H 414
|
||
22 FNSIZE . . . . . . LITERALLY 289 946 1101 1172 1175
|
||
24 FOREVER. . . . . . LITERALLY 672 732 869 971 1116 1220
|
||
305 070AH 11 FORMERR. . . . . . PROCEDURE STACK=0024H 1023 1037 1250 1255
|
||
31 015DH 1 FORMF. . . . . . . BYTE AT 561
|
||
22 FRSIZE . . . . . . LITERALLY 26 74 79 115 330 1040 1100 1103 1261 1265 1274
|
||
22 FSIZE. . . . . . . LITERALLY 264
|
||
263 0006H 1 FUNCNO . . . . . . BYTE PARAMETER AUTOMATIC 264 269 272 273
|
||
129 044AH 15 GETDISK. . . . . . PROCEDURE BYTE STACK=0008H 1211
|
||
652 0E95H 160 GETSOURCE. . . . . PROCEDURE BYTE STACK=0032H 706 721 731 741 743 746 753
|
||
768
|
||
603 0DA7H 238 GETSOURCEC . . . . PROCEDURE BYTE STACK=002EH 680
|
||
31 015EH 1 GETU . . . . . . . BYTE AT
|
||
136 046DH 15 GETUSER. . . . . . PROCEDURE BYTE STACK=0008H 1210
|
||
1025 1665H 37 GNC. . . . . . . . PROCEDURE BYTE STACK=0008H 1031 1065 1070 1077 1079 1081 1083
|
||
1095 1124 1154 1171 1180
|
||
712 0185H 1 H. . . . . . . . . BYTE 714 715 716 718 721 731 733 734 740 741 743 745
|
||
746 752 753 758 768
|
||
712 0186H 1 HBUF . . . . . . . BYTE 745 757 764
|
||
711 0FA5H 241 HEXRECORD. . . . . PROCEDURE STACK=0060H 928
|
||
31 015FH 1 HEXT . . . . . . . BYTE AT 927
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 40
|
||
|
||
|
||
HIGH . . . . . . . BUILTIN 36
|
||
1064 0192H 1 I. . . . . . . . . BYTE 1067 1086 1087
|
||
1043 0191H 1 I. . . . . . . . . BYTE 1045 1046
|
||
1041 018FH 1 I. . . . . . . . . BYTE 1111 1112
|
||
944 018DH 1 I. . . . . . . . . BYTE 946 947 949
|
||
847 018BH 1 I. . . . . . . . . BYTE 851 852 854
|
||
560 0180H 1 I. . . . . . . . . BYTE 570 572 573 574
|
||
512 017EH 1 I. . . . . . . . . BYTE 518 519 520 522 523 524
|
||
351 017AH 1 I. . . . . . . . . BYTE
|
||
264 0177H 1 I. . . . . . . . . BYTE 289 290 292
|
||
1145 0194H 1 I. . . . . . . . . BYTE 1148 1149 1151
|
||
861 018CH 1 I. . . . . . . . . BYTE 895 896 898 900
|
||
31 0160H 1 IGNOR. . . . . . . BYTE AT 751 927
|
||
8 0000H INPD . . . . . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H 632
|
||
22 INPT . . . . . . . LITERALLY
|
||
27 00C2H 1 INSPARC. . . . . . BYTE 383 467 894 923
|
||
1145 034CH 34 IO . . . . . . . . BYTE ARRAY(34) DATA 1149
|
||
1064 0193H 1 J. . . . . . . . . BYTE 1076 1081 1082 1084 1086 1089 1091
|
||
1145 0195H 1 J. . . . . . . . . BYTE 1146 1149 1159
|
||
376 017CH 1 J. . . . . . . . . BYTE 422 423 424 425
|
||
351 017BH 1 J. . . . . . . . . BYTE
|
||
1145 0196H 1 K. . . . . . . . . BYTE 1147 1153
|
||
1041 0190H 1 K. . . . . . . . . BYTE 1083 1084
|
||
31 0162H 1 KILDS. . . . . . . BYTE AT 985 998 1015
|
||
22 LA . . . . . . . . LITERALLY 1044 1249
|
||
LAST . . . . . . . BUILTIN 1045
|
||
30 0157H 1 LASTUSER . . . . . BYTE 141 142 1210
|
||
22 LB . . . . . . . . LITERALLY 1044 1135 1154 1163 1186
|
||
712 0014H 2 LDA. . . . . . . . WORD 760
|
||
1056 0004H 1 LEN. . . . . . . . BYTE PARAMETER AUTOMATIC 1057 1059
|
||
24 LF . . . . . . . . LITERALLY 50 588 638 669
|
||
26 0020H 1 LINENO . . . . . . BYTE 574 576 586 1232
|
||
22 LIT. . . . . . . . LITERALLY 22 23 24 25 224 235 862
|
||
LOW. . . . . . . . BUILTIN 35 404 434 453 779 1199
|
||
31 0163H 1 LOWER. . . . . . . BYTE AT 648
|
||
22 LPP. . . . . . . . LITERALLY 573
|
||
22 LSTT . . . . . . . LITERALLY 1282
|
||
597 0D8DH 26 LTRAN. . . . . . . PROCEDURE BYTE STACK=0004H 649
|
||
1145 M. . . . . . . . . LITERALLY 1147
|
||
27 00BEH 1 MADE . . . . . . . BYTE 246 348 377 1014 1225
|
||
113 03FFH 49 MAKE . . . . . . . PROCEDURE STACK=0010H 342
|
||
654 0F35H 66 MATCH. . . . . . . PROCEDURE BYTE STACK=0004H 684 694
|
||
26 0023H 1 MATCHLEN . . . . . BYTE 656 662 663 688 689 1114
|
||
3 0000H 2 MAXB . . . . . . . WORD EXTERNAL(1) 836 839
|
||
29 00D3H 1 MAXLEN . . . . . . BYTE AT 62 63
|
||
25 MAXMBUF. . . . . . LITERALLY 393 401 440 450
|
||
25 MAXMCNT. . . . . . LITERALLY 394 441
|
||
313 073CH 56 MAXSIZE. . . . . . PROCEDURE BYTE STACK=0002H 467 870
|
||
0000H MEMORY . . . . . . BYTE ARRAY(0) 26 835 836 839 840
|
||
265 0315H 17 MESSAGEINDEXTBL. . BYTE ARRAY(17) DATA 272
|
||
10 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(6) STACK=0000H 39 46 54 63 70 84
|
||
142 169 174 177 495 498 499 508 1204
|
||
13 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H 42 130 137 165 180
|
||
309 310 629
|
||
16 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(8) STACK=0000H 66 81 91 95 98
|
||
103 107 111 122 127 134 155 160
|
||
182 0544H 37 MOVE . . . . . . . PROCEDURE STACK=0008H 330 331 370 434 813 962 990 991
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 41
|
||
|
||
|
||
1197 1261 1265 1274
|
||
26 00B7H 1 MSECCNT. . . . . . BYTE 173 174 1212
|
||
27 00C4H 1 MULTCOM. . . . . . BYTE 1198 1205 1218 1233 1315
|
||
941 1471H 330 MULTCOPY . . . . . PROCEDURE STACK=0068H 1217 1262
|
||
171 050AH 28 MULTSECT . . . . . PROCEDURE STACK=000AH 238 385 394 398 404 416 441 445
|
||
453 867
|
||
376 0012H 2 N. . . . . . . . . WORD 379 400 401 403 418
|
||
182 0004H 1 N. . . . . . . . . BYTE PARAMETER AUTOMATIC 183 185
|
||
942 001AH 2 NCOPIED. . . . . . WORD 970 983 1000 1013
|
||
942 0018H 2 NDCNT. . . . . . . WORD 976 977 978 989
|
||
26 000EH 2 NDEST. . . . . . . WORD 379 434 502 504 505 619 779 841 916 920 922 934
|
||
1223
|
||
27 00C1H 1 NENDCMD. . . . . . BYTE 917 932 1231 1285 1290 1311
|
||
542 0C98H 90 NEWLINE. . . . . . PROCEDURE STACK=0046H 581
|
||
942 0016H 2 NEXTDIR. . . . . . WORD 970 977 989
|
||
609 0DBCH NOTSOURCE. . . . . LABEL 607 608 610 631
|
||
26 0008H 2 NSBUF. . . . . . . WORD 448 449 450 452 455 463 477 480 615 619 708 843
|
||
848 850 854 916 920 922 934 1223
|
||
22 NSIZE. . . . . . . LITERALLY 26 74 115 330 1040 1100 1119 1122 1169 1181 1274
|
||
26 000CH 2 NSOURCE. . . . . . WORD 373 448 612 616 623 624 708
|
||
22 NULT . . . . . . . LITERALLY 1303
|
||
31 0165H 1 NUMB . . . . . . . BYTE AT 545 552 580 1293
|
||
235 NUMMSGS. . . . . . LITERALLY 236 279
|
||
224 NUMSPMSGS. . . . . LITERALLY 225 273
|
||
31 0166H 1 OBJ. . . . . . . . BYTE AT 636 707 848
|
||
28 00D0H 1 ODCNT. . . . . . . BYTE 334 335 788
|
||
26 0084H 47 ODEST. . . . . . . STRUCTURE 148 330 332 333 336 338 496 790 808 809 810
|
||
811 813 815 816 817 818 819 820 821 822 823 947 990 991
|
||
994 996 1022 1245 1247 1252 1258 1265 1269 1274 1277 1280 1282 1291
|
||
543 017FH 1 ONE. . . . . . . . BYTE 544 546
|
||
77 0344H 62 OPEN . . . . . . . PROCEDURE STACK=0016H 333 354
|
||
27 00BFH 1 OPENED . . . . . . BYTE 240 244 356 474 1226
|
||
863 0326H 26 OPTYPE . . . . . . BYTE ARRAY(26) DATA 898 900
|
||
5 0000H OUTD . . . . . . . PROCEDURE EXTERNAL(4) STACK=0000H 497
|
||
22 OUTT . . . . . . . LITERALLY
|
||
31 0167H 1 PAGCNT . . . . . . BYTE AT 570 1296 1297
|
||
1 0000H PIPMOD . . . . . . PROCEDURE STACK=0000H
|
||
19 0000H 648 PLM. . . . . . . . PROCEDURE PUBLIC STACK=006CH
|
||
56 02F0H 16 PRINT. . . . . . . PROCEDURE STACK=0014H 254 795 800 1001 1201
|
||
531 0C55H 40 PRINT1 . . . . . . PROCEDURE STACK=003CH 539 540
|
||
44 02BAH 21 PRINTCHAR. . . . . PROCEDURE STACK=000AH 49 50 275 281 287 288 293 294
|
||
950 951 1235
|
||
537 0C7DH 27 PRINTDIG . . . . . PROCEDURE STACK=0042H 549 550 551
|
||
52 02E0H 16 PRINTX . . . . . . PROCEDURE STACK=000AH 59 259 272 276 282 284 1007 1207
|
||
943 15BBH 60 PRNAME . . . . . . PROCEDURE STACK=0012H 1004
|
||
22 PRNT . . . . . . . LITERALLY 1282 1291
|
||
1051 1912H 37 PUTCHAR. . . . . . PROCEDURE STACK=0002H 1060 1105 1123 1176
|
||
483 0B6DH 143 PUTDCHAR . . . . . PROCEDURE STACK=0030H 514 516 525
|
||
559 0CF2H 129 PUTDEST. . . . . . PROCEDURE STACK=004CH 721 740 756 757 758 780 930 1305
|
||
1308
|
||
511 0BFCH 89 PUTDESTC . . . . . PROCEDURE STACK=0036H 534 535 554 555 557 577 587
|
||
27 00C5H 1 PUTNUM . . . . . . BYTE 566 582 589 1229
|
||
1040 002CH 1 PWMODE . . . . . . BYTE MEMBER(FCBS) 1108
|
||
26 002CH 1 PWMODE . . . . . . BYTE MEMBER(ODEST)
|
||
26 002CH 1 PWMODE . . . . . . BYTE MEMBER(DEST)
|
||
26 002CH 1 PWMODE . . . . . . BYTE MEMBER(SOURCE)
|
||
74 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(FCBS) 75
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 42
|
||
|
||
|
||
1040 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(FCBS) 1107 1183
|
||
26 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(ODEST)
|
||
26 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(DEST)
|
||
26 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(SOURCE)
|
||
115 0024H 8 PWNAM. . . . . . . BYTE ARRAY(8) MEMBER(FCBS) 116 120
|
||
26 0024H 1 QUITLEN. . . . . . BYTE 666 668 697 1114
|
||
31 0168H 1 QUITS. . . . . . . BYTE AT 692 694 696 775
|
||
22 RB . . . . . . . . LITERALLY 1044 1066
|
||
727 10ECH 23 RDADDR . . . . . . PROCEDURE WORD STACK=005CH 760
|
||
41 02ABH 15 RDCHAR . . . . . . PROCEDURE BYTE STACK=0008H 796 1008
|
||
61 0300H 20 RDCOM. . . . . . . PROCEDURE STACK=0008H 1236
|
||
724 10D2H 26 RDCS . . . . . . . PROCEDURE BYTE STACK=0056H 728 761 764 766
|
||
705 0F77H 46 RDEOF. . . . . . . PROCEDURE BYTE STACK=0036H 929
|
||
720 10C0H 18 RDHEX. . . . . . . PROCEDURE BYTE STACK=0050H 725
|
||
153 04BCH 23 RDRANDOM . . . . . PROCEDURE BYTE STACK=000AH 419 870
|
||
124 0430H 26 RENAME . . . . . . PROCEDURE STACK=0016H 814
|
||
2 0000H RESET. . . . . . . LABEL EXTERNAL(0) 261 303
|
||
33 0288H 21 RETCODES . . . . . PROCEDURE STACK=0004H 81 91 95 98 103 107 111 122
|
||
127 134 155 160
|
||
163 04EAH 16 RETFSIZE . . . . . PROCEDURE BYTE STACK=000AH 369
|
||
4 001EH 1 RETRY. . . . . . . BYTE INITIAL 253 1195
|
||
712 0187H 1 RL . . . . . . . . BYTE 744 747 748 759 762 763
|
||
28 00CDH 1 RO . . . . . . . . BYTE 367 820
|
||
ROL. . . . . . . . BUILTIN 82 357 790 963 996
|
||
31 0169H 1 RSYS . . . . . . . BYTE AT 357 996
|
||
712 0189H 1 RT . . . . . . . . BYTE 761
|
||
182 0008H 2 S. . . . . . . . . WORD PARAMETER AUTOMATIC 183 184 186 187
|
||
26 0006H 2 SBASE. . . . . . . WORD 26 455 477 623 835 840 852
|
||
26 0000H 2 SBLEN. . . . . . . WORD 449 450 452 612 836 839
|
||
26 0000H 1024 SBUFF. . . . . . . BYTE BASED(SBASE) ARRAY(1024) 455 477 623 852
|
||
1039 16ABH 569 SCAN . . . . . . . PROCEDURE STACK=0028H 1245 1251 1312
|
||
1063 1950H 240 SCANPAR. . . . . . PROCEDURE STACK=0024H 1136 1155 1164 1187
|
||
264 0178H 1 SDCNT. . . . . . . BYTE 266 269 273 276 299
|
||
93 0396H 20 SEARCH . . . . . . PROCEDURE STACK=000AH 960 975
|
||
97 03AAH 19 SEARCHN. . . . . . PROCEDURE STACK=0008H 965 979
|
||
23 SEARFCB. . . . . . LITERALLY 975 984 1261
|
||
144 0498H 12 SETCUSER . . . . . PROCEDURE STACK=000EH 1242
|
||
68 0323H 16 SETDMA . . . . . . PROCEDURE STACK=000AH 75 120 386 406 417 455 868 973
|
||
147 04A4H 12 SETDUSER . . . . . PROCEDURE STACK=000EH 248 329 382 784
|
||
132 0459H 20 SETIND . . . . . . PROCEDURE STACK=000AH 810 823 829
|
||
72 0333H 17 SETPW. . . . . . . PROCEDURE STACK=0010H 80 102 126
|
||
167 04FAH 16 SETRANDOM. . . . . PROCEDURE STACK=000AH 390 433 466 866
|
||
150 04B0H 12 SETSUSER . . . . . PROCEDURE STACK=000EH 242 352 447 826 865 958 972
|
||
328 0774H 160 SETUPDEST. . . . . PROCEDURE STACK=0026H 378
|
||
846 12B4H 70 SETUPEOB . . . . . PROCEDURE STACK=0002H 915
|
||
350 0814H 176 SETUPSOURCE. . . . PROCEDURE STACK=0026H 909
|
||
139 047CH 28 SETUSER. . . . . . PROCEDURE STACK=000AH 145 148 151
|
||
264 0179H 1 SEXTEN . . . . . . BYTE 267 270 271 277 279 282 301
|
||
27 00BDH 1 SFILE. . . . . . . BYTE 890 902 908 1230 1286 1302 1304
|
||
SHL. . . . . . . . BUILTIN 463 725 728 744 962 990
|
||
SHR. . . . . . . . BUILTIN 404 453 539 839
|
||
860 12FAH 248 SIMPLECOPY . . . . PROCEDURE STACK=0064H 1016 1266 1275 1309
|
||
832 125DH 87 SIZEMEMORY . . . . PROCEDURE STACK=002EH 907
|
||
26 0026H 47 SOURCE . . . . . . STRUCTURE 26 151 243 314 316 318 320 322 353 354 357
|
||
361 362 363 364 365 366 367 368 369 370 371 372 456 457
|
||
461 464 465 466 470 473 606 717 738 767 827 828 829 866
|
||
870 887 959 960 962 963 991 995 1022 1251 1254 1261 1265 1269
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 43
|
||
|
||
|
||
1273 1274 1299 1301 1303 1307 1312
|
||
26 0047H 2 SOURCER. . . . . . WORD AT 872 879 884
|
||
26 0049H 1 SOURCER2 . . . . . BYTE AT 873 880 885
|
||
27 00C3H 1 SPARFIL. . . . . . BYTE 383 893
|
||
225 002EH 20 SPECIALMSG . . . . WORD ARRAY(10) DATA 276
|
||
22 SPECL. . . . . . . LITERALLY
|
||
215 01EEH 19 SPER00 . . . . . . BYTE ARRAY(19) DATA 225
|
||
216 0201H 14 SPER01 . . . . . . BYTE ARRAY(14) DATA 225
|
||
217 020FH 27 SPER02 . . . . . . BYTE ARRAY(27) DATA 225
|
||
218 022AH 25 SPER03 . . . . . . BYTE ARRAY(25) DATA 225
|
||
219 0243H 27 SPER05 . . . . . . BYTE ARRAY(27) DATA 225
|
||
220 025EH 20 SPER06 . . . . . . BYTE ARRAY(20) DATA 225
|
||
221 0272H 14 SPER07 . . . . . . BYTE ARRAY(14) DATA 225
|
||
222 0280H 17 SPER08 . . . . . . BYTE ARRAY(17) DATA 225 236
|
||
223 0291H 13 SPER09 . . . . . . BYTE ARRAY(13) DATA 225 236
|
||
31 016AH 1 STARTS . . . . . . BYTE AT 682 684 686 687 773
|
||
28 00CEH 1 SYS. . . . . . . . BYTE 368 821
|
||
22 TAB. . . . . . . . LITERALLY 513 557
|
||
31 016BH 1 TABS . . . . . . . BYTE AT 515 519 520 522 1294 1295
|
||
26 0004H 2 TBLEN. . . . . . . WORD 850 852 854
|
||
376 0010H 2 TDEST. . . . . . . WORD 381 386 400 401 403 406 410 415 418 424 427 434
|
||
|
||
264 0176H 1 TEMP . . . . . . . BYTE 290 294
|
||
24 TRUE . . . . . . . LITERALLY 253 326 348 356 476 589 605 659 672 732 749
|
||
869 971 1047 1054 1116 1220 1229 1230 1231 1286
|
||
1040 002EH 1 TYPE . . . . . . . BYTE MEMBER(FCBS) 1097 1138 1153 1189
|
||
26 002EH 1 TYPE . . . . . . . BYTE MEMBER(ODEST) 496 1252 1258 1269 1277 1280 1282 1291
|
||
26 002EH 1 TYPE . . . . . . . BYTE MEMBER(DEST)
|
||
26 002EH 1 TYPE . . . . . . . BYTE MEMBER(SOURCE) 606 1254 1269 1273 1299 1301 1303 1307
|
||
31 016CH 1 UPPER. . . . . . . BYTE AT 646
|
||
1040 002DH 1 USER . . . . . . . BYTE MEMBER(FCBS) 1091 1110
|
||
26 002DH 1 USER . . . . . . . BYTE MEMBER(ODEST) 148 1022
|
||
26 002DH 1 USER . . . . . . . BYTE MEMBER(DEST)
|
||
26 002DH 1 USER . . . . . . . BYTE MEMBER(SOURCE) 151 1022
|
||
139 0004H 1 USER . . . . . . . BYTE PARAMETER AUTOMATIC 140 141 142
|
||
591 0D73H 26 UTRAN. . . . . . . PROCEDURE BYTE STACK=0004H 647 796 1008 1028
|
||
31 016DH 1 VERIF. . . . . . . BYTE AT 412
|
||
20 VERSION. . . . . . LITERALLY 1199
|
||
24 WHAT . . . . . . . LITERALLY 959 1053 1058
|
||
375 08C4H 408 WRITEDEST. . . . . PROCEDURE STACK=002AH 503 618 783 842 921
|
||
158 04D3H 23 WRITERANDOM. . . . PROCEDURE BYTE STACK=000AH 387
|
||
31 016EH 1 WRROF. . . . . . . BYTE AT 792
|
||
263 05D2H 312 XERROR . . . . . . PROCEDURE STACK=0022H 338 341 345 346 361 362 388 409
|
||
429 461 470 717 738 767 787 887 984 1247
|
||
31 0171H 1 ZEROP. . . . . . . BYTE AT 644
|
||
712 018AH 1 ZEROREC. . . . . . BYTE 730 736 749 750 751
|
||
32 0172H 1 ZEROSUP. . . . . . BYTE 533 545
|
||
|
||
|
||
|
||
MODULE INFORMATION:
|
||
|
||
CODE AREA SIZE = 1A40H 6720D
|
||
CONSTANT AREA SIZE = 0402H 1026D
|
||
VARIABLE AREA SIZE = 0197H 407D
|
||
MAXIMUM STACK SIZE = 006CH 108D
|
||
1964 LINES READ
|
||
PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM 2/9/83 PAGE 44
|
||
|
||
|
||
0 PROGRAM ERROR(S)
|
||
|
||
END OF PL/M-86 COMPILATION
|