PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 1 SERIES-III PL/M-86 V2.3 COMPILATION OF MODULE CMAKER OBJECT MODULE PLACED IN CMKER0.OBJ COMPILER INVOKED BY: :F1:PLM86.86 CMKER0.SRC COMPACT OPTIMIZE(0) DEBUG CODE $title('===> Change Maker Demo <===') 1 Cmaker: DO; 2 1 DECLARE TRUE literally '0FFH', FALSE literally '0', IN_PORT literally '1', OUT_PORT literally '2', lf_cr (2) BYTE DATA (0AH, 0DH), paid_text (*) BYTE DATA (7, 'Paid = '), purchased_text (*) BYTE DATA (8, 'Price = '), coins WORD, change WORD, dollars WORD, quarters WORD, nickels WORD, dimes WORD, pennies WORD, paid WORD, purchased WORD; $eject PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 2 3 1 read: PROCEDURE BYTE; /*Sets char equal to ASCII byte received*/ 4 2 DECLARE /*from port 1; writes byte to output port*/ char BYTE; /*also*/ 5 2 char = INPUT(in_port); 6 2 IF char = 0DH THEN 7 2 CALL write (@lf_cr, 1); 8 2 CALL write (@char, 1); 9 2 RETURN char; 10 2 END read; 11 1 write: PROCEDURE (text_ptr, text_cnt); /*Writes text_cnt ASCII bytes */ 12 2 DECLARE /*that begin at txt_ptr to port2*/ text_ptr POINTER, text_cnt WORD, text BASED text_ptr (1) BYTE, i WORD; 13 2 DO i = 0 TO text_cnt - 1; 14 3 OUTPUT(out_port) = text(i); 15 3 END; 16 2 END write; 17 1 write_decimal: PROCEDURE (value);/*Stores decimal digits in the array*/ 18 2 DECLARE /*digit_stack; calls for their conver-*/ value WORD, /*sion to ASCII*/ i WORD, digit_stack(5) BYTE, stk_top WORD; 19 2 stk_top = 5; 20 2 DO WHILE value > 0; 21 3 digit_stack(stk_top := stk_top - 1) = value MOD 10; 22 3 value = value/10; 23 3 END; 24 2 DO i = stk_top TO 4; 25 3 CALL convert_decimal_digit(digit_stack(i)); 26 3 END; 27 2 END write_decimal; 28 1 convert_decimal_digit: PROCEDURE (decimal_digit);/*Converts decimal digit*/ 29 2 DECLARE /*to ASCII numbers and */ decimal_digit BYTE, /*calls WRITE for each */ ascii_digit BYTE; /*ASCII digit */ 30 2 ascii_digit = decimal_digit + '0'; 31 2 CALL write(@ascii_digit, 1); 32 2 END convert_decimal_digit; 33 1 print_coin: PROCEDURE (text_ptr, value); /*Formats writing of change */ 34 2 DECLARE /*values and TEXT; calls */ text_ptr POINTER, /*Write_decimal procedure */ value WORD, text BASED text_ptr STRUCTURE (cnt BYTE, string(1) BYTE), text_cnt BYTE; PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 3 35 2 IF value = 0 THEN 36 2 RETURN; 37 2 CALL write (@(' '), 2); 38 2 CALL write_decimal(value); 39 2 text_cnt = text.cnt; 40 2 IF value = 1 THEN 41 2 text_cnt = text_cnt - 1; /* make singular */ 42 2 CALL write(@text.string, text_cnt); 43 2 CALL write(@lf_cr, 2); 44 2 END print_coin; 45 1 payment: PROCEDURE; /*Specifies order in which*/ 46 2 DECLARE /*change information is */ s_text (*) BYTE DATA (8, ' dollars'), /*written; calls */ q_text (*) BYTE DATA (9, ' quarters'), /*formatting procedure */ n_text (*) BYTE DATA (8, ' nickels'), d_text (*) BYTE DATA (6, ' dimes'), p_text (*) BYTE DATA (8, ' pennies'), p1_text (*) BYTE DATA (7, ' penny'); 47 2 IF (dollars OR quarters OR dimes OR nickels OR pennies) = 0 THEN 48 2 CALL write(@('No change'), 9); 49 2 ELSE DO; 50 3 CALL write(@('Change = '),9); 51 3 CALL write (@lf_cr, 2); 52 3 CALL print_coin(@s_text, dollars); 53 3 CALL print_coin(@q_text, quarters); 54 3 CALL print_coin(@d_text, dimes); 55 3 CALL print_coin(@n_text, nickels); 56 3 IF pennies = 1 THEN 57 3 CALL print_coin(@p1_text, pennies); 58 3 ELSE CALL print_coin(@p_text, pennies); 59 3 END; 60 2 END payment; 61 1 get_input: PROCEDURE (text_ptr) WORD; /*Writes request to output; */ 62 2 DECLARE /*converts each received ASCII*/ text_ptr POINTER, /*byte to a decimal digit and */ value_ptr POINTER, /*assembles decimal values */ value WORD, char BYTE, not_done BYTE, text BASED text_ptr STRUCTURE (cnt BYTE, string(1) BYTE); 63 2 CALL write(@text.string, text.cnt); 64 2 value = 0; 65 2 not_done = TRUE; 66 2 DO WHILE not_done; 67 3 char = read; 68 3 IF (char >= '0') AND (char <= '9') THEN 69 3 DO; 70 4 value = value * 10; 71 4 value = value + char - '0'; 72 4 END; 73 3 ELSE PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 4 not_done = FALSE; 74 3 END; 75 2 RETURN value; 76 2 END get_input; 77 1 begin:; 78 1 DO; 79 2 CALL write (@lf_cr, 2); 80 2 paid = get_input(@paid_text); 81 2 purchased = get_input(@purchased_text); 82 2 CALL write (@lf_cr, 2); 83 2 change = paid - purchased; 84 2 dollars = change/100; 85 2 coins = change MOD 100; 86 2 quarters = coins/25; 87 2 coins = coins MOD 25; 88 2 dimes = coins/10; 89 2 coins = coins MOD 10; 90 2 nickels = coins/5; 91 2 pennies = coins MOD 5; 92 2 IF paid < purchased THEN 93 2 CALL write(@('NO CHEATING!'), 12); 94 2 ELSE CALL payment; 95 2 END; 96 1 HALT; 97 1 END; PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 5 ASSEMBLY LISTING OF OBJECT CODE ; STATEMENT # 3 READ PROC NEAR 00D8 55 PUSH BP 00D9 8BEC MOV BP,SP ; STATEMENT # 5 00DB E401 IN 1H 00DD 88061E00 MOV CHAR,AL ; STATEMENT # 6 00E1 803E1E000D CMP CHAR,0DH 00E6 7403 JZ $+5H 00E8 E90C00 JMP @1 ; STATEMENT # 7 00EB B80000 MOV AX,OFFSET(LF_CR) 00EE 1E PUSH DS ; 1 00EF 50 PUSH AX ; 2 00F0 B80100 MOV AX,1H 00F3 50 PUSH AX ; 3 00F4 E81200 CALL WRITE ; STATEMENT # 8 @1: 00F7 B81E00 MOV AX,OFFSET(CHAR) 00FA 1E PUSH DS ; 1 00FB 50 PUSH AX ; 2 00FC B80100 MOV AX,1H 00FF 50 PUSH AX ; 3 0100 E80600 CALL WRITE ; STATEMENT # 9 0103 8A061E00 MOV AL,CHAR 0107 5D POP BP 0108 C3 RET ; STATEMENT # 10 READ ENDP ; STATEMENT # 11 WRITE PROC NEAR 0109 55 PUSH BP 010A 8BEC MOV BP,SP ; STATEMENT # 13 010C C70612000000 MOV I,0H @2: 0112 8B4604 MOV AX,[BP].TEXT_CNT 0115 48 DEC AX 0116 3B061200 CMP AX,I 011A 7303 JAE $+5H 011C E91A00 JMP @3 ; STATEMENT # 14 011F C45E06 LES BX,[BP].TEXT_PTR 0122 8B361200 MOV SI,I 0126 268A00 MOV AL,ES:[BX].TEXT[SI] 0129 E602 OUT 2H ; STATEMENT # 15 012B 8B061200 MOV AX,I 012F 40 INC AX 0130 89061200 MOV I,AX 0134 7403 JZ $+5H 0136 E9D9FF JMP @2 @3: PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 6 ASSEMBLY LISTING OF OBJECT CODE ; STATEMENT # 16 0139 5D POP BP 013A C20600 RET 6H WRITE ENDP ; STATEMENT # 17 WRITE_DECIMAL PROC NEAR 013D 55 PUSH BP 013E 8BEC MOV BP,SP ; STATEMENT # 19 0140 C70616000500 MOV STK_TOP,5H ; STATEMENT # 20 @4: 0146 837E0400 CMP [BP].VALUE,0H 014A 7503 JNZ $+5H 014C E92900 JMP @5 ; STATEMENT # 21 014F 8B061600 MOV AX,STK_TOP 0153 48 DEC AX 0154 89061600 MOV STK_TOP,AX 0158 50 PUSH AX ; 1 0159 8B4604 MOV AX,[BP].VALUE 015C B90A00 MOV CX,0AH 015F 31D2 XOR DX,DX 0161 F7F1 DIV CX 0163 5B POP BX ; 1 0164 88971F00 MOV DIGIT_STACK[BX],DL ; STATEMENT # 22 0168 8B4604 MOV AX,[BP].VALUE 016B B90A00 MOV CX,0AH 016E 31D2 XOR DX,DX 0170 F7F1 DIV CX 0172 894604 MOV [BP].VALUE,AX ; STATEMENT # 23 0175 E9CEFF JMP @4 @5: ; STATEMENT # 24 0178 8B061600 MOV AX,STK_TOP 017C 89061400 MOV I,AX @6: 0180 813E14000400 CMP I,4H 0186 7603 JBE $+5H 0188 E91900 JMP @7 ; STATEMENT # 25 018B 8B1E1400 MOV BX,I 018F FFB71F00 PUSH DIGIT_STACK[BX]; 1 0193 E81200 CALL CONVERT_DECIMAL_DIGIT ; STATEMENT # 26 0196 8B061400 MOV AX,I 019A 40 INC AX 019B 89061400 MOV I,AX 019F 7403 JZ $+5H 01A1 E9DCFF JMP @6 @7: ; STATEMENT # 27 01A4 5D POP BP 01A5 C20200 RET 2H PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 7 ASSEMBLY LISTING OF OBJECT CODE WRITE_DECIMAL ENDP ; STATEMENT # 28 CONVERT_DECIMAL_DIGIT PROC NEAR 01A8 55 PUSH BP 01A9 8BEC MOV BP,SP ; STATEMENT # 30 01AB 8A4604 MOV AL,[BP].DECIMAL_DIGIT 01AE 80C030 ADD AL,30H 01B1 88062400 MOV ASCII_DIGIT,AL ; STATEMENT # 31 01B5 B82400 MOV AX,OFFSET(ASCII_DIGIT) 01B8 1E PUSH DS ; 1 01B9 50 PUSH AX ; 2 01BA B80100 MOV AX,1H 01BD 50 PUSH AX ; 3 01BE E848FF CALL WRITE ; STATEMENT # 32 01C1 5D POP BP 01C2 C20200 RET 2H CONVERT_DECIMAL_DIGIT ENDP ; STATEMENT # 33 PRINT_COIN PROC NEAR 01C5 55 PUSH BP 01C6 8BEC MOV BP,SP ; STATEMENT # 35 01C8 837E0400 CMP [BP].VALUE,0H 01CC 7403 JZ $+5H 01CE E90400 JMP @8 ; STATEMENT # 36 01D1 5D POP BP 01D2 C20600 RET 6H ; STATEMENT # 37 @8: 01D5 B84600 MOV AX,OFFSET(@@LONG$CONSTANT$0046H) 01D8 1E PUSH DS ; 1 01D9 50 PUSH AX ; 2 01DA B80200 MOV AX,2H 01DD 50 PUSH AX ; 3 01DE E828FF CALL WRITE ; STATEMENT # 38 01E1 FF7604 PUSH [BP].VALUE; 1 01E4 E856FF CALL WRITE_DECIMAL ; STATEMENT # 39 01E7 C45E06 LES BX,[BP].TEXT_PTR 01EA 268A07 MOV AL,ES:TEXT[BX] 01ED 88062500 MOV TEXT_CNT,AL ; STATEMENT # 40 01F1 817E040100 CMP [BP].VALUE,1H 01F6 7403 JZ $+5H 01F8 E90A00 JMP @9 ; STATEMENT # 41 01FB 8A062500 MOV AL,TEXT_CNT 01FF FEC8 DEC AL 0201 88062500 MOV TEXT_CNT,AL ; STATEMENT # 42 @9: PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 8 ASSEMBLY LISTING OF OBJECT CODE 0205 C45E06 LES BX,[BP].TEXT_PTR 0208 8D4701 LEA AX,TEXT[BX+1H] 020B 06 PUSH ES ; 1 020C 50 PUSH AX ; 2 020D 8A062500 MOV AL,TEXT_CNT 0211 B400 MOV AH,0H 0213 50 PUSH AX ; 3 0214 E8F2FE CALL WRITE ; STATEMENT # 43 0217 B80000 MOV AX,OFFSET(LF_CR) 021A 1E PUSH DS ; 1 021B 50 PUSH AX ; 2 021C B80200 MOV AX,2H 021F 50 PUSH AX ; 3 0220 E8E6FE CALL WRITE ; STATEMENT # 44 0223 5D POP BP 0224 C20600 RET 6H PRINT_COIN ENDP ; STATEMENT # 45 PAYMENT PROC NEAR 0227 55 PUSH BP 0228 8BEC MOV BP,SP ; STATEMENT # 47 022A 8B060400 MOV AX,DOLLARS 022E 0B060600 OR AX,QUARTERS 0232 0B060A00 OR AX,DIMES 0236 0B060800 OR AX,NICKELS 023A 0B060C00 OR AX,PENNIES 023E 7403 JZ $+5H 0240 E90F00 JMP @10 ; STATEMENT # 48 0243 B84800 MOV AX,OFFSET(@@LONG$CONSTANT$0048H) 0246 1E PUSH DS ; 1 0247 50 PUSH AX ; 2 0248 B80900 MOV AX,9H 024B 50 PUSH AX ; 3 024C E8BAFE CALL WRITE 024F E96E00 JMP @11 ; STATEMENT # 49 @10: ; STATEMENT # 50 0252 B85100 MOV AX,OFFSET(@@LONG$CONSTANT$0051H) 0255 1E PUSH DS ; 1 0256 50 PUSH AX ; 2 0257 B80900 MOV AX,9H 025A 50 PUSH AX ; 3 025B E8ABFE CALL WRITE ; STATEMENT # 51 025E B80000 MOV AX,OFFSET(LF_CR) 0261 1E PUSH DS ; 1 0262 50 PUSH AX ; 2 0263 B80200 MOV AX,2H 0266 50 PUSH AX ; 3 0267 E89FFE CALL WRITE ; STATEMENT # 52 PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 9 ASSEMBLY LISTING OF OBJECT CODE 026A B81300 MOV AX,OFFSET(S_TEXT) 026D 1E PUSH DS ; 1 026E 50 PUSH AX ; 2 026F FF360400 PUSH DOLLARS ; 3 0273 E84FFF CALL PRINT_COIN ; STATEMENT # 53 0276 B81C00 MOV AX,OFFSET(Q_TEXT) 0279 1E PUSH DS ; 1 027A 50 PUSH AX ; 2 027B FF360600 PUSH QUARTERS; 3 027F E843FF CALL PRINT_COIN ; STATEMENT # 54 0282 B82F00 MOV AX,OFFSET(D_TEXT) 0285 1E PUSH DS ; 1 0286 50 PUSH AX ; 2 0287 FF360A00 PUSH DIMES ; 3 028B E837FF CALL PRINT_COIN ; STATEMENT # 55 028E B82600 MOV AX,OFFSET(N_TEXT) 0291 1E PUSH DS ; 1 0292 50 PUSH AX ; 2 0293 FF360800 PUSH NICKELS ; 3 0297 E82BFF CALL PRINT_COIN ; STATEMENT # 56 029A 813E0C000100 CMP PENNIES,1H 02A0 7403 JZ $+5H 02A2 E90F00 JMP @12 ; STATEMENT # 57 02A5 B83F00 MOV AX,OFFSET(P1_TEXT) 02A8 1E PUSH DS ; 1 02A9 50 PUSH AX ; 2 02AA FF360C00 PUSH PENNIES ; 3 02AE E814FF CALL PRINT_COIN 02B1 E90C00 JMP @13 ; STATEMENT # 58 @12: 02B4 B83600 MOV AX,OFFSET(P_TEXT) 02B7 1E PUSH DS ; 1 02B8 50 PUSH AX ; 2 02B9 FF360C00 PUSH PENNIES ; 3 02BD E805FF CALL PRINT_COIN ; STATEMENT # 59 @13: ; STATEMENT # 60 @11: 02C0 5D POP BP 02C1 C3 RET PAYMENT ENDP ; STATEMENT # 61 GET_INPUT PROC NEAR 02C2 55 PUSH BP 02C3 8BEC MOV BP,SP ; STATEMENT # 63 02C5 C45E04 LES BX,[BP].TEXT_PTR 02C8 8D4701 LEA AX,TEXT[BX+1H] 02CB 06 PUSH ES ; 1 PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 10 ASSEMBLY LISTING OF OBJECT CODE 02CC 50 PUSH AX ; 2 02CD C45E04 LES BX,[BP].TEXT_PTR 02D0 268A07 MOV AL,ES:TEXT[BX] 02D3 B400 MOV AH,0H 02D5 50 PUSH AX ; 3 02D6 E830FE CALL WRITE ; STATEMENT # 64 02D9 C7061C000000 MOV VALUE,0H ; STATEMENT # 65 02DF C6062700FF MOV NOT_DONE,0FFH ; STATEMENT # 66 @14: 02E4 8A062700 MOV AL,NOT_DONE 02E8 D0D8 RCR AL,1 02EA 7203 JB $+5H 02EC E94E00 JMP @15 ; STATEMENT # 67 02EF E8E6FD CALL READ 02F2 88062600 MOV CHAR,AL ; STATEMENT # 68 02F6 803E260030 CMP CHAR,30H 02FB B0FF MOV AL,0FFH 02FD 7301 JAE $+3H 02FF 40 INC AX 0300 803E260039 CMP CHAR,39H 0305 B1FF MOV CL,0FFH 0307 7601 JBE $+3H 0309 41 INC CX 030A 22C1 AND AL,CL 030C D0D8 RCR AL,1 030E 7203 JB $+5H 0310 E92200 JMP @16 ; STATEMENT # 70 0313 8B061C00 MOV AX,VALUE 0317 B90A00 MOV CX,0AH 031A F7E1 MUL CX 031C 89061C00 MOV VALUE,AX ; STATEMENT # 71 0320 8A062600 MOV AL,CHAR 0324 B400 MOV AH,0H 0326 03061C00 ADD AX,VALUE 032A 81E83000 SUB AX,30H 032E 89061C00 MOV VALUE,AX 0332 E90500 JMP @17 ; STATEMENT # 73 @16: 0335 C606270000 MOV NOT_DONE,0H ; STATEMENT # 74 @17: 033A E9A7FF JMP @14 @15: ; STATEMENT # 75 033D 8B061C00 MOV AX,VALUE 0341 5D POP BP 0342 C20400 RET 4H ; STATEMENT # 76 PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 11 ASSEMBLY LISTING OF OBJECT CODE GET_INPUT ENDP ; STATEMENT # 77 0000 8BEC MOV BP,SP 0002 FB STI BEGIN: ; STATEMENT # 79 0003 B80000 MOV AX,OFFSET(LF_CR) 0006 1E PUSH DS ; 1 0007 50 PUSH AX ; 2 0008 B80200 MOV AX,2H 000B 50 PUSH AX ; 3 000C E8FA00 CALL WRITE ; STATEMENT # 80 000F B80200 MOV AX,OFFSET(PAID_TEXT) 0012 1E PUSH DS ; 1 0013 50 PUSH AX ; 2 0014 E8AB02 CALL GET_INPUT 0017 89060E00 MOV PAID,AX ; STATEMENT # 81 001B B80A00 MOV AX,OFFSET(PURCHASED_TEXT) 001E 1E PUSH DS ; 1 001F 50 PUSH AX ; 2 0020 E89F02 CALL GET_INPUT 0023 89061000 MOV PURCHASED,AX ; STATEMENT # 82 0027 B80000 MOV AX,OFFSET(LF_CR) 002A 1E PUSH DS ; 1 002B 50 PUSH AX ; 2 002C B80200 MOV AX,2H 002F 50 PUSH AX ; 3 0030 E8D600 CALL WRITE ; STATEMENT # 83 0033 8B060E00 MOV AX,PAID 0037 2B061000 SUB AX,PURCHASED 003B 89060200 MOV CHANGE,AX ; STATEMENT # 84 003F 8B060200 MOV AX,CHANGE 0043 B96400 MOV CX,64H 0046 31D2 XOR DX,DX 0048 F7F1 DIV CX 004A 89060400 MOV DOLLARS,AX ; STATEMENT # 85 004E 8B060200 MOV AX,CHANGE 0052 B96400 MOV CX,64H 0055 31D2 XOR DX,DX 0057 F7F1 DIV CX 0059 89160000 MOV COINS,DX ; STATEMENT # 86 005D 8B060000 MOV AX,COINS 0061 B91900 MOV CX,19H 0064 31D2 XOR DX,DX 0066 F7F1 DIV CX 0068 89060600 MOV QUARTERS,AX ; STATEMENT # 87 006C 8B060000 MOV AX,COINS 0070 B91900 MOV CX,19H PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 12 ASSEMBLY LISTING OF OBJECT CODE 0073 31D2 XOR DX,DX 0075 F7F1 DIV CX 0077 89160000 MOV COINS,DX ; STATEMENT # 88 007B 8B060000 MOV AX,COINS 007F B90A00 MOV CX,0AH 0082 31D2 XOR DX,DX 0084 F7F1 DIV CX 0086 89060A00 MOV DIMES,AX ; STATEMENT # 89 008A 8B060000 MOV AX,COINS 008E B90A00 MOV CX,0AH 0091 31D2 XOR DX,DX 0093 F7F1 DIV CX 0095 89160000 MOV COINS,DX ; STATEMENT # 90 0099 8B060000 MOV AX,COINS 009D B90500 MOV CX,5H 00A0 31D2 XOR DX,DX 00A2 F7F1 DIV CX 00A4 89060800 MOV NICKELS,AX ; STATEMENT # 91 00A8 8B060000 MOV AX,COINS 00AC B90500 MOV CX,5H 00AF 31D2 XOR DX,DX 00B1 F7F1 DIV CX 00B3 89160C00 MOV PENNIES,DX ; STATEMENT # 92 00B7 8B060E00 MOV AX,PAID 00BB 3B061000 CMP AX,PURCHASED 00BF 7203 JB $+5H 00C1 E90F00 JMP @18 ; STATEMENT # 93 00C4 B85A00 MOV AX,OFFSET(@@LONG$CONSTANT$005AH) 00C7 1E PUSH DS ; 1 00C8 50 PUSH AX ; 2 00C9 B80C00 MOV AX,0CH 00CC 50 PUSH AX ; 3 00CD E83900 CALL WRITE 00D0 E90300 JMP @19 ; STATEMENT # 94 @18: 00D3 E85101 CALL PAYMENT ; STATEMENT # 95 @19: ; STATEMENT # 96 00D6 FB STI 00D7 F4 HLT ; STATEMENT # 97 MODULE INFORMATION: CODE AREA SIZE = 0345H 837D CONSTANT AREA SIZE = 0066H 102D PL/M-86 COMPILER ===> Change Maker Demo <=== 03/11/83 PAGE 13 ASSEMBLY LISTING OF OBJECT CODE VARIABLE AREA SIZE = 0028H 40D MAXIMUM STACK SIZE = 0018H 24D 165 LINES READ 0 PROGRAM WARNINGS 0 PROGRAM ERRORS DICTIONARY SUMMARY: 669KB MEMORY AVAILABLE 5KB MEMORY USED (0%) 0KB DISK SPACE USED END OF PL/M-86 COMPILATION