home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 06 / tricks / dosenvir.inc < prev    next >
Text File  |  1990-03-08  |  3KB  |  122 lines

  1. '* ------------------------------------------------------- *
  2. '*                    DOSENVIR.INC                         *
  3. '*          (c) 1990 M.Hoffmann & TOOLBOX                  *
  4. '* ------------------------------------------------------- *
  5. '* "name"        liefert Wert oder "" wenn nicht gefunden  *
  6. '* "name="       löscht Var und liefert "√" oder           *
  7. '*               "" wenn nicht gefunden                    *
  8. '* "name=wert"   setzt Var  und liefert "√" oder           *
  9. '*               "" wenn nicht möglich                     *
  10. '* FNEnv$ liefert ? bei fehlendem Argument und *,          *
  11. '*               wenn Out_of_Buf_Space                     *
  12. '* ------------------------------------------------------- *
  13. DEF FNEnv$ (Arg$)
  14. LOCAL DosVarName$   ' Name der DosVariablen
  15. LOCAL DosVarValue$  ' Wert der DosVariablen
  16. LOCAL i             ' diverses
  17. LOCAL j             ' diverses
  18. LOCAL Funktion      ' Flag
  19. LOCAL Buf$          ' Puffer für Environment
  20. LOCAL Parm[]        ' Parameter für MemMove
  21. LOCAL PSP.Addr      ' Adresse eines PSP
  22. LOCAL Calling.PSP   ' Adresse eines PSP
  23. LOCAL Env.Addr      ' Adresse COMMAND.COM-Environment
  24. LOCAL Env.Len       ' Länge COMMAND.COM-Environment
  25.  
  26. DIM Parm[0:4]
  27.  
  28.   IF Arg$ = "" THEN
  29.       FNEnv$ = "?"
  30.       EXIT DEF
  31.   END IF
  32.  
  33.   i = INSTR(Arg$,"=")
  34.  
  35.   IF i > 0 THEN
  36.     DosVarName$  = UCASE$(LEFT$(Arg$,i-1))
  37.     DosVarValue$ = MID$(Arg$,i+1)
  38.     IF DosVarValue$ = "" THEN
  39.       Funktion = -1
  40.     ELSE
  41.       Funktion = +1
  42.     END IF
  43.   ELSE
  44.     Funktion     = 0
  45.     DosVarName$  = UCASE$(Arg$)
  46.   END IF
  47.  
  48.   REG %AX,&H6200
  49.   CALL INTERRUPT &H21
  50.   PSP.Addr    = REG(%BX)
  51.   DEF SEG     = PSP.Addr
  52.   Calling.PSP = PEEK(&H16)+256*PEEK(&H17)
  53.   DO
  54.     PSP.Addr    = Calling.PSP
  55.     DEF SEG     = PSP.Addr
  56.     Calling.PSP = PEEK(&H16)+256*PEEK(&H17)
  57.   LOOP UNTIL PSP.Addr = Calling.PSP
  58.  
  59.   Env.Addr = PEEK(&H2C)+256*PEEK(&H2D)
  60.   DEF SEG  = Env.Addr - 1
  61.  
  62.   Env.Len  = (PEEK(&H03)+256*PEEK(&H04))
  63.   Env.Len  = Env.Len * 16
  64.  
  65.   IF Env.Len > FRE("")-100 THEN
  66.     FNEnv$ = "*"
  67.     EXIT DEF
  68.   END IF
  69.  
  70.   Buf$ = SPACE$(Env.Len)
  71.   CALL StrngAdr(Buf$,Parm[2],Parm[3])
  72.   Parm[0]  = Env.Addr
  73.   Parm[1]  = 0
  74.   Parm[4]  = Env.Len
  75.   CALL MemMove(Parm())
  76.  
  77.   i = INSTR(Buf$,CHR$(0)+DosVarName$+"=")
  78.   IF i > 1 THEN
  79.     INCR i
  80.   ELSE
  81.     i = INSTR(Buf$,DosVarName$+"=")
  82.   END IF
  83.  
  84.   IF Funktion = 0 AND i > 0 THEN
  85.     i = i + LEN(DosVarName$)+1
  86.     j = INSTR(i,Buf$,CHR$(0))
  87.     j = j - i
  88.     FNEnv$ = MID$(Buf$,i,j)
  89.     EXIT DEF
  90.   ELSEIF Funktion = -1 AND i > 0 THEN
  91.     j = INSTR(i,Buf$,CHR$(0))
  92.     Buf$ = LEFT$(Buf$,i-1)+MID$(Buf$,j+1)
  93.     Funktion = 9
  94.   ELSEIF Funktion = +1 THEN
  95.     IF i > 0 THEN
  96.       j = INSTR(i,Buf$,CHR$(0))
  97.       Buf$ = LEFT$(Buf$,i-1)+MID$(Buf$,j+1)
  98.     END IF
  99.     j = INSTR(Buf$,CHR$(0)+CHR$(0))+1
  100.     IF j + LEN(Arg$) + 1  > Env.Len THEN
  101.       EXIT DEF
  102.     END IF
  103.     Buf$ = LEFT$(Buf$,j-1)+_
  104.              DosVarName$+"="+DosVarValue$+_
  105.              CHR$(0)+CHR$(0)
  106.     Funktion = 9
  107.   END IF
  108.  
  109.   IF Funktion = 9 THEN
  110.     CALL StrngAdr(Buf$,Parm[0],Parm[1])
  111.     Parm[2] = Env.Addr
  112.     Parm[3] = 0
  113.     Parm[4] = Env.Len
  114.     CALL MemMove(Parm())
  115.     FNEnv$ = "√"
  116.   END IF
  117.  
  118. END DEF
  119. '* ------------------------------------------------------- *
  120. '*               Ende von DOSENVIR.INC                     *
  121.  
  122.