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

66 lines
1.4 KiB
NASM

* SCRIPT A USER INPUT LINE, START IN A0, LEN IN D0, FLAG IN D1 FOR CR
* (CALLED AFTER USER INPUT IS FINISHED, TO AVOID PROBLEMS WITH BACKSPACES)
SCRINP MOVEM.L A2/D2,-(SP)
MOVE.L A0,A2 * PROTECT ARGS
MOVE.W D0,D2
IFEQ EZIP
TST.W VOPRNT(A6) * SCRIPTING?
ENDC
IFEQ CZIP
BSR TSTSCR * CHECK FOR SCRIPT REQUEST -- ACTIVE?
ENDC
BEQ.B SCRIX3 * NO, EXIT
TST.W D2 * LENGTH OF INPUT
BEQ.B SCRIX2 * ZERO, JUST DO THE CR
SCRIX1 MOVE.B (A2)+,D0 * SCRIPT NEXT CHAR
BSR SCRCHR * (USE BUFFERING, SO WRAP IS CORRECT)
SUBQ.W #1,D2
BNE.B SCRIX1
SCRIX2 TST.W D1 * CR REQUESTED?
BEQ SCRIX3 * NO
MOVEQ #13,D0 * YES, ADD THE CR
BSR SCRCHR
SCRIX3 MOVEM.L (SP)+,D2/A2
RTS
* OUTPUT THE SAVE/RESTORE FILENAME TO THE TRANSCRIPT (IF SCRIPTING)
* (USER SELECTED NAME THROUGH A SPECIAL FILE DIALOG)
SCRNAM MOVE.L D1,-(SP)
LEA MSGSCN,A0 * 'File is '
BSR STRLEN * LEAVE LENGTH OF STRING IN D0
CLR.W D1 * NO CR YET
BSR SCRINP
DATA
MSGSCN DC.B 'File is ',0
TEXT
LEA _filename,A0 * NO PATHSPEC, TYPE IS ALWAYS '.SAV'
BSR STRLEN * LEAVE LENGTH OF STRING IN D0
MOVEQ #1,D1 * END WITH CR
BSR SCRINP
MOVE.L (SP)+,D1
RTS
* FIND LENGTH OF ASCIZ STRING, POINTER IN A0
* RETURN POINTER IN A0 AND LENGTH IN D0
STRLEN MOVE.L A1,-(SP)
MOVE.L A0,A1
STRLX1 TST.B (A1)+ * SEARCH FOR NULL
BNE.B STRLX1
TST.B -(A1) * FOUND IT, BACKUP TO THE NULL
MOVE.L A1,D0
SUB.L A0,D0 * RETURN LENGTH
MOVE.L (SP)+,A1
RTS