home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
06
/
tricks
/
dosenvir.inc
< prev
next >
Wrap
Text File
|
1990-03-08
|
3KB
|
122 lines
'* ------------------------------------------------------- *
'* DOSENVIR.INC *
'* (c) 1990 M.Hoffmann & TOOLBOX *
'* ------------------------------------------------------- *
'* "name" liefert Wert oder "" wenn nicht gefunden *
'* "name=" löscht Var und liefert "√" oder *
'* "" wenn nicht gefunden *
'* "name=wert" setzt Var und liefert "√" oder *
'* "" wenn nicht möglich *
'* FNEnv$ liefert ? bei fehlendem Argument und *, *
'* wenn Out_of_Buf_Space *
'* ------------------------------------------------------- *
DEF FNEnv$ (Arg$)
LOCAL DosVarName$ ' Name der DosVariablen
LOCAL DosVarValue$ ' Wert der DosVariablen
LOCAL i ' diverses
LOCAL j ' diverses
LOCAL Funktion ' Flag
LOCAL Buf$ ' Puffer für Environment
LOCAL Parm[] ' Parameter für MemMove
LOCAL PSP.Addr ' Adresse eines PSP
LOCAL Calling.PSP ' Adresse eines PSP
LOCAL Env.Addr ' Adresse COMMAND.COM-Environment
LOCAL Env.Len ' Länge COMMAND.COM-Environment
DIM Parm[0:4]
IF Arg$ = "" THEN
FNEnv$ = "?"
EXIT DEF
END IF
i = INSTR(Arg$,"=")
IF i > 0 THEN
DosVarName$ = UCASE$(LEFT$(Arg$,i-1))
DosVarValue$ = MID$(Arg$,i+1)
IF DosVarValue$ = "" THEN
Funktion = -1
ELSE
Funktion = +1
END IF
ELSE
Funktion = 0
DosVarName$ = UCASE$(Arg$)
END IF
REG %AX,&H6200
CALL INTERRUPT &H21
PSP.Addr = REG(%BX)
DEF SEG = PSP.Addr
Calling.PSP = PEEK(&H16)+256*PEEK(&H17)
DO
PSP.Addr = Calling.PSP
DEF SEG = PSP.Addr
Calling.PSP = PEEK(&H16)+256*PEEK(&H17)
LOOP UNTIL PSP.Addr = Calling.PSP
Env.Addr = PEEK(&H2C)+256*PEEK(&H2D)
DEF SEG = Env.Addr - 1
Env.Len = (PEEK(&H03)+256*PEEK(&H04))
Env.Len = Env.Len * 16
IF Env.Len > FRE("")-100 THEN
FNEnv$ = "*"
EXIT DEF
END IF
Buf$ = SPACE$(Env.Len)
CALL StrngAdr(Buf$,Parm[2],Parm[3])
Parm[0] = Env.Addr
Parm[1] = 0
Parm[4] = Env.Len
CALL MemMove(Parm())
i = INSTR(Buf$,CHR$(0)+DosVarName$+"=")
IF i > 1 THEN
INCR i
ELSE
i = INSTR(Buf$,DosVarName$+"=")
END IF
IF Funktion = 0 AND i > 0 THEN
i = i + LEN(DosVarName$)+1
j = INSTR(i,Buf$,CHR$(0))
j = j - i
FNEnv$ = MID$(Buf$,i,j)
EXIT DEF
ELSEIF Funktion = -1 AND i > 0 THEN
j = INSTR(i,Buf$,CHR$(0))
Buf$ = LEFT$(Buf$,i-1)+MID$(Buf$,j+1)
Funktion = 9
ELSEIF Funktion = +1 THEN
IF i > 0 THEN
j = INSTR(i,Buf$,CHR$(0))
Buf$ = LEFT$(Buf$,i-1)+MID$(Buf$,j+1)
END IF
j = INSTR(Buf$,CHR$(0)+CHR$(0))+1
IF j + LEN(Arg$) + 1 > Env.Len THEN
EXIT DEF
END IF
Buf$ = LEFT$(Buf$,j-1)+_
DosVarName$+"="+DosVarValue$+_
CHR$(0)+CHR$(0)
Funktion = 9
END IF
IF Funktion = 9 THEN
CALL StrngAdr(Buf$,Parm[0],Parm[1])
Parm[2] = Env.Addr
Parm[3] = 0
Parm[4] = Env.Len
CALL MemMove(Parm())
FNEnv$ = "√"
END IF
END DEF
'* ------------------------------------------------------- *
'* Ende von DOSENVIR.INC *