Files
erkyrath.infocom-zcode-terps/ibm/printops.ezp
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

90 lines
2.0 KiB
Plaintext

SUBTTL PRINTOPS
PAGE
;PRINTC (PRINT CHAR WHOSE ASCII VALUE IS GIVEN)
PUBLIC OPPRNC,OPPRNN
OPPRNC PROC
JMP PUTCHR ;QUEUE THE CHARACTER FOR PRINTING
OPPRNC ENDP
;PRINTN (PRINT A NUMBER)
OPPRNN PROC
MOV BX,AX ;NUMBER TO PRINT
CMP BX,0
JNE OPN1$ ;NON-ZERO
MOV AX,"0" ;SPECIAL CASE ZERO
JMP PUTCHR
OPN1$: JG OPN2$ ;POSITIVE?
MOV AX,"-" ;NO, PRINT MINUS SIGN
CALL PUTCHR
NEG BX ;AND MAKE IT POSITIVE
OPN2$: SUB CX,CX ;COUNT OF DIGITS ON STACK
JMP OPN4$ ;START WITH GREATER-THAN-10 TEST
OPN3$: MOV AX,BX ;EXTRACT A DIGIT
MOV BP,10
CWD
IDIV BP
PUSH DX ;PUSH IT
INC CX ;BUMP COUNT
MOV BX,AX ;GET QUOTIENT
OPN4$: CMP BX,10 ;MORE DIGITS TO EXTRACT?
JGE OPN3$ ;YES, GO LOOP
MOV AX,BX ;NO, GET LAST (FIRST) DIGIT
JMP OPN6$ ;ALREADY IN PLACE
OPN5$: POP AX ;POP NEXT DIGIT
OPN6$: ADD AX,"0" ;ASCIIZE IT
CALL PUTCHR ;QUEUE IT
DEC CX ;REDUCE DIGIT COUNT
JGE OPN5$ ;LOOP IF SOME LEFT
RET ;ELSE, RETURN
OPPRNN ENDP
PUBLIC OPPRIN,OPPRNB
;PRINT (THE STRING POINTED TO BY ES:AX)
OPPRIN PROC
CALL BSPLITQ ; (A0) SPLIT THE BLOCK & WORD NUMBERS (QUAD)
JMP PUTSTR ;PRINT THE STRING
OPPRIN ENDP
;PRINTB (PRINT THE STRING POINTED TO BY THE BYTE-POINTER ES:AX)
OPPRNB PROC
CALL BSPLTB ;SPLIT THE BLOCK & BYTE NUMBERS
JMP PUTSTR ;PRINT THE STRING
OPPRNB ENDP
PUBLIC OPPRND,OPPRNI,OPPRNR
;PRINTD (PRINT OBJ'S SHORT DESCRIPTION)
OPPRND PROC
CALL OBJLOC ;FIND OBJ'S LOCATION
MOV BP,AX
GTAWRD A,[BP].PROPS ; (A0) GET IT
INC AX ;POINT TO STRING
CALL BSPLTB ;SPLIT POINTER
JMP PUTSTR ;AND PRINT THE STRING
OPPRND ENDP
;PRINTI (PRINT THE STRING FOLLOWING THIS INSTRUCTION)
OPPRNI PROC
MOV LSTNGD,0 ; (A16) LAST NXT BYTE RUINED
MOV AX,ZPC1 ;GET POINTER TO STRING
MOV BX,ZPC2
CALL PUTSTR ;AND PRINT IT
MOV ZPC1,AX ;UPDATE ZPC
MOV ZPC2,BX
JMP NEWZPC
OPPRNI ENDP
;PRINTR (PRINTI FOLLOWED BY RTRUE)
OPPRNR PROC
CALL OPPRNI ;DO A PRINTI
CALL OPCRLF ;A CRLF
JMP OPRTRU ;AND AN RTRUE
OPPRNR ENDP
PUBLIC OPCRLF
;CRLF (DO A NEWLINE)
OPCRLF PROC
JMP NEWLIN ;DO A NEWLINE
OPCRLF ENDP