dey ; Parm count < 4 shouldn't be needed to be...
dey ; ...checked (it generates a c compiler warning)
dey
- dey
- beq parmok ; Branch if parameter count ok
- jsr addysp ; Fix stack, throw away unused parameters
+ dey
+ beq parmok ; Branch if parameter count ok
+ jsr addysp ; Fix stack, throw away unused parameters
; Parameters ok. Pop the flags and save them into tmp3
jsr popax ; Get name
jsr fnparse ; Parse it
- cmp #0
+ tax
bne oserror ; Bail out if problem with name
; Get a free file handle and remember it in tmp2
cmp #O_RDONLY ; Open for reading?
beq doread ; Yes: Branch
cmp #(O_WRONLY | O_CREAT) ; Open for writing?
- beq flagsok
+ beq dowrite
; Invalid open mode
oserror:jmp __mappederrno
+; Read bit is set. Add an 'r' to the name
+
+doread: lda #'r'
+ jsr fnaddmode ; Add the mode to the name
+ lda #LFN_READ
+ bne common ; Branch always
+
; If O_TRUNC is set, scratch the file, but ignore any errors
-flagsok:
+dowrite:
lda tmp3
and #O_TRUNC
beq notrunc
notrunc:
lda tmp3 ; Get the mode again
- ldx #'a'
and #O_APPEND ; Append mode?
bne append ; Branch if yes
- ldx #'w'
-append: txa
- jsr fncomplete ; Add type and mode to the name
-; Setup the real open flags
+; Setup the name for create mode
- lda #LFN_WRITE
- bne common
+ lda #'w'
+ jsr fncomplete ; Add type and mode to the name
+ jmp appendcreate
-; Read bit is set. Add an 'r' to the name
+; Append bit is set. Add an 'a' to the name
-doread: lda #'r'
- jsr fnaddmode ; Add the mode to the name
- lda #LFN_READ
+append: lda #'a'
+ jsr fnaddmode ; Add open mode to file name
+appendcreate:
+ lda #LFN_WRITE
; Common read/write code. Flags in A, handle in tmp2
.endproc
+