,--------------------------------------------------------------------.
|                                                      15.12.1994    |
| OBJEKTE.TXT                                                        |
|                                                                    |
| Dokumentation zum Objektsystem des noDesktop V3.00                 |
|                                                                    |
| Copyright 1994 by no|Software GmbH                                |
|                                                                    |
| Autoren:                                                           |
|    Ralph Mertens                                                   |
|    Andreas Fahrig                                                  |
|    Christian Stamm                                                 |
|    Marco Zahnen                                                    |
|                                                                    |
`--------------------------------------------------------------------'

Inhalt
======
1 ........................................... Einleitung / Allgemeines
2 .......................................... Das Objekt (der Begierde)
2.1 ............................................. Objektmanipulationen
2.2 .................................. Interaktionen zwischen Objekten
3 .................................. Aufbau der Objektdefinitionsdatei
3.1 ...................................................... Statuszeile
3.2 .................................................. Definitionsteil
3.3 .......................................... Reihenfolge der Objekte
4 .................................. Der Aufbau einer Objektdefinition
4.1 ....................................................... Objektname
4.2 ........................................................ Objekttyp
4.3 .............................................. Objektspezifikation
4.4 ............................................... Gltigkeitsbereich
4.5 .............................................. Doppelklickkommando
4.6 ......................... Draggen anderer Objekte in dieses Objekt
4.6.1 ............................................ Eingrenzungsbereich
4.6.2 ................................ Formaler Aufbau des Drag-Blocks
4.7 .................................. Popup- und Tastaturdefinitionen
4.7.1 ....................................... Aufbau der Popupeintrge
4.7.2 ....................................... Die Tastaturdefinitionen
4.7.3 ............ Formaler Aufbau der Popup- und Tastaturdefinitionen
4.8 ................................ Kommandos in der Objektdefinition
4.9 ........................................................... Makros
4.9.1 ........................................... Beispiele fr Makros



1  Einleitung / Allgemeines
===========================

noDesk bietet die Mglichkeit, sich seinen ganz persnlichen Desktop zu
'basteln', genauer: auf smtliche auf dem Desktop mglichen Aktionen
(Doppelklicks, Drag-Operationen, Tastendrcke und diverse Kombinationen
dieser Aktionen) kann mit beliebigen Kommados oder Kommandosequenzen
reagiert werden. Jene besagten Aktionen beziehen sich immer auf
irgendwelche 'Objekte' (nur auf dem Desktop herumklicken wird auf die Dauer
ziemlich langweilig!!), die dadurch verndert (manipuliert) werden oder mit
anderen 'Objekten' interagieren.
Fr noDesk ist alles das, was wir bei einem Desktop kennen, als Objekt
definiert. Objekte sind z.B. der Papierkorb, Ordner, Dateien, Fenster.
Weiterhin knnen z.B. auch Dateien mit gleicher Endung (z.B: *.TXT) zu
einem Objekt zusammengefasst werden.

In der Objektdefinitionsdatei werden nun die Objekte und die Aktionen, die
fr jedes einzelne Objekt mglich sind, definiert. Jeder Doppelklick auf
ein Icon, jedes Tastenkommando, alle Popups usw. sind hier beschrieben.
Allgemeiner ausgedrckt werden hier alle verfgbaren Objekte und deren
Interaktion untereinander festgelegt.

Die Objektdefinitionsdatei ist eine normale ASCII-Textdatei mit der Endung
'.NDQ'. Damit noDesk allerdings mit den definierten Objekten arbeiten kann,
mu diese Datei zunchst mit Hilfe des Programms 'NDCMPLR.UTP' bersetzt
werden, wodurch man eine Datei mit der Endung '.NDD' erhlt. Damit noDesk
wei, mit welcher NDD-Datei er arbeiten soll, wird sie als ein Parameter
im Befehl 'newdesk' noDesk mitgeteilt. Dieser Befehl steht in einem der
Initialisierungsskripte, genauer gesagt, in dem Skript, das fr die
Darstellung des Desktops verantwortlich ist (normalerweise ist das
'DESK.NDS', welche in einem auflsungsabhngigen Ordner steht).


** Warnung **
Bevor man damit beginnt, sich seinen individuellen Desktop zu stricken,
sollte man sich die Zeit nehmen, diesen Text genau durchzulesen. Die
Beschreibung der Objektdefinitionsdatei dient als Grundlage fr eigene
Ideen. Parallel dazu sollte man sich die mitgelieferte Objektdefinitonsdatei
selber anschauen. Vieles ist hier schon verwirklicht. Erst wenn man die
Struktur der Datei genau kennt und darin wie in einem Buch lesen kann ist
man sicher in der Lage, nderungen und Neuerungen darin vorzunehmen.
Selbstverstndlich ist vor jeder nderung der Objektdefinitionsdatei eine
Sicherheitskopie der NDQ-Datei und der NDD-Datei anzulegen. Nichts ist
rgerlicher als eine vermurkste Datei, die dazu fhrt, da der noDesk nicht
mehr hochfhrt.


2  Das Objekt (der Begierde)
============================

2.1  Objektmanipulationen
-------------------------

Unter der Manipulation an einem Objekt sind die Aktionen zu verstehen, die
von graphischen Oberflchen her bekannt sind. Im einfachsten Falle ist dies
der DOPPELKLICK auf ein graphisches Symbol (Icon). Im Falle eines
Laufwerksymbols fhrt diese Aktion in aller Regel zum ffnen eines Fensters,
welches den Inhalt des Laufwerks anzeigt (beim noDesk WLS-Fenster genannt).
Der Doppelklick auf ein Programmsymbol fhrt zum Ausfhren des Programms.
Der Klick auf den Schlieknopf (CLOSER-Button) eines Fensters fhrt zum ...
... richtig - zum Schlieen des Fensters. Der Doppelklick kann weiterhin
mit dem gleichzeitigen Drcken einer Spezialtaste (SHIFT, CTRL, SHIFT-CTRL)
kombiniert werden. In der Objektstruktur wird nun festgelegt, welche(s)
CLI-Kommando(s) ausgefhrt werden sollen, wenn das Objekt auf diese Weise
angesprochen (oder eben manipuliert) wird. Es ist also jedem berlassen,
fr das Schlieen eines WLS-Fensters eine Kommandosequenz zu schreiben, die
die Platte lscht, 100 Dateien mit dem Namen 'AETSCHnn.TXT' (mit nn=00..99)
draufkopiert und anschlieend einen Kaltstart des Systems durchfhrt ...
mann/frau kann es aber auch bleiben lassen.

Wir haben uns bemht, in der mitgelieferten Objektdefintionsdatei sinnvolle
Kommandosequenzen fr derartige Manipulationen zu whlen.

Eine weitere, sehr mchtige Mglichkeit der Manipulation eines Objektes
besteht durch die Assoziation von Popupkommandos und/oder Tastenkommandos
mit dem Objekt. Ein Objekt kann mit beliebig vielen Kommandos oder
Kommandosequenzen verbunden werden, die ber die Tastatur aktiviert werden
bzw. ber ein Popupmen, zu dem man durch RECHTSKLICK auf das Objekt gelangt.
Im Objekt 'LZH-Archivdateien' kann so festgelegt werden, was man eigentlich
mit einer '*.LZH'-Datei so alles anstellen kann: z.B. den Inhalt ansehen,
einzelne oder alle Dateien extrahieren, einzelne Dateien lschen usw. .
Der Phantasie und den persnlichen Bedrfnissen sind hier keine Grenzen
gesetzt.


2.2  Interaktionen zwischen Objekten
------------------------------------

Interaktionen zwischen Objekten entstehen, wenn Objekte von einem Ort
(bergeordnetes Objekt) zum anderen (Zielobjekt) bewegt werden. Das Bewegen
von Objekten wird 'Draggen' genannt. Dragge ich aus dem WLS-Fenster einige
Dateien und Ordner in den Papierkorb, will ich sie normalerweise lschen.
Es entsteht eine Interaktion zwischen dem Zielobjekt (Papierkorb) und den
gedraggten Objekten. In der Objektdefinition werden diese Aktionen immer
aus Sicht des Zielobjektes betrachtet. In unserem Falle sind in der
Objektdefinition `MUELLEIMER' (unser Papierkorb) all die Objekte definiert,
die hinein drfen und was mit ihnen zu geschehen hat. Auch das ist natrlich
wieder abhngig von einer gedrckten Spezialtaste mglich. Z.B. Gelangen
Dateisymbole aus einem WLS-Fenster in den Papierkorb, werden sie nach
Rckfrage gelscht, ist gleichzeitig die CTRL-Taste gedrckt, werden sie
nur in den Ordner 'TRASH' verschoben, bei gedrckter SHIFT-Taste erfolgt das
Lschen ohne Rckfrage. So lassen sich differenzierte Aktionen fr jedes
Objekt beschreiben. Das Draggen von Dateisymbolen, die direkt auf dem
Desktop liegen, soll sicherlich anders behandelt werden. Zumindest sollte
eine Rckfrage erfolgen, ob die Dateien an sich oder nur die zugehrigen
Dateisymbole gelscht werden sollen. Was soll passieren, wenn ich ein
Laufwerkssymbol auf den Papierkorb, oder in ein Archivfenster oder in ein
anderes Laufwerkssymbol dragge? Alle diese Fragen lassen sich mit der
Objektdefinition beantworten bzw. beschreiben.




