home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / m2posx02 / dosfile.dpp < prev    next >
Text File  |  1993-10-23  |  11KB  |  224 lines

  1. DEFINITION MODULE DosFile;
  2.  
  3. (*****************************************************************************)
  4. (* Falls die Environmentvariable "STDERR" nicht existiert, und der Standard- *)
  5. (* kanal zwei (stdaux) nicht auf eine Datei umgelenkt ist (wird mit          *)
  6. (* "IsDevice()" festgestellt), wird Kanal zwei auf Handle -1 umgelenkt (CON) *)
  7. (* sodass Kanal zwei wie unter "*IX" als Standardfehlerkanal benutzt werden  *)
  8. (* kann.                                                                     *)
  9. (* --------------------------------------------------------------------------*)
  10. (* 11-Feb-93, Holger Kleinschmidt                                            *)
  11. (*****************************************************************************)
  12.  
  13. FROM types IMPORT
  14. (* TYPE *) SIGNEDLONG, UNSIGNEDLONG, WORDSET, PathName;
  15.  
  16. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  17.  
  18. CONST
  19. #if GEMDOS
  20.   EXECSUFFIX = "TOS,TTP,PRG,APP,GTP";
  21.   TOSEXT     = "TOS,TTP";
  22.   GEMEXT     = "PRG,APP,GTP";
  23. #elif PCDOS (* ?? *)
  24.   EXECSUFFIX = "EXE,COM,APP";
  25.   DOSEXT     = "EXE,COM";
  26.   GEMEXT     = "APP";
  27. #endif
  28.  
  29. TYPE
  30. #if reverse_set
  31.   FileAttributes = (
  32.     fa15, fa14, fa13, fa12, fa11,
  33.     fa10, fa9,  fa8,  fa7,  fa6,  (* --> keine 8-Bit-Menge *)
  34.     faCHANGED,
  35.     faSUBDIR,
  36.     faVOLUME,
  37.     faSYSTEM,
  38.     faHIDDEN,
  39.     faRDONLY
  40.   );
  41. #else
  42.   FileAttributes = (
  43.     faRDONLY,
  44.     faHIDDEN,
  45.     faSYSTEM,
  46.     faVOLUME,
  47.     faSUBDIR,
  48.     faCHANGED,
  49.     fa6,  fa7,  fa8,  fa9,  fa10,
  50.     fa11, fa12, fa13, fa14, fa15  (* --> keine 8-Bit-Menge *)
  51.   );
  52. #endif /* reverse_set */
  53.  
  54.   FileAttribute = PACKEDSET OF FileAttributes;
  55.  
  56. CONST
  57.   FINDALL = FileAttribute{faRDONLY, faHIDDEN, faSYSTEM, faSUBDIR, faCHANGED};
  58.  
  59. TYPE
  60.   DTAPtr = POINTER TO DTA;
  61.  
  62.   DTA = RECORD
  63.     fill : ARRAY [0..19] OF CHAR;
  64.     attr : FileAttribute;
  65.     time : WORDSET;
  66.     date : WORDSET;
  67.     size : UNSIGNEDLONG;
  68.     name : ARRAY [0..13] OF CHAR;
  69.   END;
  70.  
  71. VAR
  72.   INODE   : UNSIGNEDLONG;
  73.   ROOTDIR : CHAR;
  74.  
  75. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  76.  
  77.  PROCEDURE IsExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
  78.  
  79.  PROCEDURE IsGEMExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
  80. #if GEMDOS
  81.  PROCEDURE IsTOSExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
  82. #elif PCDOS
  83.  PROCEDURE IsDOSExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
  84. #endif
  85. (*--------------------------------------------------------------------------
  86.  | Diese Prozeduren stellen anhand der Extension des Dateinamens fest, ob   |
  87.  | die Datei ausfuehrbar ist. <path> muss im "GEMDOS"-Format sein.          |
  88.  | Falls die Environment-Variablen "SUFFIX" bzw. "GEMEXT"/"TOSEXT" existie- |
  89.  | ren, wird geprueft, ob die Extension mit einer aus der durch Semikolon   |
  90.  | oder Komma getrennten Liste der Environment-Variablen uebereinstimmt.    |
  91.  | Existieren diese Variablen nicht, wird geprueft, ob eine der Extensionen |
  92.  | aus 'EXECSUFFIX' bzw. 'GEMEXT'/'TOSEXT' vorliegt. Die Gross-, Klein-     |
  93.  | schreibung wird nicht beachtet.                                          |
  94.   --------------------------------------------------------------------------*)
  95.  
  96.  
  97.  PROCEDURE IsDosDevice ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
  98.  
  99. (*--------------------------------------------------------------------------
  100.  | IsDosDevice  <=>  path = "xx...:"  ,  x weder \ noch /                   |
  101.   --------------------------------------------------------------------------*)
  102.  
  103.  
  104.  PROCEDURE DosToUnix ((* EIN/ -- *)     dpath : ARRAY OF CHAR;
  105.                       (* -- /AUS *) VAR xpath : ARRAY OF CHAR;
  106.                       (* -- /AUS *) VAR xlen  : CARDINAL      );
  107.  
  108. (*--------------------------------------------------------------------------
  109.  | Die Prozedur dient dazu, die "DOS"-spezifischen Elemente eines Pfadnamens|
  110.  | in "*IX"-Aequivalente zu wandeln, falls dies moeglich ist. Im einzelnen  |
  111.  | werden folgende Umwandlungen vorgenommen:                                |
  112.  |                                                                          |
  113.  |     \                                 -->  /                             |
  114.  |     x:                                -->  /dev/x                        |
  115.  |     x:\..., x:...                     -->  /dev/x/...                    |
  116.  |     con:                              -->  /dev/tty                      |
  117.  |     xx...:..                          -->  /dev/xx...                    |
  118.  | falls MiNT aktiv                                                         |
  119.  |     V:\...                            -->  /dev/...                      |
  120.  |     Q:\...                            -->  /pipe/...                     |
  121.  | falls MiNT-Version >= 0.9                                                |
  122.  |     U:\dev\...                        -->  /dev/...                      |
  123.  |     U:\pipe\...                       -->  /pipe/...                     |
  124.  |                                                                          |
  125.  | <xpath> enthaelt soviel vom umgewandelten Pfad wie moeglich. <xlen> ent- |
  126.  | haelt die Laenge des UNGEKUERZTEN Pfades. Falls also <xlen> groesser als |
  127.  | der Platz in <xpath> ist, musste gekuerzt werden.                        |
  128.   --------------------------------------------------------------------------*)
  129.  
  130.  PROCEDURE UnixToDos ((* EIN/ -- *)     xpath  : ARRAY OF CHAR;
  131.                       (* -- /AUS *) VAR dpath  : PathName;
  132.                       (* -- /AUS *) VAR dot    : BOOLEAN;
  133.                       (* -- /AUS *) VAR done   : BOOLEAN       );
  134.  
  135. (*--------------------------------------------------------------------------
  136.  | Die Prozedur dient dazu, die "*IX"-spezifischen Elemente eines Pfadnamens|
  137.  | in "DOS"-Aequivalente zu wandeln, falls dies moeglich ist. Im einzelnen  |
  138.  | werden folgende Umwandlungen vorgenommen:                                |
  139.  |                                                                          |
  140.  |     /                                 -->  \                             |
  141.  |     /dev/x                            -->  x:                            |
  142.  |     /dev/x/..., /dev/x\...            -->  x:\...                        |
  143.  |     /dev/tty                          -->  con:                          |
  144.  |     /dev/xx...                        -->  xx...:                        |
  145.  | falls MiNT aktiv                                                         |
  146.  |     /dev/xx...                        -->  V:\...                        |
  147.  |     /pipe/...                         -->  Q:\...                        |
  148.  | falls MiNT-Version >= 0.9                                                |
  149.  |     /dev/xx...                        -->  U:\dev\...                    |
  150.  |     /pipe/...                         -->  U:\pipe\...                   |
  151.  |                                                                          |
  152.  | <dpath> wird immer mit einem Nullbyte abgeschlossen.                     |
  153.  | <dot> == dpath = ("." | "xxx\." | "x:." | ".." | "xxx\.." | "x:..")      |
  154.  |                                                                          |
  155.  | Falls in der Environmentvariablen UNIXMODE der Teilstring "rX" enthalten |
  156.  | ist, wird eine Pfadangabe der Form "\..." zu "X:\..." umgewandelt.       |
  157.  |                                                                          |
  158.  | Die Angaben "\.", "\.." und, falls das aktuelle Verzeichnis das Haupt-   |
  159.  | verzeichnis ist, auch ".", ".." werden durch das Hauptverzeichnis ersetzt|
  160.  |                                                                          |
  161.  | Wenn <dpath> den vollstaendigen umgewandelten Pfad aufnehmen konnte      |
  162.  | (einschliesslich dem abschliessenden Nullbyte), ist <done> = TRUE, sonst |
  163.  | ist <done> = FALSE, und 'err.errno' wird auf 'ENAMETOOLONG' gesetzt.     |
  164.  | Falls <xpath> der Leerstring ist, wird 'err.errno' auf 'ENOENT' gesetzt, |
  165.  | und <done> ist ebenfalls FALSE.                                          |
  166.   --------------------------------------------------------------------------*)
  167.  
  168.  
  169.  
  170.  PROCEDURE FindFirst ((* EIN/ -- *) VAR path : PathName;
  171.                       (* EIN/ -- *)     attr : FileAttribute;
  172.                       (* EIN/AUS *) VAR dta  : DTA;
  173.                       (* -- /AUS *) VAR res  : INTEGER       ): BOOLEAN;
  174.  
  175.  PROCEDURE FindNext ((* EIN/AUS *) VAR dta : DTA;
  176.                      (* -- /AUS *) VAR res : INTEGER ): BOOLEAN;
  177.  
  178. (*--------------------------------------------------------------------------
  179.  | Fuehren ein "GEMDOS-Fsfirst" bzw. "Fsnext" aus. Der Funktionswert ist    |
  180.  | TRUE, falls eine Datei gefunden wurde, falls nicht, enthaelt <err> den   |
  181.  | Fehlercode. <dta> bei "FindNext()" muss die gleiche wie bei "FindFirst()"|
  182.  | sein. Da die DTA jedesmal explizit gesetzt wird, kann sie zwischendurch  |
  183.  | auch beliebig umgesetzt werden.                                          |
  184.   --------------------------------------------------------------------------*)
  185.  
  186.  PROCEDURE CompletePath ((* EIN/ -- *) VAR path : ARRAY OF CHAR;
  187.                          (* -- /AUS *) VAR full : PathName;
  188.                          (* -- /AUS *) VAR len  : CARDINAL;
  189.                          (* -- /AUS *) VAR err  : INTEGER       ): BOOLEAN;
  190.  
  191. (*--------------------------------------------------------------------------
  192.  | Falls die Laufwerksangabe in <path> fehlt, und/oder nur ein relativer    |
  193.  | Pfad angegeben ist, werden Laufwerk und/oder aktueller Pfad ergaenzt.    |
  194.  | <full> enthaelt die vervollstaendigte Pfadangabe. <len> ist die Laenge   |
  195.  | von <full>; da <full> mindestens die Laufwerksangabe und das Wurzelver-  |
  196.  | zeichnis enthaelt, ist <len> mindestens gleich drei.                     |
  197.  | <full> ist immer mit einem Nullbyte abgeschlossen.                       |
  198.  | Wenn ein Fehler aufgetreten ist, wird FALSE als Funktionswert geliefert  |
  199.  | und <err> enthaelt den Fehlercode; <len> und <full> sind dann nicht defi-|
  200.  | niert.                                                                   |
  201.   --------------------------------------------------------------------------*)
  202.  
  203.  
  204.  PROCEDURE Seek ((* EIN/ -- *)     hndl : INTEGER;
  205.                  (* EIN/ -- *)     off  : SIGNEDLONG;
  206.                  (* EIN/ -- *)     mode : CARDINAL;
  207.                  (* -- /AUS *) VAR pos  : SIGNEDLONG;
  208.                  (* -- /AUS *) VAR done : BOOLEAN     );
  209.  
  210. (*--------------------------------------------------------------------------
  211.  | Fuehrt ein "GEMDOS-Fseek" aus. Falls ein Fehler auftritt, enthaelt <pos> |
  212.  | den Fehlercode und <done> ist FALSE; ansonsten enthaelt <pos> die jetzige|
  213.  | Position.                                                                |
  214.   --------------------------------------------------------------------------*)
  215.  
  216.  PROCEDURE IsDevice ((* EIN/ -- *) h : INTEGER ): BOOLEAN;
  217.  
  218. (*--------------------------------------------------------------------------
  219.  | Es wird genau dann "TRUE" geliefert, wenn auf das (gueltige) Handle kein |
  220.  | "Seek" angewendet werden kann, dabei aber kein Fehler gemeldet wird.     |
  221.   --------------------------------------------------------------------------*)
  222.  
  223. END DosFile.
  224.