]> git.sur5r.net Git - cc65/commitdiff
support for arguments (with DeskTop drag&drop feature)
authorizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 2 May 2003 20:16:32 +0000 (20:16 +0000)
committerizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 2 May 2003 20:16:32 +0000 (20:16 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2133 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/geos/devel/mainargs.s

index ebe6d03481e892b017eb3fec7811f5bb7fc429a5..1f61fec489cbe9c0a3ad46a1f56fa4f3064b193b 100644 (file)
@@ -1,21 +1,77 @@
 ;
 ; Ullrich von Bassewitz, 2003-03-07
+; Maciej Witkowiak, 2003-05-02
 ;
 ; Setup arguments for main
 ;
-
+; There is always either 1 or 3 arguments:
+; <program name>,0
+; or
+; <program name>, <data file name>, <data disk name>, 0
+; the 2nd case is when using DeskTop user drags an icon of a file and drops it
+; on icon of your application
+;
 
        .constructor    initmainargs, 24
                .import         __argc, __argv
 
+       .include        "../inc/const.inc"
+       .include        "../inc/geossym.inc"
 
 ;---------------------------------------------------------------------------
 ; Setup arguments for main
 
 .proc   initmainargs
 
+; Setup a pointer to our argv vector
+
+        lda     #<argv
+        sta     __argv
+        lda     #>argv
+        sta     __argv+1
+
+; Copy program name
+
+       ldy     #0
+@fn_loop:
+       lda     dirEntryBuf+OFF_FNAME,y
+       cmp     #$a0
+       beq     @fn_end
+       sta     argv0,y
+       iny
+       cpy     #16
+       bne     @fn_loop
+@fn_end:
+       lda     #0
+       sta     argv0,y
+       sta     __argc+1
+
+; Check if there are any more arguments
+
+       lda     dataFileName
+       bne     @threeargs
+       ldx     #0              ; no dataFileName - NULL the 2nd argument
+       stx     argv+2
+       stx     argv+3
+       inx                     ; there is only one argument
+       bne     @setargc
+@threeargs:
+       ldx     #3              ; there are three arguments
+@setargc:
+       stx     __argc
         rts
 
 .endproc
 
+;---------------------------------------------------------------------------
+; Data
+
+.data
+
+argv:   .word   argv0           ; Pointer to program name
+        .word   dataFileName    ; dataFileName or NULL if last one
+        .word   dataDiskName    ; dataDiskName
+       .word   $0000           ; last one must be NULL
 
+.bss
+argv0:  .res    17              ; Program name