File: getenv.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (46 lines) | stat: -rw-r--r-- 1,142 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
;
; 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