123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- //
- // Body of GPBinFiles interface.
- // This file implements the code of the GPBinFiles.cp file.
- // dwc August 1999. COOL version kjg May 2000
- // kjg September 2000. Renamed from GPFiles to GPBinFiles.
- // kjg March 2001. Version for Beta-2 libraries.
- //
- // Compile with: csc /t:library /r:GPFiles.dll GPBinFiles.cs
- //
- /* ------------------------------------------------------------ */
- using System;
- using GPFiles;
- namespace GPBinFiles {
- public class GPBinFiles {
- /* ---------------------------------- */
- 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);
- }
- /* ---------------------------------- */
- public static int length(FILE cpf) {
- return (int) cpf.bufS.Length;
- }
- /* ---------------------------------- */
- private static FILE open(System.String name) {
- // Opens buffered filestream for reading.
- try {
- FILE cpf = new FILE();
- cpf.path = name;
- System.IO.FileStream fStr =
- System.IO.File.Open(name, System.IO.FileMode.Open);
- cpf.bufS = new System.IO.BufferedStream(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
- private static FILE openRead(System.String name) {
- // Opens buffered filestream for reading.
- try {
- FILE cpf = new FILE();
- cpf.path = name;
- System.IO.FileStream fStr = System.IO.File.OpenRead(name);
- cpf.bufS = new System.IO.BufferedStream(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
- /* =========================== */
-
- /* ---------------------------------- */
- public static FILE findLocal(char[] fileName)
- {
- System.String name = mkStr(fileName);
- return open(name);
- }
-
- /* ---------------------------------- */
- 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 openRead(nName);
- } else
- return null;
- }
-
- /* ---------------------------------- */
- public static char[] getFullPathName(FILE cpf) {
- return cpf.path.ToCharArray(); // not really correct!
- }
- /* ---------------------------------- */
- public static FILE openFile(char[] fileName) {
- System.String name = mkStr(fileName);
- return open(name);
- }
- public static FILE openFileRO(char[] fileName) {
- System.String name = mkStr(fileName);
- return openRead(name);
- }
-
- /* ---------------------------------- */
- public static void CloseFile(FILE cpf) {
- if (cpf.bufS != null)
- cpf.bufS.Close();
- }
- /* ---------------------------------- */
- public static FILE createFile(char[] arr) {
- FILE cpf = new FILE();
- try {
- System.String name = mkStr(arr);
- System.IO.FileStream fStr = System.IO.File.Create(name);
- cpf.path = name;
- cpf.bufS = new System.IO.BufferedStream(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);
- // Check if exists first?
- 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.bufS = new System.IO.BufferedStream(fStr);
- return cpf;
- } catch {
- return null;
- }
- }
- /* ---------------------------------- */
- public static bool EOF(FILE cpf) {
- return cpf.bufS.Position >= cpf.bufS.Length;
- }
- /* ---------------------------------- */
- public static int readByte(FILE cpf) {
- if (cpf.bufS != null)
- return (int) cpf.bufS.ReadByte();
- else
- throw new System.Exception("File not open for reading");
- }
- /* ---------------------------------- */
- public static int readNBytes(FILE cpf,
- byte[] buff,
- int want)
- {
- if (cpf.bufS != null)
- return cpf.bufS.Read(buff, 0, want);
- else
- throw new System.Exception("File not open for reading");
- }
- /* ---------------------------------- */
- public static void WriteByte(FILE cpf, int b) {
- if (cpf.bufS != null)
- cpf.bufS.WriteByte((byte) b);
- else
- throw new System.Exception("File not open for reading");
- }
- /* ---------------------------------- */
- public static void WriteNBytes(FILE cpf,
- byte[] buff,
- int want)
- {
- if (cpf.bufS != null)
- cpf.bufS.Write(buff, 0, want);
- else
- throw new System.Exception("File not open for reading");
- }
- } // end of class GPBinFiles
- /* ------------------------------------------------------------ */
- /* File-descriptor for GPBinFiles */
- /* ------------------------------------------------------------ */
- public class FILE : GPFiles.FILE
- {
- public System.IO.BufferedStream bufS;
- } // end of class FILE
- /* ------------------------------------------------------------ */
- } // end of GPBinFiles.
- /* ------------------------------------------------------------ */
|