home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 10 / dosfunc / dircptyp.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-08-25  |  10.3 KB  |  165 lines

  1. (* ----------------------------------------------------------------------- *)
  2. (*                             DIRCPTYP.PAS                                *)
  3. (*                (c) 1987  Michael Ceol & PASCAL.INT                      *)
  4. (* Typ-Definitionen fuer die CP/M 2.x & 3.x Version der Directory-Biblioth.*)
  5.   BYTE     = 0..255;
  6.   Dir_Chr0 = PACKED ARRAY[1..80] OF CHAR;         (* fuer System-Parameter *)
  7.   Dir_Str  = STRING[80];          (* der Typ wird fuer vieles verwendet... *)
  8.   Time_Str = STRING[6];           (* enthaelt Uhrzeit im Format "hhmmss"   *)
  9.   Date_Str = STRING[8];           (* enthaelt Datum im Format "yyyymmdd"   *)
  10.  
  11.   FCB_Rec = RECORD                             (* CP/M File Control Block: *)
  12.                        (* Laufwerknummer: 0-16. 0 => angemeldetes Laufwerk,
  13.                           1 => Laufwerk A, 2 => Laufwerk B, usw...         *)
  14.               drive  : BYTE;
  15.                        (* Dateiname [1..8], Dateityp[9..11]. Beides ASCII-
  16.                           Grossbuchstaben, mit hochwertigem Bit = 0!
  17.                           Fehlende Zeichen sind mit Leerzeichen gefuellt.
  18.                           Die hochwertigen Bits aller Zeichen sind Attri-
  19.                           but-Bits (gesetzt=an/wahr,nichtgesetzt=aus/falsch)
  20.                           Die Bedeutung der Attribut-Bits der Zeichen 1..8
  21.                           bitte im "CP/M 3 Programmer's Guide", Kap. 2.3.4,
  22.                           nachlesen! Im folgenden die fuer DIR interessanten
  23.                           Bits der Zeichen 9..11:
  24.                            9: Read-Only. Wenn gesetzt, koennen keine
  25.                                          Schreib-Operationen in die Datei
  26.                                          ausgefuehrt werden.
  27.                           10: System. System-Datei, die normalerweise nicht
  28.                                       mit dem CP/M-DIR-Kommando angezeigt
  29.                                       wird.
  30.                           11: Archive. Fuer selbst geschriebene Archivie-
  31.                                        rungsprogramme. Ein solches setzt
  32.                                        dieses Attribut, wenn eine Kopie der
  33.                                        Datei auf ein Sicherungs-Medium ge-
  34.                                        macht wurde. CP/M setzt dieses au-
  35.                                        tomatisch wieder zurueck, sobald eine
  36.                                        Schreib-Operation in die entspr.
  37.                                        Datei ausgefuehrt wird.             *)
  38.               name   : ARRAY[1..11] OF CHAR;
  39.                        (* akt. 'extend'-Nummer: Ein FCB kann max. 16 kB
  40.                           verwalten. Wird eine Datei groesser, werden von
  41.                           CP/M weitere "Extends" im Inhaltsverzeichnis be-
  42.                           reitgestellt. Wird beim Oeffnen etc. vom Benutzer
  43.                           normalerweise auf 0 gesetzt, kann waehrend der
  44.                           Dateibearbeitung aber Werte von 0 bis 31 annehmen.
  45.                           (Fuer unbedarfte: Haende weg!!)                  *)
  46.               extend : BYTE;
  47.               system : ARRAY[1..2] OF BYTE;  (* wird von CP/M intern verw. *)
  48.                        (* Anz. von 128-Byte-Saetzen des akt. "Extends".
  49.                           Nimmt Werte von 0 bis 255 an, wobei Werte groesser
  50.                           128 eine Anzahl von 128 Saetzen implizieren.
  51.                           (Haende weg!!):                                  *)
  52.               reccnt : BYTE;
  53.                        (* file allocation, wird von CP/M verwaltet. Haende
  54.                           weg! Ausnahme: Datei umbenennen: neuer Name und
  55.                           Typ wie 'name' ab Position 1                     *)
  56.               fat    : ARRAY[0..15] OF BYTE;
  57.                        (* akt. zu lesender, schreibender Satz bei sequen-
  58.                           tiellen Datei-Operationen:                       *)
  59.               currec : BYTE;
  60.                        (* Optionale Satznummer beim Direkt-Zugriff im Be-
  61.                           reich von 0 bis 262143 (18-Bit-Wert, [0]=low Byte,
  62.                           [1]=middle Byte, [2]=high Byte):                 *)
  63.               ranrec : ARRAY[0..2] OF BYTE;
  64.             (*------------ ^^^ bis hier hin geht der CP/M-FCB!! Was nun
  65.                            folgt, dient lediglich der "versteckten" Kommu-
  66.                            nikation der einzelnen DIR-Funktionen unter CP/M,
  67.                            um ein fast exaktes Verhalten wie MS-DOS bzw.
  68.                            TOS zu erlangen:
  69.                            'DTAInx' erhaelt von den Funktionen 'FSFirst'
  70.                            und 'FSNext' in 'DIRCP.TUR' den Index des ge-
  71.                            fundenen Verzeichnis-Eintrages in die 'DirDTA': *)
  72.               DTAInx : BYTE;
  73.                        (* 'DirUsr' erhaelt von 'FSFirst' die gewuenschte
  74.                           "User-Nummer", um die hierarchische Verzeichnis-
  75.                           struktur von MS-DOS und TOS zu simmulieren. Die
  76.                           16 User-Nummern (0-15) werden jeweils als Unter-
  77.                           verzeichnisse behandelt. Die Angabe des ge-
  78.                           wuenschten Verzeichnisses in 'search' geschieht
  79.                           durch die Angabe der User-Nummer vor der Lauf-
  80.                           werks-Angabe, z.B.:
  81.                           *.*      - default Laufwerk u. User
  82.                           1:*.*    - default Laufwerk, User 1
  83.                           A:*.*    - Laufwerk A, default User
  84.                           B10:*.*  - Laufwerk B, User 10                   *)
  85.               DirUsr : BYTE;
  86.               DirDrv : BYTE;
  87.               DirAtr : BYTE;
  88.             END;
  89.    (* Die Directory-Eintraege auf Disk haben die gleiche Struktur wie
  90.       obiger FCB, jedoch fehlen 'currec' und 'ranrec'. Ebenso enthaelt
  91.       das erste Byte ('drive') hier die "User"-Nummer, zu der die Datei
  92.       gehoert bzw. einen den Eintrag identifizierenden Code. Desweiteren
  93.       gibt es unter CP/M 3 "erweiterte" FCBs sowie "System"-FCBs fuer
  94.       Password-Schutz und Datum-/Zeit-Stempel von Disketten und Dateien.
  95.       Dies steht allerdings nur in der "banked version" von CP/M 3 zur Ver-
  96.       fuegung. Der Vollstaendigkeit halber sind sie im folgenden mit
  97.       aufgefuehrt:                                                         *)
  98.   DIR_FCB = RECORD
  99.               CASE dircod: BYTE OF     (* identif. die folgenden Varianten *)
  100.                                                       (* normaler DIR-FCB: *)
  101.                 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15:
  102.                     (fname  : ARRAY[1..11] OF CHAR;           (* Dateiname *)
  103.                      extend : BYTE;
  104.                      system : ARRAY[1..2] OF BYTE;
  105.                      reccnt : BYTE;
  106.                      fat    : ARRAY[0..15] OF BYTE);
  107.                                                           (* eXtended FCB: *)
  108.                 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
  109.                     (xfname : ARRAY[1..11] OF CHAR;   (* wieder Dateiname! *)
  110.                      pasmod : BYTE; (* Password-Modus: bewirkt fuer Datei
  111.                                        folgenden Schutz, wenn kein Password
  112.                                        angegeben wird:
  113.                                        Bit 7: kann nicht gelesen werden
  114.                                            6: lesen, aber nicht schreiben
  115.                                            5: obiges, aber nicht loeschen,
  116.                                               umbenennen etc.              *)
  117.                      xsystem: ARRAY[1..3] OF BYTE;
  118.                      fpassw : ARRAY[1..8] OF CHAR; (* das Datei-"Password" *)
  119.                      resvd  : ARRAY[1..8] OF BYTE);          (* reservierd *)
  120.                 32:                          (* Directory-(Volume-) Label: *)
  121.                     (dname  : ARRAY[1..11] OF CHAR;      (* Directory-Name *)
  122.                      dirlab : BYTE; (* Bit 7: Password fuer geschuetzte Da-
  123.                                               teien verlangen.
  124.                                            6: Zugriffszeit festhalten.
  125.                                            5: Updatezeit festhalten.
  126.                                            4: Erstellungszeit festhalten.
  127.                                            0: Directory-Label existiert    *)
  128.                      systemd: ARRAY[1..3] OF BYTE;
  129.                      dpassw : ARRAY[1..8] OF CHAR;  (* das Disk-"Password" *)
  130.                      cdate,                   (* Datum/Zeit der Erstellung *)
  131.                      ctime,
  132.                      udate,                   (* Datum/Zeit der Sicherung  *)
  133.                      utime  : INTEGER);
  134.                 33:    (* SFCB existierd an jeder 4. Position im Directory
  135.                           und enthaelt die Datum-/Zeitstempel der 3 vorher-
  136.                           gehenden Directory-Eintraege:                    *)
  137.                     (datim  : ARRAY[0..2] OF
  138.                                 RECORD
  139.                                   cdate, ctime,                   (* s. o. *)
  140.                                   udate, utime : INTEGER;
  141.                                   pasmod,
  142.                                   resvd  : BYTE;
  143.                                 END;
  144.                      rescd  : BYTE);
  145.             END; (* DIR_FCB *)
  146.  
  147.   DTA_Rec  = ARRAY[0..3] OF DIR_FCB;
  148.    (* aus Portabilitaets-Gruenden muss die DTA dynamisch verwaltet werden: *)
  149.   DTA_Ptr  = ^DTA_Rec;
  150.                              (* die von der Bibliothek verwendete, interne *)
  151.   Dir_Rec  = RECORD          (* Representation eines Dateieintrages:       *)
  152.                name : STRING[8];
  153.                ext  : STRING[3];
  154.                time : Time_Str;
  155.                date : Date_Str;
  156.                size : REAL;
  157.                attr : BYTE;
  158.              END;
  159.   Dir_Typ  = RECORD                         (* und ein ganzes Verzeichnis: *)
  160.                num   : 0..DirSizeMax;       (* Anz. gefundener Eintraege   *)
  161.                items : ARRAY[1..DirSizeMax] OF Dir_Rec;
  162.              END;
  163. (* ----------------------------------------------------------------------- *)
  164. (*                             DIRCPTYP.PAS                                *)
  165.