home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
549a.lha
/
M2P_v1.0
/
mods.lzh
/
Env.mod
< prev
next >
Wrap
Text File
|
1991-08-10
|
3KB
|
175 lines
(*======================================================================*)
(* Amiga Support Routines, Reading ENV: variables *)
(*======================================================================*)
(* Version: 1.00 Author: Dennis Brueni *)
(* Date: 08-04-91 Changes: Original *)
(*======================================================================*)
IMPLEMENTATION MODULE Env;
IMPORT
FIO,ASCII,Strings;
(*----------------------------------------------------------------------*)
PROCEDURE EnvNameCvt(VAR name,EnvName: ARRAY OF CHAR);
VAR
First4 : ARRAY [0..3] OF CHAR;
BEGIN
Strings.Assign(name,First4);
Strings.Assign(name,EnvName);
Strings.Capitalize(First4);
IF NOT Strings.Equal(First4,'ENV:') THEN
Strings.Insert('ENV:',0,EnvName);
END;
END EnvNameCvt;
(*----------------------------------------------------------------------*)
PROCEDURE GetEnv(name: ARRAY OF CHAR; VAR value: ARRAY OF CHAR);
VAR
EnvFile: FIO.FILE;
i : CARDINAL;
EnvName: Strings.BigString;
tempch : CHAR;
BEGIN
value[0]:=ASCII.NUL;
EnvNameCvt(name,EnvName);
EnvFile:=FIO.Open(EnvName);
IF FIO.GoodFILE(EnvFile) THEN
i:=0;
REPEAT
tempch:=FIO.ReadChar(EnvFile);
value[i]:=tempch;
INC(i);
UNTIL (i>HIGH(value)) OR (tempch=ASCII.EOF);
value[i-1]:=ASCII.NUL;
FIO.Close(EnvFile);
END;
END GetEnv;
(*----------------------------------------------------------------------*)
PROCEDURE SetEnv(name: ARRAY OF CHAR; value: ARRAY OF CHAR);
VAR
EnvFile: FIO.FILE;
EnvName: Strings.BigString;
BEGIN
EnvNameCvt(name,EnvName);
EnvFile:=FIO.Create(EnvName);
IF FIO.GoodFILE(EnvFile) THEN
FIO.WriteString(EnvFile,value);
FIO.Close(EnvFile);
END;
END SetEnv;
(*----------------------------------------------------------------------*)
PROCEDURE PutEnv(str: ARRAY OF CHAR);
VAR
name: Strings.BigString;
i,j : CARDINAL;
BEGIN
Strings.Assign(str,name);
i:=0;
WHILE (i<=HIGH(str)) AND (str[i] # '=') DO
INC(i);
END;
IF (i<=HIGH(name)) AND (i<=HIGH(str)) AND (i#0) THEN
name[i]:=ASCII.NUL;
Strings.Delete(str,0,i+1);
SetEnv(name,str);
END;
END PutEnv;
(*----------------------------------------------------------------------*)
PROCEDURE ParseEnv(VAR str: ARRAY OF CHAR; VAR next: ARRAY OF CHAR):BOOLEAN;
CONST
ArgDelim1 = ';';
ArgDelim2 = ',';
EscDelim = 134C; (* \ *)
QuoteChar = '"';
VAR
InQuote: BOOLEAN;
i,j: CARDINAL;
tempch: CHAR;
done: BOOLEAN;
BEGIN
next[0]:=ASCII.NUL;
i:=0;
j:=0;
InQuote:=FALSE;
done:=FALSE;
LOOP
IF (i>HIGH(str)) OR (j>=HIGH(next)) THEN
EXIT;
END;
tempch:=str[i];
CASE tempch OF
ASCII.LF , ' ',ASCII.HT, ASCII.CR , ASCII.VT :
IF InQuote THEN
next[j]:=str[i];
INC(j);
END;
INC(i);
| ASCII.NUL:
done:=TRUE;
EXIT;
| ArgDelim1, ArgDelim2:
EXIT;
| QuoteChar:
InQuote:=NOT InQuote;
INC(i);
| EscDelim:
CASE str[i+1] OF
ArgDelim1, ArgDelim2, ASCII.HT,' ', QuoteChar, EscDelim:
INC(i);
ELSE
END;
next[j]:=str[i];
INC(i);
INC(j);
ELSE
next[j]:=str[i];
INC(i);
INC(j);
END;
END;
next[j]:=ASCII.NUL;
Strings.Delete(str,0,i+1);
RETURN NOT done OR (j#0);
END ParseEnv;
END Env.