3  Aufbau der Objektdefinitionsdatei
====================================

3.1  Statuszeile
----------------

Der formale Aufbau der Objektdefinitionsdatei ist einfach. Die Datei beginnt
mit einer Statuszeile. In der Statuszeile steht der Name und die
Versionsnummer des noDesk. Diese Angabe bentigt noDesk zur Identifikation
der Objektdefinitionsdatei. Sie darf nicht verndert werden.
Anschlieend folgen vier Zahlenangaben, die sich ausschlielich auf die
sogenannten 'freien' Objekte beziehen. Diese Objekte knnen direkt vom
noDesk aus ber das Tool ANMELD.UTP definiert werden und stellen eine
einfache Mglichkeit dar, Objekte zu gestalten, ohne die Objektdefinitions-
datei neu kompilieren zu mssen.

Die 1. Zeile hat folgenden Aufbau:

    '# noDesk V3.00   n p c t'

      'n' beschreibt die Anzahl der freien Objekte.
Durch 'p' werden die maximal mglichen Popupeintrge festgelegt.
      'c' legt die Lnge des Doppelklick-Kommandos fest.
      't' ist die Lnge eines Popupkommandos.

Die erste Zeile kann z.B. so aussehen:

# noDesk V3.00   5 4 40 40

In diesem Beispiel werden fnf freie Objekte zur Verfgung gestellt;
jedes von ihnen darf maximal 4 Popupzeilen haben; die maximale Lnge des
Doppelklickkommandos wird auf 40 Zeichen begrenzt und jedes Popupkommando
darf ebenfalls nur maximal 40 Zeichen lang sein.


