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
