mirror of
https://github.com/cc65/cc65.git
synced 2024-11-02 18:06:48 +00:00
47 lines
1.1 KiB
ArmAsm
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
|
||
|
|
||
|
|