3.2  Definitionsteil
--------------------

Auf die Statuszeile folgen nun die einzelnen Objektdefinitionen. Jede
Objektdefinition wird durch '{ }' eingerahmt. Kommentare knnen an
sinnvollen Stellen eingefgt werden. Ein Kommentar beginnt mit '#' und
reicht bis zum Zeilenende.


3.3  Reihenfolge der Objekte
----------------------------

Die Reihenfolge der Objektdefinitionen hat fr noDesk vor allem bei der
Definition von (Datei-)Gruppen eine entscheidende Bedeutung. Zu welcher
Objektdefinition z.B. eine Datei gehrt hngt davon ab, wo noDesk auf eine
passende Definition trifft. noDesk sucht immer vom Anfang zum Ende der
Objektdefinitionen und es wird immer die erste mgliche Defiintion
angewendet. Es ist daher notwendig, Objektdefinitionen ber spezielle
Dateien VOR allgemeine Definitionen zu setzen.
Beispiel:

    {   Objektdefinition fr PC.PRG
    }

    {   Objektdefinition fr ausfhrbare Programme (*.PRG, *.TTP, *.TOS)
    }

    {   Objektdefinition fr Textdateien (*.TXT, README, READ.ME)
    }

    {   Objektdefinition fr Dateien allgemein (*.*)
    }

Bei der Beschreibung neuer Objekte fr eigene spezielle Anwendungsgebiete
sollte man sich immer an der Reihenfolge der mitgelieferten
Objektdefinitionsdatei orientieren, um unntige Fehler und abendlichen Frust
zu vermeiden.


4  Der Aufbau einer Objektdefinition
====================================

Die folgende Darstellung zeigt den Aufbau einer einzelnen Objektdefinition.
Jede Objektdefinition besteht wiederum aus mehreren 'Strukturblcken', die
jeweils durch '( )' eingerahmt sind. Die letzten beiden Blcke besitzen
noch weitere 'Unterblcke'. Jeder Strukturblock, auer der des Objekttypen,
darf leer sein, d.h. braucht keinen Eintrag zu haben.

{
  ( Objektname )
  ( Objekttyp )
  ( Objektspezifikation )
  ( Gltigkeitsbereich )
  ( Doppelklickkommandos )
  ( Drag-Kommandos )
  ( Popup- und Tastaturdefinitionen )
}

Eine Besonderheit ist bei den Fensterdefinitionen zu beachten, da es dort
keine Doppelklick-Kommandos gibt. An ihre Stelle treten die Schlieknopf-
Kommandos, also die Operationen, die beim Anklicken des linken oberen
Fensterbuttons ausgefhrt werden sollen. Im brigen macht es hier wenig
Sinn, Spezifikationen und Gltigkeitsbereiche anzugeben. Eine Fenster-
Objektdefinition hat daher allgemein folgenden Aufbau:

{
  ( Objektname )
  ( Objekttyp )
  ( )
  ( )
  ( Schlieknopfkommandos )
  ( Drag-Kommandos )
  ( Popup- und Tastaturdefinitionen )
}


4.1  Objektname
---------------

Der Name eines Objektes kennzeichnet das Objekt. Diese Kennzeichnung ist
fr noDesk notwendig, um bergeordnete Objekte (z.B. den Desktop, die
verschiedenen Fenstertypen WLS, WCON u.a.) korrekt zu erkennen. Die
grogeschriebenen Objektnamen drfen nicht verndert werden.
Weiterhin wird der Gltigkeitsbereich ber den Objektnamen definiert.
Objektnamen bestehen aus Gro- oder Kleinbuchstaben, Zahlen, '_' oder
'.'. Bis zu 12 Zeichen sind erlaubt.


