U:;$^ :REGISTER=$$$; :TOP; @ TITLE@ '8086 TINCMP CMPLR[CP/M 1.1]'; @ PAGEWIDTH 79; @ NAME@ 'MAINPROG'; @ EXTRN@ MSG@:NEAR,OPENIO@:NEAR,CLOSEIO@:NEAR,RNX@:NEAR; @ EXTRN@ WNX@:NEAR,STOP@:NEAR,BREAD@:NEAR,BWRITE@:NEAR; @ EXTRN@ INITIAL@:NEAR,ENDING@:NEAR,STOP@:NEAR,ATTACH@:NEAR; @ EXTRN@ ASSOC@:NEAR; DATA@ DSEG; :LOMEM=$$$$$; :HIMEM=$$$$$; :PARAMETER K$$=$$$; KA0^P1C^P2C@ EQU@ ^V3S^V4*^V5*^!0N; :MS '$$$$$$$$$'; @ CALL@ MSG; @ DB@ '^P1C^P2C^P3C^P4C^P5C^P6C^P7C^P8C^P9C'; :GOSUB $$; @ CALL@ SA0^P1C^P2C; :GOTO $$; @ JMP@ LOC^P1C^P2C; :BYTE $$; BA0^P1C^P2C@ RB@ 1; :BYTE $$($$$); BA0^P1C^P2C@ RB@ ^V3S^V4*^V5*^!0N; :BYTE $$($$$$$); BA0^P1C^P2C@ RB@ ^V3S^V4*^V5*^V6*^V7*^!0N; :INT I$$; WA0^P1C^P2C@ RW@ 1; :INT I$$($$$); WA0^P1C^P2C@ RW@ ^V3S^V4*^V5*^!0N; :INT I$$($$$$$); WA0^P1C^P2C@ RW@ ^V3S^V4*^V5*^V6*^V7*^!0N; :$$=+K$$; @ MOV@ BA0^P1C^P2C,KA0^P3C^P4C; :$$=+$$$; @ MOV@ BA0^P1C^P2C,^V3S^V4*^V5*^!0N; :$$='$'; @ MOV@ BA0^P1C^P2C,'^P3C'; :I$$=+$$$; @ MOV@ WA0^P1C^P2C,^V3S^V4*^V5*^!0N; :I$$=+$$$$$; @ MOV@ WA0^P1C^P2C,^V3S^V4*^V5*^V6*^V7*^!0N; :$$=$$; @ MOV@ AL,BA0^P3C^P4C; @ MOV@ BA0^P1C^P2C,AL; :$$++; @ INC@ BA0^P1C^P2C; :$$--; @ DEC@ BA0^P1C^P2C; :I$$=$$; @ MOV@ BH,0; @ MOV@ BL,BA0^P3C^P4C; @ MOV@ WA0^P1C^P2C,BX; :I$$=I$$; @ MOV@ BX,WA0^P3C^P4C; @ MOV@ WA0^P1C^P2C,BX; :$$=$$($$); @ MOV@ BL,BA0^P5C^P6C; @ MOV@ BH,0; @ MOV@ AL,BA0^P3C^P4C[BX]; @ MOV@ BA0^P1C^P2C,AL; :I$$=I$$($$); @ MOV@ BL,BA0^P5C^P6C; @ MOV@ BH,0; @ SHL@ BX,1; @ MOV@ AX,WA0^P3C^P4C[BX]; @ MOV@ WA0^P1C^P2C,AX; :$$=$$(I$$); @ MOV@ BX,WA0^P5C^P6C; @ MOV@ AL,BA0^P3C^P4C[BX]; @ MOV@ BA0^P1C^P2C,AL; :I$$=I$$(I$$); @ MOV@ BX,WA0^P5C^P6C; @ SHL@ BX,1; @ MOV@ AX,WA0^P3C^P4C[BX]; @ MOV@ WA0^P1C^P2C,AX; :$$($$)=$$; @ MOV@ AL,BA0^P5C^P6C; @ MOV@ BL,BA0^P3C^P4C; @ MOV@ BH,0; @ MOV@ BA0^P1C^P2C[BX],AL; :$$(I$$)=$$; @ MOV@ AL,BA0^P5C^P6C; @ MOV@ BX,WA0^P3C^P4C; @ MOV@ BA0^P1C^P2C[BX],AL; :I$$($$)=I$$; @ MOV@ AX,WA0^P5C^P6C; @ MOV@ BL,BA0^P3C^P4C; @ MOV@ BH,0; @ SHL@ BX,1; @ MOV@ WA0^P1C^P2C[BX],AX; :I$$(I$$)=I$$; @ MOV@ AX,WA0^P5C^P6C; @ MOV@ BX,WA0^P3C^P4C; @ SHL@ BX,1; @ MOV@ WA0^P1C^P2C[BX],AX; :$$=$$+$$; @ MOV@ AL,BA0^P5C^P6C; @ ADD@ AL,BA0^P3C^P4C; @ MOV@ BA0^P1C^P2C,AL; :$$=$$-$$; @ MOV@ AL,BA0^P3C^P4C; @ SUB@ AL,BA0^P5C^P6C; @ MOV@ BA0^P1C^P2C,AL; :$$=$$&$$; @ MOV@ AL,BA0^P3C^P4C; @ AND@ AL,BA0^P5C^P6C; @ MOV@ BA0^P1C^P2C,AL; :$$=$$?$$; @ MOV@ AL,BA0^P3C^P4C; @ OR@ AL,BA0^P5C^P6C; @ MOV@ BA0^P1C^P2C,AL; :I$$++; @ INC@ WA0^P1C^P2C; :I$$--; @ DEC@ WA0^P1C^P2C; :I$$=-I$$; @ MOV@ AX,WA0^P3C^P4C; @ NEG@ AX; @ MOV@ WA0^P1C^P2C,AX; :I$$=I$$+I$$; @ MOV@ AX,WA0^P3C^P4C; @ ADD@ AX,WA0^P5C^P6C; @ MOV@ WA0^P1C^P2C,AX; :I$$=I$$-I$$; @ MOV@ AX,WA0^P3C^P4C; @ SUB@ AX,WA0^P5C^P6C; @ MOV@ WA0^P1C^P2C,AX; :I$$=I$$*I$$; @ MOV@ AX,WA0^P3C^P4C; @ IMUL@ WA0^P5C^P6C; @ MOV@ WA0^P1C^P2C,AX; :I$$=I$$/I$$; @ MOV@ AX,WA0^P3C^P4C; @ MOV@ CX,WA0^P5C^P6C; @ CWD; @ JCXZ@ @$+4; @ IDIV@ CX; @ MOV@ WA0^P1C^P2C,AX; :$$=$$==$$; @ MOV@ AL,BA0^P3C^P4C; @ CMP@ AL,BA0^P5C^P6C; @ MOV@ AL,1; @ JZ@ @$+4; @ MOV@ AL,0; @ MOV@ BA0^P1C^P2C,AL; :$$=$$=!$$; @ MOV@ AL,BA0^P3C^P4C; @ CMP@ AL,BA0^P5C^P6C; @ MOV@ AL,1; @ JNZ@ @$+4; @ MOV@ AL,0; @ MOV@ BA0^P1C^P2C,AL; :$$=$$<=$$; @ MOV@ AL,BA0^P3C^P4C; @ CMP@ AL,BA0^P5C^P6C; @ MOV@ AL,0; @ JNBE@ @$+4; @ MOV@ AL,1; @ MOV@ BA0^P1C^P2C,AL; :ENDSUB; @ RET; :RETURN; @ RET; :STOP $; @ MOV@ AL,^P1C; @ CALL@ STOP; :LOC $$; LOC^P1C^P2C@:; :ENDMAIN; @ CALL@ ENDING; @ MOV@ CL,0; @ INT@ 224; :IF $$; @ MOV@ AL,BA0^P1C^P2C; @ TEST@ AL,AL; @ JNZ@ @$+5; @ JMP@ IF0^U0S^S0N; :ELSE; @ JMP@ IF0^U0P^P0N^!9P; IF0^P9N@:; ^P0S :ENDIF; IF0^!0N@:; :CALL $$; @ CALL@ SA0^P1C^P2C; :; :BOTTOM; @ END@ START; :READ $$ FROM $$; @ MOV@ BX, OFFSET BA0^P1C^P2C; @ MOV@ DX, OFFSET BA0^P3C^P4C; @ CALL@ BREAD; :WRITE $$ INTO $$; @ MOV@ BX, OFFSET BA0^P1C^P2C; @ MOV@ DX, OFFSET BA0^P3C^P4C; @ CALL@ BWRITE; :BEGINMAIN($$,I$$); BA0^P1C^P2C@ RB@ 1; WA0^P3C^P4C@ RW@ 1; IOCTRL@ DSEG@ COMMON; IAV@ DW@ 0; BA0ER@ DB@ 0; @ CSEG; START@:@ CALL@ INITIAL; @ MOV@ AX,IAV; @ MOV@ BA0^P1C^P2C,AL; :CLOSE $$; @ MOV@ DX, OFFSET BA0^P1C^P2C; @ CALL@ CLOSEIO; :WHILE; ^U0STW0^S0N@:; :ON $$; @ MOV@ AL,BA0^P1C^P2C; @ TEST@ AL,AL; @ JNZ@ @$+5; @ JMP@ BW0^S0N; :ENDWHILE; @ JMP@ TW0^S0N; BW0^!0N@:; :CHOOSE ON $$; @ MOV@ AL,BA0^P1C^P2C^U0S^N3S^U1S; :DEFAULT; ^!0P^!9P^!8P @ JMP@ XA0^P0N; @ RB@ 0-^P9N; A0U^P8N@:; ^P0S :ENDCHOOSE; XA0^!0N@:; :SUB $$; SA0^P1C^P2C@:; :CASE $$; ^!0P^!9P^!8P @ JMP@ XA0^P0N; @ RB@ 0-^P9N; A0U^P8N@:@ CMP@ AL,BA0^P1C^P2C; @ JZ@ @$+5; @ JMP@ A0U^U1S^S8N^N0S^P0S; :ASSOCIATE FCB $ WITH I$$; @ MOV@ AL,^P1C; @ MOV@ BX, OFFSET WA0^P2C^P3C; @ CALL@ ATTACH; :UNPACK(I$$,$$,$$); @ MOV@ AX,WA0^P1C^P2C; @ MOV@ BA0^P3C^P4C,AH; @ MOV@ BA0^P5C^P6C,AL; :PACK(I$$,$$,$$); @ MOV@ AL,BA0^P5C^P6C; @ MOV@ AH,BA0^P3C^P4C; @ MOV@ WA0^P1C^P2C,AX; :$$=I$$; @ MOV@ AL,BYTE PTR WA0^P3C^P4C; @ MOV@ BA0^P1C^P2C,AL; :$$=$$!=$$; @ MOV@ AL,BA0^P5C^P6C; @ CMP@ AL,BA0^P3C^P4C; @ MOV@ AL,1; @ JNZ@ @$+4; @ MOV@ AL,0; @ MOV@ BA0^P1C^P2C,AL; :$$=I$$==I$$; @ MOV@ AX,WA0^P5C^P6C; @ CMP@ AX,WA0^P3C^P4C; @ MOV@ AL,1; @ JZ@ @$+4; @ MOV@ AL,0; @ MOV@ BA0^P1C^P2C,AL; :WRITE $$; @ MOV@ AL,BA0^P1C^P2C; @ CALL@ WNX; :READ $$; @ CALL@ RNX; @ MOV@ BA0^P1C^P2C,AL; :OPEN $$ FOR $$ AT I$$; @ MOV@ DX,OFFSET BA0^P1C^P2C; @ MOV@ BX,OFFSET BA0^P3C^P4C; @ MOV@ SI,OFFSET WA0^P5C^P6C; @ CALL@ OPENIO; :$$=$$