PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 1 DOS 3.30 (038-N) PL/M-86 X304 COMPILATION OF MODULE START OBJECT MODULE PLACED IN START.obj COMPILER INVOKED BY: 'C:\SCA˙\PLM86\PLM86.EXE' START.PLM $DEBUG $OT(0) $CODE $XREF /*---------------------------------- Program : START.PLM Title : Main module for PLM86 Author : Mr S.C.Agate FCD x4667 Date : 16-SEP-90 ----------------------------------*/ 1 start:DO; /******************* Literals ******************/ 2 1 DECLARE true LITERALLY '01H'; /******************* Globals *******************/ 3 1 DECLARE clock STRUCTURE ( year WORD, month BYTE, day BYTE, dow BYTE, hour BYTE, minute BYTE, second BYTE, csecond BYTE); 4 1 DECLARE param_count BYTE EXTERNAL; 5 1 DECLARE param_list(*) POINTER EXTERNAL; 6 1 DECLARE mesg(*) BYTE DATA('Number of parameters passed = ',0); 7 1 DECLARE string(5) BYTE; /************** External Procedures ************/ $INCLUDE(plm_lib.inc) = /*---------------------------------- = Program : DOS_LIB.INC = Title : Include file for DOS library = Author : Mr S.C.Agate FCD x4667 = Date : 09-AUG-90 = ----------------------------------*/ = /* DECLARE clock STRUCTURE ( year WORD, = month BYTE, = day BYTE, = hour BYTE, = minute BYTE, PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 2 = second BYTE, = csecond BYTE); */ 8 1 = get_clock: PROCEDURE (ptr_to_struc) EXTERNAL; 9 2 = DECLARE ptr_to_struc POINTER; 10 2 = END get_clock; 11 1 = new_line: PROCEDURE EXTERNAL; 12 2 = END new_line; 13 1 = get_string: PROCEDURE (ptr_to_string,max_len) BYTE EXTERNAL; 14 2 = DECLARE ptr_to_string POINTER; 15 2 = DECLARE max_len BYTE; 16 2 = END get_string; 17 1 = put_string: PROCEDURE (ptr_to_string) EXTERNAL; 18 2 = DECLARE ptr_to_string POINTER; 19 2 = END put_string; 20 1 = put_hex_num: PROCEDURE (value,digits) EXTERNAL; 21 2 = DECLARE value WORD; 22 2 = DECLARE digits BYTE; 23 2 = END put_hex_num; 24 1 = put_dec_num: PROCEDURE (value) BYTE EXTERNAL; 25 2 = DECLARE value WORD; 26 2 = END put_dec_num; 27 1 = get_dec_num: PROCEDURE WORD EXTERNAL; 28 2 = END get_dec_num; 29 1 = upper: PROCEDURE (ptr_to_string) EXTERNAL; 30 2 = DECLARE ptr_to_string POINTER; 31 2 = END upper; 32 1 = asm_openf: PROCEDURE (asciiz,access,errorf) WORD EXTERNAL; 33 2 = DECLARE asciiz POINTER, = access BYTE, /* 0=Read, 1=Write, 2=R/W */ = errorf POINTER; = /* Returns handle if no error */ 34 2 = END asm_openf; 35 1 = asm_rd_chrs: PROCEDURE (handle,buffer,length,errorf) WORD EXTERNAL; 36 2 = DECLARE handle WORD, = buffer POINTER, = length WORD, = errorf POINTER; = /* Returns length read if no error */ 37 2 = END asm_rd_chrs; 38 1 = asm_wr_chrs: PROCEDURE (handle,buffer,length,errorf) WORD EXTERNAL; 39 2 = DECLARE handle WORD, = buffer POINTER, = length WORD, = errorf POINTER; = /* Returns length written if no error */ 40 2 = END asm_wr_chrs; PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 3 41 1 = asm_set_loc: PROCEDURE (handle,access,index,errorf) DWORD EXTERNAL; 42 2 = DECLARE handle WORD, = access BYTE, /* 0=Beg, 1=Current, 2=End */ = index DWORD, = errorf POINTER; = /* Returns with new offset if no error */ 43 2 = END asm_set_loc; 44 1 = asm_closef: PROCEDURE (handle,errorf) EXTERNAL; 45 2 = DECLARE handle WORD, = errorf POINTER; 46 2 = END asm_closef; 47 1 = asm_dfile: PROCEDURE (asciiz,errorf) EXTERNAL; /* Delete File */ 48 2 = DECLARE asciiz POINTER, = errorf POINTER; 49 2 = END asm_dfile; 50 1 = asm_rfile: PROCEDURE (aold,anew,errorf) EXTERNAL; /* Rename File */ 51 2 = DECLARE aold POINTER, = anew POINTER, = errorf POINTER; 52 2 = END asm_rfile; 53 1 = asm_cfile: PROCEDURE (asciiz,attrib,errorf) WORD EXTERNAL; /* Create File */ 54 2 = DECLARE asciiz POINTER, = attrib BYTE, = errorf POINTER; = /* Returns handle if no error */ 55 2 = END asm_cfile; /************** Internal Procedures ************/ 56 1 main: PROCEDURE BYTE PUBLIC; 57 2 DECLARE exit_code BYTE; 58 2 DECLARE i BYTE, temp BYTE; 59 2 DECLARE error_code WORD; 60 2 DECLARE handle WORD; /* TEST FOR WORD MULTIPLICATION DECLARE (x,y,z) DWORD; x=1;y=12345678H; z=x+y-1; z=x*y; */ 61 2 IF param_count=0 THEN 62 2 DO; 63 3 CALL put_string(@('No parameters Passed',13,10,0)); 64 3 END; 65 2 ELSE DO; 66 3 CALL put_string(@mesg); PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 4 67 3 exit_code=put_dec_num(param_count); 68 3 CALL new_line; 69 3 DO i=0 TO param_count-1; 70 4 CALL put_string(@('Param ',0)); 71 4 temp=put_dec_num(i); 72 4 CALL put_string(@(' : "',0)); 73 4 CALL upper(param_list(i)); 74 4 CALL put_string(param_list(i)); 75 4 CALL put_string(@('"',13,10,0)); 76 4 END; 77 3 END; 78 2 handle=asm_openf(@('A:wank.txt',0),0,@error_code); 79 2 IF error_code=0 THEN 80 2 DO; 81 3 CALL put_string(@('Handle = ',0)); 82 3 temp=put_dec_num(handle); 83 3 CALL asm_closef(handle,@error_code); /* CALL asm_rfile(@('wank.aaa',0),@('wank.txt',0),@error_code); */ 84 3 CALL asm_dfile(@('a:\wank.txt',0),@error_code); 85 3 END; 86 2 ELSE DO; 87 3 CALL put_string(@('Error occured.',0)); 88 3 END; 89 2 RETURN error_code; 90 2 END main; /*************** Module level code *************/ /* None */ 91 1 END start; PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 5 ASSEMBLY LISTING OF OBJECT CODE ; STATEMENT # 56 MAIN PROC NEAR 0000 55 PUSH BP 0001 8BEC MOV BP,SP ; STATEMENT # 61 0003 823E000000 CMP PARAM_COUNT,0H 0008 7403 JZ $+5H 000A E90A00 JMP @1 ; STATEMENT # 63 000D B81F00 MOV AX,OFFSET(@@LONG$CONSTANT$001FH) 0010 50 PUSH AX ; 1 0011 E80000 CALL PUT_STRING 0014 E97C00 JMP @2 ; STATEMENT # 65 @1: ; STATEMENT # 66 0017 B80000 MOV AX,OFFSET(MESG) 001A 50 PUSH AX ; 1 001B E80000 CALL PUT_STRING ; STATEMENT # 67 001E 8A060000 MOV AL,PARAM_COUNT 0022 B400 MOV AH,0H 0024 50 PUSH AX ; 1 0025 E80000 CALL PUT_DEC_NUM 0028 88061200 MOV EXIT_CODE,AL ; STATEMENT # 68 002C E80000 CALL NEW_LINE ; STATEMENT # 69 002F C606130000 MOV I,0H @3: 0034 8A060000 MOV AL,PARAM_COUNT 0038 FEC8 DEC AL 003A 3A061300 CMP AL,I 003E 7303 JAE $+5H 0040 E95000 JMP @4 ; STATEMENT # 70 0043 B83600 MOV AX,OFFSET(@@LONG$CONSTANT$0036H) 0046 50 PUSH AX ; 1 0047 E80000 CALL PUT_STRING ; STATEMENT # 71 004A 8A061300 MOV AL,I 004E B400 MOV AH,0H 0050 50 PUSH AX ; 1 0051 E80000 CALL PUT_DEC_NUM 0054 88061400 MOV TEMP,AL ; STATEMENT # 72 0058 B83D00 MOV AX,OFFSET(@@LONG$CONSTANT$003DH) 005B 50 PUSH AX ; 1 005C E80000 CALL PUT_STRING ; STATEMENT # 73 005F 8A1E1300 MOV BL,I 0063 B700 MOV BH,0H 0065 D1E3 SHL BX,1 0067 FFB70000 PUSH PARAM_LIST[BX]; 1 006B E80000 CALL UPPER ; STATEMENT # 74 PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 6 ASSEMBLY LISTING OF OBJECT CODE 006E 8A1E1300 MOV BL,I 0072 B700 MOV BH,0H 0074 D1E3 SHL BX,1 0076 FFB70000 PUSH PARAM_LIST[BX]; 1 007A E80000 CALL PUT_STRING ; STATEMENT # 75 007D B84200 MOV AX,OFFSET(@@LONG$CONSTANT$0042H) 0080 50 PUSH AX ; 1 0081 E80000 CALL PUT_STRING ; STATEMENT # 76 0084 8A061300 MOV AL,I 0088 FEC0 INC AL 008A 88061300 MOV I,AL 008E 7403 JZ $+5H 0090 E9A1FF JMP @3 @4: ; STATEMENT # 78 @2: 0093 B84600 MOV AX,OFFSET(@@LONG$CONSTANT$0046H) 0096 50 PUSH AX ; 1 0097 31C0 XOR AX,AX 0099 50 PUSH AX ; 2 009A B80000 MOV AX,OFFSET(ERROR_CODE) 009D 50 PUSH AX ; 3 009E E80000 CALL ASM_OPENF 00A1 89060200 MOV HANDLE,AX ; STATEMENT # 79 00A5 833E000000 CMP ERROR_CODE,0H 00AA 7403 JZ $+5H 00AC E92B00 JMP @5 ; STATEMENT # 81 00AF B85100 MOV AX,OFFSET(@@LONG$CONSTANT$0051H) 00B2 50 PUSH AX ; 1 00B3 E80000 CALL PUT_STRING ; STATEMENT # 82 00B6 FF360200 PUSH HANDLE ; 1 00BA E80000 CALL PUT_DEC_NUM 00BD 88061400 MOV TEMP,AL ; STATEMENT # 83 00C1 FF360200 PUSH HANDLE ; 1 00C5 B80000 MOV AX,OFFSET(ERROR_CODE) 00C8 50 PUSH AX ; 2 00C9 E80000 CALL ASM_CLOSEF ; STATEMENT # 84 00CC B85B00 MOV AX,OFFSET(@@LONG$CONSTANT$005BH) 00CF 50 PUSH AX ; 1 00D0 B80000 MOV AX,OFFSET(ERROR_CODE) 00D3 50 PUSH AX ; 2 00D4 E80000 CALL ASM_DFILE 00D7 E90700 JMP @6 ; STATEMENT # 86 @5: ; STATEMENT # 87 00DA B86700 MOV AX,OFFSET(@@LONG$CONSTANT$0067H) 00DD 50 PUSH AX ; 1 00DE E80000 CALL PUT_STRING PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 7 ASSEMBLY LISTING OF OBJECT CODE ; STATEMENT # 89 @6: 00E1 8A060000 MOV AL,ERROR_CODE 00E5 5D POP BP 00E6 C3 RET ; STATEMENT # 90 MAIN ENDP PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 8 CROSS-REFERENCE LISTING DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ---- ------ ----- -------------------------------- 41 0000H 1 ACCESS . . . . . . BYTE IN PROC(ASM_SET_LOC) PARAMETER 42 32 0000H 1 ACCESS . . . . . . BYTE IN PROC(ASM_OPENF) PARAMETER 33 50 0000H 2 ANEW . . . . . . . POINTER IN PROC(ASM_RFILE) PARAMETER 51 50 0000H 2 AOLD . . . . . . . POINTER IN PROC(ASM_RFILE) PARAMETER 51 47 0000H 2 ASCIIZ . . . . . . POINTER IN PROC(ASM_DFILE) PARAMETER 48 32 0000H 2 ASCIIZ . . . . . . POINTER IN PROC(ASM_OPENF) PARAMETER 33 53 0000H 2 ASCIIZ . . . . . . POINTER IN PROC(ASM_CFILE) PARAMETER 54 53 0000H ASM_CFILE. . . . . PROCEDURE WORD EXTERNAL STACK=0000H 44 0000H ASM_CLOSEF . . . . PROCEDURE EXTERNAL(7) STACK=0000H 83 47 0000H ASM_DFILE. . . . . PROCEDURE EXTERNAL(8) STACK=0000H 84 32 0000H ASM_OPENF. . . . . PROCEDURE WORD EXTERNAL(6) STACK=0000H 78 35 0000H ASM_RD_CHRS. . . . PROCEDURE WORD EXTERNAL STACK=0000H 50 0000H ASM_RFILE. . . . . PROCEDURE EXTERNAL STACK=0000H 41 0000H ASM_SET_LOC. . . . PROCEDURE DWORD EXTERNAL STACK=0000H 38 0000H ASM_WR_CHRS. . . . PROCEDURE WORD EXTERNAL STACK=0000H 53 0000H 1 ATTRIB . . . . . . BYTE IN PROC(ASM_CFILE) PARAMETER 54 38 0000H 2 BUFFER . . . . . . POINTER IN PROC(ASM_WR_CHRS) PARAMETER 39 35 0000H 2 BUFFER . . . . . . POINTER IN PROC(ASM_RD_CHRS) PARAMETER 36 3 0004H 9 CLOCK. . . . . . . STRUCTURE 0000H 2 YEAR . . . . . WORD 0002H 1 MONTH. . . . . BYTE 0003H 1 DAY. . . . . . BYTE 0004H 1 DOW. . . . . . BYTE 0005H 1 HOUR . . . . . BYTE 0006H 1 MINUTE . . . . BYTE 0007H 1 SECOND . . . . BYTE 0008H 1 CSECOND. . . . BYTE 20 0000H 1 DIGITS . . . . . . BYTE IN PROC(PUT_HEX_NUM) PARAMETER 22 53 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_CFILE) PARAMETER 54 50 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_RFILE) PARAMETER 51 47 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_DFILE) PARAMETER 48 41 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_SET_LOC) PARAMETER 42 38 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_WR_CHRS) PARAMETER 39 35 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_RD_CHRS) PARAMETER 36 44 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_CLOSEF) PARAMETER 45 32 0000H 2 ERRORF . . . . . . POINTER IN PROC(ASM_OPENF) PARAMETER 33 59 0000H 2 ERROR_CODE . . . . WORD IN PROC(MAIN) 78 79 83 84 89 57 0012H 1 EXIT_CODE. . . . . BYTE IN PROC(MAIN) 67* 8 0000H GET_CLOCK. . . . . PROCEDURE EXTERNAL STACK=0000H 27 0000H GET_DEC_NUM. . . . PROCEDURE WORD EXTERNAL STACK=0000H 13 0000H GET_STRING . . . . PROCEDURE BYTE EXTERNAL STACK=0000H 44 0000H 2 HANDLE . . . . . . WORD IN PROC(ASM_CLOSEF) PARAMETER 45 41 0000H 2 HANDLE . . . . . . WORD IN PROC(ASM_SET_LOC) PARAMETER 42 38 0000H 2 HANDLE . . . . . . WORD IN PROC(ASM_WR_CHRS) PARAMETER 39 35 0000H 2 HANDLE . . . . . . WORD IN PROC(ASM_RD_CHRS) PARAMETER 36 60 0002H 2 HANDLE . . . . . . WORD IN PROC(MAIN) 78* 82 83 58 0013H 1 I. . . . . . . . . BYTE IN PROC(MAIN) 69* 69 71 73 74 76 41 0000H 4 INDEX. . . . . . . DWORD IN PROC(ASM_SET_LOC) PARAMETER 42 38 0000H 2 LENGTH . . . . . . WORD IN PROC(ASM_WR_CHRS) PARAMETER 39 35 0000H 2 LENGTH . . . . . . WORD IN PROC(ASM_RD_CHRS) PARAMETER 36 56 0000H 231 MAIN . . . . . . . PROCEDURE BYTE PUBLIC STACK=000AH 13 0000H 1 MAX_LEN. . . . . . BYTE IN PROC(GET_STRING) PARAMETER 15 6 0000H 31 MESG . . . . . . . BYTE ARRAY(31) DATA 66 PL/M-86 COMPILER START 09/18/90 19:16:53 PAGE 9 CROSS-REFERENCE LISTING 11 0000H NEW_LINE . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 68 4 0000H 1 PARAM_COUNT. . . . BYTE EXTERNAL(0) 61 67 69 5 0000H PARAM_LIST . . . . POINTER ARRAY(*) EXTERNAL(1) 73 74 29 0000H 2 PTR_TO_STRING. . . POINTER IN PROC(UPPER) PARAMETER 30 17 0000H 2 PTR_TO_STRING. . . POINTER IN PROC(PUT_STRING) PARAMETER 18 13 0000H 2 PTR_TO_STRING. . . POINTER IN PROC(GET_STRING) PARAMETER 14 8 0000H 2 PTR_TO_STRUC . . . POINTER IN PROC(GET_CLOCK) PARAMETER 9 24 0000H PUT_DEC_NUM. . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H 67 71 82 20 0000H PUT_HEX_NUM. . . . PROCEDURE EXTERNAL STACK=0000H 17 0000H PUT_STRING . . . . PROCEDURE EXTERNAL(3) STACK=0000H 63 66 70 72 74 75 81 87 1 0000H START. . . . . . . MODULE STACK=0000H 7 000DH 5 STRING . . . . . . BYTE ARRAY(5) 58 0014H 1 TEMP . . . . . . . BYTE IN PROC(MAIN) 71* 82* 2 TRUE . . . . . . . LITERALLY '01H' 29 0000H UPPER. . . . . . . PROCEDURE EXTERNAL(5) STACK=0000H 73 24 0000H 2 VALUE. . . . . . . WORD IN PROC(PUT_DEC_NUM) PARAMETER 25 20 0000H 2 VALUE. . . . . . . WORD IN PROC(PUT_HEX_NUM) PARAMETER 21 MODULE INFORMATION: CODE AREA SIZE = 00E7H 231D CONSTANT AREA SIZE = 0076H 118D VARIABLE AREA SIZE = 0015H 21D MAXIMUM STACK SIZE = 000AH 10D 200 LINES READ 0 PROGRAM WARNINGS 0 PROGRAM ERRORS DICTIONARY SUMMARY: 414KB MEMORY AVAILABLE 6KB MEMORY USED (1%) 0KB DISK SPACE USED END OF PL/M-86 COMPILATION