4.2  Objekttyp
--------------

Hier wird der Objekttyp angegeben, fr den die Objektdefinition gltig ist.
Folgende Objekttypen sind definiert:

  A : Laufwerk (Floppy, Harddisk, CD-ROM)
  D : Directory (Ordner)
  F : File (Datei/Programm), hier knnen weitere Angaben folgen (s.u.)
  U : Utility (Werkzeuge wie Mlleimer, Clipboard, Drucker)
  W : Window (Fenster)

Der Objekttyp 'F' kann durch weitere Angaben ergnzt werden, wenn die
Dateien, auf die sich die Objektdefinition bezieht, ausfhrbare Dateien
sind. Durch diese weiteren Parameter wird die Art der ausfhrbaren Datei
und optional das Verhalten von noDesk beim Start einer solchen Ausfhrbaren
Datei nher bestimmt.
Folgende Angaben sind beim Objekttyp 'F' also zustzlich mglich:

  <GrafMode>[<Modifier>]

<GrafMode>
  'G' : Programm wird im Graphikmodus ausgefhrt
  'T' : Programm wird im Textmodus ausgefhrt
  'W' : Programm wird im Textfenster (WCON-Fenster) ausgefhrt
  'S' : Skript

[<Modifier>]
  '/' oder 'x' : noDesk wird vor Programmstart ausgelagert
  '%' oder 'X' : wie 'x', und es wird der Arbeitspfad auf den Ordner
                 gesetzt, indem sich das Programm befindet
  'c'          : wie 'x', noDesk entscheidet anhand der Programmgre,
                 ob ausgelagert werden soll
  'C'          : wie 'c', und es wird der Arbeitspfad auf den Ordner
                 gesetzt, indem sich das Programm befindet
  '-' oder 's' : noDesk wird nicht ausgelagert, sonst wie 'c'
  '+' oder 'S' : noDesk wird nicht ausgelagert, sonst wie 'C'
  '*' oder 'N' : Fenster werden nicht geschlossen, sonst wie 's'
  '!' oder 'n' : Fenster werden nicht geschlossen, sonst wie 'S'


4.3  Objektspezifikation
------------------------

Hier wird festgelegt welche Bezeichner oder Datei/Ordnernamen mit der
Objektdefinition gemeint sein sollen.

