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 >
Text File  |  1991-08-10  |  3KB  |  175 lines

  1. (*======================================================================*)
  2. (*              Amiga Support Routines, Reading ENV: variables          *)
  3. (*======================================================================*)
  4. (*  Version:    1.00            Author:  Dennis Brueni                  *)
  5. (*  Date:       08-04-91        Changes: Original                       *)
  6. (*======================================================================*)
  7.  
  8. IMPLEMENTATION MODULE Env;
  9.  
  10. IMPORT
  11.     FIO,ASCII,Strings;
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18. (*----------------------------------------------------------------------*)
  19.  
  20. PROCEDURE EnvNameCvt(VAR name,EnvName: ARRAY OF CHAR);
  21.  
  22. VAR
  23.     First4 : ARRAY [0..3] OF CHAR;
  24.  
  25. BEGIN
  26.     Strings.Assign(name,First4);
  27.     Strings.Assign(name,EnvName);
  28.     Strings.Capitalize(First4);
  29.  
  30.     IF NOT Strings.Equal(First4,'ENV:') THEN
  31.         Strings.Insert('ENV:',0,EnvName);
  32.     END;
  33. END EnvNameCvt;
  34.  
  35. (*----------------------------------------------------------------------*)
  36.  
  37.  
  38.  
  39. PROCEDURE GetEnv(name: ARRAY OF CHAR; VAR value: ARRAY OF CHAR);
  40.  
  41.  
  42. VAR
  43.     EnvFile: FIO.FILE;
  44.     i : CARDINAL;
  45.     EnvName: Strings.BigString;
  46.     tempch : CHAR;
  47.  
  48. BEGIN
  49.     value[0]:=ASCII.NUL;
  50.     EnvNameCvt(name,EnvName);
  51.     EnvFile:=FIO.Open(EnvName);
  52.  
  53.     IF FIO.GoodFILE(EnvFile) THEN
  54.  
  55.         i:=0;
  56.         REPEAT
  57.             tempch:=FIO.ReadChar(EnvFile);
  58.             value[i]:=tempch;
  59.             INC(i);
  60.         UNTIL (i>HIGH(value)) OR (tempch=ASCII.EOF);
  61.         value[i-1]:=ASCII.NUL;
  62.  
  63.         FIO.Close(EnvFile);
  64.     END;
  65. END GetEnv;
  66.  
  67. (*----------------------------------------------------------------------*)
  68.  
  69.  
  70.  
  71. PROCEDURE SetEnv(name: ARRAY OF CHAR; value: ARRAY OF CHAR);
  72.  
  73. VAR
  74.     EnvFile: FIO.FILE;
  75.     EnvName: Strings.BigString;
  76.  
  77. BEGIN
  78.     EnvNameCvt(name,EnvName);
  79.     EnvFile:=FIO.Create(EnvName);
  80.  
  81.     IF FIO.GoodFILE(EnvFile) THEN
  82.         FIO.WriteString(EnvFile,value);
  83.         FIO.Close(EnvFile);
  84.     END;
  85. END SetEnv;
  86.  
  87. (*----------------------------------------------------------------------*)
  88.  
  89.  
  90.  
  91. PROCEDURE PutEnv(str: ARRAY OF CHAR);
  92.  
  93. VAR
  94.     name: Strings.BigString;
  95.     i,j : CARDINAL;
  96.  
  97. BEGIN
  98.     Strings.Assign(str,name);
  99.     i:=0;
  100.     WHILE (i<=HIGH(str)) AND (str[i] # '=') DO
  101.         INC(i);
  102.     END;
  103.  
  104.     IF (i<=HIGH(name)) AND (i<=HIGH(str)) AND (i#0) THEN
  105.         name[i]:=ASCII.NUL;
  106.         Strings.Delete(str,0,i+1);
  107.         SetEnv(name,str);
  108.     END;
  109. END PutEnv;
  110.  
  111. (*----------------------------------------------------------------------*)
  112.  
  113. PROCEDURE ParseEnv(VAR str: ARRAY OF CHAR; VAR next: ARRAY OF CHAR):BOOLEAN;
  114.  
  115. CONST
  116.     ArgDelim1 = ';';
  117.     ArgDelim2 = ',';
  118.     EscDelim = 134C;                (* \ *)
  119.     QuoteChar = '"';
  120.  
  121. VAR
  122.     InQuote: BOOLEAN;
  123.     i,j: CARDINAL;
  124.     tempch: CHAR;
  125.     done: BOOLEAN;
  126.  
  127. BEGIN
  128.     next[0]:=ASCII.NUL;
  129.     i:=0;
  130.     j:=0;
  131.     InQuote:=FALSE;
  132.     done:=FALSE;
  133.     LOOP
  134.         IF (i>HIGH(str)) OR (j>=HIGH(next)) THEN
  135.             EXIT;
  136.         END;
  137.         tempch:=str[i];
  138.         CASE tempch OF
  139.         ASCII.LF , ' ',ASCII.HT, ASCII.CR , ASCII.VT :
  140.             IF InQuote THEN
  141.                 next[j]:=str[i];
  142.                 INC(j);
  143.             END;
  144.             INC(i);
  145.         | ASCII.NUL:
  146.             done:=TRUE;
  147.             EXIT;
  148.         | ArgDelim1, ArgDelim2:
  149.             EXIT;
  150.         | QuoteChar:
  151.             InQuote:=NOT InQuote;
  152.             INC(i);
  153.         | EscDelim:
  154.             CASE str[i+1] OF
  155.             ArgDelim1, ArgDelim2, ASCII.HT,' ', QuoteChar, EscDelim:
  156.                 INC(i);
  157.             ELSE
  158.             END;
  159.             next[j]:=str[i];
  160.             INC(i);
  161.             INC(j);
  162.         ELSE
  163.             next[j]:=str[i];
  164.             INC(i);
  165.             INC(j);
  166.         END;
  167.     END;
  168.     next[j]:=ASCII.NUL;
  169.     Strings.Delete(str,0,i+1);
  170.     RETURN NOT done OR (j#0);
  171. END ParseEnv;
  172.  
  173.  
  174. END Env.
  175.