]> git.sur5r.net Git - cc65/blob - libsrc/atari/sysmkdir.s
lseek: Implement additional feedback from PR #723.
[cc65] / libsrc / atari / sysmkdir.s
1 ;
2 ; Initial version: Stefan Haubenthal, 2005-12-24
3 ; Some fixes: Christian Groessler, 2009-01-28
4 ;
5 ; unsigned char _sysmkdir (const char* name, ...);
6 ; for SpartaDOS and MYDOS
7 ;
8
9         .include "atari.inc"
10         .include "errno.inc"
11         .import addysp
12         .import popax
13         .import findfreeiocb
14         .importzp tmp4
15 .ifdef  UCASE_FILENAME
16         .importzp tmp3
17         .import ucase_fn
18 .ifdef  DEFAULT_DEVICE
19         .importzp tmp2
20 .endif
21 .endif
22         .export __sysmkdir
23
24 .proc   __sysmkdir
25
26         dey                     ; parm count < 2 shouldn't be needed to be...
27         dey                     ; ...checked (it generates a C compiler warning)
28         beq     parmok          ; branch if parameter count ok
29         jsr     addysp          ; fix stack, throw away unused parameters
30
31 parmok: jsr     popax           ; get name
32         pha                     ; save input parameter
33         txa
34         pha
35
36         jsr     findfreeiocb
37         beq     iocbok          ; we found one
38
39         pla
40         pla                     ; fix up stack
41
42         lda     #TMOF           ; too many open files
43         rts
44
45 iocbok: stx     tmp4            ; remember IOCB index
46         pla
47         tax
48         pla                     ; get argument again
49
50 .ifdef  UCASE_FILENAME
51
52 .ifdef  DEFAULT_DEVICE
53         ldy     #$80
54         sty     tmp2            ; set flag for ucase_fn
55 .endif
56         jsr     ucase_fn
57         bcc     ucok1
58
59         lda     #183            ; see oserror.s
60         rts
61 ucok1:
62
63 .endif  ; defined UCASE_FILENAME
64
65         ldy     tmp4            ; IOCB index
66         sta     ICBAL,y         ; store pointer to filename
67         txa
68         sta     ICBAH,y
69         tya
70         tax
71         lda     #MKDIR
72         sta     ICCOM,x
73         lda     #8
74         sta     ICAX1,x
75         lda     #0
76         sta     ICAX2,x
77         sta     ICBLL,x
78         sta     ICBLH,x
79         jsr     CIOV
80
81 .ifdef  UCASE_FILENAME
82         tya
83         pha
84         ldy     tmp3            ; get size
85         jsr     addysp          ; free used space on the stack
86         pla
87         tay
88 .endif  ; defined UCASE_FILENAME
89
90         bmi     cioerr
91         lda     #0
92         rts
93 cioerr: tya
94         rts
95
96 .endproc        ; __sysmkdir