Spezifikation fr Objekttyp 'A' (Laufwerke):
  [[<Laufwerk>[<Laufwerk>...]]

Beispiel:
  (AB) -> Die Definition gilt fr die Laufwerke 'A' und 'B'

Spezifikation fr die Objekttypen 'F' und 'D' (Dateien/Ordner):
  [<Maske>[|<Maske>[|...]]]

Hier knnen spezielle Namen oder Masken (mit den Wildcards '*' und '?')
angegeben werdenangegeben. Mehrere Dateispezifikationen werden durch '|'
voneinander getrennt.

Beispiel:
  (*.TXT|*.ASC|*.NDI|README|READ.ME)

Spezifikation fr Objekttyp 'U' (Werkzeuge):
  <Werkzeugname>

Beispiel:
  (TRASH1)


4.4  Gltigkeitsbereich
-----------------------

   ([<Objekttyp>[|<Objekttyp>[|...]]])

Steht hier ein Eintrag, so ist das definierte Objekt nur innerhalb des
angegebenen Objektes gltig. So drfen z.B. Fenster nur auf dem Desktop
liegen, sind also nur im Objekt 'DESK' gltig. Ist ein Objekt in mehreren
bergeordneten Objekten gltig, bzw. soll dort immer gleich behandelt
werden, kann der Objektname durch den Wildcardeintrag '*' abgekrzt werden
(z.B. steht W_* fr die Archivfenster W_LHARC und W_ZOO). Wird nur ein
'*' angegeben, so ist das Objekt in allen anderen Objekten gltig. Ebenso
ist es mglich, mehrere Objektnamen, durch '|' getrennt, anzugeben.
Hinter dem angegebenen Objekt, dem Gltigkeitsbereich, kann, durch ':'
eingeleitet, ein Kommando folgen, welches bei Aufruf des Kommandos
<chkdesk> fr alle Objekte dieser Definition ausgefhrt wird. Hiermit ist
es beispielsweise mglich bei einem Clipboard-Icon die Darstellung
desselben davon abhngig zu machen, ob sich etwas im Clipboard-Ordner
befindet.


4.5  Doppelklickkommando
------------------------

Hier werden die Kommandos definiert, die beim Doppelklick auf das Objekt
ausgefhrt werden sollen. In Fenstern wird das Klicken auf den
Schlieknopf (CLOSER-Button) definiert. Die Kommandos knnen in
Abhngigkeit von gedrckten Zusatztasten definiert werden. Folgende
Reihenfolge mu dabei beachtet werden:

    ([<Cmd>[|<SHIFT-Cmd>[|<CTRL-Cmd>[|SHIFT+CTRL-Cmd]]]])
  bzw. fr Fenster:
    ([<Cmd>[|<Fail-Cmd>]])

Jeder Eintrag ist optional, jede zustzliche Mglichkeit wird durch ein
'|' eingeleitet. Ein leerer Eintrag kann durch ein Leerzeichen ' '
markiert werden.


4.6  Draggen anderer Objekte in dieses Objekt
---------------------------------------------

In diesem Block knnen die Kommandos definiert werden, die beim 'Ziehen'
(Draggen) anderer Objekte oder Objektgruppen in dieses Objekt ausgefhrt
werden sollen. Jeder Unterblock wird durch Klammern '( )' eingeschlossen.
Zunchst werden die Objekte eingegrenzt, die in das definierte Objekt
hineindraggt werden drfen. Nach einem '|' kann eine Kommandodefinition
folgen, die dann (fr diese Objekte) ausgefhrt wird. Die Kommandos
knnen in Abhngigkeit von gedrckten Zusatztasten weiter differenziert
werden (siehe 1.5.).
Wird keine Kommandodefinition angegeben, fhrt ein Draggen fr die
eingegrenzten Objekte zu einer Fehlermeldung.


4.6.1  Eingrenzungsbereich
--------------------------

Zunchst wird der Objekttyp (z.B. 'F' fr Dateien oder 'D' fr Ordner)
angegeben, die angesprochen werden sollen. Durch eckige Klammern '[ ]'
knnen die Objekttypen ber eine Objektspezifikation (s.o.) noch weiter
eingegrenzt werden. Danach kann auerdem der Gltigkeitsbereich, durch
'@' eingeleitet, angegeben werden, aus dem die angesprochenen Objekte
stammen sollen. Mehrere Eingrenzungsbereiche knnen durch Leerzeichen
' ' getrennt definiert werden, auf die dieselbe Kommandodefinition
angewandt wird.
Beispiele:
    ( F             | ...)  Bei Dateien wird das Kommando '...'
                            ausgefhrt, wenn sie ins definierte Objekt
                            gedraggt werden
    ( D@W_* F@W_*   | ...)  Bei Dateien und Ordnern, die aus einem Objekt
                            stammen, dessen Name mit 'W_' beginnt (also
                            alle Archivfenster), wird das Kommando '...'
                            ausgefhrt
    ( D[*.TXT]@W*   | )     werden Dateien, die mit '.TXT' enden und aus
                            einem Objekt stammen, dessen Name mit 'W'
                            beginnt (jedes Fensterobjekt), in das
                            definierte Objekt gedraggt, folgt eine
                            Fehlermeldung
    ( A[AB]         | ...)  Hier werden unter allen Laufwerken nur die
                            Laufwerke 'A' und 'B' angesprochen

Mehrere Unterblcke knnen angegeben werden. Dabei ist die Reihenfolge
der Unterblcke wichtig. Werden einzelne Objekte in ein anderes Objekt
gedraggt, so werden in diesem die Eingrenzungsbereiche von oben nach
unten durchgesucht, bis ein Bereich gefunden wird, auf den die Objekte
zutreffen. Trifft kein Eingrenzungsbereich zu, so erfolgt eine
Fehlermeldung.
Das Kommando des ersten Eingrenzungsbereiches, das die Objekte beschreibt,
wird ausgefhrt.
Beim Beschreiben der Definitionsbereiche sollte man daher immer darauf
achten, spezielle Objekteingrenzungen vor allgemeinen zu setzen.
Beispiel:

    ...
    (
        ( D@W_LHARC F@W_LHARC | echo "1. Definition")
        ( D@W_* F@W_*         | echo "2. Definition")
        ( D     F             | echo "3. Definition")
    )
    ...

    Stammen Ordner oder Dateien aus einem LHARC-Archivfenster, wird
    '1. Definition' ausgegeben.
    Stammen die Ordner oder Dateien dagegen aus einem anderen
    Archivfenster wird '2. Definition' ausgegeben.
    Fr alle anderen Ordner oder Dateien, egal ob sie aus einem Fenster
    oder vom Desktop stammen wird '3. Definition' ausgegeben.


4.6.2  Formaler Aufbau des Drag-Blocks
--------------------------------------
  
  ( [<Unterblock> [...]] )

<Unterblock>:
  ( <Objekteingrenzung> "|" <Kommandos> )

<Objekteingrenzung>:
  <Typ>["["<Spezifikation>"]"][@<Bereich>] [...]]

<Kommandos>:
  <ohne Taste>[|<mit SHIFT>[|<mit CTRL>[|<mit SHIFT+CTRL] ]]


4.7  Popup- und Tastaturdefinitionen
------------------------------------

