home *** CD-ROM | disk | FTP | other *** search
- .if .not .def _CIO_
- _CIO_ = 1
-
- .if .not .def _SYSTEM_
- .include #system
- .endif
- .if .not .def _MACROS_
- .include #macros
- .endif
-
- @READ = 4
- @WRITE = 8
- @APPEND = 9
- @UPDATE = @WRITE + @READ
-
- @S_TXTWIN = 16
- @S_NOCLEAR = 32
-
- ; -------------------------------------------------------------
- ; For the macro...
- ; CH_X channel[,select]
- ; will get us
- ; channel in X
- ; -------------------------------------------------------------
- .macro ch_x
- .if %0 = 1 .or .not [%2 & @special] ;; this works as in `C`
- .if %0 = 2 .and .not [%2 & @p1]
- ldx #%1
- lda _op_tab,x
- tax
- .else
- .if %1 >= 8
- ldx #%1
- .else
- ldx #%1*$10
- .endif
- .endif
- .endif
- .endm
-
- ; -------------------------------------------------------------
- ; For the macro...
- ; OPEN channel,aux1,aux2,filespec[,select]
- ; will get us
- ; channel in X
- ; -------------------------------------------------------------
- .macro open
- @3 .= @p1 ! @p2 ! @p3 ! @p4 ! @s4
- .if %0 = 5
- @3 .= %5
- .endif
- ch_x %1,@3
- @moke_x %2,icax1,[@3 & @p2] / @p2
- @moke_x %3,icax2,[@3 & @p3] / @p3
- .if @3 & @s4
- jmp *+%4+4
- .byte %$4,0
- @dmoad *-%4-1,@p1
- .else
- @dmoad %4,[@3 & @p4] / @p4
- .endif
- jsr open
- .endm
-
- ; ------------------------------------------------------------
- ; For the macro...
- ; CLOSE channel[,select]
- ; will get us
- ; channel in X
- ; ------------------------------------------------------------
- .macro close
- @3 .= @p1 ! @special
- .if %0 = 2
- @3 .= %2
- .endif
- ch_x %1,@3
- jsr close
- .endm
-
- ; -------------------------------------------------------------
- ; Generic macro for calls of the form
- ; channel,buffer,len[,select]
- ; Like INPUT PRINT BPUT BGET
- ; Usage: IO channel,buffer,len,select,jumplabel
- ; Default assumption: channel in X everything POKEd
- ; -------------------------------------------------------------
- .macro _io
- ch_x %1,%4
- @dmoke_x %3,icbll,[%4 & @p3] / @p3
- @dmoad %2,[%4 & @p2] / @p2
- jsr %5
- .endm
-
- ; -------------------------------------------------------------
- ; For the macros...
- ; BPUT channel,buffer,len[,select]]
- ; BGET channel,buffer,len[,select]
- ; PRINT channel,buffer[,len[,select]]
- ; INPUT channel,buffer,len[,select]
- ; The ommission of len on PRINT is only recommended
- ; for quick'n dirty hacks, since your wasting 3 bytes.
- ; Assumption:
- ; channel in X everything POKEd
- ; -------------------------------------------------------------
- .macro bput
- @3 .= @p1 ! @p2 ! @p3
- .if %0 = 4
- @3 .= %4
- .endif
- _io %1,%2,%3,@3,bput
- .endm
-
- .macro bget
- @3 .= @p1 ! @p2 ! @p3
- .if %0 = 4
- @3 .= %4
- .endif
- _io %1,%2,%3,@3,bget
- .endm
-
- .macro print
- .if %0=1
- putc %1,155
- .else
- @3 .= @p1 ! @p2 ! @p3
- .if %0 > 3
- @3 .= %4
- .else
- .if %0 = 2
- @3 .= @3 ! @s2
- .endif
- .endif
- .if @3 & @s2
- jmp *+%2+3
- .byte %$2
- _io %1,*-%2,%2,[@3 & @special] ! [@3 & @p1] ! @p2 ! @p3,print
- .else
- _io %1,%2,%3,@3,print
- .endif
- .endif
- .endm
-
- .macro input
- @3 .= @p1 ! @p2 ! @p3
- .if %0 = 4
- @3 .= %4
- .endif
- _io %1,%2,%3,@3,input
- .endm
-
- ; -------------------------------------------------------------
- ; For the macro...
- ; XIO command,channel,aux1,aux2,buffer[,select]
- ; will get us
- ; channel in X
- ; -------------------------------------------------------------
- .macro xio
- @3 .= @p1 + @p2 + @p3 + @p4 + @p5
- .if %0 = 6
- @3 .= %6
- .endif
- ch_x %2,[@3 & @p2]/@p2 ! [@3 & @special]
- @moke_x %1,iccom, @3
- @moke_x %3,icax1,[@3 & @p3] / @p3
- @moke_x %4,icax2,[@3 & @p3] / @p4
- @dmoad %5,[@3 & @p5] / @p5
- jsr ciov
- .endm
-
-
- .macro putc
- @3 .= @p1 + @p2
- .if %0 = 3
- @3 .= %3
- .endif
- ch_x %1, @3
- @moad %2,[@3 & @p2] / @p2,@y
- jsr putc
- .endm
-
- .macro getc
- @3 .= @p1
- .if %0 = 2
- @3 .= %2
- .endif
- ch_x %1, @3
- jsr getc
- .endm
-
- .endif
-
-
-