•  Back 
  •  GEMDOS-Strukturen 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File5.20.16  DTA                                                       TOS

Diese Struktur ist wie folgt definiert:

typedef struct
{
    int8_t    d_reserved[21];  /* für GEMDOS reserviert */
    uint8_t   d_attrib;        /* Datei-Attribut        */
    uint16_t  d_time;          /* Uhrzeit               */
    uint16_t  d_date;          /* Datum                 */
    uint32_t  d_length;        /* Dateilänge            */
    int8_t    d_fname[14];     /* Dateiname             */
} DTA;

rekursive Suche in Ordnern

In je einer DTA werden genau alle nötigen Informationen gespeichert, 
die nach einem Fsfirst für weitere Fsnext benötigt werden. Das heißt, 
daß auf keinen Fall erneut Fsfirst für andere Verzeichnisse/Wildcards 
aufrufen sollte, solange noch weitere Fsnext-Aufrufe in der 
Verzeichnis-Ebene gemachen werden.
Bei einer rekursiven Suche mußt für jedes neue Fsfirst eine eigene DTA 
verwendet werden, die solange erhalten bleiben muß, bis alle Fsnext 
für den Fsfirst getätigt sind. Hier ein Bsp in pseudo-C:

void durchsuche_verzeichnis (int8_t *pfadname)
{
  DTA_Record local_dta, saved_dta;

  saved_dta = GetDTA ();
  SetDTA (local_dta);

  err = Fsfirst (pfadname, ...);
  while (err == 0) {
    if (local_dta.attrib == subdir) {
      // rekursive suche in sub-dir
      durchsuche_verzeichnis (subdir-pfadname);
    } else {
      ... normales file auswerten
    }
    err = Fsnext ();
  }

  SetDTA (saved_dta);
}

Querverweis: Fgetdta   Fsetdta   Fsfirst   Fsnext   GEMDOS