Jedem Objekt knnen spezielle Kommandos zugeordnet werden, die durch
Rechtsklick auf das Objekt ber einen Popupeintrag bzw. durch ein
Tastaturkommando aktiviert werden knnen. Tastatureingaben beeinflussen
das gerade aktive Objekt, d.h. das oberste Fenster oder ein bzw. mehrere
selektierte Dateien/Ordner. In diesem Strukturblock sind ebenfalls keine
oder mehrere Unterblcke mglich. Jeder Unterblock wird durch Klammern
'( )' eingeschlossen.
Der Unterblock beginnt mit dem Popuptext.
Bei Fenster-Objekten folgen, durch '|' getrennt, die Objekttypen, auf die
das Kommando angewandt werden soll oder aber meist '*' fr alle
(untergeordneten) Objekttypen.
Danach folgt, durch '|' getrennt, das auszufhrende Kommando. Steht hier
kein Eintrag, ist der korrespondierende Popupeintrag entweder nicht
selektierbar oder aktiviert untergeordnete Popupeintrge (s.u.). Der
Defintionsbereich endet mit einer Tastaturdefnition. Alle Eintrge sind
optional.


4.7.1  Aufbau der Popupeintrge
-------------------------------

Der Popupeintrag darf ein freier Text bis zu einer Lnge von maximal
38 Zeichen sein. Er dient dazu, das zugehrige Kommando zu beschreiben.
Ist das zugehrige Kommando auch ber eine Tastenkombination aktivierbar,
empfiehlt es sich, im Popupeintrag die Tastenkombination aufzufhren.
Es ist mglich, sogenannte 'Unterpopups' zu definieren. Diese werden
nur dann sichbar, wenn der Benutzer den bergeordneten oder
beschreibenden Popupeintrag anwhlt. Ein beschreibender Popupeintrag
enthlt kein Kommando und keine Tastendefinition. Unterpopupeintrge
beginnen mit einen Ausrufezeichen '!', gefolgt von freiem Text. In
Unterpopupeintrgen sind natrlichen Tastendefinitionen erlaubt. Alle
zusammengehrigen Unterpopupeintrge mssen unmittelbar auf den
beschreibenden Popupeintrag folgen und hintereinander stehen. Folgt auf
einen beschreibenden Popupeintrag kein Unterpopup, dann ist dieser nicht
selektierbar und farblich gekennzeichnet (disabled).
Beispiel:

    (
      (Fenster schlieen  ^U|*|w_close|     ^U)
      (---------------------|*|)
      (Zeige Info         ^I|*|finfo -r &N| ^I)
      (---------------------|*|)
      (Position ...         |*|)
        (!zeigen             |*|gecho -HFensterposition &K)
        (!merken fr wpic    |*|set wpicpos = &K;varpatch ~\$initfile wpicpos &K)
      (---------------------|*|)
    )

    Diese Popupdefinition enthlt acht Eintrge. Davon werden bei
    Rechtsklick nur sechs dargestellt. Zwei Eintrge werden beim Whlen von
    'Position ...' aktiviert. Der erste Eintrag ist eine normale Definition
    mit Tastaturdefinition. Die Eintrge mit Linien '----' haben kein
    Kommando oder eine Tastaturdefinition. Sie sind nicht selektierbar.
    Der Eintrag 'Position ...' ist ein beschreibender Popupeintrag. Auf ihn
    folgen zwei Eintrge, deren Popuptext durch '!' eingeleitet wird, was
    ein Unterpopup kennzeichnet. Die Unterpopups besitzen keine
    Tastaturdefinition.


4.7.2  Die Tastaturdefinitionen
-------------------------------

Mit Hilfe der Tastaturdefinition ist es mglich, die zu einem Objekt
zugehrigen Kommandos neben der Selektion ber den Popupeintrag auch
ber eine Taste oder Tastenkombination zu aktivieren. Enthlt der
Popuptext keinen Eintrag, so ist das zugehrige Kommando nur ber die
Tastatur aktivierbar. Viele dieser 'versteckten' Tastaturkommandos
finden sich in der Objektdefinition des Desktop (DESK).
Jede Taste kann definiert werden. Die normalen alphanumerischen Tasten
werden durch ihre Bezeichnung definiert. Buchstabentasten werden gro
geschrieben. Andere Tasten, wie z.B. die Zehnertastatur und Sonder-
tasten werden durch ihre Tastaturkrzel definiert. Dazu gehren auch
Metazeichen, die in der Objektdefinitionsdatei eine besondere Bedeutung
haben. Diese Zeichen mssen ber ihr Tastenkrzel angesprochen werden.
Folgende Tastaturkrzel sind mglich:

    ESC             Escapetaste
    TAB             Tabulatortaste
    BS              Rckschritttaste
    DELETE          Delete
    RETURN          Return
    SPACE           Leertaste
    KLAUF           '('
    KLZU            ')'
    HASH            '#'
    PLUS            '+'
    AGRAF           '^'
    TILDE           '~'
    BRKBAR          '|'

    F1              Funktionstasten 1-10
    F2
    F3
    F4
    F5
    F6
    F7
    F8
    F9
    F10

    HELP            Helptaste
    UNDO            Undotaste
    INSERT          Inserttaste
    HOME            Clr-Home
    CRSRUP          Pfeiltaste Oben
    CRSRLF          Pfeiltaste Links
    CRSRRT          Pfeiltaste Rechts
    CRSRDN          Pfeiltaste Unten

    ZKLAUF          Zehnertastatur '('
    ZKLZU           Zehnertastatur ')'
    Z/              Zehnertastatur '/'
    Z*              Zehnertastatur '*'
    Z7              Zehnertastatur '7'
    Z8              Zehnertastatur '8'
    Z9              Zehnertastatur '9'
    Z-              Zehnertastatur '-'
    Z4              Zehnertastatur '4'
    Z5              Zehnertastatur '5'
    Z6              Zehnertastatur '6'
    Z+              Zehnertastatur '+'
    Z1              Zehnertastatur '1'
    Z2              Zehnertastatur '2'
    Z3              Zehnertastatur '3'
    Z0              Zehnertastatur '0'
    Z.              Zehnertastatur '.'
    ENTER           Zehnertastatur Enter

