Home GEMDOSGEMDOS GEMDOS-FunktionslisteGEMDOS-Funktionsliste Line-ALine-A

5.24 GEMDOS-Strukturen


5.24.1 CD-ROM Definitionen

/* Adressierungs-Typen */

#define CDROM_LBA               0x01
#define CDROM_MSF               0x02

/* SUB-Q Kontroll-Bits */

#define CDROM_AUDIO_EMPHASIS    0x01
#define CDROM_COPY_PERMITTED    0x02
#define CDROM_DATA_TRACK        0x04
#define CDROM_FOUR_CHANNEL      0x08

/* The leadout track is always 0xAA, regardless of # of tracks on disc */

#define CDROM_LEADOUT   0xAA

/* Rückgabewerte von READ SUBCHANNEL DATA */

/* audio status not supported         */
#define CDROM_AUDIO_INVALID     0x00
/* audio play operation in progress   */
#define CDROM_AUDIO_PLAY        0x11
/* audio play operation paused        */
#define CDROM_AUDIO_PAUSED      0x12
/* audio play successfully completed  */
#define CDROM_AUDIO_COMPLETED   0x13
/* audio play stopped due to error    */
#define CDROM_AUDIO_ERROR       0x14
/* no current audio status to return  */
#define CDROM_AUDIO_NO_STATUS   0x15

Querverweis: CD-ROM Opcodes für Fcntl

5.24.2 cdrom_audioctrl

struct cdrom_audioctrl
{
    /* Eingabe-Parameter */

    int16_t set;                   /* 0 = nur nachfragen */

    /* Ein-/Ausgabe-Parameter */

    struct
    {
        int8_t selection;
        int8_t volume;
    } channel[4];
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.3 cdrom_mcn

struct cdrom_mcn
{
    int8_t  mcn_audiostatus;
    int8_t  mcn_mcn[23];       /* Media-Katalog-Nummer als ASCII-String */
};

Querverweis: CD-ROM Opcodes für Fcntl   ASCII-Tabelle

5.24.4 cdrom_msf

struct cdrom_msf
{
    int8_t cdmsf_min0;       /* Anfangs-Minute  */
    int8_t cdmsf_sec0;       /* Anfangs-Sekunde */
    int8_t cdmsf_frame0;     /* Anfangs-Frame   */
    int8_t cdmsf_min1;       /* Ende-Minute     */
    int8_t cdmsf_sec1;       /* Ende-Sekunde    */
    int8_t cdmsf_frame1;     /* Ende-Frame      */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.5 cdrom_read

struct cdrom_read
{
    int32_t  cdread_lba;       /* Adresse               */
    int8_t  *cdread_bufaddr;   /* Zeiger auf den Puffer */
    int32_t  cdread_buflen;    /* Länge des Puffers     */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.6 cdrom_subchnl

struct cdrom_subchnl
{
    /* Eingabe-Parameter */

    int8_t cdsc_format;             /* CDROM_MSF oder CDROM_LBA */

    /* Ausgabe-Parameter */

    int8_t   cdsc_audiostatus;
    unsigned cdsc_resvd: 8;         /* reserviert               */
    unsigned cdsc_adr  : 4;
    unsigned cdsc_ctrl : 4;
    int8_t   cdsc_track;            /* aktueller Track          */
    int8_t   cdsc_ind;              /* aktueller Index          */
    cd_ad    cdsc_absaddr;          /* absolute Adresse         */
    cd_ad    cdsc_reladdr;          /* relative Track-Adresse   */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.7 cdrom_ti

struct cdrom_ti
{
    int8_t cdti_trk0;        /* Start-Track */
    int8_t cdti_ind0;        /* Start-Index */
    int8_t cdti_trk1;        /* Ende-Track  */
    int8_t cdti_ind1;        /* Ende-Index  */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.8 cdrom_tisrc

Diese Struktur ist wie folgt definiert:

struct cdrom_tisrc
{
    /* Eingabe-Parameter */

    int8_t tisrc_track;          /* Track-Nummer */

    /* Ausgabe-Parameter */

