home *** CD-ROM | disk | FTP | other *** search
- -------------------------------------------------------------------------
- !Hierarchy
- -------------------------------------------------------------------------
-
- Version: 1.39, (23.01.1995)
- RiscOS: mindestens V2.00
- RAM: mindestens 160 Kbytes
- Autor: Stefan Tomlik
-
- !Hierarchy ist Public Domain und darf frei kopiert, verbreitet und benutzt
- werden. Es ist nicht erlaubt, außer zum Zweck der Aufwandsentschädigung oder
- der Begleichung von Versandkosten für !Hierarchy irgendeinen Geldbetrag zu
- berechnen.
-
- Da ich nicht garantieren kann, daß dieses Programm fehlerfrei ist (wer kann
- das schon), übernehme ich keine Verantwortung für einen etwaigen Verlust von
- Daten, Zeit, Geduld oder Nerven, der durch die Benutzung von !Hierarchy
- entstanden ist.
-
- Ich verlange für dieses Programm kein Geld, bitte aber um möglichst
- originelle Geschenke jeder Art!
-
- Soviel dazu ...
-
- Dieses Programm dient dazu, von Archimedes-typischen Dateisystemen (ADFS,
- SCSIFS, IDEFS, RAMFS, ArcFS) Übersichtsdateien zu erstellen.
- Übersichtsdateien ähneln vom Inhalt her der Ausgabe von 'Dir' und 'List' auf
- dem Commodore Amiga. Weitere Erklärungen kann ich mir eigentlich sparen. Ein
- kleines Beispiel:
-
- Inhaltsverzeichnis von SCSI::Sys.$.Grafik.!FYEO
-
- Datei wurde erstellt: 20:05:36 19-Nov-1994
-
- !Boot (323 bytes)
- !Help (1237 bytes)
- !Run (927 bytes)
- !RunImage (48 Kbytes)
- !Sprites (2452 bytes)
- !Sprites22 (4 Kbytes)
- Docs________
- Arm'sTech (990 bytes)
- Credits (306 bytes)
- Future (123 bytes)
- History (798 bytes)
- Perfs (1914 bytes)
- ReadMe (1135 bytes)
- = 5 Kbytes
- DTable (32 Kbytes)
- Sprites (3480 bytes)
- Templates (1729 bytes)
- = 99 Kbytes
-
- Verzeichnisse: 2
- Dateien: 15
-
- Das ist das Inhaltsverzeichnis des PD-Programms !FYEO (was ich übrigens nur
- empfehlen kann). An diesem kleinen Beispiel kann man eigentlich alles sehen,
- was zu erwähnen wäre, aber ich fasse nochmal zusammen:
-
- - Alphabetische Auflistung aller Objekte in einem Verzeichnis
- - Angabe der Größe von Dateien (xxxx bytes/Kbytes/Mbytes)
- - Angabe der Größe eines Verzeichnisses (auch von Applikationen).
- - Strukturierte Ausgabe je nach Verzeichnisstruktur
- - Und ... Drag & Drop! Ich habe dieses Beispiel direkt aus !Hierarchy
- importiert.
-
- Der Anlaß für dieses Programm war das Bemühen, die Bestände an Public Domain
- auf einer sehr großen Festplatte im Auge behalten zu können. Das war auf die
- Dauer mit !FileTree (© John A.M. Tytgat) zu umständlich und unnötig komplex,
- obwohl das Programm sehr gut gelungen ist (wenn auch nicht fehlerfrei). Ein
- weites gutes Programm zu diesem Thema ist natürlich !DiscSpace von Martin
- Wuerthner.
-
- Abgesehen davon wollte ich ausprobieren, wie weit ich mit dem verwendeten
- ISO-Pascal-Compiler gehen kann. Wie sich herausstellte, ist dieser für
- derartige Aufgaben nicht besonders gut geeignet, da man sich für einige
- Sachen fast schon einen Wolf tippt. Abgesehen davon, daß man sich z.B.
- Routinen für Strings erst noch selber schreiben muß.
-
- -------------------------------------------------------------------------
- Anwendung
- -------------------------------------------------------------------------
-
- Starten Sie die Applikation per Doppelklick auf das Applikationsicon in
- einem Verzeichnisfenster. Es installiert sich rechts auf der Iconbar.
- Wenn Sie keinen Bock mehr haben, weiterzulesen, können Sie auch ganz
- einfach die !Help-Applikation verwenden, um sich mit dem Programm ver-
- traut zu machen.
-
- Verfügbare Aktionen:
-
- Iconbar:
- --------
-
- - SELECT öffnet das Statusfenster, das den aktuellen Zustand von !Hierarchy
- anzeigt.
-
- - MENU öffnet das Hauptmenü.
-
- - ADJUST hält einen gerade aktiven Durchlaufprozeß vorübergehend an.
- Nochmaliges Anwählen setzt diesen Prozeß fort. (siehe Hauptmenü, 'Pause')
-
- Das Menü-System:
- ----------------
-
- - Information zeigt das Infofenster für !Hierarchy.
-
- - Sichern führt zu dem üblichen 'Sichern' - Dialog. Der Unterschied ist,
- daß dieser Dialog weder auf 'Return' reagiert noch ein OK-Gadget hat.
-
- - Status öffnet das oben bereits erwähnte Statusfenster.
-
- - Pause hält einen gerade aktiven Durchlaufprozeß vorübergehend an.
- Nochmaliges Anwählen setzt diesen Prozeß fort.
-
- - Beenden ... beendet die Applikation!
-
- - Optionen . Mit Dateigröße.
- Wenn angewählt, speichert !Hierarchy die Größe jeder Datei mit in
- der Übersichtsdatei.
-
- - Optionen . Verz. Summieren.
- Wenn angewählt, speichert !Hierarchy die Größe aller Dateien eines
- Verzeichnisses als Summe mit in der Übersichtsdatei.
-
- - Optionen . App. durchsuchen.
- Ist diese Option nicht angewählt, läßt !Hierarchy detaillierte
- Informationen zu den Dateien in einem Applikationsverzeichnis
- weg und speichert nur die Größe aller Dateien der Applikation in der
- Übersichtsdatei. Ich habe diese Option implementiert, da es oft nicht
- von Interesse ist, was sich in einer Applikation befindet. (!Run,
- !Boot, !RunImage, !Sprites, usw.)
-
- - Optionen . Multitasking.
- Ist diese Option nicht angewählt, dann hält !Hierarchy andere Programme
- während eines Durchlaufprozesses an (bildlich gesprochen) und beansprucht
- die gesamte zur Verfügung stehende Prozessorzeit für sich alleine. Das
- Programm arbeitet dadurch *geringfügig* schneller. Es gibt allerdings
- andere wichtigere Gründe, diese Option auszuschalten. (siehe unten)
-
- - Optionen . Endnamen benutzen.
- Wenn angewählt, setzt !Hierarchy den Endnamen des zu durchlaufenden
- Verzeichnisses als Endnamen der zu erzeugenden Übersichtsdatei ein.
- In Fällen, wo dies nicht möglich ist, werden alle nicht erlaubten
- Zeichen des Namens durch '-' ersetzt. Es ist z.B. nicht möglich,
- einer Datei den Namen '$' zu geben.
-
- - Optionen . Optionen sichern. Sichert die aktuellen Einstellungen im
- Applikationsverzeichnis. Es wird auch festgehalten, ob das Statusfenster
- offen ist oder nicht.
-
- Statusfenster:
- --------------
-
- - Aktion: Zeigt den aktuellen Zustand des Programms an. Derzeit entweder
- 'Waiting ...' oder 'Scanning directory tree of ...'.
-
- - Start: Zeigt während des Durchlaufens einer Verzeichnishirarchie deren
- oberstes Verzeichnis an, also den Pfadnamen des Startverzeichnisses.
-
- - Aktuell: Zeigt während des Durchlaufens den Pfadnamen des Verzeichnisses
- an, das zum aktuellen Zeitpunkt durchlaufen wird.
-
- - Nach: Zeigt den vollen Pfadnamen der zu erstellenden Übersichtsdatei an.
- Wird die Datei zu einer anderen Applikation übertragen, wird der Name
- dieser Applikation angezeigt.
-
- - Erfaßt: Zeigt während des Durchlaufens an, wieviele Verzeichnisse und
- Dateien !Hierarchy schon untersucht hat.
-
- MENU innerhalb des Fensters öffnet das bereits beschriebene Hauptmenü.
-
- -------------------------------------------------------------------------
- Wie erstellt man eine Übersichtsdatei?
- -------------------------------------------------------------------------
-
- - Öffnen Sie per MENU das Hauptmenü. Es ist sowohl über Iconbar als auch im
- Statusfenster erreichbar.
-
- - Gehen Sie mit der Maus in den 'Sichern' - Dialog.
-
- - Geben Sie einen Namen für die Datei ein. Dieser Name darf keine Pfadangaben
- enthalten. Sie können maximal 10 Zeichen eingeben.
-
- - Ziehen Sie das Datei-Icon (Text) aus dem 'Sichern' - Dialog in ein
- Verzeichnisfenster. Die Verzeichnisstruktur innerhalb dieses Verzeich-
- nisses wird jetzt in der Datei gespeichert.
-
- - Wollen Sie die Übersichtsdatei eines Verzeichnisses woanders als im
- Verzeichnis selbst abspeichern, ziehen Sie ein Icon aus dem gewünschten
- Verzeichnis auf das Iconbar-Icon oder das Statusfenster von !Hierarchy
- und speichern Sie die Datei dann woanders. Alle Pfadangaben werden
- entsprechend im Statusfenster angezeigt.
-
- - Das Icon 'Löschen' (im Statusfenster rechts) dient dazu, vor dem
- Abspeichern getroffene Entscheidungen rückgängig zu machen: es wird dann
- wieder die Verzeichnisstruktur des Verzeichnisses durchlaufen, in dem die
- Übersichtsdatei abgespeichert wird.
-
- - Das Icon 'Abbruch' (unter 'Löschen') unterbricht einen gerade aktiven
- Durchlaufprozeß. Die Datei wird trotzdem unvollständig gespeichert
- oder in der gewünschten Applikation geladen.
-
- - Das Hauptmenü schließt sich selbstständig.
-
- -------------------------------------------------------------------------
- Mögliche Erweiterungen
- -------------------------------------------------------------------------
-
- - Während eine Datei erstellt wird, ist 'Sichern' im Hauptmenü nicht
- anwählbar.
- (Ich habe WEDER BOCK NOCH ZEIT, für RiscOS einen Multithread-Aufsatz zu
- entwickeln. Das überlasse ich Acorn oder anderen Programmierern. Eine
- sinnvolle Möglichkeit wäre, die eigentliche Routine zum Erstellen der
- Übersichtsdatei vom Hauptprogramm zu trennen, als eigenen Task laufen
- zu lassen und über ein Messageprotokoll zu überwachen.) Es ist übrigens
- auch nicht möglich, während der Erstellung einer Datei die Optionen oder
- Pfadangaben (mittels 'Löschen') zu verändern, was auch nicht sinnvoll ist.
-
- - Man könnte aus diesem Utility problemlos ein Backup-Programm machen.
- Sollte ich irgendwann mal Zeit haben oder mich während des Studiums mit
- dem Rucksackproblem beschäftigen, ist es soweit.
-
- - RAM-Transfer von übersichtsdateien (z.B. nach !Edit) ist noch nicht
- implementiert. Wäre aber denkbar.
-
- - Dateinamen dürfen in dieser Version nicht länger als 10 Zeichen sein.
-
- - Das nächste Update wird String-Routinen in Assembler enthalten. Die
- altbekannte OS_GBPB 10 - Routine läßt sich auch noch verbessern, da
- die aktuelle Version die Verzeichniseinträge einzeln durchsucht,
- anstatt den Inhalt eines Verzeichnisses komplett abzufragen. Ich
- muß mir aber noch etwas überlegen, wie ich Stack-Overflows abfange,
- bevor ich die Routine ändere. Diese Version ist mir jedenfalls
- eindeutig zu lahm, spätestens nachdem ich M. Wuerthner's !DiscSpace
- gesehen habe. Immerhin kann man problemlos im Hintergrund arbeiten,
- da *sehr* oft Wimp_Poll aufgerufen wird.
-
- - Ich habe die Applikation soweit internationalisiert, wie es mein
- Schulwissen zuläßt. Sollte jemand eine französische, griechische
- oder mexikanische Variante hinzufügen wollen ... bitte sehr!
-
- -------------------------------------------------------------------------
- Bekannte Probleme
- -------------------------------------------------------------------------
-
- - !Hierarchy benutzt das standardisierte Data-Transfer-Protokoll wie im
- Programmer's Reference Manual beschrieben. Es kann deshalb zu Fehlern mit
- Programmen kommen, die sich nicht an die Vorgaben halten, z.B. !PCompile,
- !Zap, !Impression ... Die Dateien im Verzeichnis 'doc' enthalten weitere
- Informationen zu diesem Thema. !Impression ist z.B. schon zufrieden,
- wenn man die Multitasking-Option von !Hierarchy ausschaltet. Vielleicht
- sollte man diesem Programm beim nächsten Update noch beibringen, auf
- gewisse Sachen wie z.B. Message_DataLoad zu warten.
-
- - Nachtrag: die Probleme mit !Zap sind beseitigt. Ich bitte höflichst und
- untertänigst um Entschuldigung ... ich habe die Dateien in 'doc' noch
- etwas erweitert: 'was man nie vergessen sollte'. !Impression 2.19
- schmiert immer noch gnadenlos ab, wenn es nach Msg_DataSave keine
- weiteren Aufforderungen mehr erhält.
-
- - Größengaben zu offenen Dateien sind inkorrekt. Ich habe bisher auch keine
- Idee, wie ich dieses Problem umgehen soll. Die einzige Möglichkeit, die mir
- spontan eingefallen ist, die ich aber nicht programmiert habe, ist *CLOSE
- vor Aufruf der eigentlichen Routine.
-
- - OS_GBPB steigt manchmal mit der Fehlermeldung aus 'xxx is a file.'
- Das kann nur passieren, wenn die Scan-Routine in !Hierarchy versucht,
- 'xxx' als als Verzeichnis zu untersuchen. Sollte mir das jemand erklären
- können oder ein reproduzierbares Beispiel liefern können, bitte melden!
-
- - !Hierarchy ignoriert Directory-Links, die mit !LinkFS oder vom Arbeits-
- prinzip her ähnlichen Programmen erzeugt worden sind. Das bleibt auch so,
- um zu verhindern, daß irgendwelche Pappnasen sich bei mir über endlose
- Rekursionen in ein und demselbem Verzeichnis beschweren.
-
- - Die Implementierung der Solid-Drag-Option von RiscOs 3.xx hat mich eine
- Weile aufgehalten und scheint auch noch nicht ganz sauber zu sein. Um
- genau zu sein, ist es mir bisher nicht gelungen, DragASprite_Start auf
- ein Icon anzuwenden, das das 'indirected'- Flag (bit 8) gesetzt hat. Das
- Problem ist mir inzwischen bekannt, aber ich habe noch keine Lösung.
-
- - Die Zähler für die Anzahl von erfaßten Verzeichnissen und Dateien im
- Statusfenster werden nicht korrekt angezeigt, wenn die Multitasking-
- Option aus ist.
- Ich habe schlicht und einfach keine Ahnung, warum das so ist, denn der
- aktuelle Pfad WIRD während des Durchlaufens richtig angezeigt.
-
- - Outline-Fonts werden auch in dieser Version nicht richtig gehandhabt. Ich
- wäre sehr dankbar, wenn mir jemand Informationen darüber zukommen lassen
- würde, wie man auf einfache Art und Weise mit einem 'font reference
- count array' umgeht.
- Ich bin über jede Hilfe, die ich bekommen kann, dankbar! (Adresse siehe
- unten)
-
- - Wie schon beschrieben sind Größenabgaben zu offenen Dateien nicht korrekt.
- Um dieses Problem zu umgehen, sollte man Übersichtsdateien nicht in
- Verzeichnissen erzeugen, die von !Hierarchy gerade dann durchlaufen
- werden. Die Größe (der 'Extent') einer offenen Datei hängt übrigens auch
- von der Filecore-Struktur des verwendeten Datenträgers ab.
-
- - Vermeiden Sie es, Archive abzumelden ('Close Arc'), wenn !Hierarchy gerade
- einen Pfad innerhalb eines Verzeichnisses von ArcFS durchläuft.
-
- - Es ist natürlich möglich, eine Übersichtsdatei via !Spark in ein Archiv zu
- schreiben. Vergessen Sie aber bitte nicht den Unterschied zwischen
- Verzeichnisfenster und einem Fenster, das von Spark geöffnet wurde.
-
- - Die Gesamtlänge eines Pfadnamens darf 255 Zeichen nicht überschreiten. Das
- dürfte allerdings nur für diejenigen interessant sein, die von der
- Festplatten-Krankheit befallen sind und für jedes Unterscheidungsmerkmal
- ansonsten ähnlicher Dateien NOCH EIN Unterverzeichnis anfertigen.
- Die Verzeichnisse werden rekursiv durchlaufen. Stacküberläufe werden dank
- Acorn's ISO-Pascal-Compiler nicht abgefangen.
-
- - Bitte ändern Sie nicht die !Run-Datei im Applikationsverzeichnis. Falls
- Sie es doch tun, denken Sie bitte daran, daß die Applikation mindestens
- 160k braucht. Die !RunImage-Datei ist gesqueezt.
-
- - Da DOSFS (RiscOS 3.10) und einige :-) Image-Filesysteme es wohl nicht
- schaffen, den Dateityp einer offenen Datei zu setzen, wird einer neu
- erzeugten Übersichtsdatei erst dann der Typ 'Text' (fff) gegeben,
- nachdem sie geschlossen wurde.
-
- - Noch etwas zu 'DragASprite'. Was ich erst für einen absolut hirnver-
- drehenden und wahrscheinlich unauffindbaren Bug von !Hierarchy gehalten
- habe, stellte sich nach einigen Versuchen als Schwäche des DragASprite-
- Moduls heraus: zieht man ein Icon aus einem beliebigen 'Save as'-Fenster
- in die linke oder rechte untere Ecke des Bildschirms, fängt das Icon an
- zu flackern. Das passiert allerdings nur, wenn der Mauszeiger über dem
- IconBar-Fenster ist. Ich nehme mal ganz vorwitzig an, daß der scroll_x-
- offset der Iconbar auch dann geändert wird, wenn alle Icons in diesem
- Fenster noch sichtbar sind (visible_area_x_max = work_area_x_max).
-
- - Version 1.38 benutzt ein neues Menu-Interface. Der Text in Menüs darf
- hiermit jetzt länger als 12 Zeichen sein. Richtig. Indirected. Für die
- Menü-Einträge wird jetzt OS_Heap benutzt, was allerdings immer noch
- nicht zufriedenstellend ist. Ich habe für die Menüs 8 kb im Programm
- reserviert. Sollte der Speicherplatz nicht ausreichen, sollte sich
- OS_Heap korrekt beschweren und das Programm sich korrekt beenden, was
- ich aber noch nicht ausprobiert habe. Was weiterhin zu beachten ist:
- Menü-Titel KÖNNEN nicht länger als 12 Zeichen sein.
-
- - Ich habe in Version 1.38 in einem Anfall von Wahnsinn meinen geliebten
- Spaghetti-Code aus ein paar Routinen entfernt. Das Programm sollte
- jetzt ein wenig schneller laufen.
-
- - Version 1.39 benutzt nicht mehr eigene Message-File-Routinen, sondern
- das übliche MsgTrans-Modell. Mir fällt leider nicht mehr viel ein,
- wie ich die Größe der !RunImage-Datei drücken kann.
-
- - Sollte jemandem irgendeine hochwichtige Option einfallen, die noch nicht
- implementiert ist, einen Fehler gefunden haben, den ich noch nicht kenne
- oder andere Anregungen haben, hier meine Adresse:
-
- Stefan Tomlik
- Im Dachsbau 11
- D-59199 Bönen (Germany)
- Tel.: 02383 / 5482 (ab 19 Uhr)
-
- internet eMail: tomlik00@marvin.informatik.uni-dortmund.de
-