Files
erkyrath.infocom-zcode-terps/st/nxtlin.asm
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

76 lines
1.8 KiB
NASM

[MORE] WAS BEING INVOKED TOO LATE WHEN THE [MORE] LINE BEGAN WITH
BOLDFACE TEXT. HERE'S THE FIX.
-----------------------------------------------------------------------
OPREAD ...
MOVE.W #1,LINES(A6) * RESET COUNTER, PREVENTS A DEGENERATE [MORE]
BSR PUTLIN * THEN FORCE OUT ANY QUEUED TEXT (THE PROMPT)
...
* CHECK FOR END-OF-PAGE CONDITION
NXTLIN MOVE.W _rows,D0
SUB.W _split_row,D0 * LINES AVAILABLE FOR DISPLAY
SUBQ.W #1,D0 * ALLOW SPACE FOR [MORE]
CMP.W LINES(A6),D0 * PAGE FULL YET?
BNE NXTLX2 * NO
IFEQ CZIP
MOVEM.L D1-D7/A1-A5,-(SP)
BSR OPUSL * YES, UPDATE STATUS LINE NOW
MOVEM.L (SP)+,D1-D7/A1-A5
ENDC
LEA MSGMOR,A0 * DISPLAY MORE MESSAGE (NO CR)
MOVEQ #6,D0
BSR PRINT * WRITE DIRECTLY TO SCREEN
DATA
MSGMOR DC.B '[MORE]',0
TEXT
BSR TTYIN * WAIT FOR A KEY, NO ECHO
SUBQ.W #6,_cur_column * BACKUP CURSOR
LEA MSGNOM,A0 * ERASE MORE MESSAGE (NO CR)
MOVEQ #6,D0
BSR PRINT * WRITE DIRECTLY TO SCREEN
DATA
MSGNOM DC.B ' ',0
TEXT
SUBQ.W #6,_cur_column * BACKUP CURSOR
MOVE.W #1,LINES(A6) * RESET COUNTER, ALLOWING FOR ONE PREVIOUS LINE
NXTLX2 RTS
* OUTPUT THE LINE BUFFER, BEGINNING AND END IN A0, D0
* FIRST CHECK FOR END-OF-SCREEN CONDITION (UNLESS IN WINDOW 1)
BUFOUT TST.W WIND1(A6) * IN WINDOW 1?
BNE BUFUX1 * YES, SKIP THE SCREEN CHECK
MOVEM.L D0/A0,-(SP)
BSR NXTLIN * PAUSE FOR [MORE] IF NECESSARY
MOVEM.L (SP)+,D0/A0
BUFUX1 SUB.L A0,D0 * CURRENT LENGTH OF BUFFER IN D0.W
BLE BUFUX2 * EXIT IF ZERO
BSR PRINT * OTHERWISE, DISPLAY IT
BUFUX2 RTS
* OUTPUT THE LINE BUFFER THEN ADD A CR, BEGINNING AND END IN A0, D0
* ALSO UPDATE THE CUMULATIVE LINE COUNTER
LINOUT BSR BUFOUT * DISPLAY IT
MOVEQ #13,D0
BSR OUTCHR * AND TACK ON A CR
TST.W WIND1(A6) * IN WINDOW 1?
BNE LINOX1 * YES, IGNORE COUNTER
ADDQ.W #1,LINES(A6) * OTHERWISE UPDATE THE COUNTER
LINOX1 RTS