A2osX/SCMASM.30/SCI.S.EXEC.txt

126 lines
3.6 KiB
Plaintext
Raw Permalink Normal View History

NEW
AUTO 3,1
*--------------------------------------
EXEC.ERR.FILE.BUSY JMP ERR.FILE.BUSY
EXEC.ERR.MISMATCH JMP TYPERR
*--------------------------------
EXEC
JSR GET.REFNUM.OF.OPEN.FILE
BCS .1 ...NOT CURRENTLY OPEN
*---File is in use---------------
BIT EXEC.FILE.CLOSING.FLAG
BPL EXEC.ERR.FILE.BUSY
*---Restarting same EXEC file----
STA MISC.PARMS+1 REFNUM
LDA #0 "REWIND" THE FILE
STA MISC.PARMS+2
STA MISC.PARMS+3
STA MISC.PARMS+4
JSR MLI.CE SET MARK
BCS CLOSE.EXEC.SAVING.ERROR
BCC .2 ...ALWAYS, RESTART
*--------------------------------
.1 JSR CLOSE.EXEC.FILE STOP ANY EXEC IN PROGRESS
BCS .3 ...ERROR
*---Check file type--------------
LDA GET.SET.PARMS+4 FILE TYPE MUST BE TXT
CMP #$04 TXT FILETYPE CODE
BNE EXEC.ERR.MISMATCH
*---Open the file----------------
LDA #0
STA LEVEL LEVEL
STA MISC.PARMS+2 BUFFER ADDRESS
LDA EXEC.BUFFER.BASE
STA MISC.PARMS+3 BUFFER ADDRESS HI
STA OPEN.PARMS+4 "
JSR MLI.C8 OPEN
BCS .3 ...ERROR
LDA OPEN.PARMS+5 REFNUM OF FILE
STA EXEC.REFNUM
*---Fill other param blocks------
.2 LDX GET.SET.PARMS+5 RECORD LENGTH
STX VAL.L
LDX GET.SET.PARMS+6
STX VAL.L+1
LDX #2 POINT AT EXEC FILE NAME
JSR SAVE.FILENAME.IN.TABLE
*---Switch EXEC on now-----------
LDA #$FF MARK EXEC ACTIVE
STA F.EXEC
LDA KSWL
STA VDOSIO+2
LDA KSWH
STA VDOSIO+3
LDA #READ.EXEC.FILE
STA KSWL
LDA /READ.EXEC.FILE
STA KSWH
CLC
.3 RTS
*--------------------------------
CLOSE.EXEC.SAVING.ERROR
PHA SAVE ERROR CODE
JSR CLOSE.EXEC.FILE CLOSE THE FILE
PLA GET ERROR CODE
SEC SIGNAL ERROR
RTS
*--------------------------------
* CLOSE EXEC FILE
*--------------------------------
CLOSE.EXEC.FILE
CLC
LDA F.EXEC
BPL .1 ...NO EXEC IN PROGRESS
LDA VDOSIO+2 RESTORE INPUT HOOK
STA KSWL
LDA VDOSIO+3
STA KSWH
LDA #$FF
STA EXEC.FILE.CLOSING.FLAG
LDX #2
LDA EXEC.REFNUM
JSR CLOSE.ONE.FILE CLOSE THE FILE
.1 RTS
*--------------------------------
* "EXEC" INPUT HOOK
*--------------------------------
READ.EXEC.FILE
STA (BASL),Y STOP BLINKING ON SCREEN
JSR SAVE.REGS SAVE A,X,Y
*---Check for CTRL-C Abort-------
LDA KEYBOARD
CMP #$83 CONTROL-C?
BNE .2 ...NO
JSR CLOSE.EXEC.FILE ...YES
STA STROBE
*---End of Data------------------
.1 JSR RESTORE.REGS
JMP ABORT.EXIT
*---Set up EXEC char input-------
.2 LDA EXEC.REFNUM REFNUM
STA READ.WRITE.PARMS+1
LDA #EXEC.INPUT.CHAR
STA READ.WRITE.PARMS+2
LDA /EXEC.INPUT.CHAR
STA READ.WRITE.PARMS+3
LDA #1 READ JUST ONE BYTE
STA READ.WRITE.PARMS+4
LDA #0
STA READ.WRITE.PARMS+5
JSR MLI.CA READ
BCS .3 ...ERROR OR END OF DATA
JSR RESTORE.REGS
LDA EXEC.INPUT.CHAR
ORA #$80
RTS
*--------------------------------
.3 JSR CLOSE.EXEC.SAVING.ERROR CLOSE EXEC FILE
CMP #$05 END OF DATA?
BEQ .1 ...YES
JMP ERROR.HANDLER
*--------------------------------------
MAN
SAVE usr/src/scmasm.30/sci.s.exec
LOAD usr/src/scmasm.30/scmasm.s
ASM