    int8_t tisrc_audiostatus;
    int8_t tisrc_tisrc[23];      /* Track International Standard
                                    Recording Code als ASCII-String */
};

Querverweis: CD-ROM Opcodes für Fcntl   ASCII-Tabelle

5.24.9 cdrom_tocentry

Diese Struktur ist wie folgt definiert:

struct cdrom_tocentry
{
    /* Eingabe-Parameter */

    int8_t cdte_track;             /* Track-Nummer oder CDROM_LEADOUT */
    int8_t cdte_format;            /* CDROM_LBA oder CDROM_MSF        */

    /* Ausgabe-Parameter */

    unsigned cdte_adr:4;           /* SUBQ Channel Encodes; es gilt:
                                      0 = keine
                                      1 = Positions-Daten
                                      2 = MCN
                                      3 = ISRC
                                      (alle anderen Werte reserviert) */
    unsigned cdte_ctrl:4;          /* Bit-0: Audio mit Pre-Emphasis
                                      Bit-1: digitale Kopie möglich
                                      Bit-2: Daten Track
                                      Bit-3: 4-Kanal                  */
    int8_t   cdte_datamode;        /* z.Zt. unbenutzt                 */
    cd_ad    dte_addr;             /* Track-Start                     */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.10 cdrom_tochdr

struct cdrom_tochdr
{
    int8_t cdth_trk0;        /* Start-Track */
    int8_t cdth_trk1;        /* Ende-Track  */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.11 cdrom_volctrl

struct cdrom_volctrl
{
    int8_t  channel0;   /* Kanal-1: Lautstärke 0...255 */
    int8_t  channel1;   /* Kanal-2: Lautstärke 0...255 */
    int8_t  channel2;   /* Kanal-3: Lautstärke 0...255 */
    int8_t  channel3;   /* Kanal-4: Lautstärke 0...255 */
};

Querverweis: CD-ROM Opcodes für Fcntl

5.24.12 cd_ad

Diese Union ist wie folgt definiert:

typedef union
{
    struct
    {
       int8_t reserved;    /* reserviert */
       int8_t minute;      /* Minute     */
       int8_t second;      /* Sekunde    */
       int8_t frame;       /* Frame      */
    } msf;
    int32_t lba;
} cd_ad;

Querverweis: CD-ROM Opcodes für Fcntl

5.24.13 DISKINFO

typedef struct
{
    uint32_t   b_free;    /* Anzahl der freien Cluster */
    uint32_t   b_total;   /* Gesamtzahl der Cluster    */
    uint32_t   b_secsiz;  /* Bytes pro Sektor          */
    uint32_t   b_clsiz;   /* Sektoren pro Cluster      */
} DISKINFO;

Querverweis: Dfree   GEMDOS

5.24.14 DOSTIME

typedef struct
{
   uint16_t     time;  /* Zeit wie in Tgettime  */
   uint16_t     date;  /* Datum wie in Tgetdate */
} DOSTIME;

Die Struktur der beiden Integer-Werte gliedert sich wie folgt:

Bit time
   
0-4 Sekunden in Zweierschritten (0-29)
5-10 Minuten (0-59)
11-15 Stunden (0-23)
Bit date
   
0-4 Tag im Monat (1-31)
5-8 Monat (1-12)
9-15 Jahr (0-119, 0=1980)

Querverweis: Fdatime   GEMDOS

5.24.15 DOSVARS

typedef struct
{
   int8_t    *in_dos;                 /* Adresse der DOS- Semaphore */
   int16_t   *dos_time;               /* Adresse der DOS- Zeit      */
   int16_t   *dos_date;               /* Adresse des DOS- Datums    */
   int32_t   res1;                    /*                            */
   int32_t   res2;                    /*                            */
   int32_t   res3;                    /* ist 0L                     */
   VOID      *act_pd;                 /* Laufendes Programm         */
   int32_t   res4;                    /*                            */
   int16_t   res5;                    /*                            */
   VOID      *res6;                   /*                            */
   VOID      *res7;                   /* interne DOS- Speicherliste */
   VOID      (*resv_intmem)();        /* DOS- Speicher erweitern    */
   int32_t   (*etv_critic)();         /* etv_critic des GEMDOS      */
   int8_t *  ((*err_to_str)(int8_t e)); /* Umrechnung Code->Klartext*/
   VOID      *xaes_appls;             /*                              */
   VOID      *mem_root;               /*                              */
   VOID      *ur_pd;                  /*                              */
} DOSVARS;

Hinweis: Diese Variablen sind READ-ONLY !

Mit Hilfe der Funktion resv_intmem läßt sich ähnlich wie mit FOLDRnnnn Speicher für die interne Speicherverwaltung reservieren. Im Gegensatz zu TOS wird diese jedoch deutlich weniger belastet, so daß ein Erweitern i.a. nicht notwendig ist. Muß der Speicher erweitert werden, was auch in ADDMEM geschieht, übergibt man der Funktion resv_intmem in Register A0 die Adresse, und in Register D0 die Länge des zu reservierenden Speicherblocks.

Der Prototyp für den Event-Critic-Handler lautet:

int32_t etv_critic (int16_t errcode, int16_t drvnr)

Man beachte, daß die Funktion die Argumente auf dem Stack erwartet, und daher in Pure-C als cdecl deklariert werden muß.

Die Funktion err_to_str erwartet in Register D0 einen TOS-Fehlercode, und gibt in den Registern D0 und A0 einen Zeiger auf die beschreibende Zeichenkette zurück. Bei einem ungültigen Fehlercode erhält man in D0 eine Null, und in A0 einen Zeiger auf die Zeichenkette 'TOS-Fehler'.

Aus der Sicht von KAOS 1.4.2 sieht die Struktur folgendermaßen aus:

typedef struct
{
   int8_t    *in_dos;                 /* Adresse der DOS- Semaphore */
   int16_t   *dos_time;               /* Adresse der DOS- Zeit      */
   int16_t   *dos_date;               /* Adresse des DOS- Datums    */
   int32_t   dos_stack;               /* Stack für DOS selbst       */
   int32_t   pgm_superset;            /* Benutzerpgm.-Sup.stack     */
   MD        *menlist[3];             /* Adresse der 3 MD-Listen    */
   VOID      *act_pd;                 /* Laufendes Programm         */
   FCB       *fcbx;                   /* Dateien                    */
   int16_t   fcbn;                    /* Länge von fcbx[]           */
   DMD       *dmdx;                   /* Zeiger auf 16 DMDs         */
   IMB       *imbx;                   /* interne DOS- Speicherliste */
   VOID      (*resv_intmem)();        /* DOS- Speicher erweitern    */
   int32_t   (*etv_critic)();         /* etv_critic des GEMDOS      */
   int8_t *  ((*err_to_str)(int8_t e)); /* Umrechnung Code->Klartext  */
} DOSVARS;

Querverweis: AESVARS   Cookie von MagiC   Sconfig

5.24.16 DTA

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

5.24.17 fcookie

typedef struct f_cookie
{
    struct filesys *fs; /* Filesystem welches diesen Cookie kennt     */
    uint16_t dev;       /* Device-Info (z.B. Rwabs Gerätenummer)      */
    uint16_t aux;       /* weitere Daten für das Filesystem           */
    int32_t   index;    /* dient zusammen mit dev zur Identifizierung */
                        /* eines Files */
} fcookie;

Querverweis: FILEPTR   FILESYS   XFS-Konzept in MagiC

5.24.18 FILEPTR

typedef struct fileptr
{
    int16_t         links;
    uint16_t        flags;
    int32_t         pos;
    int32_t         devinfo;
    fcookie         fc;
    struct devdrv  *dev;
    struct fileptr *next;
} FILEPTR;

Querverweis: Dcntl   DEVDRV

5.24.19 flock, Fcntl

struct flock
{
    int16_t  l_type;     /* Art des Lockings */
    int16_t  l_whence;   /* SEEK_SET, SEEK_CUR, SEEK_END */
    int32_t  l_start;    /* Start des Locking-Bereiches  */
    int32_t  l_len;      /* Länge des Locking-Bereiches  */
    int16_t  l_pid;      /* PID des sperrenden Prozesses */
};

Hinweis: Mögliche Werte für l_type sind 0 = Read-Locking, 1 = Write-Locking sowie 3 = kein Locking.

5.24.20 iovec

struct iovec
{
    char    *iov_base;
    int32_t iov_len;
};

5.24.21 LINE

typedef struct
{
    uint8_t   maxlen;        /* max. Zeilenlänge     */
    uint8_t   actuallen;     /* aktuelle Zeilenlänge */
    int8_t    buffer[255];   /* Zeilen-Puffer        */
} LINE;

Querverweis: Cconrs   GEMDOS

5.24.22 ltchars

struct ltchars
{
    int8_t t_suspc;
    int8_t t_dsuspc;
    int8_t t_rprntc;
    int8_t t_flushc;
    int8_t t_werasc;
    int8_t t_lnextc;
};

Querverweis: struct tty   XFS-Konzept in MagiC

5.24.23 msghdr

/* structure used with sendmsg() and recvmsg() */
struct msghdr
{
    struct sockaddr *msg_name;
    int32_t         msg_namelen;
    struct iovec    *msg_iov;
    int32_t         msg_iovlen;
    void            *msg_accrights;
    int32_t         msg_accrightslen;
};

5.24.24 mutimbuf

struct mutimbuf
{
   uint16_t actime;     /* Zugriffszeit                 */
   uint16_t acdate;     /* Zugriffsdatum                */
   uint16_t modtime;    /* Uhrzeit der letzten Änderung */
   uint16_t moddate;    /* Datum der letzten Änderung   */
};

Querverweis: Dcntl   Fcntl   GEMDOS

5.24.25 Process-Descriptor (PD) bzw. BASEPAGE

typedef struct pd
{
   VOID     *p_lowtpa;      /* Anfangsadresse der TPA            */
   VOID     *p_hitpa;       /* erstes Byte nach dem Ende der TPA */
   VOID     *p_tbase;       /* Anfangsadresse des Programmcodes  */
   int32_t   p_tlen;        /* Länge des Programmcodes           */
   VOID     *p_dbase;       /* Anfangsadresse des DATA-Bereichs  */
   int32_t   p_dlen;        /* Länge des DATA-Abschnittes        */
   VOID     *p_bbase;       /* Anfangsadresse des BSS-Bereichs   */
   int32_t   p_blen;        /* Länge des BSS-Abschnittes         */
   DTA      *p_dta;         /* Zeiger auf Default-DTA.           */
                            /* Achtung: zeigt zunächst in die    */
                            /* Kommandozeile !                   */
   struct pd *p_parent;     /* Zeiger auf die Basepage des auf-  */
                            /* rufenden Prozesses                */
   int32_t   p_resrvd0;     /* reserviert                        */
   int8_t   *p_env;         /* Adresse der Environment-Strings   */
   int8_t    p_resrvd1[80]; /* reserviert                        */
   int8_t    p_cmdlin[128]; /* Kommandozeile                     */
} PD; /* auch: BASEPAGE */

Hinweis zur Kommandozeile: Im ersten Byte wird die Anzahl der Zeichen eingesetzt. Die maximale Länge der Kommandozeile beläuft sich nicht auf 127, sondern nur auf 124 Zeichen! (Dies trift nicht für MagiC ab Version 3 zu - siehe ARGV-Verfahren).

Querverweis: GEMDOS   OSHEADER   Pexec   Programmstart und TPA

5.24.26 Poll Descriptor

typedef struct pollfd
{
        int32_t  fd;            /* File descriptor to poll */
        uint16_t events;        /* Types of events poller cares about */
        uint16_t revents;       /* Types of events that actually occurred */
} POLLFD;

See also: GEMDOS   Fpoll

5.24.27 ploadinfo

struct ploadinfo
{
   int16_t fnamelen;  /* Länge von 'fname'                         */
   int8_t *cmdlin;    /* Kommandozeile des Prozesses (128 Bytes)   */
   int8_t *fname;     /* vollst. Pfad- und Dateiname des Prozesses */
};

Querverweis: Fcntl   PLOADINFO

5.24.28 sgttyb

struct sgttyb
{
    int8_t   sg_ispeed;
    int8_t   sg_ospeed;
    int8_t   sg_erase;
    int8_t   sg_kill;
    uint16_t sg_flags;
};

Querverweis: struct tty   XFS-Konzept in MagiC

5.24.29 struct sigaction

Diese Struktur ist wie folgt definiert:

struct sigaction
{
   void cdecl (*sa_handler)(int32_t sig);
   int32_t    sa_mask;
   int16_t    sa_flags;
};

Hinweis: Die Komponente sa_handler kann dabei verschiedene Werte annehmen. Ein Wert von 0 bedeutet eine Default-Signal-Behandlung durch das System, bei einem Wert von 1 wird das Signal ignoriert; jeder andere Werte wird als die Adresse einer Signalbehandlungsroutine interpretiert, die dann aufgerufen wird.

Die Komponente sa_mask enthält die zusätzlich (zu dem gerade in Bearbeitung befindlichen Signal) während der Signalbehandlung zu maskierenden Signale. Es gilt dann also mask = oldmask+(1<<sig)+sa_mask). Über sa_flags kann das Verhalten eines Signals weiter beeinflußt werden. Ein Wert von 1 für sa_flags bedeutet in MiNT, daß das Signal SIGCHLD nur beim Terminieren, und nicht beim Anhalten eines Childs ausgelöst wird; andere Werte für sa_flags sind z.Zt. noch nicht definiert.

Querverweis: Signale   Signalhandler in MagiC   GEMDOS   Psigaction   Prozessfunktionen

5.24.30 sockaddr

/* generic socket address */
struct sockaddr
{
    int16_t sa_family;
    char    sa_data[14];
};

5.24.31 STAT

struct time
{
   int32_t high_time;
   int32_t time;
   uint32_t nanoseconds;
};

typedef struct STAT
{
   uint64_t   dev;               /* Gerätenummer               */
   uint32_t   ino;               /* Dateinummer                */
   uint32_t   mode;              /* Dateimodus, Angaben zu     */
                                 /* - möglichen Filetypen      */
                                 /* - speziellen Bits          */
                                 /* - Zugriffsrechten          */
   uint32_t   nlink;             /* Anzahl der Links           */
   uint32_t   uid;               /* Benutzernummer             */
   uint32_t   gid;               /* Gruppennummer              */
   uint64_t   rdev;              /* tatsächliches Gerät        */
                                 /* (z.B. bei BIOS-Files)      */
   struct time atime;            /* Datum des letzten Zugriffs */
   struct time mtime;            /* Datum der letzten Änderung */
   struct time ctime;            /* Datum der letzten Status-Änderung */
   int64_t    size;              /* Dateilänge                 */
   int64_t    blocks;            /* belegte Blocks             */
   int32_t    blksize;           /* Blockgröße                 */
   uint32_t   flags;             /* Benutzer-definierte Flags  */
   uint32_t   gen;               /* file generation number     */
   int32_t    reserved[7];       /* reserviert                 */
} STAT;

Hinweis: MagiC liefert für FAT-Dateisysteme folgende Index-Daten:

• Verzeichnisse: Startcluster im Motorola-Format
• sonstige Dateien:
Hiword = Startcluster des Verzeichnisses
Loword = Position innerhalb des Verzeichnisses >> 5

Dieses Verfahren ist ähnlich wie das, welches Linux und Solaris verwenden. Nachteil ist, daß Dateien beim Verschieben ihren Index ändern.

Die Komponente index ist also ein Langwort zur eindeutigen Identifizierung einer Datei bzw. eines Ordners. Der Index muß innerhalb eines Dateisystems eindeutig sein; zusammen mit dem folgenden Feld (dev) ist damit eine Datei oder ein Ordner systemglobal vollständig festgelegt.

Unter UNIX-ähnlichen Dateisystemen ist index die Nummer des Inode.

Auf Macintosh-Partitionen wird die hard file ID bzw. die hard dir ID verwendet, die vom MacOS zur Verfügung gestellt wird. Das MacOS verwendet als Standard-Deskriptoren aber das FSSpec. Für Verzeichnisse, d.h. für Directory IDs, gibt es Funktionen des MacOS, um einen FSSpec zu berechnen. Leider lassen sich die hard file IDs für normale Dateien (d.h. nicht Unterverzeichnisse) nicht weiter verwenden, da sie von keiner Funktion des MacOS verarbeitet werden.

Querverweis: XFS-Konzept in MagiC   Fxattr   Dxreaddir

5.24.31.1 STAT, dev-Komponente

Legt das Dateisystem fest. Auf dem Atari sind 0..25 die BIOS-Laufwerke A: bis Z:, Laufwerk U: oder andere Dateisysteme verwenden höhere Nummern. Auf dem Macintosh wird die 'volume ID' eingesetzt, die vom MacOS vergeben wird.

5.24.31.2 STAT, mögliche Filetypen

Mögliche Filetypen, die über die STAT-Struktur gesetzt bzw. ermittelt werden können:

#define S_IFMT   0170000  /* zur Isolierung des Filetyps */
#define S_IFSOCK 0010000  /* Socket Datei                */
#define S_IFCHR  0020000  /* spezielles BIOS-File        */
#define S_IFDIR  0040000  /* Verzeichnis                 */
#define S_IFBLK  0060000  /* Block special file          */
#define S_IFREG  0100000  /* normale Datei               */
#define S_IFIFO  0120000  /* FIFO (Pipe mit Namen)       */
#define S_IMEM   0140000  /* Speicherblock/Prozeßfile    */
#define S_IFLNK  0160000  /* symbolischer Link           */

5.24.31.3 STAT, Sticky-Bit

Spezielle Bits, die über die STAT-Struktur gesetzt bzw. ermittelt werden können:

#define S_ISUID 04000  /* User-ID des Eigentümers setzen */
#define S_ISGID 02000  /* Gruppen-ID bei Aufruf setzen   */
#define S_ISVTX 01000  /* Sticky bit                     */

Hinweis: Die Bedeutung des Sticky-Bits ist dabei vom Filetyp abhängig.

5.24.31.4 STAT, size-Komponente

Auf DOS-Partitionen wird für Ordner der Wert 0 als Länge geliefert. Die tatsächliche Länge kann leider aufgrund der Einschränkungen von MSDOS nicht ermittelt werden. Die Länge des Wurzelverzeichnisses kann allerdings ermittelt werden.

Auf Macintosh-Partitionen haben Ordner immer die Länge 0, die tatsächliche Länge läßt sich (zumindest unter System 7) nicht ermitteln.

5.24.31.5 STAT, Zugriffsrechte

Mögliche Zugriffsrechte, die über die STAT-Struktur gesetzt bzw. ermittelt werden können:

#define S_IRUSR 0400   /* Eigentümer darf Datei lesen    */
#define S_IWUSR 0200   /* dto. darf beschreiben          */
#define S_IXUSR 0100   /* dto. darf ausführen            */
#define S_IRGRP 0040   /* Gruppenmitglieder dürfen lesen */
#define S_IWGRP 0020   /* dto. dürfen beschreiben        */
#define S_IXGRP 0010   /* dto. dürfen ausführen          */
#define S_IROTH 0004   /* Andere dürfen Datei lesen      */
#define S_IWOTH 0002   /* dto. dürfen beschreiben        */
#define S_IXOTH 0001   /* dto. dürfen ausführen          */

5.24.32 tchars

struct tchars
{
    int8_t t_intrc;
    int8_t t_quitc;
    int8_t t_startc;
    int8_t t_stopc;
    int8_t t_eofc;
    int8_t t_brkc;
};

Querverweis: struct tty   XFS-Konzept in MagiC

5.24.33 timeval

struct timeval
{
  int32_t int tv_sec;
  int32_t int tv_usec;
};

tv_sec enthält die Anzahl Sekunden, die seit dem Ursprung vergangen sind. Der Ursprung ist Donnerstag, 1.Januar 1970, 00:00:00 UTC.

tv_usec enthält den Nachkommaanteil von tv_sec in Mikrosekunden.

5.24.34 timezone

struct timezone
{
  int32_t int tz_minuteswest;
  int32_t int tz_dsttime;
};

tz_minuteswest enthält den Offset zur UTC in Sekunden. Zeitzonen östlich den Null-Meridians (z.B. Osteuropa) haben einen negativen Offset, Zeitzonen westlich des Null-Meridians (z.B. Amerika) haben einen positiven.

tz_dsttime ist ungleich Null, wenn innerhalb des Jahr auf Sommerzeit umgestellt wird.

5.24.35 struct tty

struct tty
{
    int16_t         pgrp;
    int16_t         state;
    int16_t         use_cnt;
    int16_t         res1;
    struct sgttyb   sg;
    struct tchars   tc;
    struct ltchars  ltc;
    struct winsize  wsiz;
    int32_t         rsel;
    int32_t         wsel;
    int8_t          *xkey;
    int32_t         hup_ospeed;
    uint16_t        vmin, vtime;
    int32_t         resrvd[1];
};

Querverweis: Dcntl   dev_descr   XFS-Konzept in MagiC

5.24.36 winsize

struct winsize
{
    int16_t  ws_row;
    int16_t  ws_col;
    int16_t  ws_xpixel;
    int16_t  ws_ypixel;
};

Querverweise: Fcntl   TIOCGWINSZ

5.24.37 XATTR

typedef struct xattr
{
   uint16_t   mode;              /* Dateimodus, Angaben zu     */
                                 /* - möglichen Filetypen      */
                                 /* - speziellen Bits          */
                                 /* - Zugriffsrechten          */
   int32_t    index;             /* Dateinummer                */
   uint16_t   dev;               /* Gerätenummer               */
   uint16_t   rdev;              /* tatsächliches Gerät        */
                                 /* (z.B. bei BIOS-Files)      */
                                 /* in MagiC jedoch reserviert */
   uint16_t   nlink;             /* Anzahl der Links           */
   uint16_t   uid;               /* Benutzernummer             */
   uint16_t   gid;               /* Gruppennummer              */
   int32_t    size;              /* Dateilänge                 */
   int32_t    blksize, nblocks;  /* Blockgröße/belegte Blocks  */
   uint16_t   mtime, mdate;      /* Datum der letzten Änderung */
   uint16_t   atime, adate;      /* Datum des letzten Zugriffs */
   uint16_t   ctime, cdate;      /* Erstellungsdatum           */
   uint16_t   attr;              /* TOS-Dateiattribute         */
   uint16_t   reserved2;         /* reserviert                 */
   int32_t    reserved3[2];      /* reserviert                 */
} XATTR;

Hinweis: MagiC liefert für FAT-Dateisysteme folgende Index-Daten:

• Verzeichnisse: Startcluster im Motorola-Format
• sonstige Dateien:
Hiword = Startcluster des Verzeichnisses
Loword = Position innerhalb des Verzeichnisses >> 5

Dieses Verfahren ist ähnlich wie das, welches Linux und Solaris verwenden. Nachteil ist, daß Dateien beim Verschieben ihren Index ändern.

Die Komponente index ist also ein Langwort zur eindeutigen Identifizierung einer Datei bzw. eines Ordners. Der Index muß innerhalb eines Dateisystems eindeutig sein; zusammen mit dem folgenden Feld (dev) ist damit eine Datei oder ein Ordner systemglobal vollständig festgelegt.

Unter UNIX-ähnlichen Dateisystemen ist index die Nummer des Inode.

Auf Macintosh-Partitionen wird die hard file ID bzw. die hard dir ID verwendet, die vom MacOS zur Verfügung gestellt wird. Das MacOS verwendet als Standard-Deskriptoren aber das FSSpec. Für Verzeichnisse, d.h. für Directory IDs, gibt es Funktionen des MacOS, um einen FSSpec zu berechnen. Leider lassen sich die hard file IDs für normale Dateien (d.h. nicht Unterverzeichnisse) nicht weiter verwenden, da sie von keiner Funktion des MacOS verarbeitet werden.

Querverweis: XFS-Konzept in MagiC   Fxattr   Dxreaddir

5.24.37.1 XATTR, dev-Komponente

Legt das Dateisystem fest. Auf dem Atari sind 0..25 die BIOS-Laufwerke A: bis Z:, Laufwerk U: oder andere Dateisysteme verwenden höhere Nummern. Auf dem Macintosh wird die 'volume ID' eingesetzt, die vom MacOS vergeben wird.

5.24.37.2 XATTR, mögliche Filetypen

Mögliche Filetypen, die über die XATTR-Struktur gesetzt bzw. ermittelt werden können:

#define S_IFMT  0170000  /* zur Isolierung des Filetyps */
#define S_IFCHR 0020000  /* spezielles BIOS-File        */
#define S_IFDIR 0040000  /* Verzeichnis                 */
#define S_IFREG 0100000  /* normale Datei               */
#define S_IFIFO 0120000  /* FIFO (Pipe mit Namen)       */
#define S_IMEM  0140000  /* Speicherblock/Prozeßfile    */
#define S_IFLNK 0160000  /* symbolischer Link           */

5.24.37.3 XATTR, Sticky-Bit

Spezielle Bits, die über die XATTR-Struktur gesetzt bzw. ermittelt werden können:

#define S_ISUID 04000  /* User-ID des Eigentümers setzen */
#define S_ISGID 02000  /* Gruppen-ID bei Aufruf setzen   */
#define S_ISVTX 01000  /* Sticky bit                     */

Hinweis: Die Bedeutung des Sticky-Bits ist dabei vom Filetyp abhängig.

5.24.37.4 XATTR, size-Komponente

Auf DOS-Partitionen wird für Ordner der Wert 0 als Länge geliefert. Die tatsächliche Länge kann leider aufgrund der Einschränkungen von MSDOS nicht ermittelt werden. Die Länge des Wurzelverzeichnisses kann allerdings ermittelt werden.

Auf Macintosh-Partitionen haben Ordner immer die Länge 0, die tatsächliche Länge läßt sich (zumindest unter System 7) nicht ermitteln.

5.24.37.5 XATTR, Zugriffsrechte

Mögliche Zugriffsrechte, die über die XATTR-Struktur gesetzt bzw. ermittelt werden können:

#define S_IRUSR 0400   /* Eigentümer darf Datei lesen    */
#define S_IWUSR 0200   /* dto. darf beschreiben          */
#define S_IXUSR 0100   /* dto. darf ausführen            */
#define S_IRGRP 0040   /* Gruppenmitglieder dürfen lesen */
#define S_IWGRP 0020   /* dto. dürfen beschreiben        */
#define S_IXGRP 0010   /* dto. dürfen ausführen          */
#define S_IROTH 0004   /* Andere dürfen Datei lesen      */
#define S_IWOTH 0002   /* dto. dürfen beschreiben        */
#define S_IXOTH 0001   /* dto. dürfen ausführen          */

5.24.37.6 XATTR, spezielle Bits

Spezielle Bits, die über die XATTR-STruktur gesetzt bzw. ermittelt werden können:

#define S_ISUID 04000  /* User-ID des Eigentümers setzen */
#define S_ISGID 02000  /* Gruppen-ID bei Aufruf setzen   */
#define S_ISVTX 01000  /* Sticky bit                     */

Hinweis: Die Bedeutung des Sticky-Bits ist dabei vom Filetyp abhängig.

5.24.38 xkey

struct xkey
{
    int16_t   xk_num;
    int8_t    xk_def[8];
};

Querverweise: Fcntl   TIOCGXKEY


Home GEMDOSGEMDOS GEMDOS-FunktionslisteGEMDOS-Funktionsliste Line-ALine-A