Zustzlich ist es mglich, die Tasten mit den Spezialtasten zu
kombinieren. Das Voranstellen des Symbols, welches die Spezialtaste
definiert,  vor das Tastaturkrzel oder -zeichen definiert das gleich-
zeitigen Drcken beider Tasten.
Folgende Symbole definieren die Spezialtasten:

    '+'             Shift
    '^'             CTRL (Controltaste)
    '~'             ALT  (Alternatetaste)

Beispiele:

    (
     (Fenster schlieen  ^U|*|w_close|                                 ^U)
     (Zeige Info         ^I|*|finfo -r &N|                             +I)
     (|*|w_act s|                                                   SPACE)
     (|*|w_act s;w_act r|                                          ~SPACE)
    )

    Das erste Kommando wird durch Drcken von CTRL und 'U' aktiviert, das
    zweite durch die Shifttaste und 'I'. Die beiden nchten Eintrge sind
    nur ber die Tastatur ansprechbar, einmal durch Drcken von ' ' oder
    schlielich durch Drcken von ALT und ' '. Alle Konbinationen sind
    mglich.


4.7.3  Formaler Aufbau der Popup- und Tastaturdefinitionen
----------------------------------------------------------

  ( [ <Popup-Eintrag>
      [<Submen-Eintrag>]
      [...]
    ]
    [...]
  )	  

Definition fr Fenster:

<Popup-Eintrag>:
  ([<Popup-Text>] "|" <Bereich> "|" [<Kommandos> ["|" <Tastenbefehl>]])

<Submen-Eintrag>:
  (!<Submen-Text> "|" <Bereich> "|" <Kommandos> ["|" <Tastenbefehl>])

<Bereich>:
  <Objekttyp> [<Objekttyp>[ ...]]


Definition fr alle anderen Objekte:

<Popup-Eintrag>:
  ([<Popup-Text>] "|" [<Kommandos> ["|"<Tastenbefehl>]])

<Submen-Eintrag>:
  (!<Submen-Text> "|" <Kommandos> ["|" <Tastenbefehl>] )



4.8  Kommandos in der Objektdefinition
--------------------------------------

In der Objektdefinitionsdatei sind alle Kommandos erlaubt. Mit einer
Ausnahme: der direkte Sprungbefehl 'goto' auf ein Label ist nur in Skripten
aber nicht hier mglich. Schleifen, mehrzeilige Kommandos und bedingt
Ausfhrungen drfen verwendet werden. Ein Kommando oder eine Kommandosequenz
endet durch die Begrenzer '|' oder ')' innerhalb des Objektes.
Daher ist das 'Piping' von Kommandos in Objekten direkt (noch) nicht
mglich. Natrlich kann man dies durch die Verwendung eines Scriptes
erreichen.

Beim Schreiben eines Kommandos ist es oft notwendig, folgende
'metaphysische' Fragen zu klren:
    - Wer bin ich ?
    - Wer sind all die andern (Objekte) ?
    - Was soll ich (mit ihnen) tun ?

Soweit diese Fragen ausschlielich das Objekt betreffen, knnen 'Makros'
verwendet werden, denen die Informationen zu entnehmen sind.
Der Einsatz von Makros ist ausschlielich auf die Kommandos innerhalb von
Objekten beschrnkt. Viele der internen Kommandos bentigen Angaben wie
Objektname, -typ und -spezifikation. Sie sind daher vor allem in Objekten
sinnvoll anwendbar.
Zur genauen Beschreibung von Kommandos sei auf die Dokumentation ber den
CLI verwiesen.


4.9  Makros
-----------

