; ; Christian Groessler, Oct-2000 ; ; allocates a new fd in the indirection table ; the fdtable itself is defined here ; .include "atari.inc" .include "fd.inc" .importzp tmp1 .export fdt_to_fdi,getfd .export fd_table,fd_index .export ___fd_table,___fd_index ; for test(debug purposes only .data ___fd_index: fd_index: ; fd number is index into this table, entry's value specifies the fd_table entry .res MAX_FD_INDEX,$ff ___fd_table: fd_table: ; each entry represents an open iocb .byte 0,0,'E',0 ; system console, app starts with opened iocb #0 for E: .byte 0,$ff,0,0 .byte 0,$ff,0,0 .byte 0,$ff,0,0 .byte 0,$ff,0,0 .byte 0,$ff,0,0 .byte 0,$ff,0,0 .byte 0,$ff,0,0 .code ; fdt_to_fdi ; returns a fd_index entry pointing to the given ft_table entry ; get fd_table entry in A ; return C = 0/1 for OK/error ; return fd_index entry in A if OK ; registers destroyed .proc fdt_to_fdi tay lda #$ff tax inx loop: cmp fd_index,x beq found inx cpx #MAX_FD_INDEX bcc loop rts found: tya sta fd_index,x txa clc rts .endproc ; getfd ; get a new fd pointing to a ft_table entry ; usage counter of ft_table entry incremented ; A - fd_table entry ; return C = 0/1 for OK/error ; returns fd in A if OK ; registers destroyed, tmp1 destroyed .proc getfd sta tmp1 ; save fd_table entry jsr fdt_to_fdi bcs error pha lda tmp1 asl a asl a ; also clears C tax inc fd_table+ft_usa,x ; increment usage counter pla error: rts .endproc