home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "GetEnv"
- * Jens Gelhar 28.01.92, 08.04.94, 20.09.94
-
- xdef _getenv,getenv__PCc
-
- xref _DosBase,malloc__Ui
-
- GetVar = -906
-
- _getenv:
- getenv__PCc:
- movem.l d1-d7/a0-a2/a6,-(a7)
- move.l a7,a2
- move.l _DosBase,a6
- cmp.w #36,20(a6) ; mindestens V36
- blt fail
- moveq #32,d6 ; Buffer-Größe
- sub.l d6,a7
- try move.l 11*4+4(a2),d1 ; Name
- move.l a7,d2 ; Buffer
- move.l d6,d3 ; Size
- moveq #0,d4 ; Flags
- jsr GetVar(a6)
- tst.l d0
- bmi.b fail
- addq.l #1,d0 ; Nullbyte gehört dazu!
- cmp.l d6,d0
- blo.b found
- ; nochmal mir größerem Buffer versuchen:
- sub.l d6,a7
- add.l d6,d6
- bra.b try
- found ; Wert mit Länge d0 liegt auf Stack
- move.l 11*4+4(a2),a1 ; Name
- move.l VarList,a0
- find ; Prüfen, ob Wert schon in Liste:
- cmp.w #0,a0
- beq.b new
- cmp.l 4(a0),d1
- bne.b next
- cmp.l 8(a0),d0
- beq.b here
- next move.l (a0),a0
- bra.b find
- new movem.l d0/d1,-(a7)
- add.l #14,d0
- move.l d0,-(a7)
- jsr malloc__Ui
- addq.l #4,a7
- move.l d0,a0
- movem.l (a7)+,d0/d1
- cmp.w #0,a0
- beq.b fail
- move.l VarList,(a0)
- move.l a0,VarList
- here ; d0/d1 bei a0 einfügen:
- move.l d1,4(a0)
- move.l d0,8(a0)
- lea 12(a0),a0
- move.l a0,d0
- move.l a7,a1
- subq.l #1,d2
- copy move.b (a1)+,(a0)+
- dbeq.b d2,copy
- clr.b (a0)
- bra.b okay
- fail moveq #0,d0
- okay move.l a2,a7
- movem.l (a7)+,d1-d7/a0-a2/a6
- rts
-
- SECTION "data",DATA
-
- VarList:
- dc.l 0
-
- end
-