]> git.sur5r.net Git - cc65/blob - libsrc/atari/posixdirent.s
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / atari / posixdirent.s
1 ; Native: Shawn Jefferson, December 2005
2 ; POSIX: Stefan Haubenthal, April 2008
3
4                 .include  "atari.inc"
5                 .export   _opendir, _readdir, _closedir
6                 .import   findfreeiocb, clriocb
7                 .import   __oserror, return0, __do_oserror
8                 .importzp ptr1, tmp1
9 .ifdef  DEFAULT_DEVICE
10                 .import __defdev
11 .endif
12
13
14 .proc   _opendir
15                 sta     ptr1
16                 stx     ptr1+1
17                 jsr     findfreeiocb
18                 beq     @iocbok
19                 bne     cioerr
20 @iocbok:        stx     diriocb
21                 jsr     clriocb
22                 ldx     diriocb
23                 ldy     #0              ; '.' -> "D:*.*"
24                 lda     (ptr1),y
25                 cmp     #'.'
26                 bne     @use_parm
27
28 ; "." was given as parameter, use default device/dir
29
30 .ifdef DEFAULT_DEVICE
31                 ; construct a "Dn:*.*" like string from the default drive
32                 lda     __defdev+1
33                 sta     dddefdev+1      ; copy drive number (overwrite 2nd 'D')
34                 lda     #<dddefdev
35                 sta     ICBAL,x
36                 lda     #>dddefdev
37                 sta     ICBAH,x
38                 bne     @cont
39 .else
40                 lda     #<defdev
41                 sta     ICBAL,x
42                 lda     #>defdev
43                 sta     ICBAH,x
44                 bne     @cont
45 .endif
46
47 @use_parm:      lda     ptr1
48                 sta     ICBAL,x
49                 lda     ptr1+1
50                 sta     ICBAH,x
51
52 @cont:          lda     #OPEN
53                 sta     ICCOM,x
54                 lda     #OPNIN|DIRECT
55                 sta     ICAX1,x
56                 jsr     CIOV
57                 bmi     cioerr
58                 lda     #0
59                 sta     __oserror
60                 tax
61                 lda     diriocb
62                 rts
63 .endproc
64
65 cioerr:         sty     __oserror
66                 jmp     return0
67
68 .proc   _readdir
69                 tax
70                 lda     #GETREC
71                 sta     ICCOM,x
72                 lda     #<entry
73                 sta     ICBAL,x
74                 sta     ptr1
75                 lda     #>entry
76                 sta     ICBAH,x
77                 sta     ptr1+1
78                 lda     #DSCTSZ
79                 sta     ICBLL,x
80                 lda     #0
81                 sta     ICBLH,x
82                 jsr     CIOV
83                 bmi     cioerr
84                 ldy     #0              ; FREE SECTORS
85                 lda     (ptr1),y
86                 cmp     #'0'
87                 bcs     cioerr
88                 dey
89 @next:          iny                     ; remove trailing spaces
90                 iny
91                 iny
92                 lda     (ptr1),y
93                 dey
94                 dey
95                 sta     (ptr1),y
96                 cpy     #8
97                 bcs     @break
98                 cmp     #' '
99                 bne     @next
100
101 @break:         lda     #'.'            ; extension dot
102                 sta     (ptr1),y
103                 iny                     ; copy extension
104                 sty     tmp1
105                 ldy     #10
106                 lda     (ptr1),y
107                 cmp     #' '
108                 bne     @hasext
109
110 ; no extension present: remove the trailing dot and be done
111                 ldy     tmp1
112                 dey
113                 bne     @done
114
115 @hasext:        jsr     copychar
116                 ldy     #13             ; d_type
117                 sta     (ptr1),y
118                 ldy     #11
119                 jsr     copychar
120                 ldy     #12
121                 jsr     copychar
122
123 @done:          lda     #0              ; end of string
124                 sta     (ptr1),y
125                 lda     ptr1
126                 ldx     ptr1+1
127                 rts
128
129
130 copychar:       lda     (ptr1),y        ; src=y dest=tmp1
131                 ldy     tmp1
132                 cmp     #' '
133                 beq     @break
134                 sta     (ptr1),y
135                 iny
136                 sty     tmp1
137 @break:         rts
138 .endproc
139
140 .proc   _closedir
141                 tax
142                 lda     #CLOSE
143                 sta     ICCOM,x
144                 jsr     CIOV
145                 bmi     @cioerr
146                 ldx     #0
147                 stx     __oserror               ; clear system specific error code
148                 txa
149                 rts
150 @cioerr:        jmp     __do_oserror
151 .endproc
152
153                 .data
154 .ifdef DEFAULT_DEVICE
155 dddefdev:       .byte   "D"
156 .endif
157 defdev:         .asciiz "D:*.*"
158
159                 .bss
160 diriocb:        .res    1
161 entry:          .res    DSCTSZ