home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1991-08-10 | 3.2 KB | 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.
-