;
; 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