home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* 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 *
-
-