Folgende Makrodefinitionen knnen verwendet werden. Die Grobuchstaben
beziehen sich immer auf das Zielobjekt, Kleinbuchstaben auf die gedraggten
Objekte (s.o.):

    &H                  Name des Fensters, in das Objekte hineinbewegt
                        (gedraggt) wurden, ist keines offen, Name des
                        Desktops
    &h                  Name des Fensters, von dem die gedraggten Objekte
                        stammen, ist keines offen, Name des Desktops
    &W                  aktuelle Fensternummer
    &N                  (Datei-)Name des Objektes, in das gedraggt wurde
    &n                  (Datei-)Name des (1.) gedraggten Objektes
    &T                  Titel des Objektes, in das gedraggt wurde
    &t                  Titel des (1.) gedraggten Objektes
    &p                  -> #P = Namensliste aller gedraggten Objekte
    &P                  Dateipfad des aktuellen Fensters
    &c                  Anzahl der gedraggten Objekte
    &k                  -> X+YxWxH = Koordinaten des gedraggten
                        (1.) Objektes
    &K                  Koordinaten des Objektes, in das gedraggt wurde
    &I                  ID-Nummer des aktuellen Fensters

Die Makros fr die Zielobjekte sind auch die, welche innerhalb von
Doppelklick- und PopUp-Key-Kommandos Gltigkeit haben.


4.9.1  Beispiele fr Makros
---------------------------

1.  Eine Datei wird auf eine Programmdatei gedraggt und das Programm soll
    mit dem Namen der gedraggten Datei als Parameter gestartet werden:

      &N &n

    Dies bedeutet, da das Primrobjekt (also das Programm mit dem
    Pfadnamen &N) durch Angabe seines Namens als Kommando gestartet
    wird und da der Pfadname der gedraggten Datei (&n) als Parameter
    bergeben wird.

2.  Ein weiteres Beispiel fr die Verwendung der Informationen ber die
    Sekundr-Objekte ist das Ablegen von Icons auf dem Desktop. Bei dieser
    Funktion handelt es sich ebenfalls um eine Drag-Funktion. Zu ihrer
    Definition werden allerdings ausschlielich die Makros des Sekundrobjekts
    verwendet:

      {(DESK) (W) () ()
        ...
        (
          ...
          (F@W* |addic F &t &n -P&k|addic F &t &n|addic F &t &n)
          ...
        )
        ...
      }

    Die hier abgebildete Zeile aus der Drag-Liste des DESKs' bedeutet
    folgendes:
    Wird eine Datei aus einem Fenster beliebigen Typs (bezeichnet durch
    'F@W*') auf den Fenstertypen DESK gezogen, ist DESK das Primr-Objekt,
    und das auf dem Desktop abzulegende Icon das Sekundrobjekt. Es wird
    dann ein Icon des Typs 'F' (Datei) auf den Desktop gebracht ("addic F").
    Dieses Icon hat den Namen und den Titel der gedraggten Datei (also "&n"
    und "&t"). Abgelegt wird es an der Position, an der die Maustaste nach
    dem Draggen losgelassen wurde - dies sind die Koordinaten &k. Gibt man
    statt der Position -P&k versehentlich -P&K, also die Koordinaten des
    Primr-Objekts an, wird das Icon unter den Koordinaten des Primr-Objekts,
    also des Desktops abgelegt. Da dieses die Koordinaten 0+0 hat, liegt das
    abgelegte Icon dann in der linken oberen Desktop-Ecke.

3.  Werden mehrere Objekte zugleich gedraggt, sind ihre Pfadnamen (voneinander
    getrennt durch Leerzeichen) in der Liste &p enthalten:

      set arcname = &n:t:r
      LHARC a &n:h\$arcname &p
      unset arcname

    Hier wird zunchst die Variable $arcname mit einem Archivnamen besetzt, der
    aus dem Pfadnamen der ersten auf LHARC.TTP gedraggten Datei extrahiert
    wird. Sodann werden die gedraggten Dateien ('&p') in das Archiv mit dem
    Pfadnamen &n:h\$arcname addiert, und die Variable wieder gelscht. Viele
    Programme knnen auch beim Draggen mehrerer Ordner oder Dateien nur den
    ersten Namen als Parameter auswerten. Ursache hierfr ist, da diese
    Programme nicht das xArg-Verfahren untersttzen, soda der als Parameter
    bergebene String maximal 124 Zeichen lang sein darf, oder auch, da sie
    als zweiten Parameter z.B. eine Konfigurationsdatei erwarten. Um zu
    verhindern, da es durch abgeschnittene Pfadnamen oder untaugliche Dateien
    zu Fehlfunktionen kommt, gibt man in der Objektefinition gar nicht erst die
    Liste der Sekundr-Objektnamen an, sondern arbeitet nur mit dem ersten
    Sekundrobjekt, also '&n'. Das Makro '&n' enthlt stets den Pfadnamen
    des Objekts, das als erstes in die Liste der Sekundrobjekte aufgenommen
    wurde.

