;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
;Û                                                                           Û
;Û                              FILE  PROCEDURES                             Û
;Û                                                                           Û
;Û                    These procedures are not optimized.                    Û
;Û                                                                           Û
;Û       NOTE: '&' - this char can use only with PROC/PROCS and MACRO.       Û
;Û                                                                           Û
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;-----------------------------------------------------------------------------
; Load and run a DOS file. 
; NOTE: This procedure is not complete !
; in:    YX - the name of file.
; out:   NF - set if error.
;-----------------------------------------------------------------------------
LoadDOS PROC YX
_IOCB7_ EQU 944

  LDA <_retload_
  STA $02E0       ;RUNAD
  LDA >_retload_
  STA $02E0+1     ;RUNAD+1

  STX _IOCB7_+4   ;ICBUFA
  STY _IOCB7_+5   ;ICBUFA+1
  LDA #255
  STA _IOCB7_+0
  LDX #3
  STX _IOCB7_+2   ;ICCMD
  INX
  STX _IOCB7_+10  ;ICAX1
  LDX #7*16
  STX _IOCB7_+9   ;ICBUFL+1
  JSR $E456
  BMI _error_loadDOS_  ;not open

  LDA #7
  STA _IOCB7_+2   ;ICCMD
_loadDOS1_:
  LDX <_bufforDOS_      
  LDY >_bufforDOS_      
  STX _IOCB7_+4   ;ICBUFA
  STY _IOCB7_+5   ;ICBUFA+1
  LDX <2
  LDY >2
  STX _IOCB7_+8   ;ICBUFL
  STY _IOCB7_+9   ;ICBUFL+1
  LDX #7*16
  JSR $E456
  BMI _ok_loadDOS_  ;not load

  LDA #255
  CMP _bufforDOS_
  BNE _error_loadDOS_  ;not the dos file
  CMP _bufforDOS_+1
  BNE _error_loadDOS_  ;not the dos file

  LDA <4
  STA _IOCB7_+8   ;ICBUFL
  LDX #7*16
  JSR $E456
  BPL _skip_loadDOS_

_ok_loadDOS_:
  LDA #255
  STA _IOCB7_+0
  JMP ($02E0)
        
_skip_loadDOS_:
  LDA _bufforDOS_
  STA _IOCB7_+4   ;ICBUFA
  LDA _bufforDOS_+1
  STA _IOCB7_+5   ;ICBUFA+1

  LDA _bufforDOS_+2
  SEC
  SBC _bufforDOS_
  STA _IOCB7_+8   ;ICBUFL
  LDA _bufforDOS_+3
  SBC _bufforDOS_+1
  STA _IOCB7_+9   ;ICBUFL+1
  INC _IOCB7_+8
  BNE *+5
  INC _IOCB7_+9
  LDX #7*16
  JSR $E456
  BPL _loadDOS1_
_error_loadDOS_:
  LDA _IOCB7_+3  ;STATUS
  LDX #255      ;N=1
_retload_:
  RTS
_bufforDOS_ db 0,0,0,0
ENDP
;-----------------------------------------------------------------------------
; Load the file into memory from disk.
; in: ((0)) - the address.
;        AX - the name of file.
; out:   NF - set if error.
;-----------------------------------------------------------------------------
Load PROC ((0)),AX
 stx 944+4
 sta 944+5
 lda #255
 sta 944+0
 lda #3
 sta 944+2
 lda #12
 sta 944+10
 ldx #7*16
 stx 944+9
 jsr 58454
 bmi _error_load_
 lda #7
 sta 944+2
 lda 0
 sta 944+4
 lda 1
 sta 944+5
 lda #255
 sta 944+8
 sta 944+9
 ldx #7*16
 jsr 58454
 cpy #136
 bne _error_load_
 lda #255
 sta 944+0                          ;136=end of file!
 lda #0 ;N=0
 rts    ;the file loaded
_error_load_:
 lda 944+3 ;status
 ldx #255 ;N=1
 rts
ENDP
;-----------------------------------------------------------------------------
; Save the file from memory to disk.
; in: ((0)) - the address.
;     ((2)) - how many bytes.
;        YX - the name of file.
; out:   NF - set if error.
;-----------------------------------------------------------------------------
Save PROC ((0)),((2)),YX
 stx 944+4
 sty 944+5
 lda #255
 sta 944+0
 lda #3
 sta 944+2
 lda #8
 sta 944+10
 ldx #7*16
 stx 944+9
 jsr 58454
 bmi _error_save_

 lda #11
 sta 944+2
 ldx 0
 ldy 1
 stx 944+4
 sty 944+5
 lda 2
 sta 944+8
 lda 3
 sta 944+9
 ldx #7*16
 jsr 58454
 bmi _error_save_

 lda #255
 sta 944+0
 lda #0 ;N=0
 rts

_error_save_:
 lda 944+3
 ldx #255 ;N=1
 rts
ENDP
