OMI-TOOL VERSION 1.18 Autor: Karsten Ldersen Hochallee 55 2000 Hamburg 13 Telefon: 040/45 99 59 INHALTSVERZEICHNIS: 1. EINLEITUNG 1.1. Die Motivation 1.2. Was kann OMI-TOOL? 1.3. šber den Autor 1.4. Special Greetings 1.5. Rechtliches 1.6. Updates und Fehlermeldungen 2. EINSTIEG: ALLGEMEINE FUNKTIONSWEISE VON OMI-TOOL 2.1. Voraussetzungen, Installation und Programmstart 2.2. Grunds„tzliche Arbeitsweise 3. INPUT: QUELLDATEI 3.1. Anforderungen an die Quelldatei 3.2. Datei laden 3.3. Ergebnis als Quelle 3.4. Quelltext ausgeben 4. ARBEITSMODUS 4.1. Allgemeines Vorgehen 4.2. Ressource-Dateien fr OMIKRON.BASIC aufarbeiten 4.3. Kommentare l”schen 4.4. Suchen und Ersetzen 4.5. Prozedurliste 4.6. globale Variablenliste 4.7. lokale Variablen auflisten 4.8. Konstantenliste 4.9. Prozedurenaufrufe auflisten 4.10. Nutzung globaler Variablen auflisten 4.11. Konstantenreferenz 4.12. Schleifenfunktion 5. OUTPUT: DIE ERGEBNISSE 5.1. Bildschirmausgabe 5.2. Ausdruck und Druckbox 5.3. Ausgabe in eine Datei 6. SYSTEMEINSTELLUNGEN 6.1. Standardpfad 6.2. Maximale Zeilenzahl 6.3. Druckersteuerung und Zeichenkonvertierung 6.4. Standards speichern und laden 7. SONSTIGE OPTIONEN 7.1. Kleinschrift 7.2. Zeilennummern ausgeben 7.3. Statusanzeige 7.4. Warnmeldungen 7.5. Glocke 7.6. Lange Referenz 7.7. Kopf ausgeben 7.8. Neustart 7.9. externes Programm starten 7.10. Hilfefunktionen 8. MAKROS 8.1. Makro aufnehmen 8.2. Makro abspielen 8.3. Makrobox und Syntax der Makros 8.4. Automakro 8.5. Makros laden und speichern 9. WAS AUžERDEM NOCH WICHTIG IST 9.1. Anmerkungen zum sinnvollen Arbeiten mit OMI-TOOL 9.2. Zur internen Arbeitsweise von OMI-TOOL 9.3. Was aužerdem noch wichtig ist 1. EINLEITUNG 1.1. DIE MOTIVATION Es ist eigentlich ziemlich merkwrdig: OMIKRON.BASIC ist quasi DAS ST-Basic, weil es von Atari mit den Rechnern zusammen ausgeliefert wird (wurde?). Trotzdem scheint es so zu sein, daž die meisten Basic-Programme fr die ST(E)'s in GFA-Basic ge- schrieben werden. Fr mich ist es bisher nie in Frage gekommen, anders als mit OMIKRON.BASIC zu programmieren. Allein schon deshalb, weil es die billigste (legale) M”glichkeit ist, den Rechner selber zu programmieren. Zwar habe ich auch schon Ambitionen gehabt, in C zu programmieren, jedoch habe ich das noch nie praktisch um- gesetzt (u.a. mangels Compiler). Nachdem, was ich ber GFA-Basic weiž, f„llt mir nichts auf, was entscheidend besser w„re als OMIKRON.BASIC. Das reicht als Grund schon aus, um dabei zu bleiben. Darber hinaus bin ich der Meinung, daž OMIKRON.BASIC in Bezug auf die Funktionsvielfalt recht komfortabel und auch flexibel ist. Die Benutzeroberfl„che mit dem Pseudo-menue l„žt zwar m.E. einiges zu wnschen brig. Eine "normale" GEM-Oberfl„- che w„re mir lieber, aber mensch kann nicht alles haben. Ich werde jedenfalls auf absehbare Zeit dabei bleiben. Fr GFA-Basic gibt es ein Programm, das ich mehr oder weniger zuf„llig auf einer PD-Diskette fand: Weller-Tools fr GFA-Basic. Ich war dabei, an einem Programm zu schreiben, dessen Programm- text immer l„nger und l„nger wurde. Langsam aber sicher verlor ich die šbersicht ber die bereits vorhandenen Prozeduren und Variablen. Aužerdem hatte ich kaum noch eine Vorstellung ber den realen Speicherplatzverbrauch meines Programms. Weller-Tools war von den Funktionen her eigentlich fast genau das, was ich gerade suchte. Allerdings war es, wie gesagt, auf diesen GFA- Basic zugeschnitten. Trotz der Behauptungen des Programmautors, Clemens Weller, liež es sich nicht von der Notwendigkeit berzeu- gen, ein OMIKRON-Programm zu bearbeiten. Darber hinaus st”rte mich an diesem Programm fast alles: die Oberfl„che, die nicht mit mit Fenstern funktioniert; das "abgestufte" PD-Konzept, das eigentlich gar keins ist, usw. Durch dieses Programm, das ich nie sinnvoll anwenden konnte bin ich auf die Idee fr OMI-TOOL gekommen. Ich entschlož mich, selber ein „hnliches Programm fr OMIKRON.BASIC zu schreiben. 1.2. WAS KANN OMI-TOOL? OMI-TOOL enth„lt insgesamt vier verschiedene Funktionsarten: Kon- vertierungsfunktionen, Listenfunktionen, Cross-Reference-Funktio- nen und eine Schleifen-Funktion. Unter Konvertierungsfunktionen ist der wichtigste Punkt fr je- deN GEM-ProgrammiererIn die Funktion "Header konvertieren". Mit dieser Funktion wird eine *.LST oder *.H-Datei, die von einem RCS fr GFA-BASIC oder C erzeugt wird, in ein OMIKRON-kompa- tibles Format bersetzt. Die beiden anderen Konvertierungsfunktionen sind mehr oder weni- ger Abfallprodukte dieser Funktion, weil die zentrale Routine ohnehin vorhanden war: Es ist ein REM-Killer vorhanden, der s„mtliche Anmerkungen und Leerzeilen aus einem Programmtext streicht und eine Suchen-Ersetzen-Funktion, mit der beliebige Zeichenketten durch andere ersetzt werden k”nnen. Unter den Listenfunktionen gibt es vier Varianten: Prozeduren auflisten, globale Variablen und Konstanten auflisten und lokale Variablen auflisten. Mit "Prozeduren auflisten" werden s„mtliche Unterprogramme (Prozeduren, Funktionen und Labels) in der Reihen- folge der Definition aufgelistet. Die Liste der globalen Va- riablen ergibt eine alphabetische Liste aller Variablen und Felder einschliežlich einer kleinen Statistik und die Liste der lokalen Variablen enth„lt zu jeder Prozedur oder Funktion s„mtli- che darin enthaltenen lokalen Variablen. Die "Konstantenliste" ist eigentlich fast das selbe ist wie die Liste globaler Va- riablen. Als Cross-Reference-Funktionen steht eine Prozedur-, eine Va- riablen- und eine Konstanten-Referenz zur Verfgung. Die Proze- durreferez enth„lt fr jede Prozedur oder Funktion und fr jedes Label die Anzahl und den Ort der Aufrufe. Dazu werden die aufrufende Routine (Prozedur, Funktion oder Label) und die Zei- le, in der der Aufruf vorkommt, angeben. Die Variablenreferenz enth„lt entsprechende Angaben fr s„mtliche globalen Variablen und Felder, die Konstantenreferenz das Vorkommen s„mtlicher Kon- stanten sowie deren Definitionszeile. Der Sinn der vorhandenen Funktionen drfte jedem, der schon einmal versucht hat, ein Basic-Programm zu schreiben, das mehr als 100 Zeilen enth„lt, leicht verst„ndlich sein. Mit Hilfe der Listenfunktionen ist es m”glich festzustellen, welche Variablen bzw. Prozeduren berhaupt vorhanden sind (bzw. ggf. noch program- miert werden mssen). Die Referenzfunktionen geben zu jedem Unterprogramm und jeder Variablen oder Konstanten an, wie und von wo aus sie berhaupt genutzt wird. Damit ist es m”glich Programme zu optimieren. Es fallen sowohl Tippfehler sofort auf, als auch Routinen oder Variablen, die praktisch nicht genutzt werden und Variablen, die local definiert werden k”nnen. Mit der Schleifenfunktion kann z.B. berprft werden, ob bestimm- te zusammengeh”rige Befehle auch zusammen vorkommen (fr jedes FOR ein NEXT etc.) In Verbindung mit einer Textverarbeitung oder einem Editor kann OMI-TOOL auch zur Dokumentation fertiger Programme und Libraries genutzt werden. Natrlich ist das alles nicht weltbewegend neu. Aber mir ist kein Programm mit vergleichbaren Funktionen fr OMIKRON.BASIC be- kannt. OMI-TOOL kann weder Programmierkenntnis noch Phantasie ersetzen. Das Programm muž schon erst geschrieben werden, bevor OMI-TOOL ins Geschehen eingreifen kann. Auch kann OMI-TOOL keinen Code endgltig beurteilen. Es stellt nur verschiedene Formen von Statistiken auf (abgesehen von den Konvertierungsfunktionen), deren Auswertung und Nutzung wiederum an der/dem ProgrammiererIn h„ngt. Das Programm enth„lt keine Shell-Funktionen und auch keine ande- ren Desktop-Funktionen, wie z.B. Disketten formatieren, Ordner anlegen oder Dateien l”schen. Die TOS-Version 2.05 macht durch die neuen M”glichkeiten, wie z.B. Dateien direkt auf dem Desktop abzulegen, Shells berflssig. Funktionen wie Disketten zu forma- tieren oder Ordner anzulegen werden schon von gengend anderen Programmen bernommen. 1.5. šBER DEN AUTOR Wahrscheinlich interessiert es zwar niemanden, aber da der Platz diese Datei in der L„nge nicht begrenzt ist, nehme ich die Gelegenheit wahr, auch ein paar Worte ber mich selber zu schreiben. Ich bin 28 Jahre alt und Sozialarbeiter. Meinen ersten Kontakt mit EDV hatte ich im AStA der Fachhochschule Hamburg. Dort habe ich jahrelang an einem etwa 1982 entstandenen IBM-Schreibsystem gearbeitet. Darauf war es jedoch (jedenfalls fr Laien) aus- geschlossen, irgend etwas zu programmieren. 1989 habe ich das erste Mal einen programmierbaren Rechner in die Finger bekommen: Meine Freundin hat irgendwo fr 150 DM einen C64 mit Floppy aufgetrieben, den ich etwa ein Dreiviertel- jahr mit meinen ersten Programmierversuchen maltr„tiert. Das Ergebnis ist unter anderem ein nie ganz fertig gewordenes Datei- verwaltungsprogramm. Mehr wegen meiner Diplomarbeit als wegen meiner Programmiereram- bitionen bin ich dann eher zuf„llig an einen Atari 260 ST geraten. Nach kurzer Zeit tauschte ich diesen gegen einen 1040 STFM ein, mit dem ich etwa ein Jahr lang gearbeitet habe. Seit bald einem Jahr bin ich stolzer Besitzer eines 4-Megabyte-Mega- STE. Daran wird sich sobald auch nichts mehr „ndern. OMI-TOOL ist das erste Programm, daž ich ver”ffentliche. Andere werden folgen, wobei fr mich mein eigener Bedarf im Vordergrund steht. 1.4. SPECIAL GREETINGS Dieser Abschnitt ist dazu gedacht, all diejenigen Produkte zu erw„hnen, ohne die dieses Programm nicht zustande gekommen w„re, als da w„ren: Zun„chst natrlich der ATARI STE und dann der OMIKRON.BASIC- Interpreter in der Version 3.57, der den Hauptteil der Arbeit zu verrichten hatte. Aužerdem der OMIKRON.BASIC-Compiler in der Version 3.5. Die Ressourcedatei ist mit Hilfe des RCS2 von Digital Research entstanden. Darber hinaus hat sich das Pro- gramm selbst analysiert (und die LST-Dateien konvertiert). Sch”ne Grže aužerdem an Clemens Weller, der mit den Weller- Tools fr GFA-Basic fr den Anstož und die notwendige Wut fr dieses Programm gesorgt hat. 1.5. RECHTLICHES OMI-TOOL ist kein Public-Domain-Programm. Es ist auch keine Shareware. Ich mache diese Einschr„nkung, weil ich kein Interes- se daran habe, daž irgendjemand mit meiner Arbeit Geld verdient. Auch ich selber will daran nichts verdienen. Aber ich will vermeiden, daž OMI-TOOL fr Dinge verwendet wird, die ich nicht verantworten k”nnte. Es ist deshalb VERBOTEN, OMI-TOOL zu benut- zen oder weiterzugeben. Unter folgenden Voraussetzungen habe ich jedoch nichts gegen die Benutzung oder Weitergabe einzuwenden: 1. Das Programm darf nicht fr kommerzielle Zwecke ge- nutzt werden. 2. Das Programm darf nicht fr militaristische, ausl„nder- feindliche, rassistische oder umweltfeindliche Zwecke genutzt werden. Das heižt z.B., daž es nicht fr die Programmierung von Kriegsspielen/-simulationen verwen- det werden darf. 3. Durch die Weitergabe von OMI-TOOL darf keinerlei Ge- winn erwirtschaftet werden. Konkret heižt das: - Privatpersonen drfen das Programm nur kostenlos wei- tergeben; - OMI-TOOL darf nicht in "PD-Paketen" oder „hnlichem vertrieben werden; - OMI-TOOL darf in Mailboxen angeboten werden, wenn dort fr das Downloaden von Programmen keine Ge- bhren erhoben werden. 4. In PD-Serien darf OMI-TOOL angeboten werden, wenn der Preis fr eine Diskette einschliežlich Versandkosten nicht ber 10,00 DM liegt und wenn ich darber infor- miert werde. 5. Das Programm darf nur vollst„ndig mit allen Dateien in einem Ordner weitergegeben werden. Die Dateien drfen nicht ver„ndert werden. Ich habe OMI-TOOL "nach bestem Wissen und Gewissen" program- miert. Mir sind zur Zeit keinerlei Fehler bekannt, die in irgendeiner Weise vorhandene Daten gef„hrden. Trotzdem kann ich Fehler nicht ausschliežen. Ich lehne deshalb jede Verantwortung fr die Anwendung von OMI-TOOL fr einen bestimmten Zweck oder in einer bestimmten Konfiguration ab. Zu OMI-TOOL geh”ren folgende Dateien: OMI_TOOL.PRG - Das eigentliche Programm; OMI_TOOL.RSC - Die Ressource-Datei fr OMI_TOOL.PRG; OMI_TOOL.INF - Standardeinstellungen fr OMI_TOOL.PRG; OMI_TOOL.SYS - enth„lt den Speicherplatz, den OMI-TOOL be- legen darf; OMI_TOOL.WOR - enth„lt eine Wortliste fr die Schleifen- funktion; OMI_TOOL.MAK - Makros fr OMI-TOOL; OMI_TOOL.HLP - Online-Hilfstexte fr die Extrahilfe; OMI_TOOL.ASC - Programmanleitung als ASCII-Text; READ_ME.OMI - Aktuelle Ver„nderungen zur Programmanlei- tung. MANI_OMI.TOS - Mit diesem Programm kann berprft werden, ob OMI_TOOL.PRG, OMI_TOOL.RSC, OMI_TOOL.ASC oder READ_ME.OMI ver„ndert worden sind. Eventuell enth„lt OMI-TOOL einen Ordner mit einem Beispielpro- gramm, um die verschiedenen Funktionen von OMI-TOOL an einem relativ kurzen Programm zu demonstrieren. 1.9. UPDATES UND FEHLERMELDUNGEN Wer eine aktuelle Version von OMI-TOOL von mir bekommen will, muž mir nur einen adressierten und frankierten Rckumschlag und eine (wenn's geht formatierte) Diskette schicken. Ich schicke dann postwendend die neueste Version von OMI-TOOL zu. Den Quell- text werde ich jedoch nicht ver”ffentlichen. Wer mir 10,00 DM schickt, bekommt ebenfalls die neueste Version zugeschickt. Wer mir noch dazu schreibt, welche Version von OMI-TOOL schon vorhan- den ist, bekommt von mir erst dann eine Antwort, wenn es eine neuere Version gibt. Wenn jemand einen Fehler entdeckt, so w„re ich natrlich fr eine Benachrichtigung dankbar. Ich werde den Fehler dann - so weit es mir m”glich ist - sofort beseitigen. Eine fehlerbereinig- te Version bekommt jedoch nur zugeschickt, wer die o.g. Update- Bedingungen erfllt, da das Programm fr mich ansonsten ein Zuschužgesch„ft w„re. Im brigen interessiert mich, wie weit sich das Programm verbrei- tet. Ich freue mich deshalb ber jede Form von Rckmeldung durch (hoffentlich zufriedene) AnwenderInnen. 2. EINSTIEG: ALLGEMEINE FUNKTIONSWEISE VON OMI-TOOL 2.1. VORAUSSETZUNGEN, INSTALLATION UND PROGRAMMSTART OMI-TOOL ist ger„teunabh„ngig programmiert worden. Es sollte also auf jeder m”glichen Konstellation mit einem ST (und TT?) laufen. Getestet habe ich es jedoch nur auf einem 1040 STFM mit 1 MB Speicher und einem MEGA STE mit 4 MB Speicher. Es setzt weder eine bestimmte Menge Speicherplatz noch eine bestimmte TOS-Version voraus. Mit 500 KB Hauptspeicher wird es jedoch ziemlich eng im Hauptspeicher. Dann k”nnen nur kurze Texte bearbeitet werden. Auf die On-Line-Hilfe sollte dann lieber verzichtet werden. Die maximale Gr”že der zu bearbeitenden Dateien kann in einer Zeilenzahl frei eingestellt werden. Sie darf allerdings nicht h”her als 32767 sein. Das wrde bei einem Durchschnitt von nur 30 Zeichen pro Zeile immerhin eine Quelltextgr”že von fast einem MB entsprechen und einen 4 MB-Rechner einigermažen auslasten, da der Text ja nicht nur geladen werden soll. Wer mehr braucht, wende sich vertrauensvoll an mich. Die allermeisten Programme kommen wahrscheinlich mit 5000 oder 10000 Zeilen aus. Der vorhan- dene Rechnerspeicher ist meistens wohl eher die Grenze. Die Prozedur-, Variablen- und Konstantenlisten, die nachgeladen wer- den, drfen h”chstens 1000 Zeilen enthalten, was normalerweise auch ausreichen drfte. OMI-TOOL ist aufl”sungsunabh„ngig programmiert. Es l„uft unter allen drei ST-Aufl”sungen. Praktisch brauchbar ist es jedoch nur in der hohen Aufl”sung, da ansonsten Dialogboxen teilweise nicht sichtbar sind. In TT-Aufl”sungen oder auf Grafikkarten mžte OMI-TOOL eigentlich laufen, ich konnte dies bisher aber nicht berprfen. šber die Zusammenarbeit mit anderen Programmen wie z.B. Shells oder MultiGEM ist nichts bekannt. Da sich OMI-TOOl jedoch an alle GEM-Regeln h„lt, sollte es auch hier keine Schwierigkeiten geben. Ob OMI-TOOL mit On-Line-Komprimierungs-Programmen wie z.B. "Data light" zusammenarbeitet, weiž ich auch nicht. Probleme k”nnte es geben, da OMI-TOOL vor dem Laden einer Datei deren L„nge erfragt und berprft, ob dies mit den real geladenen Bytes bereinstimmt. OMI-TOOL wertet die Kommandozeile bei Programmstart aus. Es kann also z.B. bei einer TOS-Version ab 2.05 auch durch das Ziehen einer Datei auf das Programm gestartet werden. Normalerweise sollten alle Dateien, die OMI-TOOL nach dem Pro- grammstart nachl„dt in einem Ordner liegen. Bis auf OMI_TOOL.SYS muž dies jedoch nicht der Fall sein. Mit anderen Worten: OMI_TOOL.SYS MUž im selben Ordner liegen wie OMI_TOOL.PRG, sonst gibt es einen Absturz. Alle anderen Dateien k”nnen auch woanders sein. Wenn OMI-TOOL als Anwendung angemeldet wird, so muž es beim Aufruf seinen eigenen Pfad bergeben bekommen. Dies l„žt sich im Desktop ab TOS 2.05 im Menue "Extras" unter "Desktop Konfigura- tion" oder "Anwendung anmelden" einstellen. Fr die korrekte Auswertung der Kommandozeile ben”tigt OMI-TOOL nicht nur den Dateinamen der Datei, die ge”ffnet werden soll, sondern auch den vollst„ndigen Pfad. Dies l„žt sich ebenfalls im Desktop in den gleichen Dialogboxen einstellen. Fr andere Shells gilt natrlich entsprechendes. Zu OMI-TOOL geh”rt ein Programm MANI_OMI.TOS. Es soll dazu dienen, zu berprfen, ob OMI-TOOL in irgendeiner Weise manipu- liert worden ist. Ob OMI_TOOL.PRG von Link-Viren befallen worden ist, aber auch, ob an den Dateien OMI_TOOL.RSC, OMI_TOOL.ASC oder READ_ME.OMI irgendwelche Ver„nderungen vorgenommen worden sind kann damit festgestellt werden. MANI_OMI.TOS muž sich im selben Ordner wie die genannten Dateien befinden und dann ein- fach gestartet werden. Alles weitere geschieht automatisch. Wenn keine Fehlermeldung erscheint, kann eine Ver„nderung relativ sicher ausgeschlossen werden. OMI_TOOL.PRG wird ganz normal durch Doppelklick gestartet. Nach dem Start sucht es zun„chst die Datei OMI_TOOL.SYS, und zwar NUR in seinem eigenen Ordner. Diese Datei hat nur einen einzigen Inhalt, n„mlich die Gr”že des Rechenspeichers, der von OMI-TOOL belegt werden darf. Anschliežend sucht es seine eigene Ressource- datei, und zwar im eigenen Ordner und anschliežend im vom Betriebssystem angegebenen aktuellen Pfad. Wird es dort nicht fndig, so erscheint eine Fehlermeldung und die Datei OMI_TOOL.RSC muž "von Hand" gesucht werden. Nachdem die RSC-Datei erfolgreich geladen wurde (andernfalls bricht das Programm ab) sucht OMI-TOOL eine Datei OMI_TOOL.HLP, und zwar nur in dem Ordner, in dem die RSC-Datei gefunden wurde. Wenn diese Datei vorhanden ist, so wird sie automatisch geladen (dauert einen Moment, wird auch angezeigt). Wenn die Datei nicht vorhanden ist, so wird sie ohne weitere Meldung bergangen und es stehen zun„chst keine Hilfetexte zur Verfgung. Danach sucht OMI-TOOL nach der Konfigurationsdatei OMI_TOOL.INF, und zwar ebenfalls zuerst in dem Ordner, in dem die RSC-Datei gefunden wurde. Anschliežend wird im aktuellen Verzeichnis ge- sucht. Wenn OMI-TOOL nichts findet, so ist auch hier die M”glich- keit zur Suche durch den/die AnwenderIn gegeben. Wenn die Konfi- gurationsdatei nicht erfolgreich geladen werden kann, so bricht das Programm jedoch nicht ab, sondern nimmt einige Einstellungen selber vor (siehe Kapitel 6). Schliežlich sucht OMI-TOOL nach Dateien mit den Namen OMI_TOOL.WOR und OMI_TOOL.MAK in dem RSC-Ordner. Bei erfolgrei- cher Suche werden die Dateien geladen. Ansonsten startet das Pro- gramm ohne einen weiteren Hinweis. Wenn in der Datei OMI_TOOL.INF die Option "Automakro" einge- schaltet ist, so wird das Automakro - falls vorhanden - nach den Ladevorg„ngen automatisch gestartet. Ansonsten wird die Co- pyright-Box des Programms auf den Bildschirm gebracht. N„heres zum Thema Makros gibt es im Kapitel 7. 2.2. GRUNDSŽTZLICHE ARBEITSWEISE OMI-TOOL bearbeitet grunds„tzlich nur ASCII-Textdateien. Es ver- waltet zwei Textspeicher, n„mlich einen fr den Quelltext und einen fr das Ergebnis. Der Quelltext wird also nie ver„ndert. Er bleibt im Speicher, bis ein neuer Quelltext geladen wird oder das Programm neu gestartet wird. Alle Aktionen des Programmes werden in den zweiten Textspeicher hinein ausgefhrt. Dieser Speicher wird jeweils wieder berschrieben, wenn eine neue Funk- tion ausgefhrt wird. Nachdem ein Quelltext geladen wurde kann im Modus-Menue eine Programmfunktion ausgew„hlt werden. Durch anklicken von "Arbeit starten" im Datei-Menue wird die Funktion gestartet. W„hrend der Ausfhrung einer Programmfunktion ber "Arbeit starten" und w„h- rend des Ladens und Speicherns von Dateien auf Diskette kann an Stelle der Menuezeile jeweils angezeigt werden, welche Funktion das Programm gerade ausfhrt und wie weit es bisher gekommen ist. Einige Funktionen (z.B. die Referenzfunktionen) setzen sich aus mehreren kleineren Funktionen zusammen. In diesem Fall wird jeweils der Arbeitsschritt ausgegeben, der tats„chlich gerade ausgefhrt wird. So kann es z.B. dazu kommen, daž die Statusan- zeige "Prozedurliste anlegen" ausgibt, obwohl eigentlich Va- riablenreferenz als Modus ausgew„hlt war, weil die Prozedurliste Voraussetzung fr die Variablenreferenz ist. Wenn das Ergebnis fertiggestellt ist, kann es mit "Ergebnis ausgeben" im Datei-Menue sichtbar gemacht werden. Wenn das Fen- ster schon ge”ffnet ist, so wird es automatisch aktualisiert (das selbe gilt, wenn ein neuer Quelltext geladen wird). Auf gleiche Weise l„žt sich mit "Quelltext ausgeben" auch der Quell- text anzeigen, ausdrucken oder speichern. So ist es m”glich, zwischen dem Ergebnis einer Funktion und dem Quelltext hin und her zu schalten und einzelne Arbeitsergebnisse direkt zu berpr- fen. Alle Menue-Funktionen (Mit Ausnahme der Copyright-Anzeige und der Hilfefunktionen) lassen sich auch durch Tastaturkrzel errei- chen. Die "Shortcuts" sind jeweils hinter dem Eintrag angegeben. Es steht ein "^" fr die Control-Taste und ein "~" fr die Alternate-Taste, die jeweils mit dem Buchstaben zusammen ge- drckt werden muž. Auch die Fenster lassen sich weitgehend ber Tastaturkrzel steuern: ^T ”ffnet ein Fenster mit der Quelldatei und ^S ein Fenster mit dem Ergebnis (wenn der Bildschirm das Ausgabeger„t ist). Wenn das entsprechende Fenster schon ge”ffnet wurde, so wird nach oben geholt. Mit ~S wird das aktive Fenster geschlos- sen. Mit den Cursor-Tasten wird das aktive Fenster um eine Spalte bzw. Zeile in die entsprechende Richtung gescrollt. In Verbin- dung mit der Shift-Taste wird das Fenster jeweils um eine Seite in die entsprechende Richtung gescrollt, in Verbindung mit der Control-Taste um jeweils 10 Zeichen. Mit der Clr/Home-Taste gelangt mensch an den Textanfang, in Verbindung mit der Shift- Taste an das Textende. Alle Programmfunktionen k”nnen durch einen Druck auf die ESC- Taste unterbrochen werden. Das Programm arbeitet dann die aktuel- le Schleife ab. Anschliežend erscheint eine Alertbox mit einer Rckfrage, ob der Prozež wirklich abgebrochen werden soll. Die Dialogboxen lassen sich nicht ber die Tastatur steuern und auch nicht verschieben. Obwohl ich dies ursprnglich einbauen wollte, habe ich darauf verzichtet, weil ich inzwischen "Let'em fly" kenne und benutze, das ich hiermit w„rmstens weiterempfeh- le. OMI-TOOL arbeitet mit Let'em fly ohne Probleme zusammen. Alle Dialogboxen haben einen Abbruch-Knopf, mit dem sich alle Ver„nderungen rckg„ngig machen lassen. Die Arbeitsergebnisse werden in einem eigenen Textspeicher gehal- ten. Sie werden durch nachfolgende Arbeiten wieder berschrie- ben. Der Ergebnistext l„žt sich - entsprechend der Einstellung im Ausgabe-Menue - auf den Bildschirm, auf Diskette oder auf einen Drucker ausgeben. Aužerdem ist es m”glich, das Arbeitser- gebnis in den Quelltextspeicher zu bernehmen. Bei den Konvertierungsfunktionen wird der Quelltext in den Ergeb- nisspeicher bernommen und dort ver„ndert. Das Ergebnis ist wiederum als Quelltext brauchbar und l„žt sich im Interpreter durch "Load Block" in ein vorhandenes Programm einfgen. Mindestens bei der Funktion "lange Variablenreferenz" ist der Ergebnistext h„ufig l„nger als der Quelltext des Programms. Wenn das Programm l„nger ist, sollte die Variablenreferenz deshalb nicht unbedingt auf den Drucker ausgeben werden (umweltfreundli- cher!). 3. INPUT: QUELLDATEI 3.1. ANFORDERUNGEN AN DIE QUELLDATEI Als Quelltext kann jeder beliebige Text, der von einem Textedi- tor/Textverarbeitungsprogramm im ASCII-Format erstellt wurde, ge- laden werden. Ob es sinnvoll ist, die letzte Korrespondenz auf Prozeduraufrufe hin zu untersuchen, bleibt der/dem AnwenderIn berlassen. Bei Programmtext, der aus dem OMIKRON-Interpreter stammt, ist darauf zu achten, daž er mit der "Save Block"-Funktion und ohne Zeilennummern gespeichert wurde. In Bezug auf die Syntax ist OMI-TOOL kompatibel zum Interpreter. Es bestehen nur drei Ausnah- men: 1. OMI-TOOL erkennt keine Prozeduraufrufe, bei denen die Para- meter ohne Klammern bergeben werden. 2. OMI-TOOL erkennt Labeldefinitionen nur in der ersten Spal- te. 3. Jede Variable muž ein Postfix haben. Es gibt keine Standard- variablen wie im Interpreter. Da der Interpreter die Postfi- xes bei "Save Block" anh„ngt ist dies jedoch kein Problem. Bei Quelltext aus Resource-Construction-Sets ist die *.LST- oder die *.H-Datei fr die Bearbeitung durch OMI-TOOL geeignet. Der Quelltext sollte keine Zeilennummern enthalten. OMI-TOOL hat keine M”glichkeit, die Zeilennummern vom eigentlichen Programm- text zu trennen. Das macht sich auf jeden Fall in der Geschwin- digkeit des Programms bemerkbar, die ohnehin nicht berw„ltigend ist. Aužerdem werden dann keine Labels mehr erkannt, da diese nur in der ersten Spalte gesucht werden. Auch der REM-Killer arbeotet dann nicht korrekt (Leerzeilen werden nicht gel”scht, weil sie nicht als leer erkannt werden). Grunds„tzlich ist es empfehlenswert, nur jeweils einen Befehl pro Zeile zu schreiben. Dies erleichtert die Arbeit von OMI- TOOL. Es ist jedoch auch in der Lage, beliebig lange Zeilen auszuwerten. Bei Ausdrcken, die aus einer tiefen Verschachte- lung von Klammern, Anfhrungszeichen und/oder Doppelpunkten be- stehen, kann es sein, daž sich das Programm verheddert. Beson- ders an diesem Punkt wrde ich mich ber Fehlermeldungen freuen, da meine Phantasie beim Austesten s„mtlicher Verschachtelungsm”g- lichkeiten Grenzen hat. 3.2. DATEI LADEN Fr das Laden des Quelltextes gibt es drei M”glichkeiten: Die erste ist die "normale": Aufruf des Menue-Punktes "Datei laden" durch Anklicken im Datei-Menue oder durch Eingabe von "Control-L". Es erscheint eine Fileselectbox. Sie enth„lt direkt nach dem Programmstart den in der Standards-Box enthalten De- fault-Pfad aus der Konfigurationsdatei "OMI-TOOL.INF". Sp„ter enth„lt sie jeweils den letzten ausgew„hlten Pfad. Die zweite M”glichkeit, in den Programmpunkt "Datei laden" zu kommen, gibt es schon vor dem Programmstart: OMI-TOOL wertet bei Programmstart die Kommandozeile aus. Wenn es dort einen Pfad und Dateinamen findet, so verzweigt es direkt nach dem Programmstart in die Funktion "Datei laden". Es erscheint die Fileselectbox, die in diesem Fall voreingestellt den Pfad- und Dateinamen aus der Kommandozeile enth„lt. Durch einfaches drcken auf RETURN kann also das Laden der Datei veranlažt werden. Die dritte M”glichkeit besteht darin, eine Datei im Rahmen eines Makros zu laden. Dies wird im Kapitel 7 n„her beschrieben. Wenn die Dateiauswahl mit OK bzw. RETURN abgeschlossen wird, so wird die ausgew„hlte Datei geladen. OMI-TOOL berprft zun„chst, ob es sich bei der ausgew„hlten Datei um ein Programm, eine Ressource-Datei oder um ein Bild handelt. In diesem Fall bricht es den Ladevorgang mit einer entsprechenden Fehlermeldung ab. Ansonsten wird der Text in den Quelltextspeicher geladen. OMI- TOOL berprft nicht, ob es sich bei der ausgew„hlten Datei tats„chlich um Programmcode mit OMIKRON-Syntax handelt. Das Laden des Quelltextes kann durch einen Druck auf die ESC- Taste unterbrochen werden. Es erscheint eine Alarmbox, in der der Abbruch best„tigt oder aufgehoben werden kann. 3.3. ERGEBNIS ALS QUELLE Wenn schon mit OMI-TOOL gearbeitet wurde, sich also schon ein Ergebnis im Ergebnistextspeicher befindet, so ist es m”glich, diesen zum neuen Quelltext zu machen. Es ist also m”glich, z.B. einen Programmtext zu laden, mit Hilfe der REM-Killer-Funktion alle Kommentarzeilen zu entfernen und mit dem so entstandenen Programmtext als Quelltext weiter zu arbeiten. Fr diese Funktion ist der Menue-Eintrag "Ergebnis als Quelle" (Control-D) vorhanden. Das Ergebnis wird aus dem Ergebnistext- speicher in den Quelltextspeicher bertragen und anschliežend aus dem Ergebnisspeicher gel”scht. 3.4. QUELLTEXT AUSGEBEN Der geladene Quelltext kann mit "Quelltext ausgeben" in einem Fenster auf dem Monitor ausgegeben werden (wenn als Ausgabeger„t "Bildschirm" gew„hlt ist). Durch Ausgabe des Quelltextes auf den Drucker, ist es m”glich, den Quelltext numeriert und formatiert auszudrucken. Auch die Ausgabe des Quelltextes in eine Datei ist m”glich. 4. ARBEITSMODUS 4.1. ALLGEMEINES VORGEHEN Alle Bearbeitungsfunktionen von OMI-TOOL befinden sich im Modus- Menue. Sie werden jeweils durch anklicken aktiviert. Es kann immer nur eine Funktion aus den insgesamt elf Eintr„gen ausge- w„hlt werden. Die ausgew„hlte Funktion wird durch ein H„kchen vor dem Eintrag gekennzeichnet. Verschiedene Funktionen setzen vorher andere Funktionen voraus. Z.B. setzt die Prozedur-Re- ferenz voraus, daž eine Prozedurliste schon angelegt wurde. Dies wird dann automatisch vom Programm erledigt. Ausgefhrt wird die ausgew„hlte Funktion erst durch anklicken von "Arbeit starten" im Datei-Menue. 4.2. RESSOURCE-DATEIEN FšR OMIKRON.BASIC AUFARBEITEN RCSs haben als Output nicht nur die RSC-Datei sondern auch eine Datei, die die Namen der einzelnen Objekte und ihre Nummern enth„lt. Diese k”nnen dann als Deklarationen in den Programmtext einbezogen werden. Leider sind diese Dateien nicht in einem Format, die vom OMIKRON-Interpreter verstanden werden. Sie haben meistens C- oder GFA-Basic-Format. Fr Omikron-ProgrammiererInnen heižt dies, daž die Deklarations- datei noch weiter bearbeitet werden muž, bevor sie in den Programmtext im Interpreter einbezogen werden kann. Die Funktion "Header konvertieren" bersetzt die fr GFA-Basic oder C vorgese- hene Deklarationsdatei fr OMIKRON.BASIC. Im Extra-Menue kann angegeben werden, ob es sich um eine *.LST- oder *.H-Datei handelt. Im *.H-Datei-Modus enth„lt der Menueeintrag ein H„k- chen. Die Einstellung wird in der *.INF-Datei mit abgespeichert. Nach dem Anklicken von "Arbeit starten" im Datei-Menue arbeitet die Funktion wie folgt: Der Quelltext wird komplett in den Ergebnisspeicher bertragen. Davor wird die Zeile "DEF PROC Rsc_Define" und als Kommentar System-Datum und -Uhrzeit eingefgt. Am Ende wird ein "RETURN" angefgt. Im Ergebnisspeicher werden bei *.LST-Dateien aus dem Text alle "LET "- und "&"- Zeichenketten gel”scht. "!" wird durch ein Auslassungszeichen "'" (mit dem in OMIKRON.BASIC ein Kommentar gekennzeichnet wird) ersetzt. Bei *.H-Dateien werden alle "#define "'s entfernt. Das letzte Leerzeichen jeder Zeile wird durch ein Gleichzeichen ersetzt. In beiden Modi werden anschliežend alle Umlaute und "ž", die nicht in Kommentaren stehen, durch zwei Buchstaben ersetzt ("„" durch "ae" usw. Alle Leerzeichen in Variablennamen werden durch Unterstriche ersetzt. 4.3. KOMMENTARE L™SCHEN Wer seine Programme kompilieren will, braucht diese Funktion nicht, denn der Compiler ignoriert s„mtliche Kommentare. Aber nicht jedeR hat den Compiler und aužerdem ist es mit dieser Funktion m”glich, die reale L„nge des Programms zu ermitteln. Nach dem Start der Funktion mit "Arbeit starten" bertr„gt der REM-Killer den Quelltext Zeile fr Zeile in den Ergebnisspei- cher und schneidet dort alles was hinter dem Auslassungszeichen ("'") oder "REM" steht ab. Alle Leerzeichen am rechten Zeilenen- de schneidet er ebenfalls ab. Eine Zeile, die nur aus einem Kommentar oder aus Leerzeichen besteht, verschwindet auf diese Weise vollst„ndig aus dem Programmcode. Natrlich bercksichtigt der REM-Killer, daž "'" und "REM" kein Zeichen fr einen Kommentar sind, wenn sie durch Anfhrungsstri- che eingeschlossen werden. Beispiel: Quelltextzeile: a$="Was is' los?"' Ausgabetext in a$ Ergebnis: a$="Was is' los?" Das Auslassungszeichen in dem String "Was is' los?" ist keine Markierung fr einen Kommentar, weil es von zwei Anfhrungszei- chen eingeschlossen wird. Die Zeile wird also nicht ver„ndert. Das Auslassungszeichen hinter dem zweiten Anfhrungszeichen mar- kiert einen Kommentar, der Rest der Zeile wird also abgeschnit- ten. Die Quelltextzeile "' Dies ist eine Kommentarzeile " wrde vollst„ndig aus dem Programmtext verschwinden, weil sie nur einen Kommentar enth„lt. Das Ergebnis wird um eine Zeile gekrzt. 4.4. SUCHEN UND ERSETZEN Die Suchen-und-Ersetzen-Funktion weist gegenber der entsprechen- den Funktion, wie sie in jedem Editor oder Textverarbeitungspro- gramm vorhanden ist, zwei Unterschiede auf: 1. Die OMI-TOOL bercksichtigt beim Suchen und Ersetzen nur Text, der nicht durch Anfhrungszeichen einge- schlossen wird und nicht als Kommentar gekennzeichnet ist. Es ist also m”glich, mit Suchen und Ersetzen Žnderungen im Programmcode vorzunehmen, ohne anschlie- žend Stringzuweisungen, PRINT-Befehle und Kommentare, die die zu ersetzende Zeichenkette enthalten, re- staurieren zu mssen. 2. Die zu ersetzende Zeichenkette wird nicht im Quelltext ersetzt, sondern es wird ein neuer Programmtext ge- neriert, in dem die entsprechenden Textstcke ver„n- dert werden. Dadurch ist praktisch eine UNDO-M”glich- keit vorhanden. Wenn die Ersetzungsfunktion durch "Arbeit starten" ausgel”st wird, so erscheint als erstes eine Dialogbox. Hier muž die zu suchende Zeichenkette und der Ersatztext eingegeben werden. Dar- unter befinden sich drei Buttons, die mit "Abbruch", "Rckfrage" und "Alle" bezeichnet sind. Was sie bedeuten, drfte klar sein, trotzdem hier eine kurze Erkl„rung: "Abbruch" fhrt die Suchen-Ersetzen-Funktion nicht aus. Der Er- gebnisspeicher beh„lt seinen alten Inhalt. "Alle" ersetzt alle Zeichenketten, die dem Suchstring entspre- chen und aužerhalb von Zitaten und Kommentaren stehen, durch den Ersatztext. "Rckfrage" fhrt die Such-Funktion aus, fragt jedoch bei jeder Fundstelle des Suchstrings nach, ob dieser ersetzt werden soll. Es erscheint eine Dialogbox, in der die Originalzeile angezeigt wird. Darunter befinden sich drei Buttons. "Ja" fhrt zum Erset- zen des Textes und "Nein" natrlich dazu, daž nicht ersetzt wird. "Abbruch" ersetzt den Text nicht und bertr„gt aužerdem den Rest des Quelltextes ohne Ver„nderungen in den Ergebnisspei- cher. Durch die Unterscheidung von Grož- und Kleinschreibung werden Befehle und Variablen beim Suchen und Ersetzen auseinandergehal- ten. 4.5. PROZEDURLISTE Genau genommen handelt es sich dabei um eine "Liste der Proze- duren, Funktionen und Labels". Weil es einfacher ist, bezeichne ich es im folgenden jedoch nur als Prozedurliste. Die Prozedurliste ist also eine Liste s„mtlicher Unterprogramme, die im Quelltext vorhanden sind. Es werden Prozedurdefinitio- nen ("DEF PROC"), Funktionsaufrufe ("DEF FN") und Labels ("-") bercksichtigt. Diese verschiedenen Formen von Unterprogrammen werden nicht in getrennten Listen verwaltet, weil es in der Programmierpraxis eigentlich keine Rolle spielt, ob eine Proze- dur oder eine Funktion aufgerufen wird: Hauptsache die Routine ist vorhanden. Die Unterschiede (z.B. der RETURN-Wert bei Funk- tionen) werden natrlich bercksichtigt. Die Labels werden nur der Vollst„ndigkeit halber aufgefhrt, da sie sich bei bestimm- ten Befehlen ("ON ... GOTO/GOSUB", "RESTORE") nicht vermeiden lassen. Deshalb werden sie auch hier bercksichtigt. Wenn die Prozedurliste einmal vorhanden ist, l„žt sie sich immer wieder schnell aufrufen, denn sie muž nur in den Ergebnistext- Speicher bertragen werden. Die notwendige Rechenzeit dafr ist gleich null. Eine Prozedurliste kann durch Anwahl des entsprechenden Eintra- ges im Modus-Menue und anschliežendes "Arbeit starten" angelegt werden. Sie wird jedoch auch automatisch angelegt, wenn sie fr andere Funktionen gebraucht wird. Labels werden nur dann in die Prozedurliste aufgenommen, wenn sie am Beginn einer Programmzeile stehen (es drfen auch keine Leerzeichen davor sein!), weil so der Programmlauf wesentlich schneller ist, Labels ohnehin vermieden werden sollten und La- bels mitten in einer Programmzeile der šbersicht eines Programms sehr abtr„glich (und v”llig berflssig) sind. Die Liste der Unterprogramme wird in zwei Durchl„ufen ermittelt. Im ersten Durchlauf werden s„mtliche vorkommenden Deklarationen mit Zeilennummer in eine Liste eingetragen. Im zweiten Durchlauf wird (vom Textende zum Textanfang) berprft, ob es zu jeder Prozedur ein END_PROC, zu jeder Funktion ein END_FN und zu jedem Label ein RETURN gibt. Ersatzweise wird statt END_PROC und END_FN das letzte RETURN vor der n„chsten Prozedur/Funktion als Prozedur/Funktionsende angenommen. Wenn eine Prozedur mehrere RETURNs enth„lt, so betrachtet OMI-TOOL das letzte RETURN vor der n„chsten Deklaration als Ende der Prozedur. Dies entspricht nicht ganz den M”glichkeiten des Interpreters, denn es ist auch m”glich, das RETURN irgendwo mitten in einer Prozedur oder Funktion unterzubringen. So etwas ist jedoch nie notwendig und fhrt nur zu einem unbersichtlichen Listing. Wenn auch kein RETURN fr eine Prozedur oder Funktion vorhanden ist, so tr„gt OMI-TOOL eine Warnung in die Prozedurliste ein. Fr die Labels geschieht dies nicht, da sie auch ohne RETURN auskommen k”nnen (z.B. als RESTORE-Marke vor DATA-Zeilen). Unterprogramme, die kein RETURN enthalten, betrachtet OMI-TOOL in der Zeile vor Beginn der n„chsten Routine als beendet. Labels innerhalb einer Prozedur fhren dazu, daž die entsprechen- de Prozedur (oder Funktion) in dieser Zeile als beendet betrach- tet werden. Wenn der RETURN-Aufruf erst sp„ter folgt, so wird fr diese Prozedur entsprechend das Fehlen des RETURNs in der Liste vermerkt. In der Praxis sollte so etwas aber gar nicht vorkommen, weil es Programme nur unbersichtlich macht. Den Textteil der zwischen dem Anfang des Quelltextes und der ersten Unterprogrammdeklaration steht, betrachtet OMI-TOOL als Hauptprogramm. Aužerdem stellt OMI-TOOL im zweiten Durchlauf durch den Quell- text eine Liste der lokalen Variablen und Rckgabeparameter fr jede Prozedur zusammen. Da die Prozedurliste fr einige weitere Funktionen gebraucht wird, die Liste jedoch mehr enth„lt, als ber "Ergebnis ausge- ben" in einer Datei abgelegt wird, gibt es die M”glichkeit, die Liste in einem speziellen Format zu speichern und beim n„chsten Programmlauf wieder zu laden. Dies geschieht mit dem Menuepunkt "Prozedurliste speichern" im Extra-Menue. Es erscheint eine Fi- leselectbox, in der der Quelltextname mit der Extension *.PLS vorgegeben wird. Die so angelegte Datei ist nur fr die Weiter- verarbeitung in OMI-TOOL gedacht. Eine so gespeicherte Prozedurliste kann ber den entsprechenden Eintrag im Extra-Menue geladen werden. Eine Prozedurliste l„žt sich erst dann laden, wenn schon ein Quelltext vorhanden ist. Nachdem die Liste geladen wurde, wird berprft, ob die einge- lesen Daten mit dem Quelltext bereinstimmen. Jede Prozedur wird dabei im Quelltext in der Zeile gesucht, in der sie beim speichern der Liste stand. Steht dort keine Prozedurdefinition, sucht OMI-TOOL sie in den vorhergehenden und nachfolgenden 100 Zeilen. Wird sie in diesem Bereich nicht gefunden, so wird als Anfangszeile der Prozedur "???" gesetzt. Sollte dies der Fall sein, ist die Liste natrlich nur bedingt weiter zu gebrauchen. Es erscheint dann - wenn die Warnmeldungen eingeschaltet sind - eine entsprechende Meldung. Die in der Liste enthaltenen lokalen Variablen und Rckgabepara- meter werden nicht daraufhin berprft, ob sie noch dem realen Quelltext entsprechen. Eine geladene Prozedurliste wird genauso behandelt wie eine frisch angelegte. Das heižt, sie kann ber "Prozedurliste anle- gen" und "Arbeit starten" in den Ergebnisspeicher bertragen und z.B. auf den Bildschirm ausgegeben werden. Sollte sich nach dem Laden einer Prozedurliste herausstellen, daž sie nicht mehr zu gebrauchen ist, so kann eine neue Liste angelegt werden. Dazu mssen die Warnmeldungen eingeschaltet werden. Dann wird im Modus-Menue "Prozedurliste anlegen" ange- w„hlt und anschliežend "Arbeit starten" im Datei-Menue. Es er- scheint eine Auswahlbox, in der das Anlegen einer neuen Liste erzwungen werden kann. 4.6. GLOBALE VARIABLENLISTE Diese Funktion erstellt eine Liste aller globalen Variablen und Felder, die in dem Quelltext vorkommen. Zur Unterscheidung von globalen und lokalen Variablen legt das Programm zun„chst eine Prozedurliste an, wenn diese noch nicht vorhanden ist. Danach werden alle Variablen gesammelt, die in dem Quelltext vorkommen. Sie werden jeweils mit der Liste der lokalen Variablen vergli- chen, die in der entsprechenden Zeile gltig sind. Wenn die Variable darin vorkommt, wird sie nicht in die Liste aufgenommen. Zu Beginn wird - wenn die Statusanzeige eingeschaltet ist - die schnell wachsende Zahl der Variablen erschrecken. Dies liegt daran, daž zun„chst s„mtliche Variablen, die erkannt werden, gesammelt werden. Anschliežend wird die Liste alphabetisch sor- tiert und s„mtliche mehrfachen Eintragungen werden entfernt. Aužerdem legt OMI-TOOL eine Liste mit s„mtlichen "DIM"-Befehlen an und kontrolliert bei allen gefundenen Feldern, ob sie in der Liste der Dimensionierungen vorkommen. Wenn nicht, wird das Feld in der Variablenliste mit der Warnung "nicht definiert!" ge- kennzeichnet. Zum Abschluž stellt OMI-TOOL noch eine kleine Statistik ber die benutzten Variablen auf, die z.B. so aussieht: globale Variablen insgesamt: 262 Double Float: 0 Single Float: 0 Long Integer: 10 Integer Word: 221 Strings: 31 Felder sind in den einzelnen Variablenarten nicht enthalten. Die Variablenliste ist Voraussetzung fr die Funktion "Aufruf Variablen" (Variablenreferenzliste) und wird von dieser bei Be- darf angelegt. Sie wird, wenn sie einmal vorhanden ist, im Speicher gehalten bis ein neuer Quelltext geladen wird. Anstatt eine Variablenliste neu anzulegen, kann sie auch geladen werden, wenn sie fr die Variablenreferenzliste gebraucht wird. Dies geht im entsprechenden Menuepunkt des Extra-Menues. An die zu ladende Liste werden keine besonderen Anforderungen gestellt. Sie muž nur je Zeile genau eine Variable enthalten. Es kann eine Variablenliste geladen werden, die mit der Funktion "Ergebnis ausgeben" von OMI-TOOL ausgegeben wurde. Es kann auch mit einem Editor eine Liste erstellt werden. Dabei ist jedoch darauf zu achten, daž die Variablen mit einem grožen Buchstaben beginnen und die nachfolgenden Buchstaben klein sind. Bei Feldern muž in Klammern durch Kommas angegeben werden, wieviele Dimensionen sie haben. So ist es also m”glich, eine Variablenreferenz nach leichten Programm„nderungen schnell zu wiederholen. Da nicht berprft wird, ob die geladene Liste mit den tats„chlich vorhandenen globalen Variablen bereinstimmt ist auch eine "selektive" Va- riablenreferenz nur fr bestimmte Variablen m”glich, was natr- lich schneller geht. 4.7. LOKALE VARIABLEN AUFLISTEN Diese Funktion listet nach ihrem Start ber "Arbeit starten" s„mtliche Prozeduren und Funktionen "in order of appearance" auf. Es werden jeweils alle lokalen Variablen mit der Zahl der Aufrufe ausgegeben. Wenn eine lokale Variable nur deklariert wurde, aber nicht genutzt wird, so wird eine entsprechende Warnmeldung in das Ergebnis eingetragen. Ebenso, wenn eine Va- riable nur einmal benutzt wird (obwohl das nicht unbedingt ein Fehler sein muž). Die Rckgabeparameter werden zus„tzlich geson- dert angegeben. Wenn der RETURN-Wert einer Funktion nicht als LOCAL deklariert wurde, so wird dies auch angemerkt, obwohl die Variable sowohl vom Interpreter als auch von OMI-TOOL (korrekt) als lokale Variable behandelt wird. Labels k”nnen in dieser Liste nicht vorkommen, da bei ihnen keine lokalen Variablen m”glich sind. Es werden auch lokal genutzte Feldelemente fr diese Liste bercksichtigt. Mir ist zwar nicht klar, wozu das eigentlich gut ist, aber es geht und wird auch angewendet (z.B. in der GEMLIB.BAS-Datei, die (frher) mit dem Interpreter zusammen ge- liefert wurde). Deshalb wird diese M”glichkeit auch in OMI-TOOL bercksichtigt. 4.8. KONSTANTENLISTE Besonders bei GEM-Programmen ist es blich, daž globale Variable praktisch als Konstanten genutzt werden: Sie werden nur ein einziges Mal definiert und anschliežend nicht mehr ver„ndert. Dies ist z.B. bei den Header-Listen der RCS'e der Fall. Obwohl OMIKRON.BASIC eigentlich keine Konstanten kennt, bietet OMI-TOOL die M”glichkeit, solche Variablen gesondert zu bearbeiten. Damit wird die Variablenliste und vor allem die Variablenreferenz bersichtlicher. Eine Konstantenliste kann aus naheliegenden Grnden nicht von OMI-TOOL selber angelegt werden. Sie muž deshalb geladen werden. Dies geschieht ber den Menuepunkt "Konstanten laden" im Extra-Menue. Die so geladene Liste l„žt sich ber "Konstantenliste anlegen" und Arbeit starten auch als Ergebnis ausgeben. Dies geht natrlich sehr schnell, da die Liste ja schon vorhanden ist. Damit die Konstantenliste nicht nur im Speicher ist, sondern auch benutzt wird, muž sie im Extra-Menue aktiviert werden, was durch ein H„kchen angezeigt wird. Die Liste ist dann praktisch ein Filter, der alle Konstanten aus der Variablenliste ausblen- det. Sie wird auch NUR beim Anlegen einer Variablenliste be- rcksichtigt, da die Variablenreferenz sich nur auf die bereits vorhandene Variablenliste bezieht. Besonders geeignet als Konstantenliste sind die Header-Dateien von RCSen (nachdem sie mit "Header konvertieren" in OMIKRON- Format gebracht worden sind). Es ist aber z.B. auch m”glich, eine alte Variablenliste zu laden und auf diese Weise nur festzustellen, welche Variablen inzwischen neu in das Programm eingefhrt worden sind. Als Konstantenliste kann jede beliebige ASCII-Datei geladen wer- den. In jeder Zeile darf nur eine Konstante stehen. Hinter der Konstanten darf dieser getrennt durch ein Gleichzeichen auch ein Wert zugewiesen werden. Es ist also m”glich, einen Ausschnitt des Quelltextes direkt als Liste zu laden. Anmerkung: Bei der neuesten Version des Compilers soll es durch die Compiler-Steuerworte "DEF_CONST" und "END_CONST" m”glich sein, Compiler-Konstanten zu deklarieren. Diese Variante wird von OMI-TOOL bisher noch nicht untersttzt. Mein Compiler gibt bei Benutzung dieser Steuerworte nur eine h„mische Fehlermeldung von sich. Ich hatte deshalb noch nicht die Motivation, OMI-TOOL an diesem Punkt an die neueste Version anzupassen. (Im Interpre- ter sind diese Steuerworte ja ebenfalls ohne Bedeutung). 4.9. PROZEDURENAUFRUFE AUFLISTEN Diese Funktion legt zu jeder Prozedur, jeder Funktion und jedem Label eine Liste an, von wo aus sie aufgerufen wird. Zu jeder Routine wird in diese Liste eingetragen, von welcher anderen Routine und in welcher Zeile sie aufgerufen wird. Die Gesamtzahl der Aufrufe und die Zahl der Prozeduren, aus denen heraus eine Prozedur aufgerufen wird, wird ebenfalls vermerkt. Fr jede Routine wird jedoch nur ein Aufruf pro Zeile ausgewertet. Die einzelnen Routinen werden jeweils in der Reihenfolge, in der sie im Programm stehen, in die Liste eingetragen. Nicht untersttzt werden von OMI-TOOL Prozeduraufrufe, bei denen die Parameter ohne Klammern bergeben werden. Im Handbuch wurde dies bis zur Version 3.00 nicht dokumentiert. Es geschieht z.B. bei der GEMLIB.BAS-Datei, die frher zum Interpreter geh”r- te, in der Prozedur Appl_Init. Da dies eine v”llig andere Routine zur Erfassung von Prozeduraufrufen voraussetzen wrde, habe ich sie nicht bercksichtigt. Bei Labels werden s„mtliche Aufrufe des Labels in Verbindung mit den Befehlen (ON ...) GOTO, GOSUB und RESTORE bercksichtigt. 4.10. NUTZUNG GLOBALER VARIABLEN AUFLISTEN Es wird zu jeder globalen Variablen und zu jedem Feld eine Liste angelegt, die die Zahl der Aufrufe und der aufrufenden Proze- duren insgesamt, die Prozeduren, in denen die Variable oder das Feld aufgerufen wird und die aufrufende Zeile angegeben. Wenn eine Variable nur in einer einzigen Zeile des Quelltextes auf- taucht, so erscheint hinter ihr die Warnmeldung "NUR EIN AUF- RUF!!!!". Wenn die Funktion gestartet wird ("Arbeit starten"), so wird ggf. zun„chst eine Prozedurliste und anschliežend eine Variablen- liste angelegt. Anschliežend wird fr jede Variable einmal das Programm nach Aufrufen durchsucht. Wenn OMI-TOOL fndig wird, so berprft es zun„chst, ob die Variable in der entsprechenden Prozedur lokal definiert ist. Wenn nicht, so wird der Prozedurna- me und die aufrufende Zeile in die Referenzliste fr diese Variable eingetragen. Jede Variable wird jedoch nur einmal pro Zeile bercksichtigt. 4.11. KONSTANTENREFERENZLISTE Die Konstantenreferenzliste ist im Prinzip das Selbe wie die Variablenreferenzliste. Sie nimmt jedoch (wie der Name schon sagt) die Konstantenliste als Grundlage. Auch bei der Ausgabe gibt es einen kleinen Unterschied: Die Zeile, in der eine Konstante definiert wird, wird gesondert ausgegeben. Wird sie in mehreren Zeilen definiert (also der Wert ver„ndert), so wird eine entsprechende Meldung im Ergebnistext ausgegeben. Schliež- lich soll es sich um Konstanten handeln! Ebenso erscheint eine Meldung, wenn eine Konstante in einer Prozedur als lokale Va- riable definiert wird. Auch dies ist natrlich formal kein Fehler, erh”ht aber nicht gerade die šbersicht. 4.12. SCHLEIFENFUNKTION Diese Funktion soll dazu dienen, eine šbersicht ber die Anwen- dung von "Befehlspaaren" zu bekommen. Im Normalfall sollte fr jeden FOR-Befehl ein NEXT vorhanden sein, fr jedes WHILE ein WEND, fr jedes OPEN ein CLOSE usw. Solange ein Programm nicht weit verschachtelt ist, l„žt sich dies auch mit bložem Auge auf dem Monitor leicht berschauen. Bei komplizierteren Routinen, die sich auch mit kleiner Schrift ber mehrere Bildschirmseiten erstrecken, kann die šbersicht schon mal verloren gehen. Dafr ist diese Funktion gedacht. Nach dem Aufruf ber "Arbeit starten" erscheint zun„chst eine Dialogbox. Es k”nnen die Zeichenketten eingetragen werden, die beim nachfolgenden Suchlauf bercksichtigt werden sollen, aber es erscheint mir nicht sinnvoll, etwas anderes als Befehle einzugeben. Es muž darauf geachtet werden, daž die Syntax der Zeichenketten der Syntax, wie sie im Interpreter angewendet wird, genau entspricht. Mit anderen Worten: Befehle drfen nur grože Buchstaben enthalten, die Syntax bei der Klammersetzung (mit oder ohne Leerzeichen) muž korrekt sein. OMI-TOOL l„dt bei Programmstart automatisch eine Liste mit Such- w”rtern, wenn sie sich unter dem Namen OMI_TOOL.WOR in dem Ordner befindet, in dem auch OMI_TOOL.RSC liegt. In der Dialog- box kann eine Liste unter einem beliebigen Namen gespeichert oder geladen werden. Die Datei ist eine normale ASCII-Datei, die aus bis zu 20 Zeilen besteht. Jede Zeile enth„lt ein Suchwort und wird durch CR/LF abgeschlossen. Durch Abbruch wird die Aktion abgebrochen. Wenn die Dialogbox mit OK geschlossen wird, dann wird der Quelltext Zeile fr Zeile nach den gesuchten Zeichenketten durchsucht. Jede Zeile, die mindestens eine der gesuchten Zeichenketten enth„lt, wird in den Ergebnistext-Speicher bernommen. Wer die verschiedenen Verschachtelungstiefen durch Einrcken des Programmtextes optisch darstellt, kann auf diese Weise auch sehen ob sich z.B. der Anfang einer Schleife auf der selben Verschachtelungsebene wie das Ende befindet. Wenn das nicht der Fall ist, stimmt irgend etwas nicht. Fr die praktische Arbeit mit der Schleifenfunktion ist es nicht unbedingt sinnvoll, s„mtliche 20 Suchworte auch tats„chlich zu besetzen, weil dadurch relativ viele Zeilen des Quelltextes bernommen werden. Die šbersichtlichkeit des Ergebnisses ist dann nicht mehr gegeben. 5. OUTPUT: DIE ERGEBNISSE Allgemein gilt, daž Ergebnisse nicht automatisch sondern nur auf ausdrckliche Aufforderung ausgegeben werden. Fr die Ausgabe auf den Drucker oder in eine Datei ist dies nichts besonderes, aber fr die Ausgabe auf den Bildschirm. 5.1. BILDSCHIRMAUSGABE Die Ausgabe auf dem Bildschirm erfolgt in zwei Fenstern. Sie k”nnen durch "Quelltext ausgeben" bzw. "Ergebnis ausgeben" ge”ff- net werden, wenn als Ausgabeger„t der Bildschirm festgelegt ist (im Menue "Ausgabe"). Wenn die Fenster offen sind, so bewirkt ein Klick auf einen dieser beiden Menuepunkte, daž das entspre- chende Fenster in den Vordergrund geholt wird. Wenn sich der Fensterinhalt ver„ndert hat, so werden die Fenster automatisch aktualisiert. 5.2. AUSDRUCK UND DRUCKBOX Wenn im Ausgabe-Menue "Drucker" als Ausgabeger„t gew„hlt wurde, so erfolgt die Ausgabe auf den Drucker. Fr die Anpassung an den Druckertyp und die individuellen Vorlieben bei der Ausgabe las- sen sich fr den Ausdruck einige Parameter einstellen. Sie k”nnen in der "Druckbox" und in der "Standards"-Box ver„ndert werden. Auf die "Standards"-Box m”chte ich an dieser Stelle nicht weiter eingehen, weil ihr das gesamte Kapitel 6 gewidmet ist. Die Druckbox ist ber den entsprechenden Menuepunkt im Ausgabe- Menue zu erreichen. Wenn dieser angeklickt wird erscheint eine kleine Dialogbox, in der das Seitenformat, das Zeilenformat und die Druckqualit„t ver„ndert werden k”nnen. Die Box kann durch "Abbruch" oder "OK" wieder verlassen werden. "Abbruch" hebt - wie gewohnt - s„mtliche Ver„nderungen wieder auf. In der Druckbox l„žt sich das Seitenformat ganz einfach einstel- len: Auf der linken Seite werden oberer und unterer Rand sowie die Zeilenzahl abw„rts gez„hlt, auf der rechten Seite aufw„rts. Die Summe der Zeilen pro Seite wird vom Programm aus diesen drei Zahlen automatisch gebildet. Normales DIN-A4 Papier vertr„gt mit einzeiligem Abstand 70 Zeilen insgesamt, Endlospapier 72. Bei Einzelbl„ttern sollte - je nach Drucker - darauf geachtet wer- den, wieviele Zeilen der Drucker tats„chlich am unteren Rand bedrucken kann. Wenn oberer Rand, unterer Rand und die Zahl der Textzeilen auf Null gesetzt wird, so wird der Text ohne jede Unterbrechung gedruckt. Der Seitenumbruch wird dann dem Drucker berlassen oder entf„llt. Das Zeilenformat (linker Rand und Textspalten) wird im Prinzip genauso eingestellt wie das Seitenformat. Die Gr”že des linken Randes und die Zahl der Spalten (Anschl„ge pro Zeile) wird vom Programm in das untere K„stchen als Summe eingetragen. Die maximale Spaltenzahl eines normalen DIN-A4-Druckers liegt bei 80 Zeichen in normaler Schriftgr”že und 138 Zeichen in Schmal- schrift. Dann ist jedoch weder links noch rechts ein Rand. Wenn eine Zeile l„nger als die maximale Zeilenl„nge ist, so wird sie in die n„chste Zeile umgebrochen. Dort wird sie aužerdem um 5 Zeichen eingerckt. OMI-TOOL formatiert die Zeilen im Rechner. Es ver„ndert nicht die R„nder, die beim Drucker eingestellt sind. Der linke Rand, den das Programm setzt, muž also ggf. zu dem Rand, der am Drucker eingestellt ist, hinzu gez„hlt werden. Wie sich dennoch der linke Rand im Drucker selber ver„ndern l„žt, steht im Kapitel 6 ber die Standardeinstellungen. Wenn der linke Rand und die Textspalten zusammen breiter sind als der Drucker vertr„gt (also z.B. linker Rand plus Textspalten insgesamt 100 Zeichen in normaler Schriftbreite bei einem norma- len DIN-A4-Drucker), dann macht der Drucker normalerweise einen Zeilenumbruch, auf den das Programm keinerlei Einfluž hat. OMI- TOOL berprft nicht, ob die eingestellten Parameter in der Druckbox bei dem angeschlossenen Drucker m”glich sind! Ein Zei- lenumbruch vom Drucker wird ziemlich h„žlich, denn er beachtet natrlich nicht den Rand, der von OMI-TOOL fr die Ausgabe gesetzt wird. Darber hinaus kommt dadurch auch die Zeilenz„h- lung von OMI-TOOL durcheinander, weil OMI-TOOL von der neuen Zeile, die der Drucker kreiert hat, nichts mitbekommt. Die Druckqualit„t des Ausdrucks kann durch die beiden Radio- Buttons "NLQ" und "Draft" ver„ndert werden. OMI-TOOL sendet vor jedem neuen Druckvorgang unter anderem einen Code fr die Druck- qualit„t an den Drucker. Was fr ein Code das ist, l„žt sich in der "Standards"-Box bestimmen und h„ngt vom jeweiligen Drucker ab. 5.3. AUSGABE IN EINE DATEI Wenn als Ausgabeger„t "Datei" ausgew„hlt ist, so erscheint nach dem Anw„hlen von "Quelltext ausgeben" bzw. "Ergebnis ausgeben" die Fileselectbox. Dort muž dann blichen Konventionen entspre- chend ein Dateiname eingegeben werden. Der Text wird im ASCII- Format im ausgew„hlten Pfad unter dem angegebenen Namen gespei- chert. Mehr gibt es zu dieser Ausgabeart wohl nicht zu sagen. 6. SYSTEMEINSTELLUNGEN Bei Programmstart versucht OMI-TOOl automatisch eine Datei mit dem Namen "OMI_TOOL.INF" zu laden. Wenn es sie nicht findet (in seinem eigenen Ordner bzw. dem, aus dem die RSC-Datei geladen wurde, und im aktuellen Verzeichnis, das OMI-TOOL vom Betriebs- system bergeben bekommt), dann kann "von Hand" eine Konfigura- tionsdatei geladen werden. OMI-TOOL kann jedoch auch laufen ohne das eine solche Datei geladen wird. Dann wird die maximale Zeilenzahl auf 500 festgesetzt und als Standardpfad wird der aktuelle Pfad bernommen. S„mtliche Steuerstrings fr den Drucker bleiben ebenso leer wie die Sammlung von beim Ausdruck zu konvertieren Zeichen. Die Voreinstellungen fr die R„nder und die Zeilen- und Seitenl„nge steht auf null. Die Standardeinstellungen lassen sich bis auf die maximale Zeilenzahl und den Standardpfad w„hrend des Programmlaufes noch ver„ndern. Es gibt einen Menuepunkt "Standards „ndern" im Datei- menue, hinter dem sich eine Dialogbox versteckt. Diese enth„lt verschiedene Elemente, die in diesem Kapitel behandelt werden sollen. 6.1. STANDARDPFAD Wenn OMI-TOOL gestartet wird und das erste Mal ein Quelltext geladen werden soll, so wird der als Standardpfad in der "Standards"-Box eingestellte Pfad vorgegeben. Dies gilt jedoch nicht, wenn die Box aufgrund der Kommandozeile des Betriebssy- stem bei Programmstart ge”ffnet wird. Dann erscheint der Pfad, der in der Komandozeile enthalten ist. Im weiteren Programmablauf wird immer der zuletzt gew„hlte Pfad vorgegeben. Der Standardpfad ist also nur fr den Programmstart relevant. Ihn zu ver„ndern hat also nur dann Sinn, wenn die Ver„nderung auch gespeichert und beim n„chsten Programmstart automatisch geladen wird. Der Standardpfad kann durch einen Klick auf den "Žndern"-Button ver„ndert werden. Es erscheint dann eine Fileselectbox, in der ein Pfad ausgew„hlt werden kann. Die Auswahl eines Dateinamens oder einer Anzeigemaske bleibt ohne Wirkung. 6.2. MAXIMALE ZEILENZAHL Auch die maximale Zeilenzahl ist nur beim Programmstart rele- vant. Sie legt fest, wieviel Speicher OMI-TOOL verbraucht und wie grož die zu bearbeitenden Quelltexte und Ergebnisse sein drfen. Sie bezieht sich sowohl auf den Quelltext als auch auf das Ergebnis. Beide mssen sich im Rahmen der maximalen Zeilen- zahl halten. Beim Abspeichern der *.INF-Datei wird die einge- stellte Zeilenzahl in Bytes umgerechnet und in OMI_TOOL.SYS abgelegt. Fr 5000 Zeilen werden dort 755.000 Byte eingetragen (siehe Einstellungen speichern). Es lassen sich schon grože Programme mit jedem normalen 1 MB- Rechner bearbeiten. Zum Vergleich: OMI-TOOL ist als ASCII-Datei des Quelltextes etwa 150000 Bytes lang und enth„lt 4400 Zeilen, als Basic-Version, wie sie der Interpreter mit "Save" speichert ist OMI-TOOL knapp 130.000 Byte lang. Wenn der Speicherplatz knapp ist, so l„žt sich mit dem REM- Killer eine Programmversion erstellen, die weniger Platz ver- braucht. Auch wenn die Hilfetexte nicht geladen werden, steht mehr Platz zur Verfgung. Die maximale Zeilenzahl wird nur beim Programmstart von OMI-TOOL abgefragt. Eine Ver„nderung der Zahl wirkt sich also erst auf den n„chsten Programmlauf aus, wenn die Ver„nderung in OMI_TOOL.INF gespeichert wird. 6.3. DRUCKERSTEUERUNG UND ZEICHENKONVERTIERUNG In der "Standards"-Box lassen sich die Steuerstrings an den Drucker ver„ndern, um den Ausdruck m”glichst weitgehend den individuellen Bedrfnissen (sowohl was den vorhandenen Drucker als auch was den pers”nlichen Geschmack angeht) anzupassen, ohne grožen Aufwand zu treiben. Jedes Mal, wenn ein Ausdruck gestartet wird, schickt OMI-TOOL als erstes den Initialisierungsstring an den Drucker. Dieser soll den Drucker in seinen Ausgangszustand versetzen. Anschlie- žend wird der Code fr die Zeichenbreite (Schmal oder Normal) an den Drucker geschickt und danach ein Code fr die Druckqualit„t (NLQ oder Draft). Am Ende jeder Zeile wird Line-Feed an den Drucker geschickt, am Ende jeder Seite und des Ausdruckes Form- Feed und am Druckende noch einmal der Initialisierungsstring. Was die einzelnen Strings bewirken, h„ngt davon ab, was in der "Standards"-Box jeweils eingestellt wurde. So kann z.B. der NLQ- String gleichzeitig einen bestimmten Drucker-Schriften-Font akti- vieren. Oder der Code fr die schmalen Zeichen verringert gleich- zeitig den Zeilenabstand (spart Papier!). Bei mir steht deshalb als Code fr die Kleinschrift gleichzeitig auch ein Code fr die Aktivierung der Fužnoten-Schrift (hochgestellt) und eine Redu- zierung des Zeilenabstandes auf 60/360. Auf diese Weise passen etwas ber 100 (normal: knapp 70) Zeilen auf ein DIN-A4-Blatt. Jedes Zeichen des jeweiligen Codes muž in der "Standards"-Box als ASCII-Code in Dezimalform eingegeben werden (z.B. Escape: CHR$($1B) als 27). Zwischen zwei Zeichen muž jeweils ein Leerzei- chen sein. Ein Code kann also etwa 6 bis 8 Zeichen lang werden. Die eingestellten Codes werden sofort wirksam, wenn die "Standards"-Box mit OK verlassen wird. Die Einstellungen, die mit OMI-TOOL mitgeliefert werden sind fr einen Epson-24-Nadler geeignet. Neben den Steuerstrings k”nnen fr den Drucker auch einzelne Zeichen durch andere Zeichenketten ersetzt werden, damit auch z.B. die Umlaute und der Backslash ("\") korrekt gedruckt wer- den. Die Einstellung erfolgt im Prinzip genauso wie bei den Steuerzeichen ber ASCII-Codes. Neben dem auszugebenen Code (auf der rechten Seite) muž hier natrlich (links) auch noch das zu ersetzende Zeichen eingegeben werden. Dadurch, daž der Ersatz- string l„nger sein darf, ist es m”glich, am Drucker kurzfristig einen anderen Zeichensatz zu aktivieren, um ein bestimmtes Zei- chen auszugeben, und anschliežend wieder zurck zu schalten. Auch beim Umgang mit den Konvertierungszeichen sind dem pers”nli- chen Geschmack keine Grenzen gesetzt... 6.4. STANDARDS SPEICHERN UND LADEN Die Einstellungen des Programms k”nnen in einer Datei beliebigen Namens gespeichert und sp„ter wieder geladen werden. Wenn der Button in der "Standards"-Box angeklickt wird, so erscheint eine Dialogbox, in der der Pfad und der Name, eingestellt werden muž. Die so erstellte Konfigurationsdatei enth„lt folgende Daten: - Die maximale Zeilenzahl fr Quell- und Ergebnistext; - Den Standardpfad; - Die Drucker-Steuerworte; - Die Drucker-Zeichen-Konvertierungs-Tabelle; - Die zuletzt benutzten Fenstergr”žen; - Den Status der Glocke (ein oder aus); - Die eingestellte Schriftgr”že (grož oder klein); - Ob Zeilennummern, Kopf, Status und Warnmeldungen ausgege- ben werden sollen (siehe Kapitel 7); - Ob lange oder kurze Referenzlisten angelegt werden; - Ob *.H- oder *.LST-Dateien bearbeitet werden; - Ob Konstanten - wenn vorhanden - bercksichtigt werden sollen; - Den Status des Automakros (ein oder aus); - Den Status der Extrahilfe (ein oder aus). Aužerdem wird automatisch im selben Pfad die Datei OMI_TOOL.SYS angelegt, die die maximale Zeilenzahl mal 127 plus einem Offset enth„lt. Mit dem Button "Standards laden" kann eine alternative Konfigura- tionsdatei geladen werden. Nach dem Anklicken des entsprechenden Buttons in der "Standards"-Box erscheint die Fileselectbox, die wie allgemein blich bedient wird. Die geladenen Einstellungen werden sofort wirksam. Wenn die maximale Zeilenzahl ver„ndert werden soll, so ist ein Neustart des Programms notwendig. Dafr muž zun„chst eine Konfi- gurationsdatei unter dem Namen OMI_TOOL.INF abgespeichert wer- den, die die neue Zeilenzahl enth„lt. Anschliežend wird im Datei-Menue der Punkt "Neustart" angew„hlt. 7. SONSTIGE OPTIONEN So weit nichts anderes vermerkt ist, befinden sich die nachfol- genden M”glichkeiten jeweils mit einem Menue-Punkt im Ausgabe- Menue. Ihr Status wird in der *.INF-Datei abgespeichert und muž also nicht jedes Mal neu eingestellt werden. 7.1. KLEINSCHRIFT Als oberster Eintrag befindet sich im Ausgabe-Menue ein Eintrag, der "Kleinschrift" heižt. Er wirkt sich sowohl auf die Bild- schirm- als auch auf die Druckerausgabe aus. Nur die Dateiausga- be bleibt davor verschont. Bei der Bildschirmausgabe bewirkt ein H„kchen vor dem Eintrag, das in den Fenstern die 4-Punkt-Systemschrift benutzt wird. Wenn kein H„kchen davor ist, so wird die normale 13-Punkt-System- schrift benutzt. Die Einstellung wird fr Quelltext- und Ergeb- nisfenster getrennt verwaltet (und auch gespeichert). Hier wird immer nur das gerade aktive Fenster beeinflužt. Bei der Druckerausgabe gilt „hnliches wie fr die Auswahl der Druckqualit„t. Bei Start eines Druckvorganges wird ein Code fr "Kleinschrift" bzw. "Normalschrift" an den Drucker geschickt. Ist w„hrend der Druckerausgabe gleichzeitig das zugeh”rige Fen- ster ge”ffnet so erfolgt der Ausdruck entsprechend der Einstel- lung fr das Fenster. Andernfalls gilt die Einstellung im Menue fr Quelltext- und Ergebnisausdruck. 7.2. ZEILENNUMMERN AUSGEBEN Ebenfalls im Ausgabe-Menue kann bestimmt werden, ob die Ausgaben des Programms mit oder ohne Zeilennummern erfolgen. Wie auch die Kleinschrift wird diese Einstellung fr Quelltext und Ergebnis getrennt verwaltet. Wenn Zeilennummern ausgegeben werden, so wird der Text bei eins beginnend in Einer-Schritten durchnu- meriert. 7.3. STATUSANZEIGE Als Statusmeldungen bezeichne ich Meldungen, die das Programm an Stelle der Menueleiste ausgibt. Dies kann in zwei Situationen geschehen: Wenn eine Fileselectbox angezeigt wird, so erscheint (wie z.B. bei Wordplus) an Stelle der Menueleiste ein kurzer Text, der darauf hinweist, was gerade ausgew„hlt werden soll. Wenn das Programm arbeitet, so erscheint eine inverse Zeile, die die gerade durchgefhrte Aktion und den Fortschritt dabei an- zeigt. Die Statusanzeige macht das Programm transparenter. Sie ist aber nicht ganz GEM-konform, da dort direkt auf den Bildschirm ge- schrieben wird. Deswegen - und weil es vielleicht Leute gibt, die meinen, daž diese Bildschirmausgabe zu viel Zeit kostet - ist es auch m”glich, sie abzuschalten. 7.4. WARNMELDUNGEN An verschiedenen Punkten k”nnten Daten verloren gehen, wenn eine Funktion voreilig ausgefhrt wird. Dies ist zwar nicht so tra- gisch, da alle Ergebnisse von OMI-TOOL sich - im Gegensatz z.B. zu einer Textverarbeitung - reproduzieren lassen. Aber „rgerlich ist es doch. Deshalb gibt es die M”glichkeit, daž vor "gef„hrlichen" Aktionen eine Warnmeldung erscheint, die noch rechtzeitig einen Abbruch erm”glicht. Von dieser Funktion sind folgende Aktionen betroffen: Programmen- de, Neustart, Ergebnis als Quelle, neue Prozedurliste anlegen oder laden, neue Variablenliste anlegen oder laden (jeweils wenn schon eine vorhanden ist) und Makro aufnehmen. 7.5. GLOCKE Wenn OMI-TOOL eine l„nger andauernde Aufgabe erledigt hat, so kann es sich durch klingeln bemerkbar machen. Es klingelt dann so lange, bis eine (Maus-)Taste gedrckt wird. Auch wenn eine Warnbox erscheint, kann OMI-TOOL einen Ton von sich geben. Wem dies auf die Nerven geht, der kann die Klingel ausschalten. Aus "programmhistorischen" Grnden ist dies nicht nur im Ausgabe- Menue, sondern auch in der "Standards"-Box m”glich. 7.6. LANGE REFERENZ Die Referenzfunktionen k”nnen in zwei verschiedenen Varianten ausgefhrt werden: mit einem langen oder mit einem krzeren Ergebnis. In der kurzen Variante werden hinter jeder aufrufenden Prozedur die betreffenden Zeilennummern angegeben. In der langen Referenz wird nicht nur die Zeilennummer sondern die komplette Zeile dargestellt. Das verl„ngert das Ergebnis natrlich be- tr„chtlich. Die Bearbeitungsdauer ist jedoch fr beide Modi gleich. Der Modus muž ausgew„hlt werden, BEVOR die Referenz erstellt wird. 7.7. KOPF AUSGEBEN Bei Ausgaben in eine Datei oder auf den Drucker kann ausgew„hlt werden, ob der eigentlichen Ausgabe ein "Kopf" vorangestellt wird. Dieser enth„lt Pfad und Name des bearbeiteten Quelltextes, die ausgefhrte Funktion und Datum und Uhrzeit entsprechend der Systemuhr. Bei Datei-Ausgaben werden diese Kopfzeilen mit einem Apostroph (= Kommentarkennzeichen) eingeleitet, damit es beim Laden in den Interpreter keine Fehlermeldungen gibt. 7.8. NEUSTART Im Datei-Menue gibt es die M”glichkeit, das Programm neu zu starten. Es werden dann s„mtliche Werte initialisiert. Das Pro- gramm f„ngt praktisch von vorne an. Eigentlich passiert das selbe, wie wenn das Programm verlassen und anschliessend sofort wieder gestartet wird. Nur muž es nicht mehr geladen werden. Auch s„mtliche Dateien (RSC, INF etc.) werden neu geladen. 7.9. EXTERNES PROGRAMM STARTEN Ebenfalls im Datei-Menue besteht die M”glichkeit - ausreichend freien Speicher vorausgesetzt - ein fremdes Programm zu starten. Wenn dieses beendet wird, erscheint OMI-TOOL im selben Zustand wie vorher wieder auf dem Bildschirm. Normalerweise bestehen dabei keine Probleme. Trotzdem empfiehlt es sich, alle wichtigen Daten vorher zu speichern. Schliežlich k”nnte es sein, daž das nachgeladene Programm abstrzt und OMI- TOOL dies nicht auffangen kann. Aužerdem gibt es ein „sthetisches Problem: Einige Programme (z.B. Wordplus) melden beim Programmstart ein eigenes Desktop an (daran zu erkennen, daž einige Dinge aužerhalb von Fenstern und Dialogboxen einfach so auf dem Desktop herumliegen). Wenn dieser Desktop am Programmende ordnungsgem„ž wieder abgemeldet wird, so ist auch alles klar. Unter anderem Wordplus tut dies jedoch nicht. OMI-TOOL seinerseits meldet keinen eigenen Desktop an. Nach dem Ende eines externen Programms sorgt es nur einmal dafr, daž der Hintergrund wieder das vertraute Grau hat. Wenn darauf nun Fenster hin- und hergeschoben werden (auch von Acces- sories), dann wird der Desktop dieses l„ngst beendeten Programms immer wieder restauriert. Das hat auf die Funktionsf„higkeit von OMI-TOOL nicht den geringsten Einfluž und mit den restaurierten Icons l„žt sich auch berhaupt gar nichts anfangen, aber es ist un„sthetisch. In der Erprobungsphase hatte ich aužerdem Probleme damit, daž einige Programme die Maus sehr grndlich abschalten, wenn sie beendet werden. Auch dies ist mehr ein „sthetisches Problem, da OMI-TOOL noch gesteuert werden kann, aber ich hoffe ich habe es - so weit es in die "Zust„ndigkeit" von OMI-TOOL f„llt - gel”st. 7.10. HILFEFUNKTIONEN Wenn OMI-TOOL bei Programmstart im Ordner mit der RSC-Datei eine Datei mit dem Namen OMI_TOOL.HLP findet, so l„dt es sie und aktiviert ggf. den Extrahilfemodus (wenn dies in der *.INF-Datei so vorgesehen ist). In diesem Modus wird bei jedem Punkt, der im Menue angeklickt wird, zun„chst in einer Dialogbox ein Hilfetext angezeigt. Die Dialogbox hat zwei Buttons, n„mlich "Abbruch" und "OK". Die angew„hlte Funktion wird nur dann ausgefhrt, wenn der "OK"-Button angeklickt wird. Wenn die Extrahilfe eingeschaltet ist, k”nnen auch Menuepunkte, die hell (also nicht anw„hlbar) im Menue dargestellt sind, ausgew„hlt werden. Allerdings nur ber ihr Tastaturkrzel (das hinter dem Eintrag steht). Es erscheint der zugeh”rige Hilfe- text. Die Funktion kann aber nicht ausgel”st werden, der OK- Button ist deaktiviert. Mit dem Eintrag "Extrahilfe" im Hilfe-Menue kann die Extrahilfe ein oder aus geschaltet werden. Wenn die Extrahilfe eingeschal- tet ist, so ist der Eintrag mit einem H„kchen markiert. Nach dem Anklicken des Menue-Eintrages erscheint eine kleine Dialogbox, in der die Extrahilfe entweder ein oder ausgeschaltet werden kann. Ein dritter Button (Abbruch) bel„žt die Einstellung so, wie sie ist. Wenn Extrahilfe aktiviert wird, obwohl keine Hilfetexte geladen wurden, so erscheint eine Fehlermeldung und ggf. anschliežend eine Fileselectbox, in der die Hilfedatei ausgew„hlt werden kann. Im Hilfe-Menue befindet sich der Eintrag "Kontrolltasten". Nach dem Anklicken erscheint eine šbersicht s„mtlicher Tastatur-Codes fr die einzelnen Menuepunkte. Diese šbersicht ist unabh„ngig von der Extrahilfe und wird mit einem Klick auf den OK-Button wieder verlassen. Die weiteren Eintr„ge im Hilfe-Menue enthalten jeweils einen kurzen Informationstext zu den einzelnen Menues. Diese sind jedoch nur dann aktivierbar, wenn die Hilfetexte (siehe Extrahil- fe) geladen worden sind. 8. MAKROS Obwohl OMI-TOOL ein GEM-Programm ist, ist die Bedienung etwas umst„ndlich. Wenn mensch es einmal begriffen hat, ist es zwar leicht nachzuvollziehen, aber es ist eben etwas umst„ndlich. Andererseits wollte ich die grunds„tzliche Bedienung nach der ersten Erprobungsphase aus verschiedenen Grnden auch nicht ver- „ndern. Deshalb bin ich auf die Idee gekommen, eine Makrover- waltung einzubauen. Damit l„žt sich die Bedienung vereinfachen. Es ist aber auch ein "vollautomatischer" Betrieb m”glich. Mit Makros l„žt sich alles, was ber Tastatur zu regeln ist, zu gr”žeren Einheiten zusammenfassen. Auch Warnboxen k”nnen im Rah- men der Makros gesteuert werden. Nur Dialogboxen lassen sich damit nicht bearbeiten. Makros k”nnen mit einem Recorder auf- genommen oder "von Hand" erstellt werden. Sie k”nnen sich gegen- seitig aufrufen und mit dem "Automakro" k”nnen gleich bei Pro- grammstart automatisch Dateien geladen und Funktionen ausgel”st werden. Es ist sogar m”glich, im Rahmen eines Makros eine neue Makroliste zu laden und auf diese im laufenden Makro zuzugreifen. Da OMI-TOOL leider nicht zu den schnellsten Programmen geh”rt, benutze ich die Makros auch dafr, automatisch einen Quelltext zu laden, diesen mit den verschiedenen Funktionen von OMI-TOOL zu analysieren und die Ergebnisse jeweils zu speichern. Diese kann ich mir dann sp„ter in einem Editor (oder auch in OMI-TOOL) ansehen. Die mehrfachen Wartezeiten auf die Ergebnisse des Pro- gramms werden zu einer Wartezeit zusammengefažt. W„hrend dieser Zeit kann ich anderes tun. Am Ende (und erst dann) wird per Makro die Glocke eingeschaltet und ich weiž, daž OMI-TOOL fertig ist. Bei grožen Programmen lohnt sich das. 8.1. MAKRO AUFNEHMEN Im Extra-Menue befindet sich der Punkt "Makro aufnehmen". Wird dieser angeklickt, so startet der Makrorecorder. Es werden s„mt- liche Tastatureingaben mitprotokolliert. Auch die Auswahl von Menuepunkten mit der Maus wird aufgenommen, wenn der Menuepunkt einen Tastaturcode hat (das ist bei allen in Frage kommenden Punkten der Fall). Wenn eine Fileselectbox erscheint, so wird von dem Makrorecorder der ausgew„hlte Dateiname (nicht jedoch das Laufwerk und der Pfad) aufgenommen. Bei Alertboxen wird protokolliert, mit welchem Button sie verlassen worden sind. Auch das Scrollen im Fenster wird aufgezeichnet, wenn es Zeile um Zeile (bzw. Spalte um Spalte) oder Seite fr Seite geschieht. Ebenso das Schliežen des Fensters. Werden Menuepunkte angew„hlt, die keinen Tastaturcode haben (die Copyright-Box und die Hilfefunktionen), dann werden diese bei der Aufnahme einfach weggelassen. Ebenso werden s„mtliche Einga- ben in Dialogboxen weggelassen. Wenn "Extrahilfe" aktiviert ist, wird auch nicht aufgenommen, wie die Hilfebox verlassen worden ist. Wenn w„hrend der Makroaufnahme ein anderes Makro abgespielt wird, so wird nur der Aufruf dieses Makros, nicht jedoch sein Inhalt aufgenommen. So lassen sich Makros beliebig schachteln. W„hrend der Makroaufnahme sind "Neustart" und "Programm beenden" gesperrt. Der Grund dafr drfte einleuchtend sein. Wenn die Aufnahme beendet werden soll, so gibt es dafr "Makroaufnahme beenden" im Extra-Menue. Dieser Aufruf wird natr- lich nicht mit aufgenommen. Es erscheint eine Dialogbox, in der festgelegt werden kann, auf welche Taste das aufgenommene Makro gelegt werden soll. Zur Kontrolle wird es auch angezeigt. Die Aufnahme kann auch verworfen oder fortgesetzt werden. Wenn das Makro l„nger als 50 Zeichen wird (was NICHT 50 Befehlen entspricht), so wird es zwangsweise beendet. Es erscheint dann eine Warnmeldung und die oben beschriebene Dialogbox. Die Option "Aufnahme fortsetzen" l„žt sich dann allerdings nicht anw„hlen. Das Aufzeichnungsformat der Makros ist im Abschnitt 8.4. "Makrobox" beschrieben. 8.2. MAKRO ABSPIELEN Jedem Makro ist eine Funktionstaste zugeordnet. Es k”nnen also 10 Makros zugleich definiert sein. Abgespielt werden sie durch einen Druck auf die entsprechende Taste. Wird eine Funktionsta- ste gedrckt ohne daž ihr ein Makro zugeordnet ist, passiert gar nichts. Wenn ein Makro aufgerufen wurde, so werden nacheinan- der die entsprechenden Tastendrcke in der Ereignisverwaltung simuliert. Wenn sich Befehle beim Abspielen des Makros nicht ausfhren lassen (z.B. "Ergebnis ausgeben" obwohl gar kein Ergeb- nis vorhanden ist) so werden sie bergangen. Wenn im Rahmen eines Makros eine Fileselectbox oder eine Warnmel- dung erscheint, so wird dies (auf dem Bildschirm) bergangen, wenn das Makro einen Dateinamen bzw. einen Button zum Verlassen der Warnmeldung enth„lt. Ist dies nicht der Fall, so werden beide wie Dialogboxen behandelt. Wenn im Rahmen des Makros Dialogboxen aufgerufen werden, so wird die Ausfhrung unterbrochen. In der Dialogbox k”nnen beliebige Einstellungen vorgenommen werden. Wenn die Dialogbox verlassen wird, wird die Ausfhrung des Makros fortgesetzt. Wenn ein Makro einen weiteren Makroaufruf enth„lt, so wird dieser Aufruf erst in dem Moment, in dem dieser Makroaufruf abgearbeitet werden soll, analysiert. Der Makroaufruf wird dann durch das Makro selber ersetzt (Im Gegensatz zur Aufnahme von Makros ist das Abspielen von Makros in der L„nge nicht begrenzt. Es ist m”glich, Endlosschleifen zu produzieren). Was passiert, wenn die Makrobox im Verlauf eines Makros aufgeru- fen und dann durch Aufruf eines weiteren Makros verlassen wird, habe ich nicht ausprobiert. Vermutlich wird das neu aufgerufene Makro eingeschoben, also zuerst ausgefhrt und dann mit der Ausfhrung des alten Makros fortgefahren. Der Ablauf eines Makros kann durch Drcken von UNDO unterbrochen werden. Eventuell muž die Taste l„nger gedrckt gehalten werden, da dies nicht st„ndig abgefragt wird. Fr das Abspielen von Makros ist es Empfehlenswert, aber nicht notwendig, die Extrahilfe und die Glocke auszuschalten. 8.3. MAKROBOX UND SYNTAX DER MAKROS Die Makrobox stellt eine šbersicht ber die vorhandenen Makros dar. Sie k”nnen hier editiert und auch aufgerufen werden. Eben- falls k”nnen sie geladen und gespeichert werden. An der linken Seite befinden sich 10 Buttons. Damit k”nnen die jeweiligen Makros abgespielt werden. Die Makrobox wird dadurch verlassen. Daneben sind die einzelnen Makros aufgefhrt und k”nnen editiert werden. Es gilt folgende Syntax: Jeder Befehl setzt sich aus zwei Zeichen zusammen. Das erste Zeichen gibt den Status der Sondertasten an, das zweite Zeichen die Taste. Die Sondertasten werden wie folgt dargestellt: ^ = Kontrolltaste. ~ = Alternatetaste. . = keine Sondertaste gedrckt. Das zweite Zeichen drfte klar sein. Als Ged„chnissttze ist es mit dem Button "Hilfe" m”glich, eine Liste s„mtlicher Tastaturco- des aufzurufen. Aužerdem gibt es einige Sonderf„lle: Ax = An dieser Stelle erscheint eine Warnmeldung, fr die vorgegeben ist, mit welchem Button sie beantwortet wird. "x" kann also den Wert 1, 2 oder 3 haben. Fx = Funktionstaste. Im Rahmen des Makros wird ein weiteres Makro aufgerufen. "x" kann dabei einen Wert zwischen 0 und 9 haben (Null steht fr die Funktionstaste Nummer 10, damit das zweistellige Format nicht verletzt wird). CR = Returntaste. Damit wird bestimmt, daž eine Warnmeldung mit dem Default-Button verlassen wird. Auch im Zusam- menhang mit dem Automakro ist dies von Bedeutung (siehe dort). || = (zwei senkrechte Striche; auf der Tastatur rechts ne- ben der RETURN-Taste in Verbindung mit Shift zu errei- chen) Wenn bei der Ausfhrung des Makros an dieser Stelle eine Fileselectbox erscheint, so wird automa- tisch der vorgegebene Dateiname bernommen. | = (ein senkrechter Strich) die nachfolgenden Zeichen sind keine Makrobefehle, sondern ein Dateiname. Wenn bei der Ausfhrung des Makros an dieser Stelle eine Fileselectbox erscheint, so wird automatisch der Da- teiname bernommen, der nach dem Strich folgt. In dem Dateinamen steht jeder Buchstabe fr sich selbst. Durch einen weiteren senkrechten Strich wird der Name beendet. zwei Pfeile aufw„rts: (ASCII-Wert 1) entspricht Clr/Home. zwei Pfeile abw„rts: (ASCII-Wert 2) entspricht Shift-Clr/Ho- me. Wenn es w„hrend des Makroablaufes zu einer Fehlermeldung kommt (z.B. weil die vorgegebene Datei gar nicht vorhanden ist), so wird das Makro nach Best„tigung dieser Meldung fortgesetzt. H„ufig wird dies dann keinen Sinn mehr haben oder sogar zu weiteren Fehlern fhren. Das Makro kann dann durch Drcken der UNDO-Taste abgebrochen werden. Wenn ein Makro abgespielt wird, das nicht der beschriebenen Syntax entspricht, so wird es an der fehlerhaften Stelle so lange von vorne gekrzt, bis ein korrekter Befehl vorgefunden wird. 8.4. AUTOMAKRO In der Makrobox kann bestimmt werden, daž direkt nach dem Programmstart automatisch das Makro F10 ausgefhrt werden soll. Dazu muž diese Einstellung gespeichert werden, was in der *.INF- Datei geschieht, also in der "Standards"-Box. Damit das Makro tats„chlich automatisch ausgefhrt wird, muž beim n„chsten Pro- grammstart die betreffende *.INF-Datei geladen werden und es muž das Makro vorhanden sein. Dies geht nur dann, wenn es in der Datei OMI_TOOL.MAK im selben Ordner wie die *.INF-Datei abgespei- chert wird. Wenn das Automakro beim Programmstart einmal nicht abgespielt werden soll, obwohl es aktiviert ist, so kann es durch Drcken der Kontrolltaste unterdrckt werden. Der Status der Kontrollta- ste wird abgefragt, wenn s„mtliche Standard-Ladeversuche von OMI-TOOL (siehe Programmstart, Kapitel 2) abgeschlossen sind. Wenn das Automakro als erstes ein "CR" enth„lt, so wird das Erscheinen der Copyright-Meldung bei Programmstart unterdrckt. Wenn das Automakro aktiviert ist und gleichzeitig eine Kommando- zeile vorhanden ist, dann l„uft das Programm in folgender Reihen- folge: 1. Es wird berprft, ob das Automakro mit "CR" beginnt. Davon h„ngt ab, ob die Copyright-Meldung erscheint. 2. Durch die Kommandozeile wird der Befehl "Datei laden" ausge- fhrt, was ohne Makro zum Erscheinen der Fileselectbox fhrt, in der Pfad und der Dateiname aus der Kommandozeile vorgegeben ist. 3. Durch das Automakro kann der weitere Verlauf ver„ndert werden: - "||" fhrt dazu, daž der Dateiname aus der Kommandozei- le bernommen wird. Die Fileselectbox erscheint nicht, die Datei wird geladen. - "||" bernimmt zwar den Pfad aus der Komman- dozeile, der Name wird jedoch vom Automakro bestimmt. Die Fileselectbox erscheint nicht, die Datei wird gela- den. - Wenn das Automakro mit irgendeinem anderen (gltigen oder ungltigen) Zeichen fortgesetzt wird, so er- scheint die Fileselectbox und der Dateiname aus der Kommandozeile ist voreingestellt. Wenn die Box mit "OK" verlassen wird, so wird die ausgew„hlte Datei geladen. Anschliežend wird das Automakro fortgesetzt. In Verbindung mit der Kommandozeile sollte deshalb "Datei laden" vermieden werden. Das Automakro "CR^L||..." fhrt z.B. dazu, daž die durch die Kommandozeile geladene Datei anschliežend sofort noch einmal geladen wird. 8.5. MAKROS LADEN UND SPEICHERN Durch den entsprechenden Eintrag im Extra-Menue oder den Button in der Makrobox kann eine Makroliste geladen oder gespeichert werden. Die Makros liegen nach dem Laden natrlich auf den selben Funktionstasten, auf der sie beim Speichern gelegen ha- ben. Es ist nicht m”glich, nur einzelne Makros neu zu laden. Wenn sie unter dem Namen OMI_TOOL.MAK im selben Ordner wie die *.INF-Datei abgelegt werden, so werden sie beim n„chsten Pro- grammstart automatisch geladen. Die Einstellung "Automakro ein/aus" wird NICHT in der Makrodatei, sondern in der *.INF- Datei festgehalten. 9. WAS AUžERDEM NOCH WICHTIG IST 9.1. ANMERKUNGEN ZUM SINNVOLLEN ARBEITEN MIT OMI-TOOL Mit Ausnahme der Funktion zum Konvertieren der Headerdateien und der Schleifenfunktion ist OMI-TOOL nur fr ein weitgehend fertig- gestelltes Programm sinnvoll nutzbar. Dann sind aber auch viele Fehler schon gemacht, die sich kaum noch beheben lassen, auch mit OMI-TOOl nicht. Wer als Programmierstil den berchtigten Spaghetti-Code und viel- leicht noch viele Variablen und Prozedurnamen mit wenig aussage- kr„ftigen Namen benutzt, wird auch mit OMI-TOOL kaum noch einen guten šberblick ber sein Programm (zurck) gewinnen. Variablen und Prozeduren sollten deshalb Namen haben, die ihre Funktion m”glichst eindeutig kennzeichnen. Im Interesse der Pflege der Schreibfaulheit (und der šbersicht) sollten die Namen jedoch nicht zu lang sein. Bei mir hat sich fr die Programmstrukturen (z.B. auch bei OMI-TOOL) folgendes Vorgehen bew„hrt: 1. Das Programm besteht aus einem kurzen Hauptprogramm, das alle Grundeinstellungen bernimmt und in die zen- trale Event-Multi-Schleife mndet. 2. Der Rest des Programms ist in Prozeduren eingeteilt. 3. Die Prozeduren erhalten einen Namen der sich aus (mindestens) zwei Teilen zusammensetzt: Er beginnt mit einer 3-buchstabigen Kennzeichnung des groben Programm- moduls. Alle Programme, die mit der Fensterverwaltung zu tun haben, beginnen bei mir z.B. mit "Fen_" (z.B. Fen_Open, Fen_Move); so lassen sich nachtr„glich auch noch leicht einzelne Routinen ver„ndern. 4. GOTO-, GOSUB-Befehle und Labels werden nur dort verwen- det, wo es unbedingt sein muž: Fr ON ERROR GOTO etc., auf keinen Fall jedoch innerhalb von Prozeduren oder Funktionen. 5. Variablen werden - wenn m”glich - lokal definiert. Nur solche Variablen, die an verschiedenen Orten des Pro- gramms verwendet werden mssen, oder die eine Program- meinstellung enthalten, die nicht verloren gehen darf (z.B. die Fensterkoordinaten), werden global definiert. 6. Eine globale Variable wird als Schalter fr alle m”gli- chen Funktion benutzt. Bei mir heižt diese Variable Status%L. In ihr hat jedes einzelne Bit eine eigene Aufgabe (z.B. Wahl der Schriftart, der Textgr”že, Fen- ster ge”ffnet?). Fr die Funktion der einzelnen Bits habe ich eine Liste. Die Fehlerroutine gibt den aktuel- len Wert der Status-Variable immer mit aus. So l„žt sich die Einstellung des Programms bei Fehlern schnell rekonstruieren. 7. Globale Variablen mssen aussagekr„ftige Namen haben. Z.B ist Fen_X fr die Bezeichnung einer Fensterkoor- dinate eindeutiger als einfach nur X. Entsprechend gibt es die Variable Box_X fr Dialogboxen. 8. Lange Schleifen mit vielen Verschachtelungen werden - wegen der šbersicht - von m”glichst vielen Funktionen entlastet. Die Event-Multi-Schleife ruft bei mir z.B. jeweils eigene Prozeduren zur Auswertung von Tasta- turereignissen, Menueereignissen, Messages usw. auf. Auch dadurch steigt die šbersicht eines Programms. 9. Wenn irgend etwas in einem Programm mindestens zweimal an verschiedenen Orten gemacht werden muž, so wird es in eine eigene Prozedur oder Funktion ausgelagert. Neben der Programmoptimierung ist OMI-TOOL auch fr die Dokumen- tation von fertigen Programmen geeignet. So lassen sich z.B. šbersichten ber verwendete Prozeduren mit OMI-TOOL erzeugen und mit einer Textverarbeitung Kommentare zu den notwendigen Parame- tern usw. erg„nzen. Die einzelnen Programmfunktionen brauchen - bei gr”žeren Quell- texten - zum Teil einige Zeit. Die Konvertierungs- und Listen- funktionen verhalten sich beim Zeitverbrauch in etwa proportio- nal zur Gr”že des Quelltextes. Fr die Referenzfunktionen trifft dies nicht zu. Bei ihnen h„ngt der Zeitverbrauch von der Quell- textl„nge und von der Zahl der Prozeduren bzw. Variablen ab, was normalerweise zu einer exponentialen Steigerung fhrt. 9.2. ZUR INTERNEN ARBEITSWEISE VON OMI-TOOL OMI-TOOL verwaltet fnf Felder: Den Quelltext, den Ergebnistext, die Prozedurliste (mit Anfangs- und Endzeile, lokalen Variablen, Rckgabeparametern und Zahl der Aufrufe), die Variablenliste und die Konstantenliste. Der in das Quelltext-Feld geladene Text wird danach nicht mehr ver„ndert - aužer durch das Laden eines neuen Quelltextes. Die Suchen-und-Ersetzen-Funktion durchsucht den Quelltext Zeile fr Zeile nach dem Vorkommen der eingestellten Zeichenkette. Wenn diese gefunden wird, so wird zun„chst untersucht, ob es sich um eine Kommentarzeile handelt. Wenn dies nicht der Fall ist, dann wird geprft, ob sich die Fundstelle zwischen zwei Anfhrungszeichen befindet. Wenn auch dies nicht der Fall ist, dann wird die alte Zeichenkette durch die neue Zeichenkette ersetzt. Sowohl der REM-Killer als auch die Header-Funktion basieren im wesentlichen auf den Routinen der Suchen-Ersetzen-Funktion. Nur wird jeweils eine bestimmte Zeichenkette als Suchstring vom Programm selber vorgegeben. Im Falle des REM-Killers werden anschliežend darber hinaus in jeder Zeile s„mtliche Leerzeichen auf der rechten Seite gel”scht. Alle Zeilen, die dann leer sind, werden nicht in das Ergebnisfeld bertragen. Auch die Funktion "Prozeduren listen" und "Variablen listen" basieren im wesentlichen auf einer Suchroutine, die jeweils Zeile fr Zeile den Quelltext durchsucht. Im Falle von "Prozeduren listen" wird dabei nach "DEF " bzw. "-" (nur am Zeilenanfang) gesucht. Alles Nachfolgende wird bis zum Beginn eines Kommentares oder einen Doppelpunkt, der nicht zwischen zwei Anfhrungszeichen steht, als Prozedurname verstanden. Ein Klammerausdruck wird nach Kommas durchsucht. Die Kommas zeigen jeweils den Beginn eines neuen Parameters an (verschiedene Klam- merebenen werden bercksichtigt). Wenn Variablen gesucht werden, so durchsucht OMI-TOOL den Quelltext nach grožen Buchstaben vor denen keine grožen Buchstaben stehen (Befehle) und denen kleine Buchstaben ohne Leerzeichen folgen. Wenn eine solche Kombination gefunden wird, so wird sie so lange verl„ngert, bis ein "%", ein "!" oder ein "$" folgt. Dies wird als Ende des Variablennamens betrachtet. Wenn kein solches Zeichen am Ende steht, handelt es sich um einen Prozeduraufruf. Funktionen k”nnen daran unterschie- den werden, daž vor ihnen ein "FN " steht. Wenn zwischendurch Leerzeichen oder mehrere Grožbuchstaben hintereinander oder ein Doppelpunkt oder eine Klammer folgt, so wird die vorliegende Zeichenkette nicht als Variable betrachtet. Dies ist auch dann der Fall, wenn die Zeichenkette als Variable erkannt wurde, dieselbe Zeichenkette jedoch auch in der Liste der lokalen Variablen, die fr diese Zeile gltig ist, enthalten ist. Dies ist der Grund dafr, daž die Prozedurliste eine Voraussetzung fr die Variablenliste ist. Die jeweils gefundenen Prozeduren bzw. Variablen werden in je- weils ein Feld eingetragen. Bei Prozeduren werden dann in einem zweiten Suchlauf die weiteren Daten gesucht. Bei Variablen wer- den diese zun„chst alphabetisch sortiert. Dann werden alle Doppelungen entfernt. Es sollte am Ende jeder Variablenname einmal brig bleiben. Dann wird der Quelltext noch einmal durch- sucht. Diesmal nach der Zeichenkette "DIM ". Die Zeilen, die diese Kette enthalten, werden gesammelt. Beim Sortieren der Variablen wird aužerdem die Statistik angelegt, die am Ende der Variablenliste erscheint. Die Liste der lokalen Variablen (und auch der Rckgabeparameter) wird im Prinzip schon mit der Prozedurliste zusammen angelegt. Wenn die Prozedurliste schon vorhanden ist, so muž "nur noch" fr jede Prozedur fr jede lokale Variable geprft werden, wie oft sie aufgerufen wird. Die Referenzfunktionen basieren ebenfalls auf der Such-Routine. Prozedur fr Prozedur bzw. Variable fr Variable wird als Such- string vorgegeben und der gesamte Text danach durchsucht. Wenn die Routine fndig ist, werden die n„heren Umst„nde geprft (Kommentarzeile, zwischen Anfhrungszeichen, gleiche Zahl Parame- ter in den Klammern etc.). Auch die Schleifenfunktion ist eine Suchroutine. Sie arbeitet jedoch mit einem etwas anderen Prinzip. Sie geht n„mlich Zeile fr Zeile durch den Quelltext und sucht jeweils nach allen Suchw”rtern. Wenn eines der Suchworte in der Zeile vorhanden ist, so wird die Zeile in den Ergebnistextspeicher bertragen. 9.3. WAS AUžERDEM NOCH WICHTIG IST OMI-TOOL wird bei Bedarf weiter entwickelt werden. Zentral ist die Ausbesserung von Fehlern, eine Beschleunidgung der einzelnen Funktionen und eine Verkrzung des Programms. Ob es noch grunds„tzlich neue Funktionen in zuknftigen OMI- TOOL-Versionen geben wird, ist noch nicht sicher. Dies h„ngt von meinen pers”nlichen Bedrfnissen ab. Vielleicht baue ich eine Funktion zum Heraustrennen nicht genutzter Routinen ein, da der Compiler diese zwar reklamiert, aber trotzdem mit bersetzt. Bei gr”žerer Resonanz w„re ich auch bereit, die Wnsche anderer AnwenderInnen zu bercksichtigen. Ausgeschlossen ist eine Anpas- sung von OMI-TOOL an andere Programmiersprachen oder GFA-Basic, da ich selber ausschliežlich mit OMIKRON.BASIC programmiere. Zu OMI-TOOL geh”rt immer eine Datei mit dem Namen READ_ME.OMI. Sie enth„lt verschiedene Informationen: 1. die aktuelle Versionsnummer und aktuelle Ver„nderungen des Programms, da ich keine Lust habe, diese Anleitung st„ndig zu aktualisieren; 2. bekannte Programmfehler, die ich noch nicht korrigiert habe (kommt natrlich nur fr kleine Fehler in Frage, die keine Daten gef„hrden); 3. die von SAGROTAN ermittelten Daten ber OMI_TOOL.PRG und MANI_OMI.TOS sowie die Gr”že der RSC- und HLP- Datei, damit jedeR, der OMI-TOOL erh„lt, berprfen kann, ob das Programm durch irgendwelche Link-Viren verseucht worden ist. Dazu muž nur OMI-TOOL mit SAGRO- TAN berprft werden. SAGROTAN gibt die Programmdaten dann auf dem Bildschirm aus. Zum Abschluž m”chte ich noch meine Hoffnung kundtun, daž OMI- TOOL fr m”glichst viele ProgrammiererInnen ein brauchbares In- strument zur Verbesserung ihrer Programme ist. šber Rckmeldun- gen und Anregungen wrde ich mich sehr freuen. šber Hinweise auf Fehler freue ich mich zwar nicht, werde sie aber natrlich so weit ich kann ausbessern.