123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /* ------------------------------------------------------------ */
- //
- // Body of GPTextFiles interface.
- // This file implements the code of the GPTextFiles.cp file.
- // dwc August 1999, C# version May 2000, kjg.
- // dwc May 2001. Version for Beta-2 libraries.
- //
- // Compile with : csc /t:library /r:GPFiles.dll GPTextFiles.cs
- //
- /* ------------------------------------------------------------ */
- using System;
- using GPFiles;
- /* ------------------------------------------------------------ */
- namespace GPTextFiles {
- public class GPTextFiles
- {
- /* ---------------------------------- */
- private static System.String mkStr(char[] arr) {
- int ix = 0;
- char ch;
- do {
- ch = arr[ix]; ix++;
- } while (ch != '\0');
- return new System.String(arr,0,ix-1);
- }
- /* ---------------------------------- */
- private static FILE open(System.String name) {
- try {
- FILE cpf = new FILE();
- cpf.path = name;
- System.IO.FileStream fStr =
- System.IO.File.Open(name, System.IO.FileMode.Open);
- cpf.strR = new System.IO.StreamReader(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
-
- private static FILE openRead(System.String name) {
- try {
- FILE cpf = new FILE();
- cpf.path = name;
- System.IO.FileStream fStr = System.IO.File.OpenRead(name);
- cpf.strR = new System.IO.StreamReader(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
-
- /* ---------------------------------- */
- public static FILE findLocal(char[] fileName)
- {
- return open(mkStr(fileName));
- }
- /* ---------------------------------- */
- public static FILE findOnPath(
- char[] pathName, char[] fileName)
- {
- //
- // Use mkStr, to trim space from end of char arrray.
- //
- System.String pName = mkStr(pathName);
- System.String fName = mkStr(fileName);
- System.String nName = "";
- System.String nextDir;
- System.String thisPath = System.Environment.GetEnvironmentVariable(pName);
- //
- // System.Console.WriteLine(pName);
- // System.Console.WriteLine(thisPath);
- //
- FILE cpf = new FILE();
- bool found = false;
- bool pathFinished = false;
- int length = thisPath.Length;
- int nextLength;
- int nextPathStart;
- int nextPathEnd = -1;
- while (!found && !pathFinished) {
- nextPathStart = nextPathEnd + 1;
- nextPathEnd = thisPath.IndexOf(GPFiles.GPFiles.pathSep, nextPathStart);
- if (nextPathEnd < 0)
- nextPathEnd = length;
- nextLength = nextPathEnd - nextPathStart;
- nextDir = thisPath.Substring(nextPathStart, nextLength);
- nName = nextDir + GPFiles.GPFiles.fileSep + fName;
- found = System.IO.File.Exists(nName);
- pathFinished = nextPathEnd >= length;
- }
- if (found) {
- return open(nName);
- } else
- return null;
- }
-
- /* ---------------------------------- */
- public static char[] getFullPathName(FILE cpf) {
- return cpf.path.ToCharArray();
- }
- /* ---------------------------------- */
- public static FILE openFile(char[] fileName)
- {
- return open(mkStr(fileName));
- }
- /* ---------------------------------- */
- public static FILE openFileRO(char[] fileName)
- {
- return openRead(mkStr(fileName));
- }
- /* ---------------------------------- */
- public static void CloseFile(FILE cpf)
- {
- if (cpf.strW != null) {
- cpf.strW.Close(); // Close does automatic Flush()
- }
- if (cpf.strR != null) {
- cpf.strR.Close();
- }
- }
- /* ---------------------------------- */
- public static FILE createFile(char[] fileName)
- {
- FILE cpf = new FILE();
- try {
- System.String name = mkStr(fileName);
- System.IO.FileStream fStr = System.IO.File.Create(name);
- cpf.path = name;
- cpf.strW = new System.IO.StreamWriter(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
- /* ---------------------------------- */
- public static FILE createPath(char[] fileName)
- {
- System.String fName = mkStr(fileName);
- try {
- int ix = fName.LastIndexOf(GPFiles.GPFiles.fileSep);
- if (ix > 0) {
- System.String path = fName.Substring(0,ix);
- if (!System.IO.Directory.Exists(path)) {
- System.IO.DirectoryInfo junk = System.IO.Directory.CreateDirectory(path);
- }
- }
- FILE cpf = new FILE();
- cpf.path = fName;
- System.IO.FileStream fStr = System.IO.File.Create(fName);
- cpf.strW = new System.IO.StreamWriter(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
- /* ---------------------------------- */
- public static char readChar(FILE cpf)
- {
- if (cpf.strR != null) {
- int chr = cpf.strR.Read();
- if (chr == -1)
- return (char) 0;
- else
- return (char) chr;
- } else
- throw new System.Exception("File not open for reading");
- }
- /* ---------------------------------- */
- public static int readNChars(
- FILE cpf,
- char[] buff,
- int want)
- {
- return cpf.strR.Read(buff,0,want);
- }
- /* ---------------------------------- */
- public static void WriteChar(FILE cpf, char ch)
- {
- if (cpf.strW != null) {
- cpf.strW.Write(ch);
- } else
- throw new System.Exception("File not open for writing");
- }
- /* ---------------------------------- */
- public static void WriteEOL(FILE cpf)
- {
- if (cpf.strW != null) {
- cpf.strW.Write(Environment.NewLine);
- } else
- throw new System.Exception("File not open for writing");
- }
- /* ---------------------------------- */
- public static void WriteNChars(
- FILE cpf,
- char[] buff,
- int want)
- {
- if (cpf.strW != null) {
- cpf.strW.Write(buff, 0, want);
- } else
- throw new System.Exception("File not open for writing");
- }
- } // end of class GPTextFiles
- /* ------------------------------------------------------------ */
- /* File-descriptor for GPTextFiles */
- /* ------------------------------------------------------------ */
- public class FILE : GPFiles.FILE
- {
- public System.IO.StreamReader strR;
- public System.IO.StreamWriter strW;
- } // end of class FILE
- /* ------------------------------------------------------------ */
- } // end of GPTextFiles.
- /* ------------------------------------------------------------ */
|