Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,719 @@
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE DATE
OBJECT MODULE PLACED IN DATE.OBJ
COMPILER INVOKED BY: :F0: DATE.PLM XREF OPTIMIZE(3) DEBUG
$compact
$title ('DATE: Time and Date utility')
1 DATE:
do;
$include(:f1:copyrt.lit)
=
= /*
= Copyright (C) 1983
= Digital Research
= P.O. Box 579
= Pacific Grove, CA 93950
= */
=
/* Revised:
23 Jun 82 by Bill Fitler (CCP/M-86)
*/
$include(:f1:vaxcmd.lit)
=
= /**** VAX commands for generation - read the name of this program
= for PROGNAME below.
=
= $ util := PROGNAME
= $ ccpmsetup ! set up environment
= $ assign 'f$directory()' f1: ! use local dir for temp files
= $ plm86 'util'.plm xref 'p1' optimize(3) debug
= $ link86 f2:scd.obj, 'util'.obj to 'util'.lnk
= $ loc86 'util'.lnk od(sm(code,dats,data,stack,const)) -
= ad(sm(code(0),dats(10000h))) ss(stack(+32)) to 'util'.
= $ h86 'util'
=
= ***** Then, on a micro:
= A>vax progname.h86 $fans
= A>gencmd progname data[b1000]
=
= ***** Notes: Stack is increased for interrupts. Const(ants) are last
= to force hex generation.
= ****/
$include(:f1:vermpm.lit)
=
= /* This utility requires MP/M or Concurrent function calls */
=
= /****** commented out for CCP/M-86 :
= declare Ver$OS literally '11h',
= Ver$Needs$OS literally '''Requires MP/M-86''';
= ******/
=
2 1 = declare Ver$OS literally '14h',
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 2
= Ver$Needs$OS literally '''Requires Concurrent CP/M-86''';
=
=
3 1 = declare Ver$Mask literally '0fdh'; /* mask out Is_network bit */
=
4 1 = declare Ver$BDOS literally '30h'; /* minimal BDOS version rqd */
=
5 1 declare dcl literally 'declare';
6 1 dcl lit literally 'literally';
7 1 dcl forever lit 'while 1';
8 1 mon1:
procedure (func,info) external;
9 2 declare func byte;
10 2 declare info address;
11 2 end mon1;
12 1 mon2:
procedure (func,info) byte external;
13 2 declare func byte;
14 2 declare info address;
15 2 end mon2;
16 1 mon3:
procedure (func,info) address external;
17 2 declare func byte;
18 2 declare info address;
19 2 end mon3;
20 1 mon4:
procedure (func,info) pointer external;
21 2 declare func byte;
22 2 declare info address;
23 2 end mon4;
24 1 declare fcb (1) byte external;
25 1 declare fcb16 (1) byte external;
26 1 declare buff (1) byte external;
27 1 read$console:
procedure byte;
28 2 return mon2 (1,0);
29 2 end read$console;
30 1 write$console:
procedure (char);
31 2 declare char byte;
32 2 call mon1 (2,char);
33 2 end write$console;
34 1 print$buffer:
procedure (buffer$address);
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 3
35 2 declare buffer$address address;
36 2 call mon1 (9,buffer$address);
37 2 end print$buffer;
38 1 check$console$status:
procedure byte;
39 2 return mon2 (11,0);
40 2 end check$console$status;
41 1 version:
procedure address;
42 2 return mon3(12,0);
43 2 end version;
44 1 terminate:
procedure;
45 2 call mon1 (0,0);
46 2 end terminate;
47 1 get$sysdat:
procedure pointer;
48 2 return (mon4(154,0));
49 2 end get$sysdat;
50 1 crlf:
procedure;
51 2 call write$console (0dh);
52 2 call write$console (0ah);
53 2 end crlf;
54 1 error:
procedure;
55 2 call print$buffer (.(
'Illegal time/date specification.','$'));
56 2 call terminate;
57 2 end;
/*****************************************************
Time & Date ASCII Conversion Code
*****************************************************/
58 1 declare tod$adr address;
59 1 declare tod based tod$adr structure (
opcode byte,
date address,
hrs byte,
min byte,
sec byte,
ASCII (21) byte );
60 1 declare string$adr address;
61 1 declare string based string$adr (1) byte;
62 1 declare index byte;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 4
63 1 emitchar: procedure(c);
64 2 declare c byte;
65 2 string(index := index + 1) = c;
66 2 end emitchar;
67 1 emitn: procedure(a);
68 2 declare a address;
69 2 declare c based a byte;
70 2 do while c <> '$';
71 3 string(index := index + 1) = c;
72 3 a = a + 1;
73 3 end;
74 2 end emitn;
75 1 emit$bcd: procedure(b);
76 2 declare b byte;
77 2 call emitchar('0'+b);
78 2 end emit$bcd;
79 1 emit$bcd$pair: procedure(b);
80 2 declare b byte;
81 2 call emit$bcd(shr(b,4));
82 2 call emit$bcd(b and 0fh);
83 2 end emit$bcd$pair;
84 1 emit$colon: procedure(b);
85 2 declare b byte;
86 2 call emit$bcd$pair(b);
87 2 call emitchar(':');
88 2 end emit$colon;
89 1 emit$bin$pair: procedure(b);
90 2 declare b byte;
91 2 call emit$bcd(b/10);
92 2 call emit$bcd(b mod 10);
93 2 end emit$bin$pair;
94 1 emit$slant: procedure(b);
95 2 declare b byte;
96 2 call emit$bin$pair(b);
97 2 call emitchar('/');
98 2 end emit$slant;
99 1 declare chr byte;
100 1 gnc: procedure;
/* get next command byte */
101 2 if chr = 0 then return;
103 2 if index = 20 then
104 2 do;
105 3 chr = 0;
106 3 return;
107 3 end;
108 2 chr = string(index := index + 1);
109 2 end gnc;
110 1 deblank: procedure;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 5
111 2 do while chr = ' ';
112 3 call gnc;
113 3 end;
114 2 end deblank;
115 1 numeric: procedure byte;
/* test for numeric */
116 2 return (chr - '0') < 10;
117 2 end numeric;
118 1 scan$numeric: procedure(lb,ub) byte;
119 2 declare (lb,ub) byte;
120 2 declare b byte;
121 2 b = 0;
122 2 call deblank;
123 2 if not numeric then call error;
125 2 do while numeric;
126 3 if (b and 1110$0000b) <> 0 then call error;
128 3 b = shl(b,3) + shl(b,1); /* b = b * 10 */
129 3 if carry then call error;
131 3 b = b + (chr - '0');
132 3 if carry then call error;
134 3 call gnc;
135 3 end;
136 2 if (b < lb) or (b > ub) then call error;
138 2 return b;
139 2 end scan$numeric;
140 1 scan$delimiter: procedure(d,lb,ub) byte;
141 2 declare (d,lb,ub) byte;
142 2 call deblank;
143 2 if chr <> d then call error;
145 2 call gnc;
146 2 return scan$numeric(lb,ub);
147 2 end scan$delimiter;
148 1 declare
base$year lit '78', /* base year for computations */
base$day lit '0', /* starting day for base$year 0..6 */
month$size (*) byte data
/* jan feb mar apr may jun jul aug sep oct nov dec */
( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
month$days (*) word data
/* jan feb mar apr may jun jul aug sep oct nov dec */
( 000,031,059,090,120,151,181,212,243,273,304,334);
149 1 leap$days: procedure(y,m) byte;
150 2 declare (y,m) byte;
/* compute days accumulated by leap years */
151 2 declare yp byte;
152 2 yp = shr(y,2); /* yp = y/4 */
153 2 if (y and 11b) = 0 and month$days(m) < 59 then
/* y not 00, y mod 4 = 0, before march, so not leap yr */
154 2 return yp - 1;
/* otherwise, yp is the number of accumulated leap days */
155 2 return yp;
156 2 end leap$days;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 6
157 1 declare word$value word;
158 1 get$next$digit: procedure byte;
/* get next lsd from word$value */
159 2 declare lsd byte;
160 2 lsd = word$value mod 10;
161 2 word$value = word$value / 10;
162 2 return lsd;
163 2 end get$next$digit;
164 1 bcd:
procedure (val) byte;
165 2 declare val byte;
166 2 return shl((val/10),4) + val mod 10;
167 2 end bcd;
168 1 declare (month, day, year, hrs, min, sec) byte;
169 1 set$date$time: procedure;
170 2 declare
(i, leap$flag) byte; /* temporaries */
171 2 month = scan$numeric(1,12) - 1;
/* may be feb 29 */
172 2 if (leap$flag := month = 1) then i = 29;
174 2 else i = month$size(month);
175 2 day = scan$delimiter('/',1,i);
176 2 year = scan$delimiter('/',base$year,99);
/* ensure that feb 29 is in a leap year */
177 2 if leap$flag and day = 29 and (year and 11b) <> 0 then
178 2 /* feb 29 of non-leap year */ call error;
/* compute total days */
179 2 tod.date = month$days(month)
+ 365 * (year - base$year)
+ day
- leap$days(base$year,0)
+ leap$days(year,month);
180 2 tod.hrs = bcd (scan$numeric(0,23));
181 2 tod.min = bcd (scan$delimiter(':',0,59));
182 2 if tod.opcode = 2 then
/* date, hours and minutes only */
183 2 do;
184 3 if chr = ':'
then i = scan$delimiter (':',0,59);
186 3 tod.sec = 0;
187 3 end;
/* include seconds */
188 2 else tod.sec = bcd (scan$delimiter(':',0,59));
189 2 end set$date$time;
190 1 bcd$pair: procedure(a,b) byte;
191 2 declare (a,b) byte;
192 2 return shl(a,4) or b;
193 2 end bcd$pair;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 7
194 1 compute$year: procedure;
/* compute year from number of days in word$value */
195 2 declare year$length word;
196 2 year = base$year;
197 2 do forever;
198 3 year$length = 365;
199 3 if (year and 11b) = 0 then /* leap year */
200 3 year$length = 366;
201 3 if word$value <= year$length then
202 3 return;
203 3 word$value = word$value - year$length;
204 3 year = year + 1;
205 3 end;
206 2 end compute$year;
207 1 declare
week$day byte, /* day of week 0 ... 6 */
day$list (*) byte data
('Sun$Mon$Tue$Wed$Thu$Fri$Sat$'),
leap$bias byte; /* bias for feb 29 */
208 1 compute$month: procedure;
209 2 month = 12;
210 2 do while month > 0;
211 3 if (month := month - 1) < 2 then /* jan or feb */
212 3 leapbias = 0;
213 3 if month$days(month) + leap$bias < word$value then return;
215 3 end;
216 2 end compute$month;
217 1 declare
date$test byte, /* true if testing date */
test$value word; /* sequential date value under test */
218 1 get$date$time: procedure;
/* get date and time */
219 2 hrs = tod.hrs;
220 2 min = tod.min;
221 2 sec = tod.sec;
222 2 word$value = tod.date;
/* word$value contains total number of days */
223 2 week$day = (word$value + base$day - 1) mod 7;
224 2 call compute$year;
/* year has been set, word$value is remainder */
225 2 leap$bias = 0;
226 2 if (year and 11b) = 0 and word$value > 59 then
227 2 /* after feb 29 on leap year */ leap$bias = 1;
228 2 call compute$month;
229 2 day = word$value - (month$days(month) + leap$bias);
230 2 month = month + 1;
231 2 end get$date$time;
232 1 emit$date$time: procedure;
233 2 call emitn(.day$list(shl(week$day,2)));
234 2 call emitchar(' ');
235 2 call emit$slant(month);
236 2 call emit$slant(day);
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 8
237 2 call emit$bin$pair(year);
238 2 call emitchar(' ');
239 2 call emit$colon(hrs);
240 2 call emit$colon(min);
241 2 call emit$bcd$pair(sec);
242 2 end emit$date$time;
243 1 tod$ASCII:
procedure (parameter);
244 2 declare parameter address;
245 2 declare ret address;
246 2 ret = 0;
247 2 tod$adr = parameter;
248 2 string$adr = .tod.ASCII;
249 2 if tod.opcode = 0 then
250 2 do;
251 3 call get$date$time;
252 3 index = -1;
253 3 call emit$date$time;
254 3 end;
else
255 2 do;
256 3 if (tod.opcode = 1) or
(tod.opcode = 2) then
257 3 do;
258 4 chr = string(index:=0);
259 4 call set$date$time;
260 4 ret = .string(index);
261 4 end;
else
262 3 do;
263 4 call error;
264 4 end;
265 3 end;
266 2 end tod$ASCII;
/********************************************************
********************************************************/
267 1 declare tod$pointer pointer;
268 1 declare tod$ptr structure (
offset word,
segment word) at (@tod$pointer);
269 1 declare extrnl$tod based tod$pointer structure (
date address,
hrs byte, /* in system data area */
min byte,
sec byte );
270 1 declare lcltod structure ( /* local to this program */
opcode byte,
date address,
hrs byte,
min byte,
sec byte,
ASCII (21) byte );
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 9
271 1 declare i byte;
272 1 declare ret address;
273 1 display$tod:
procedure;
274 2 lcltod.opcode = 0; /* read tod */
275 2 call movb (@extrnl$tod.date,@lcltod.date,5);
276 2 call tod$ASCII (.lcltod);
277 2 call write$console (0dh);
278 2 do i = 0 to 20;
279 3 call write$console (lcltod.ASCII(i));
280 3 end;
281 2 end display$tod;
/*
Main Program
*/
282 1 declare tod$sd$offset lit '7eh'; /* offset of TOD structure in MP/M-86 */
283 1 declare vers address;
284 1 declare last$dseg$byte byte
initial (0);
285 1 plmstart:
procedure public;
286 2 vers = version;
287 2 if low (vers) < Ver$BDOS or (high(vers) and Ver$Mask) = 0 then
288 2 do;
289 3 call print$buffer(.(0dh,0ah,Ver$Needs$OS,'$'));
290 3 call mon1(0,0);
291 3 end;
292 2 tod$pointer = get$sysdat;
293 2 tod$ptr.offset = tod$sd$offset;
294 2 if (fcb(1) <> ' ') and (fcb(1) <> 'P') then
295 2 do;
296 3 call move (21,.buff(1),.lcltod.ASCII);
297 3 lcltod.opcode = 1;
298 3 call tod$ASCII (.lcltod);
299 3 call print$buffer (.(
'Strike key to set time','$'));
300 3 ret = read$console;
301 3 call movb (@lcltod.date,@extrnl$tod.date,5); /* use pl/m-86 move */
302 3 call crlf;
303 3 end;
304 2 do while fcb(1) = 'P';
305 3 call display$tod;
306 3 if check$console$status then
307 3 do;
308 4 ret = read$console;
309 4 fcb(1) = 0;
310 4 end;
311 3 end;
312 2 call display$tod;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 10
313 2 call terminate;
314 2 end plmstart;
315 1 end DATE;
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 11
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
190 0006H 1 A. . . . . . . . . BYTE PARAMETER AUTOMATIC 191 192
67 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 68 69 70 71 72
59 0006H 21 ASCII. . . . . . . BYTE ARRAY(21) MEMBER(TOD) 248
270 0006H 21 ASCII. . . . . . . BYTE ARRAY(21) MEMBER(LCLTOD) 279 296
75 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 76 77
190 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 191 192
94 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 95 96
120 0016H 1 B. . . . . . . . . BYTE 121 126 128 131 136 138
89 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 90 91 92
84 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 85 86
79 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 80 81 82
148 BASEDAY. . . . . . LITERALLY 223
148 BASEYEAR . . . . . LITERALLY 176 179 196
164 0282H 39 BCD. . . . . . . . PROCEDURE BYTE STACK=0006H 180 181 188
190 03CAH 17 BCDPAIR. . . . . . PROCEDURE BYTE STACK=0006H
26 0000H 1 BUFF . . . . . . . BYTE ARRAY(1) EXTERNAL(6) 296
34 0004H 2 BUFFERADDRESS. . . WORD PARAMETER AUTOMATIC 35 36
69 0000H 1 C. . . . . . . . . BYTE BASED(A) 70 71
63 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 64 65
CARRY. . . . . . . BUILTIN 129 132
30 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 31 32
38 0034H 15 CHECKCONSOLESTATUS PROCEDURE BYTE STACK=0008H 306
99 0015H 1 CHR. . . . . . . . BYTE 101 105 108 111 116 131 143 184 258
208 0410H 59 COMPUTEMONTH . . . PROCEDURE STACK=0002H 228
194 03DBH 53 COMPUTEYEAR. . . . PROCEDURE STACK=0002H 224
50 006FH 17 CRLF . . . . . . . PROCEDURE STACK=000EH 302
140 0008H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 141 143
270 0001H 2 DATE . . . . . . . WORD MEMBER(LCLTOD) 275 301
269 0000H 2 DATE . . . . . . . WORD MEMBER(EXTRNLTOD) 275 301
1 0002H DATE . . . . . . . PROCEDURE STACK=0000H
59 0001H 2 DATE . . . . . . . WORD MEMBER(TOD) 179 222
217 0023H 1 DATETEST . . . . . BYTE
168 001AH 1 DAY. . . . . . . . BYTE 175 177 179 229 236
207 0024H 28 DAYLIST. . . . . . BYTE ARRAY(28) DATA 233
5 DCL. . . . . . . . LITERALLY
110 017CH 17 DEBLANK. . . . . . PROCEDURE STACK=0006H 122 142
273 0567H 74 DISPLAYTOD . . . . PROCEDURE STACK=002EH 305 312
75 00D3H 16 EMITBCD. . . . . . PROCEDURE STACK=000AH 81 82 91 92
79 00E3H 27 EMITBCDPAIR. . . . PROCEDURE STACK=0010H 86 241
89 0111H 39 EMITBINPAIR. . . . PROCEDURE STACK=0010H 96 237
63 008FH 28 EMITCHAR . . . . . PROCEDURE STACK=0004H 77 87 97 234 238
84 00FEH 19 EMITCOLON. . . . . PROCEDURE STACK=0016H 239 240
232 04B5H 77 EMITDATETIME . . . PROCEDURE STACK=001AH 253
67 00ABH 40 EMITN. . . . . . . PROCEDURE STACK=0004H 233
94 0138H 19 EMITSLANT. . . . . PROCEDURE STACK=0016H 235 236
54 0080H 15 ERROR. . . . . . . PROCEDURE STACK=000EH 124 127 130 133 137 144 178 263
269 0000H 5 EXTRNLTOD. . . . . STRUCTURE BASED(TODPOINTER) 275 301
24 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(4) 294 304 309
25 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(5)
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 12
7 FOREVER. . . . . . LITERALLY 197
20 0000H 1 FUNC . . . . . . . BYTE PARAMETER 21
16 0000H 1 FUNC . . . . . . . BYTE PARAMETER 17
12 0000H 1 FUNC . . . . . . . BYTE PARAMETER 13
8 0000H 1 FUNC . . . . . . . BYTE PARAMETER 9
218 044BH 106 GETDATETIME. . . . PROCEDURE STACK=0006H 251
158 0262H 32 GETNEXTDIGIT . . . PROCEDURE BYTE STACK=0002H
47 0060H 15 GETSYSDAT. . . . . PROCEDURE POINTER STACK=0008H 292
100 014BH 49 GNC. . . . . . . . PROCEDURE STACK=0002H 112 134 145
HIGH . . . . . . . BUILTIN 287
270 0003H 1 HRS. . . . . . . . BYTE MEMBER(LCLTOD)
59 0003H 1 HRS. . . . . . . . BYTE MEMBER(TOD) 180 219
168 001CH 1 HRS. . . . . . . . BYTE 219 239
269 0002H 1 HRS. . . . . . . . BYTE MEMBER(EXTRNLTOD)
271 003FH 1 I. . . . . . . . . BYTE 278 279
170 001FH 1 I. . . . . . . . . BYTE 173 174 175 185
62 0014H 1 INDEX. . . . . . . BYTE 65 71 103 108 252 258 260
20 0000H 2 INFO . . . . . . . WORD PARAMETER 22
16 0000H 2 INFO . . . . . . . WORD PARAMETER 18
12 0000H 2 INFO . . . . . . . WORD PARAMETER 14
8 0000H 2 INFO . . . . . . . WORD PARAMETER 10
284 0040H 1 LASTDSEGBYTE . . . BYTE INITIAL
118 0006H 1 LB . . . . . . . . BYTE PARAMETER AUTOMATIC 119 136
140 0006H 1 LB . . . . . . . . BYTE PARAMETER AUTOMATIC 141 146
270 0024H 27 LCLTOD . . . . . . STRUCTURE 274 275 276 279 296 297 298 301
207 0022H 1 LEAPBIAS . . . . . BYTE 212 213 225 227 229
149 0236H 44 LEAPDAYS . . . . . PROCEDURE BYTE STACK=0006H 179
170 0020H 1 LEAPFLAG . . . . . BYTE 172 177
6 LIT. . . . . . . . LITERALLY 7 148 282
LOW. . . . . . . . BUILTIN 287
159 0018H 1 LSD. . . . . . . . BYTE 160 162
149 0004H 1 M. . . . . . . . . BYTE PARAMETER AUTOMATIC 150 153
269 0003H 1 MIN. . . . . . . . BYTE MEMBER(EXTRNLTOD)
59 0004H 1 MIN. . . . . . . . BYTE MEMBER(TOD) 181 220
270 0004H 1 MIN. . . . . . . . BYTE MEMBER(LCLTOD)
168 001DH 1 MIN. . . . . . . . BYTE 220 240
8 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 32 36 45 290
12 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 28 39
16 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(2) STACK=0000H 42
20 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(3) STACK=0000H 48
168 0019H 1 MONTH. . . . . . . BYTE 171 172 174 179 209 210 211 213 229 230 235
148 0000H 24 MONTHDAYS. . . . . WORD ARRAY(12) DATA 153 179 213 229
148 0018H 12 MONTHSIZE. . . . . BYTE ARRAY(12) DATA 174
MOVB . . . . . . . BUILTIN 275 301
MOVE . . . . . . . BUILTIN 296
115 018DH 17 NUMERIC. . . . . . PROCEDURE BYTE STACK=0002H 123 125
268 0000H 2 OFFSET . . . . . . WORD MEMBER(TODPTR) 293
59 0000H 1 OPCODE . . . . . . BYTE MEMBER(TOD) 182 249 256
270 0000H 1 OPCODE . . . . . . BYTE MEMBER(LCLTOD) 274 297
243 0004H 2 PARAMETER. . . . . WORD PARAMETER AUTOMATIC 244 247
285 05B1H 170 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0032H
34 0024H 16 PRINTBUFFER. . . . PROCEDURE STACK=000AH 55 289 299
27 0002H 15 READCONSOLE. . . . PROCEDURE BYTE STACK=0008H 300 308
272 0010H 2 RET. . . . . . . . WORD 300 308
245 000AH 2 RET. . . . . . . . WORD 246 260
140 0215H 33 SCANDELIMITER. . . PROCEDURE BYTE STACK=0020H 175 176 181 185 188
118 019EH 119 SCANNUMERIC. . . . PROCEDURE BYTE STACK=0016H 146 171 180
PL/M-86 COMPILER DATE: TIME AND DATE UTILITY PAGE 13
59 0005H 1 SEC. . . . . . . . BYTE MEMBER(TOD) 186 188 221
270 0005H 1 SEC. . . . . . . . BYTE MEMBER(LCLTOD)
269 0004H 1 SEC. . . . . . . . BYTE MEMBER(EXTRNLTOD)
168 001EH 1 SEC. . . . . . . . BYTE 221 241
268 0002H 2 SEGMENT. . . . . . WORD MEMBER(TODPTR)
169 02A9H 289 SETDATETIME. . . . PROCEDURE STACK=0024H 259
SHL. . . . . . . . BUILTIN 128 166 192 233
SHR. . . . . . . . BUILTIN 81 152
61 0000H 1 STRING . . . . . . BYTE BASED(STRINGADR) ARRAY(1) 65 71 108 258 260
60 0002H 2 STRINGADR. . . . . WORD 61 65 71 108 248 258 260
44 0052H 14 TERMINATE. . . . . PROCEDURE STACK=0008H 56 313
217 0008H 2 TESTVALUE. . . . . WORD
59 0000H 27 TOD. . . . . . . . STRUCTURE BASED(TODADR) 179 180 181 182 186 188 219 220
221 222 248 249 256
58 0000H 2 TODADR . . . . . . WORD 59 179 180 181 182 186 188 219 220 221 222 247
248 249 256
243 0502H 101 TODASCII . . . . . PROCEDURE STACK=002AH 276 298
267 000CH 4 TODPOINTER . . . . POINTER 268 269 275 292 301
268 000CH 4 TODPTR . . . . . . STRUCTURE AT 293
282 TODSDOFFSET. . . . LITERALLY 293
118 0004H 1 UB . . . . . . . . BYTE PARAMETER AUTOMATIC 119 136
140 0004H 1 UB . . . . . . . . BYTE PARAMETER AUTOMATIC 141 146
164 0004H 1 VAL. . . . . . . . BYTE PARAMETER AUTOMATIC 165 166
4 VERBDOS. . . . . . LITERALLY 287
3 VERMASK. . . . . . LITERALLY 287
2 VERNEEDSOS . . . . LITERALLY 289
2 VEROS. . . . . . . LITERALLY
283 0012H 2 VERS . . . . . . . WORD 286 287
41 0043H 15 VERSION. . . . . . PROCEDURE WORD STACK=0008H 286
207 0021H 1 WEEKDAY. . . . . . BYTE 223 233
157 0004H 2 WORDVALUE. . . . . WORD 160 161 201 203 213 222 223 226 229
30 0011H 19 WRITECONSOLE . . . PROCEDURE STACK=000AH 51 52 277 279
149 0006H 1 Y. . . . . . . . . BYTE PARAMETER AUTOMATIC 150 152 153
168 001BH 1 YEAR . . . . . . . BYTE 176 177 179 196 199 204 226 237
195 0006H 2 YEARLENGTH . . . . WORD 198 200 201 203
151 0017H 1 YP . . . . . . . . BYTE 152 154 155
MODULE INFORMATION:
CODE AREA SIZE = 065BH 1627D
CONSTANT AREA SIZE = 0096H 150D
VARIABLE AREA SIZE = 0041H 65D
MAXIMUM STACK SIZE = 0032H 50D
511 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION