PassThru
========

postcardWare. Entwickelt mit Pure C 1.1 und
- bis einschl. V2.7 mit der Easy-Library  von  Dr.Grothmann;
  dannach nur noch mit Auszgen daraus.
- den Regular-Expression-Routinen von Henry Spencer (regexp).
- bis Version 2.6 mit den Cookie-Routinen von Arnd Beissner.
- ab Version 2.6 mit der Enhanced GEM Library von Christian Grunenberg.

(c) 1993,94 Florian Erhard, Lerchenfeldstr.8, 80538 Mnchen
            e-mail: Florian_Erhard@m4.maus.de
erfolgreich getestet auf
- 1040ST, 3MB, TOS1.04/Mag!X, Festplatte.
- MSTE, TOS2.06, ESCREEN+ (PassThru 2.4)

History:
11. 9.93 Erste Version verffentlicht.
25. 9.93 V1.1.  neu:   Wildcards   (*,?)   und   Pfadwechsel,   optional
         Komplettpfadbergabe.
28. 9.93 V1.2. braucht nur noch (weniger) statischen Speicher. Versucht
         Fehler in xtension.dat abzufangen. Kommentare  in  xtension.dat
         Kurzversion angeboten.
17.11.93 V1.21 Bugfixes    (Thanx    to    Marcel    Sieling!).    Reine
         Kommentarzeilen in xtension.dat ermglicht. Kurzversion von
         PassThru wieder  aufgegeben.
18.11.93 V2.0 neu   berarbeitet:   PassThru   vergleicht   nicht   nur
         Extensions, sondern den kompletten Dateinamen. Zustzlich zum
         bekannten wildcard-System, werden nun auch  regulre  Ausdrcke
         verstanden (Routinen von Henry Spencer)
25.12.93 V2.1 Bugfixes (jetzt luft's wieder). Anpassung an  Mag!X  (und
         andere Multitasking-Systeme?) Wiedermal: Danke  an  Marcel  fr
         die Untersttzung bezgl. Mag!X.
18.01.94 V2.2 Luft nun korrekt unter Mag!X. Untersttzt LedPanel von
         Christoph Zwerschke.
28.02.94 V2.3 Kleinere Verbesserungen:  Warten, solange eine Sondertaste
         gedrckt ist. Mausklick beendet Warten nun auch.
16.03.94 V2.4 Endlich Caps-Lock-Bug behoben.  Die Sondertasten sind  nun
         kombinierbar. (-> Format von xtension.dat gendert!)
08.04.94 V2.5  Neue Alternative: Das angegebene  Programm wird gestartet
         *egal*  welche  Sondertaste gedrckt ist. (Anregung von Philipp
         Frank  - Danke!) bersichtlicher: Gelten mehrere Extensions fr
         eine Applikation, knnen diese in eine Zeile geschrieben werden.
         (Achtung: nderung in .dat! Siehe unten...)
20.05.94 V2.6  Beschrnkung  auf  15  Dateimasken  pro  logischer Zeile
         aufgehoben. Bei der Angabe der Dateimasken kann jetzt zustzlich
         zu * und ? eine Zeichenliste, eingeschlossen in eckige Klammern []
         angegeben werden.
24.08.94 V2.7  Fehlermeldungen in GEM-Flydials.  AV-Protokoll wird jetzt
         untersttzt. Getestet mit ST-Guide als Accessory. Bugfix: Pfade
         im Argument funktionieren jetzt.
06.09.94 V2.71 Easy und Enhanced GEM bissen sich. Nun gehrt das VDI
         Enhanced GEM ganz allein: Keine Probleme mit NVDI mehr.
         Bei GEM-Programmen blieb die Menzeile leer: Behoben.
         Danke an Philipp Frank!

Gleich  vorweg:  Die  Grundidee  zu diesem Programm ist eiskalt geklaut.
Und zwar von John Eidsvoog und seinem Programm APPLIER.
Warum  ich  dann  ein eigenes schreibe? Weil meins besser ist! Inwiefern
besser? Kommt gleich nach der Installationsanleitung...

Fr die eiligen - die Installation:
Kopieren Sie PASSTHRU.PRG in ein beliebiges Verzeichnis.
Kopieren Sie XTENSION.DAT nach C:\
Melden Sie PASSTHRU.PRG per Desktop als GEM-Anwendung auf * an.
oder: fgen Sie die Zeile
#G 03 04   [Pfad]\PASSTHRU.PRG@ *.*@
_vor_ die Zeilen mit "*.[ausfhrbare Extension]@ @" in DESKTOP.INF ein.

Programmbeschreibung:

Bestimmte   Anwendungen   (wie  z.B.  Packer)  kann  man  auf  bestimmte
Dateitypen  (z.B.  Archive)  anmelden.  Soweit so gut. Allerdings bietet
das  normale  TOS  (zumindest mein 1.04) keine Mglichkeit der Anwendung
zustzlich  zum  Dateinamen  auch  Aufrufparameter  zu  bergeben.  John
Eidsvoog  hat  das  erkannt  und  Abhilfe  geschaffen. Er entwickelte im
Prinzip  ein  Programm, da vom TOS fr viele Dateiextensions aufgerufen
wird.  Am  besten gleich fr alle, also *.* Das Programm sucht sich dann
aus  einer eigenen Liste die passende Anwendung samt passender Parameter
herraus  und fhrt den Aufruf durch. Als aktuelles Verzeichnis kann dann
zwischen working- und home-directory gewhlt werden.

Ich konnte den APPLIER allerdings  nicht  dazu  berreden  (Im  Handbuch
steht auch nichts),  eine  Standard-Anwedung  zu  verwenden,  falls  die
eigene Liste nichts passendes enthlt. APPLIER beschwerte sich immer mit
einer lstigen Meldung.  Mit  PassThru  ist  dieses  Problem  beseitigt.
Nachdem PassThru durch das Betriebssystem aufgerufen wird, holt es  sich
zuerst die Liste der Extension-Anwendung-Beziehungen. Diese Liste mu im
Root der Partition C stehen und mu XTENSION.DAT heien. (Sollte  jemand
das stren, bitte bei mir melden!) Die Liste hat hnlichen Aufbau,  wie
die des APPLIERS:

[Dateimaske]{, [Dateimaske], ...} /[Tasten] /[Optionen] /[Pfadbehandlung]
                              /[Programmpfad][Parameter];{Kommentar}

Findet PassThru eine Unstimmigkeit in der  Liste,  meldet  es  sich  mit
"syntax error in line [Zeile]". Natrlich kann es  immer  Fehler  geben,
die vom Programm nicht erkannt   werden.   Solche   Fehler   knnen   zu
unvorhersehbaren Ergebnissen fhren!

