Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

720 lines
31 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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