SIGNUM-Shell spart Klickarbeit: So wird das Desktop arbeitslos!

Welcher SIGNUM!-Besitzer erinnert sich nicht an die frustbeladenen Sekunden (Minuten, Stunden...?), in denen er mit hektischem linken Zeigefinger auf seinem kleinen Krabbeltierchen herumhackte, nur um den blöden Kommafehler zu korrigieren, der sich in Tante Emma’s Schnorrerbrief eingeschlichen hatte (SIGNUM! verlassen, Druckprogramm aufrufen, Drucken, Fehler entdecken, Ärger, Druckprogramm verlassen, SIGNUM! aufrufen....)?

Das Problem bei dieser Prozedur ist das GEM, welches schier unendlich lange braucht, seine Fenster aufzubauen, und nicht zuletzt der User selbst, der in seiner Hektik das gewünschte Programm natürlich nicht sofort findet.

Es gibt nun zwei Möglichkeiten, diesen Vorgang zu beschleunigen. Die eine davon wird schon seit Jahren auf Rechnern der Weltmarke mit den drei Buchstaben benutzt (sog. Command Line Interpreter: MS-DOS, just say No!), entspricht aber nicht mehr ganz den Möglichkeiten moderner Hard-und Software. Wir haben uns daher für die zweite Alternative entschieden, eine Art Desktop ohne Fenster. Die einzelnen Programmteile werden dabei bequem und schnell über Pull-Down-Menüs oder sogar über einen simplen Tastendruck (UNIX läßt grüßen...) aufgerufen. Einfacher geht’s nicht mehr!!

Das ganze haben wir in GfA-Basic realisiert. Im Prinzip eignet sich dazu jede Sprache, die den Aufruf von GEM-und TOS-Routinen erlaubt, gerade in GfA-Basic ist das jedoch besonders einfach. Das Programm sollte aber auf jeden Fall compiliert werden, da der Interpreter mit dem Ein- und Ausschalten der Maus und der Menüleiste seine Probleme hat.

Nun zum eigentlichen Programm.

Mit RESERVE 50000 werden für den Manager 50000 Bytes an Arbeitsspeicher reserviert, der Rest wird ans GEMDOS zurückgegeben und steht den danach aufgerufenen Programmen zur Verfügung.

Nach dem Aufbau der Menüzeile in der Prozedur Init_menu werden mittels On Menu (Key) zwei Prozeduren festgelegt, die bei der Auswahl eines Menüpunktes bzw. eines Tastendrucks angesprungen werden. Die Prozedur Menu_bestimmen übergibt an Select_item den Index des gewählten Menüpunktes, während Key_bestimmen den ASCII-Code der gedrückten Taste (niederwertiges Byte von Menu (14)) ermittelt und eventuell Kleinbuchstaben konvertiert.

In Select_item wird dann der gewählte Befehl ausgeführt. Wenn man die bei Menu% und Code% auftretenden Zahlen vergleicht, könnte man meinen, daß eine Variable auch genügen würde. Dabei treten jedoch Probleme auf, wenn man Programme mit Control-Codes (z. B. in einer erweiterten Version des Managers) aufrufen möchte, da diese als ASCII-Zeichen im Bereich von 1 bis 26 liegen.

Zum Ausfuhren von Programmen wird die Prozedur Programm_starten aufgerufen, deren Parameter wir vielleicht etwas genauer erläutern sollten: Der erste gibt die Nummer des Laufwerks an, auf welchem sich das zu startende Programm befindet (A=1, B=2 etc.), der zweite den Suchpfad (kann auch ein Leerstring sein) und der dritte endlich den Programmnamen. Reichlich kompliziert bis behämmert, könnte man meinen. Aber dann hat man die Rechnung ohne den Wirt (GEMDOS) gemacht: Dieses läßt bei einem simplen Programmaufruf mit Exec den aktuellen Suchpfad samt Laufwerk unbehelligt, worauf das aufgerufene Programm seine Resourcedatei o. ä. zwar sucht (in dem Ordner, aus dem der Manager gestartet würde), aber niemals findet. Um der dann (hoffentlich) erscheinenden Fehlermeldung (sengt hat der geheimnisvolle Bombenleger wieder einmal zugeschlagen) auszuweichen, legt man entweder alle Resourcedateien in denselben Ordner wie den Manager (scheußlich...) oder aber ändert den aktuellen Pfad mittels Chdrive und Chdir.

Nun aber zum Kern des Ganzen, dem Befehl ’Exec modus, name, command line, environment string’. Mit diesem (GEMDOS-) Befehl kann ein Programm ein anderes quasi als „Unterprogramm“ ablaufen lassen. Uns interessiert nur der Aufruf mit Exec 0,..., die „load and go“-Option. Damit wird ein Programm geladen, gestartet und nach dessen Ende das aufgerufende Programm weitergeführt. Auf command line und environment string kann man im Normalfall verzichten (= > Übergabe von Leerstrings).

Es ist nun aber nicht anzunehmen, daß man nur noch mit SIGNUM! arbeitet (so gut das Programm auch sein mag). Daher erscheint beim Anwählen von ”,Programm starten“ eine Fileselectorbox, in der man bieder ein Programm auswählen und starten kann. In der Version 2.02 des GfA-Basic traten aber (im Gegensatz zur Version 2.0) Probleme beim Erkennen einer Laufwerkänderung in dieser Box auf, GEMDOS erkannte sie nicht mehr und wir mußten daher das aktuelle Laufwerk etwas unschön herausfiltern (sonst: Aktuelles_laufwerk% = Gemdos(25)+1).