[Dateimaske] wird durch Hochkommas (" oder ') eingeschlossen.
Die  Wildcards  ?  und  * werden aktzeptiert, wenn die Maske in doppelte
Hochkommas  eingeschlossen  wurde. Zustzlich kann man an der jeweiligen
Position  erlaubte  Zeichen eingeschlossen in eckige Klammern auflisten.
Statt  dessen  kann  auch  eine  Liste der Zeichen angegeben werden, die
nicht  vorkommen  drfen.  Man stellt dazu der Liste ein Dach ^ oder ein
Ausrufezeichen ! voran. Beispiele:
*   pat auf alles
*.* pat auch auf alles, (da z.Zt. alle Dateien wenn ntig um einen
    Punkt erweitert werden.)
*.LZH pat auf alle LHarc-Archive
*.lzh geht auch, da z.Zt. gro und klein nicht unterschieden wird.
?.* Pat auf Dateinen mit genau einem Buchstaben vor dem Punkt und
    beliebig vielen hinter dem Punkt.
README.* Pat auf alle README Datien.
[^abc].[de] Pat auf u.d, d.e usw. aber nicht auf a.a oder auf aa.dd.

Regulre  Ausdrcke  werden  akzeptiert,  wenn  die  Maske  in  einfache
Hochkommas  eingschlossen  wird.  (Achtung,  aufgrund  meiner mangelnden
Erfahrung  mit  regulren Ausdrcken, habe ich diese Funktion noch nicht
ausfhrlich   testen  knnen.  Es  kann  auch  sein,  da  die  bei  Dir
vorliegende  Version  ohne  diese  Mglichkeit  bersetzt  wurde, da sie
eigentlich  nie  wirklich  gebraucht  wird. Man erfhrt das durch Aufruf
von PassThru mit der Option ":v".
Durch  Komma  getrennt  knnen auch mehrere Dateimasken auf das Programm
angenmeldet  werden,  so  da nicht fr jede Dateimaske eine extra Zeile
geschrieben werden mu.
Direkt   nach   einem   solchen   Trennkomma   kann  in  der  Datei  ein
Zeilenwechsel  erfolgen.  Die  folgende Zeile wird dann als zur ersteren
gehrig behandelt.

[Tasten]  besteht  aus  Zeichen  aus  der  Menge  {rs,ls,s,c,a} oder aus
keinem  Zeichen. Hier kann angegeben werden, in Abhngigkeit von welcher
Steuerungs-Taste  (Shift,  Control,  Alternate, einer Kombination dieser
oder keiner) das Programm gestartet werden soll.
Mann kann so z.B. auf die Extension LZH sowohl den LHarc mit  Parametern
fr "view" als  auch  mit  Parametern  fr  "extract"  anmelden.  "view"
markiert man dann z.B. mit einem 'a'.  Wird  nun  die  Datei  "demo.lzh"
angeklickt, ohne ein gedrckte Taste, wird sie ausgepackt. Hlt man aber
whrend  dem Doppelklick die Alternate-Taste fest, wird statt dessen der
Archivinhalt  ausgeben.  'c'  steht  hierbei  fr  Control, 'ls' fr die
linke  Shifttaste,  'rs'  fr  die  rechte  (nur  's' bewirkt, da beide
Shifttasten  gltig  sind)  und  'a'  fr Alternate. Wird ein '-' angege-
ben, darf (fr Logiker: genau) keine Taste gedrckt sein.
Soll es egal sein, welche Taste gedrckt ist, wird gar nichts angegeben.
Der  Sondertastenstatus  wird  dann vollkommen ignoriert. Ntzlich, wenn
fr  eine  Extension  auch  nur  ein  Programm  vorgesehen  ist, denn so
vermeidet man, da unbeabsichtigt gedrckte Tasten zu einem verwirrendem
Ergebnis  (gar  nichts wird gestartet) fhren. Auch gnstig, wenn die zu
startende   Applikation   selbst   einen  Sondertastencheck  durchfhrt.
(Eine Taste nicht zu drcken, whrend PassThru gerade aktiv ist, sie aber
dann  fr  das  folgende  Programm noch rechtzeitig zu bettigen, knnte
recht  schwierig  sein.)  Siehe  zum  Beispiel  das  Programm Two-In-One
(Packershell).
*** Achtung: Auch in alten xtension.dat genau prfen,  wo ein Strich '-'
bzw ein Leereintrag sinnvoll ist und ggf. ndern.  Sonst kann es zu Pro-
blemen kommen!

Beispiel:  'lsca'  wrde  bewirken,  da  zum Starten _genau_ die Tasten
Linksshift, Control und Alternate gedrckt sein mssen.

[Optionen]  besteht   aus  den  (optionalen)  Schaltern  {w,W,H,r,l,v} fr
zustzliche Funktionen.
Wird     hier    ein   'w'   angegeben,   wartet   PassThru   nach   der
Programmausfhrung  auf  einen  Tastendruck. Ein groes 'W' bewirkt, da
nur   gewartet   wird,   wenn  zu  Programmende  eine  der  Sondertasten
Alternate,  Control  oder  Shift gedrckt ist (sie kann dann losgelassen
werden).  Wer's  noch  ein  wenig  anders  haben will, gibt ein 'H' ein:
PassThru wartet _genau so lang_, wie eine Sondertaste gedrckt bleibt.
Ein  'r' bringt PassThru dazu, ein Bildschirmredraw nach Programmende zu
veranlassen.  Ntzlich  z.B.  wenn "schlampige" Programme wie GUCK unter
Gemini laufen sollen.
Wird ein 'l' angegeben, schaltet PassThru wrend der  Programmausfhrung
das LedPanel von Christian Zwerschke ab - z.B. bei GUCK oder  Programmen
mit langer Menleiste.
'w' wird unter  Mag!X  ignoriert,  da  VT52.PRG  die  selbe  Mglichkeit
bietet (und PassThru sich sonst nicht beenden kann).
'v'   kennzeichnet,   da  die  folgende  Applikation  per  VA-Protokoll
aufgerufen  werden  soll.  Das  funktioniert  natrlich  nur,  wenn  das
Programm  als  Accessory  oder  parallel  laufendes Programm im Speicher
vorhanden  ist  und  die  Meldung auch versteht. Zum Beispiel knnte man
folgende Zeile in seine xtension.dat aufnehmen um ST-GUIDE mit einem
Hypertext aufzurufen:
"*.HYP" /  /v /wl /ST-GUIDE ~;

[Pfadbehandlung] sind  zwei   Buchstaben   {h,w}{s,l}.   'h'   beudeutet
home-directory, d.h. vor der Ausfhrung  wird  das  Verzeichnis  des  zu
startenden Programms zum aktuellen. 'w' beudeutet working-directory.  In
dem Fall findet kein Verzeichniswechsel stand. Beispiel:
Packer: d:\packer\lzh_222e.ttp
Archiv: g:\import\test.lzh
Mit 'h' wird test.lzh in den Pfad "d:\packer\",
mit 'w' in den Pfad "g:\import\" ausgepackt.

Wichtig  hier:  Viele  GEM-Programme brauchen ein 'h', da sie sonst ihre
Resourcedatei   nicht   finden,   oder   z.B.  wie  UUCODER.PRG  einfach
abstrzen. [Danke fr den Bug-Report!]
Der zweite Buchstabe gibt an, ob dem Programm nur der Dateiname oder der
komplette Pfad bergeben werden soll. 's' steht fr short, also nur  der
Dateiname, 'l' heit long und bergibt den kompletten Pfad.

[Programmpfad] enthlt den   kompletten   Pfad   der   Anwendung.   Z.B.
d:\packer\lzh_222e.ttp. PassThru entscheidet anhand der Extension, ob es
ein TOS oder GEM Programm ist. ("T*" wird als TOS  eingestuft)  Fr  TOS
Programme wird der Bildschirm gelscht, bei GEM  Programmen  bleibt  der
GEM Schirm.
Fr Programmierer: Unter TOS werden alle Programme per exec() gestartet.
Mag!X wird shel_write(SHW_PARALLEL) benutzt, bzw. shel_write(SHW_CHAIN),
sofern als Optionen 'l' oder 'r' angegeben waren.

[Parameter] enthlt die Parameterliste wie blich. An die  Stelle  einer
Tilde '~' wird der angeklickte Dateiname eingesetzt.
Das   Ende   der   fr   PassThru  relevanten  Datenzeile  markiert  ein
Strichpunkt  ';'.  Alles  zwischen  ihm  und  dem  Zeilenende  wird  als
Kommentar ignoriert.
Reine  Kommentarzeilen  mssen  als erstes Zeichen einen Strichpunkt ';'
enthalten.

Beispiel: Auszug   aus    meiner    xtension.dat:    (Meine    komplette
xtension.dat liegt als Beispiel dem Archiv bei)

"*.LZH" /- /  /wl /D:\PACKER\LZH.PAC\LZH299JE.TTP ~; *keine* Sondertaste
"*.LZH" /a /W /wl /D:\PACKER\LZH.PAC\LZH299JE.TTP v ~;
"*.C"   /a /l /hl /D:\COMPILER\PC\PC.PRG ~;
"*.GIF", "*.PPM",
"*.JPG" /- /  /hl /D:\PAINT\GEMVIEW\GEMVIEW.APP ~;    PRGs wollen oft 'h' !
"*.GIF" /a /  /hl /D:\PAINT\GIF\MGIF42B\MGIF.TTP ~
"*.JPG" /a /rl/hl /D:\PAINT\GIF\MGIF42B\MGIF.TTP ~;
"*.JPG" /c /w /hl /D:\PAINT\JPEG\JPEG_V4A\DJPEG.TTP -gif -nodither ~;
"*.DVI" /  /  /hl /F:\TEX\ASCREEN\ASCREEN.PRG ~;
"*.U??" /  /  /hl /D:\PACKER\UUCODE\UUCODER.PRG ~;
"*"     /  /rl/wl /D:\ETC\GUCK\GUCK.TTP ~;               Das altbekannte...

Schalter:
Dieser Punkt ist hauptschlich fr die Zukunft gedacht. Bis  jetzt  gibt
es nmlich nur zwei Schalter... (und die sind eher unwichtig (-: )
Schalter (oder  besser   Argumente)   werden   mit   einem   Doppelpunkt
eingeleitet und   schlieen   sich   direkt   an   diesen   an.   (Diese
Zusammensetzung sollte in keinem Dateinamen vorkommen - hoffentlich)
Zur Zeit mglich:
 :v Gibt  Versionsdatum  von  PassThru  aus  und  beendet  das  Programm
    anschlieend.  Auerdem  wird  angegeben,  mit welchen  Optionen die
    vorliegende  Version bersetzt wurde.  Es wird auf stdio in Textform
    ausgegeben.
 [Aufruf ohne Parameter] Wirkt wie ":v" (s.o.), die Ausgabe erfolgt aber
    in ein Fenster.
 :l schaltet das LedPanel ein, bzw. aus, je nachdem ob's aus oder an ist
    :-) Vielleicht kann man's ja brauchen...

Fehlermeldungen:
PassThru meldet sich u.a. bei:
-fehlender xtension.dat
-fehlendem Programmpfad
-einem Fehler beim Ausfhren des Programms.
-einem erkannten Grammatik-Fehler in xtension.dat
-Speicherproblemen (Sollte eigentlich nicht vorkommen).

Einschrnkungen:
-*unbeschrnkte*  Anzahl von logischen Zeilen (eine logische Zeile fngt
 mit  den  Dateimasken  an  und hrt mit der Applikation plus Parametern
 auf). Steht hier, obwohl's ja _keine_ Einschrnkung ist... :-)
-maximale  Zeilenlnge  von 1024 Zeichen. Auch wenn die Zeilen per Komma
 getrennt werden!
-maximale Lnge von Dateimaske, Pfad und der Argumente von 255 Zeichen.

Anregungen, Bug-Reports, etc. bitte an mich!

11. September 93, Florian Erhard.

P.S. Nicht wundern, wenn man von PassThru nicht's  optisches  merkt.  Um
nicht verwirrende Texte, die noch dazu bremsen, auf dem Schirm zu haben,
macht PassThru im Gegensatz zu APPLIER keine Ausgaben. Nur wenn am  Ende
auf eine Taste gewartet wird, oder die Datei xtension.dat fehlt,  meldet
sich das Programm.

