]> git.sur5r.net Git - cc65/blob - libsrc/geos-cbm/devel/mainargs.s
d5ffbf3e5a398993ba414a0db6d9a212bbbf7f06
[cc65] / libsrc / geos-cbm / devel / mainargs.s
1 ;
2 ; Ullrich von Bassewitz, 2003-03-07
3 ; Maciej Witkowiak, 2003-05-02
4 ;
5 ; Setup arguments for main
6 ;
7 ; There is always either 1 or 3 arguments:
8 ; <program name>,0
9 ; or
10 ; <program name>, <data file name>, <data disk name>, 0
11 ; the 2nd case is when using DeskTop user drags an icon of a file and drops it
12 ; on icon of your application
13 ;
14
15         .constructor    initmainargs, 24
16         .import         __argc, __argv
17
18         .include        "../inc/const.inc"
19         .include        "../inc/geossym.inc"
20
21 ;---------------------------------------------------------------------------
22 ; Setup arguments for main
23
24 .segment        "INIT"
25
26 .proc   initmainargs
27
28 ; Setup a pointer to our argv vector
29
30         lda     #<argv
31         sta     __argv
32         lda     #>argv
33         sta     __argv+1
34
35 ; Copy program name
36
37         ldy     #0
38 @fn_loop:
39         lda     dirEntryBuf+OFF_FNAME,y
40         cmp     #$a0
41         beq     @fn_end
42         sta     argv0,y
43         iny
44         cpy     #16+1
45         bne     @fn_loop
46 @fn_end:
47         lda     #0
48         sta     argv0,y
49         sta     __argc+1
50
51 ; Check if there are any more arguments
52
53         lda     dataFileName
54         bne     @threeargs
55         ldx     #0              ; no dataFileName - NULL the 2nd argument
56         stx     argv+2
57         stx     argv+3
58         inx                     ; there is only one argument
59         bne     @setargc
60 @threeargs:
61         ldx     #3              ; there are three arguments
62 @setargc:
63         stx     __argc
64         rts
65
66 .endproc
67
68 ;---------------------------------------------------------------------------
69 ; Data
70
71 .data
72
73 argv:   .word   argv0           ; Pointer to program name
74         .word   dataFileName    ; dataFileName or NULL if last one
75         .word   dataDiskName    ; dataDiskName
76         .word   $0000           ; last one must be NULL
77
78 .bss
79 argv0:  .res    17              ; Program name