Das direkte Starten von SIGNUM! ist aber nicht das Ende der Fahnenstange. Man könnte (so wie wir) noch weitere oft benötigte Programme, z. B. GfA-Basic, Wordplus etc., in den Manager einbinden. Es ist aber aus praktischen Gründen ratsam, zumindest eine Ramdisk. am besten aber eine Harddisk zu benutzen. Dann steht der Entmachtung des Desktop nichts mehr im Wege!

' ***************************************************
' *                                                 *
' *  Titel:   Desktop-Manager                       *
' *  Autor:   Martin Wunderli & Patrick Seemann     *
' *           Eschenweg 7       Landstraße 122      *
' *           CH-8057 Zürich    CH-5430 Wettingen   *
' *  Sprache: GfA Basic Version 2.02                *
' *  Datum:   18.10.1987                            *
' *                                                 *
' *  ST-Computer 12/87                              *
' ***************************************************
'
' Initialisierung:
'
Reserve 50000
@Desktop_loeschen
@Init_menu
'
' Hauptprogrammschleife:
'
Do
    On Menu 
Loop
'
'
Procedure Init_menu 
    '
    Local I%
    '
    ' Globale Variablen:
    ' ==================
    ' Titel$()
    '
    Dim Titel$(21)
    For I%=0 To 21
        Read Titel$(I%)
    Next I%
    Data Desk , Info SIGNUM!-Manager
    Data ----------------------------
    Data 1.2.3,4.5,6,""
    '
    Data  File,  Programm starten... R ,--------------------------, Zum Desktop Q,""
    Data Signum!, Editiere Text...  S   , Drucke Text   ... P
    Data -------------------------------,   Bearbeite Zeichensatz... Z, "" 
    Data ""
    '
    Menu Titel$()
    On Menu Gosub Menu_bestimmen 
    On Menu Key Gosub Key_bestimmen 
Return ! Init_menu
'
'
Procedure Key_bestimmen 
    '
    Local Code%
    '
    Code%=Menu(14) Mod 256 
    @Select_item(0,Code%+32*(Code%>93))
Return ! Key_bestimmen
'
'
Procedure Menu_bestimmen 
    @Select_item(Menu(0),0)
Return ! Menu_bestimmen
'
'
Procedure Select_item(Menu%,Code%)
    Menu Off 
    Menu Kill
    '
    ' Nummer des Menüeintrages oder ASCII-Code 
    ' der gedrückten Taste:
    '
    If Menu%=1 Or Code%=73 Then 
        @Info 
    Endif
    If Menu%=11 Or Code%=82 Then ! R 
        @Programm_auswaehlen 
    Endif
    If Menu%=13 Or Code%=81 Then ! Q 
        End 
    Endif
    If Menu%=16 Or Code%=83 Then ! S 
        @Programm_starten(l,"\SIGNUM", "SIGNUM.PRG")
    Endif
    If Menu%=17 Or Code%=80 Then ! P 
        @Programm_starten(1,"\SIGNUM”,"PR24N.PRG ")
    Endif
    If Menu%=19 Or Code%=90 Then ! Z 
        @Programm_starten(1, ASIGNUM","DCS24N.PRG")
    Endif
    '
    @Desktop_loeschen 
    '
    Menu Titel$()
    On Menu Gosub Menu_bestimmen 
    On Menu Key Gosub Key_bestimmen 
Return ! Select_item
'
'
Procedure Info 
    '
    Local Entscheid%
    '
    Alert 0," Desktop-Manager| (c) 1987 ST-Computer | Martin Wunderli| & Patrick Seemann",1," Fein! ”,Entscheid% 
Return ! Info
'
'
Procedure Programm_starten(Drive%,Pfad$,Name$)
    '
    ' Name zeigen
    '
    Deffill 1,0,0 
    Pbox 0,0,639,18
    Text (40-Len(Name$+" wird geladen")/2)*8,15,Name$+" wird geladen” 
    Hidem
    Chdrive Drive% 
    Chdir Pfad$
    Exec 0,Name$,"",""
    Showm
Return ! Programm_starten
'
'
Procedure Programm_auswaehlen 
    '
    Local Name$
    Local Aktuelles_laufwerk%,Zaehler%
    '
    Fileselect "\*.*","",Name$
    If Name$<>'" Then 
        Zaehler%=Len(Name$)
        While Zaehler%>0 And Mid$(Name$,Zaehler%,1)<>”\” 
            Dec Zaehler% 
        Wend
        If Left$(Name$)<>"\" Then 
            Aktuelles_laufwerk%=Asc(Left$(Name$))-64 
        Else
            Aktuelles_laufwerk%=Gemdos(25)+1 
        Endif
        @Programm_starten(Aktuelles_laufwerk%,Mid$(Name$, 3, Zaehler%-3),Right$(Name$,Len(Name$)-Zaehler%)) 
    Endif
Return ! Programm_auswaehlen
'
'
Procedure Desktop_loeschen 
    Vsync
    Deffill 1,2,4 
    Pbox 0,0,639,399 
Return ! Desktop_loeschen


Patrick Seemann, Martin Wunderli



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]