******************************* * * * Text aus der Serie * * (c) GERMAN (Copyright) * * RHEIN-MAIN-SOFT * * Oberursel * * * ******************************* Programm: "PrintDir" ******************************** * * * INHALTSVERZEICHNIS * * * ******************************** Inhaltsverzeichnis der Diskette sortiert und übersichtlich auf Bildschirm oder Drucker ausgeben Als Besitzer eines Amiga und einer ständig wachsenden Public-Domain-Sammlung wünscht man sich früher oder später ein Programm, das hilft die Übersicht über die vorhandenen Disketten zu behalten. Dieses Programm ist "PrintDir". Es liest das gesamte Inhaltsverzeichnis einer Diskette ein, auch der Unter- verzeichnisse (Directories), und gibt ein Verzeichnis des Inhalts sauber sortiert und strukturiert auf dem Bildschirm oder dem Drucker aus. Start des Programms: Das Programm kann vom CLI-Fenster aus mit oder ohne Parameter gestartet wer- den. Als Parameter bietet sich hier z.B. das Laufwerk an in dem sich die zu listende Diskette befindet, es ist jedoch auch möglich ein einzelnes Direc- tory anzugeben wenn man es wünscht. Startet man nur mit dem Programmnamen ohne Parameter wird "df1:" angenommen (die Laufwerksangabe kann aber auch nach Programmstart jederzeit geändert werden). Auch ein Start über die Work- bench ist möglich, indem man das Programm mit einem Icon versieht. Bedienung: Nach dem Start öffnet sich ein Fenster in dem das Menü sichtbar wird. Über dem Menü wird das aktuelle Laufwerk in eckigen Klammern zusätzlich angezeigt. Folgende Menüpunkte sind verfügbar: s - Start des Ausdrucks auf dem Bildschirm: Das Inhaltsverzeichnis wird laut Laufwerksangabe eingelesen und zur Anzeige aufbereitet. Wenn alle Daten fertig aufbereitet sind, erscheint nach Tasten- druck die eigentliche Auflistung. Sollten mehr Zeilen vorhanden sein als auf den Bildschirm passen wird gestopt und auf Tastendruck mit der Anzeige fort- gefahren. Danach verzweigt das Programm wieder zurück ins Menü. d - Start des Ausdrucks auf den Drucker: Läuft analog dem oben erwähnten ab mit folgenden Ausnahmen: - es wird nach einem symbolischen Namen für die Diskette gefragt, der als Überschrift am Kopf der Liste erscheinen soll. Solch ein Name ist zum Beispiel bei Disketten nötig bei denen der DOS-Name nichts über die tat- sächliche Diskette aussagt (Beispiel: "utitities#6:" ist bei mir symbo- lisch "Chiron 21"). - ein Stop und Warten auf Tastendruck ist während der Druckausgabe nicht nötig. - am Ende der Liste wird ein "Form Feed" an den Drucker gesendet um auf die nächste Seite vorzuschieben. So ist es möglich während eine Diskette druckt schon die nächste zu bearbeiten um Zeit zu sparen. Die Anzahl der Disketten hängt nur von der Größe des Druckpuffers ab. Die Auflistung des Disketteninhalts beinhaltet im wesentlichen folgende An- gaben: - als erstes erscheint, von einem Kasten eingerahmt, der symbolische Name der Diskette, damit man ein bestimmtes Verzeichnis beim Durchblättern vieler Listen später schnell wiederfindet. - danach beginnt die eigentliche Auflistung mit dem DOS-Diskettennamen, wobei die eigentlichen File-Namen je nach der Verschachtelungstiefe innerhalb der Diskette entsprechend eingerückt werden. Beispiel: eine Diskette in df0: (Tiefe 0) beinhaltet mehrere Einträge (Tiefe 1). Einer dieser Einträge ist ein Unterverzeichnis (Directory). In diesem Direc- tory sind wieder mehrere Files vorhanden (Tiefe 2), und so weiter. - Directories werden zusätzlich zum Einrücken noch durch waagrechte Be- grenzungslinien kenntlich gemacht um die Übersichtlichkeit zu erhöhen. - nähere Angaben über den Aufbau der Druckausgabe siehe "Funktion" später in diesem Artikel. der nächste Menüpunkt ist l - Laufwerksangabe (Verzeichnis) ändern Dieser Punkt dient wie schon eingangs erwähnt zum nachträglichen Ändern des zu listenden Laufwerks. Ein veränderter Wert bleibt bis zur nächsten Ände- rung oder bis zum Programmende erhalten. e - Ende beendet das Programm. Programmeingabe: Das Programm wurde vollständig in C geschrieben, nachdem ich bei der ent- sprechenden Basic-Version das lange Warten auf das Ende des Sortiervorgangs nicht mehr ertragen konnte. Als Compiler wurde der Aztec-C Version 3.40b von Manx benutzt, es müßte aber auch unter Lattice nach geringfügigen Änderungen lauffähig sein. Aufbau und Funktion: Eine der Schwierigkeiten beim Schreiben dieses Programms war einerseits, zu versuchen die Programmlänge möglichst klein zu halten und andererseits bei der Verschiedenheit der zu untersuchenden Disketten genug Platz zum Aufneh- men sämtlicher Zwischendaten zu schaffen. Dazu mußten gewisse Maximalwerte angenommen werden, die jeder möglichen Diskette gerecht werden. Diese Werte sind am Anfang des Programms verzeichnet und können bei Bedarf auf eigene Verantwortung geändert werden. Die wichtigsten in Kürze: MAXENT=500 Maximale Anzahl Files pro Diskette (im Schnitt sind auf einer durchschnittlichen PD-Disk 100-200 selten 300 Files) MAXDIR=50 Maximale Anzahl Directories (selten mehr als 10) MAXLEV=7 Maximale Verschachtelungstife (im Schnitt 2-4) LENENT=30 Länge des File-Namens. Hier mußte zum ersten Mal wirklich eine Restriktion gemacht werden, da der Name theoretisch (DOS) eine Länge von bis zu 108 Stellen haben kann. Das Programm bricht bei mehr als 30 Stellen ab, was aber bisher noch nie vorkam. Hier bei Bedarf größere Werte einzusetzen ist theoretisch möglich. Da das Programm aber einschliesslich seiner extern beschriebenen Daten, die ja beim eigentlichen Programmlauf mit dazukommen knapp unterhalb der 64k-Byte Grenze bleibt, würde man beim Linken einen Fehler bekommen. Es müßte dann mit der Large-Data-Option (+D) neu kompiliert werden. Als weitere Besonderheit wäre noch das Fenster zu nennen, welches durch das Programm geöffnet wird. Hier wurde die Einheit RAW: und nicht CON: verwendet, da bei dieser Einheit Tastatur-Eingabe leichter zu bewerkstelligen ist (z.B. Warte auf Tastendruck: "read(filehandler,zeichen,1);" Die Taste Return muß nicht gedrückt werden wie bei CON:). Andererseits mußte eben wegen RAW: ein kleiner Editor zur Eingabe von Text geschreiben werden (Prozedur: "Eingabe"), der aber mit weniger als ein Dutzend Zeilen kaum zu Buche schlägt. Programmablauf: Nachdem im Menü die Ausgabe der Daten angewählt wurde, wird die Prozedur "Un- tersuche" gestartet, welche die Informationen des aktuellen Verzeichnisses und danach der tiefergelegenen ausliest. Dabei geschieht folgendes: - zuerst muß mit der Amiga-Funktion "Lock" die FileLock-Struktur für den angegebenen Pfad initialisiert werden. Diese, und die FileInfo-Struktur, für die schon vorher Speicher reserviert wurde, wird für die nachfolgen- den zwei Funktionen benötig um die anfallenden Daten aufzunehmen. - mit "Examine" wird der erste Name gelesen, welcher im Normalfall der Diskettenname selbst, oder später der Name eines Directories ist. - den eigentlichen Inhalt des Verzeichnisses liest dann die Funktion "ExNext". Sie liest das Verzeichnis kontinuierlich durch und meldet am Ende wenn keine weiteren Einträge mehr vorhanden sind. - die so erhaltenen Daten werden alphabetisch sortiert und auf tiefer ver- weisende Directories abgesucht. Nach Erhöhen der Tiefe beginnt mit jedem Dierectory der Vorgang von neuem, bis die Diskette komplett abgearbeitet wurde.