cc65/libsrc/common/getenv.s

47 lines
1.1 KiB
ArmAsm

;
; Ullrich von Bassewitz, 2005-04-21
;
; char* __fastcall__ getenv (const char* name);
;
; Beware: putenv() knows about zero page usage in this module!
;
.export _getenv
.import __environ, __envcount
.import searchenv
.import return0
.import ptr1:zp, ptr3:zp, tmp1:zp
.code
;----------------------------------------------------------------------------
; getenv()
.proc _getenv
sta ptr1
stx ptr1+1 ; Save name
; Search for the string in the environment. searchenv will set the N flag if
; the string is not found, otherwise X contains the index of the entry, ptr3
; contains the entry and Y the offset of the '=' in the string.
jsr searchenv
bpl found
jmp return0 ; Not found, return NULL
; Found the entry. Calculate the pointer to the right side of the environment
; variable. Because we want to skip the '=', we will set the carry.
found: ldx ptr3+1 ; High byte of result
tya
sec
adc ptr3
bcc @L9
inx
@L9: rts
.endproc