Environment variabelen instellen met Pascal 7.0

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • Nighty
  • Registratie: November 2000
  • Laatst online: 25-08 09:35
Op dit moment ben ik bezig met een klein programma'tje. Op dit moment zit ik vast bij het instellen van Environment Variabelen (PATH, COMSPEC, etc.).
Binnen TP7 heb je een functie GetEnv, waarmee je de waarde van een variabele kunt opvragen. Maar een SetEnv waarmee je een variabele kunt wijzigen is er niet. Heb het nu geprobeerd met het Exec commando, maar ook dat werkt niet.
code:
1
Exec('SET','TEST='+waarde);

Weet iemand hoe dit mogelijk is bij TP7??

Verwijderd

Was het niet iets met PutEnv?

Het is alweer wat jaartjes geleden dat ik programmeerde in TP

  • Nighty
  • Registratie: November 2000
  • Laatst online: 25-08 09:35
Op dinsdag 09 oktober 2001 12:59 schreef Kyori het volgende:
Was het niet iets met PutEnv?
Heb gelijk even gekeken, maar helaas :'(
In de help van Pascal staan meestal verwante commando's/procedures, maar bij GetEnv staat dus niets in de richting van PutEnv, SetEnv, etc.

Het is voor mij ook lang geleden :) Is weer even inkomen.

  • Nighty
  • Registratie: November 2000
  • Laatst online: 25-08 09:35
Heb even op Internet gezocht naar PutEnv. Dit zit in GNU Pascal. Ik gebruik Borland Turbo Pascal 7.0.

Verwijderd

Op dinsdag 09 oktober 2001 13:24 schreef BoBo het volgende:
Heb even op Internet gezocht naar PutEnv. Dit zit in GNU Pascal. Ik gebruik Borland Turbo Pascal 7.0.
GNU Pascal? Dat kan kloppen, ik pascalde nogal veel in mijn Linux tijd :).

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Gevonden op usenet:
code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Unit SetEnvir;

INTERFACE

Uses Dos;

Type EnvSize = 0..16383;

Procedure SetEnv(EnvVar,Value:String);

{-----------------------------------------------------------------------
 This procedure may be used to setup or change environment variables
 in the environment of the resident copy of COMMAND.COM or 4DOS.COM

 Note that this will be the ACTIVE copy of the command interpreter, NOT
 the primary copy!

 This unit is not tested under DR-DOS.

 Any call of SetEnv must be followed by checking ioresult. The procedure
 may return error 8 (out of memory) on too less space in te environment.
-----------------------------------------------------------------------}

IMPLEMENTATION

PROCEDURE SetEnv(EnvVar, Value : STRING);
VAR
  Link,
  PrevLink,
  EnvirP   : word;
  Size,
  Scan,
  Where,
  Dif   : integer;
  NewVar,
  OldVar,
  Test     : STRING;

  FUNCTION CheckSpace(Wanted : integer) : boolean;
  BEGIN
    IF wanted + Scan > Size THEN
    inoutres := 8;
    CheckSpace := inoutres = 0;
  END;

BEGIN
  IF inoutres >0 THEN
    Exit;
  FOR Scan := 1 TO Length(EnvVar) DO
    EnvVar[Scan] := UpCase(EnvVar[Scan]);
  EnvVar := EnvVar + '=';
  NewVar := EnvVar + Value + #0;
  link   := PrefixSeg;
  REPEAT
    PrevLink := Link;
    Link := memw [link : $16];
  UNTIL Link = prevlink;
  EnvirP := memw [Link : $2C];
  Size   := memw [Envirp - 1 : $03] * 16;
  Scan   := 0;
  Where  := -1;
  WHILE mem[EnvirP : Scan] <> 0 DO
  BEGIN
    move(mem[EnvirP : scan], Test[1], 255);
    Test[0] := #255;
    Test[0] := chr(pos(#0, Test));
    IF pos(EnvVar, Test) = 1 THEN
    BEGIN
    Where  := Scan;
    OldVar := Test;
    END;
    Scan := Scan + Length(Test);
  END;
  IF Where = -1 THEN
  BEGIN
    Where  := Scan;
    NewVar := NewVar + #0#0#0;
    IF NOT CheckSpace(Length(NewVar)) THEN
    Exit;
  END
  ELSE
  BEGIN
    Dif := Length(NewVar) - Length(OldVar);
    IF Dif > 0 THEN
    BEGIN
    IF NOT CheckSpace(Dif) THEN
      Exit;
    move(mem[EnvirP : Where], mem[EnvirP : Where + Dif], Scan - Where + 3);
    END
    ELSE
    IF Dif < 0 THEN
    move(mem[EnvirP : Where - Dif], mem[EnvirP:Where],Size - Where + Dif);
  END;
  move(NewVar[1], mem[EnvirP : Where], Length(NewVar));
END;

END.

Het is dus nogal lastig om zomaar env. variables te wijzigen onder DOS. Bovenstaande zooi werkt alleen voor de huidige COMMAND.COM, niet voor z'n parents. niet echt super effectief dus. Waarschijnlijk is het handiger om je programma aan te roepen met 'n batch file die env. variables voor je set ofzo.
Pagina: 1