HELIOS Ressourcen / Dateispezifikationen

Die HELIOS eigene Struktur zur Pflege des Desktops befindet sich in den ersten 512 Bytes einer jeden Datei im HELIOS „.rsrc“-Verzeichnis. Um eine neue Datei anzulegen, müssen diese ersten 512 Bytes auf null gesetzt und dann mit den gewünschten Parametern „gefüllt“ werden. Obligatorische Parameter sind das „Magic“ und die Versionsnummern. Sind diese nicht gesetzt, wird die „.rsrc“-Datei vom Fileserver nicht akzeptiert. Das Feld finderInfo enthält „Type“ und „Creator“ und wird in „Inside Macintosh“, im Kapitel über den Dateimanager, beschrieben.

Bei den Feldern createTime sowie backupTime handelt es sich um Standard-UNIX-Zeitwerte in Sekunden (gerechnet ab dem 1. Januar 1970, 00:00 Uhr). Das Feld attr enthält so genannte Dateiflags („gesperrt“, „geschützt“), die ebenfalls in „Inside Macintosh“ beschrieben werden. openMax kann zur Limitierung der Anzahl von gleichzeitigen Dateiöffnungen genutzt werden; ist null eingetragen, gibt es keine Begrenzung. Wird dieser Parameter bei einer Anwendung gesetzt, kann auf diese Weise die Anzahl geichzeitiger Benutzer festgelegt werden. Um jedoch diese Begrenzung zu erzwingen, sollten Sie auch das „Copy protect“-Bit im Feld attr setzen, um so lokale Kopien zu unterbinden.

Ältere Versionen von EtherShare haben die gesamte Struktur, einschließlich aller Kommentare, geschrieben. Der neue EtherShare Fileserver schreibt nur die Struktur von FileInfo – nur wenn ein Benutzer, über das Mac OS 9 Finder Informationsfenster, etwas in das Feld comment schreibt, wird die Struktur XFileInfo geschrieben. Dies kann zu einem kleinen Problem führen, wenn die Datei nur einen Daten- aber keinen Ressourcenzweig hat. Ältere Programme könnten sizeof(XFileInfo) Bytes im „.rsrc“-Bereich erwarten, während HELIOS lediglich sizeof(FileInfo) Bytes geschrieben hat. Das ist jedoch kein Problem, wenn die Datei Daten in ihrem Ressourcenzweig hat, da die Anwendung dann einfach Nullen für das Kommentarfeld liest.

Das Feld id enthält die Datei-ID, falls es sich bei dem Eintrag um eine Datei handelt oder eine Verzeichnis-ID, wenn der Eintrag ein Verzeichnis ist. Wird die ID auf Null gesezt, so weist der Server dieser Datei bzw. diesem Verzeichnis eine Datei- bzw. Verzeichnis-ID zu, wenn er diese Datei bzw. dieses Verzeichnis zum ersten mal liest.

#define VERSION 0x0102
#define MAGIC 0x3681093
#define INFOLEN 32

typedef struct FileInfo {
uint32 magic;
uint32 serno; /* written only, never read */
uint16 version;
uint16 attr; /* invisible... */
uint16 openMax; /* max number of opens */
uint16 filler0;
uint32 backupCleared; /* time backup bit cleared */
uint32 id; /* dir/file id */
uint32 createTime; /* unix format */
uint32 backupTime; /* unix format */
uint8 finderInfo[INFOLEN];
} FileInfo;

typedef struct XFileInfo {
FileInfo fi;
uint8 shortFileName[12 + 1 + 3]; /* not used anymore */
uint8 longFileName[32 + 1 + 3]; /* not used anymore */
uint8 comment[199 + 1];
} XFileInfo;