amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Amiga, AmigaOS 4 > ARexx [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

29.04.2008, 21:15 Uhr

Indy
Posts: 538
Nutzer
Guten Abend :)

Ich wollte nur mal eben fragen, wie ich in einem ARexx script am einfachsten/komfortabelsten eine Zielverzeichnisauswahl mittels eines Auswahlrequesters einbauen kann.

Bei einem Shell script geht das ja z.B. mit 'C:RequestFile DRAWERSONLY'.

Aber wie macht man das doch gleich in einem ARexx script ?
Ich komme gerade einfach nicht darauf.
--


Gruß, Indy

[ - Antworten - Zitieren - Direktlink - ]

29.04.2008, 21:20 Uhr

thomas
Posts: 7717
Nutzer
@Indy:

code:
address command 'requesrfile >ram:textdatei ....'
if open(in,"ram:textdatei",read) then do
   dateiname = readln(in)
   call close(in)
end


Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

29.04.2008, 21:40 Uhr

Indy
Posts: 538
Nutzer
@thomas:
Danke Thomas für die schnelle Hilfe.
Ich hatte nur gehofft, daß man es "noch kürzer" ausdrücken könnte...
So ähnlich wie in dem Beispiel mit dem Shell script eben.
--


Gruß, Indy

[ - Antworten - Zitieren - Direktlink - ]

30.04.2008, 03:01 Uhr

cgutjahr
Posts: 2782
[Administrator]
@Indy:

Zitat:
Bei einem Shell script geht das ja z.B. mit 'C:RequestFile DRAWERSONLY'
Nein, geht es nicht. Das Ergebnis des Befehls Requestfile (also das vom Anwender ausgewählte Verzeichnis) muss ja irgendwo abgelegt werden damit es vom Script verarbeitet werden kann - ansonsten wird es nämlich einfach im Shell-Fenster ausgegeben, und das ist ja nicht Sinn der Sache.

Requestfile wird also in einem Shell-Script folgendermaßen verwendet:

code:
C:Requestfile DRAWERSONLY >ENV:Textdatei
if exists ENV:textdatei
   blah $textdatei blah
   delete ENV:textdatei
endif

Das ist im Grunde genauso lang wie das ARexx-Beispiel das Thomas gepostet hat (das "address command" aus Thomas' Beispiel kannst du weglassen wenn du den ARexx-Port noch nicht geändert hast).

Die kürzeste Variante (die aber keinerlei Eingriffsmöglichkeiten bietet wenn der User kein Verzeichnis auswählt sondern "Abbrechen" anklickt) wäre bei einem Shell-Skript folgende:

code:
copy SYS:Prefs.info >requestfile DRAWERSONLY>


(Die ">" bitte durch einen "Backtick" ersetzen, das Zeichen findest du auf einer Amiga-Tastatur oberhalb der TAB-Taste, wird leider von der Forum-Software vermurkst)

In ARexx sieht es genauso aus, wer sauber programmiert schließt die ganze Zeile in einfache Anführungszeichen ein (damit ARexx ganz sicher merkt, dass hier keine ARexx-Befehle folgen sondern etwas was an einen externen Port übergeben werden muss) und hängt falls nötig ein "address command" davor:

code:
address command 'copy SYS:Prefs.info >requestfile DRAWERSONLY>'


Die elegantere Arexx-Variante wäre folgendes (nicht kürzer aber deswegen eleganter weil keine temporären Dateien generiert werden):

code:
cmdid='req'pragma('id')
address command 'rxset' cmdid '>requestfile DRAWERSONLY>'
dateiname=getclip(cmdid)
call setclip(cmdid,'')


(wieder ">" durch "Backtick" ersetzen)

--
Gutjahrs Amiga Seiten

[ - Antworten - Zitieren - Direktlink - ]

30.04.2008, 06:20 Uhr

Indy
Posts: 538
Nutzer
@cgutjahr:

Danke Dir für die ausführliche Erläuterung.

Bezüglich der Variante in einem Shell script habe ich zuvor etwas zu unvollständig geschrieben.
Es sollte heissen:

code:
.key file
.bra {
.ket }

DH1:Grafik-Tools/Pcal/exec/pcal -f Kalender_AT 'C:Requeststring TITLE=" Monat eingeben..." BODY="1=Jänner...12=Dezember" DEFAULT="1"' 'C:Requeststring TITLE=" Jahr eingeben..." BODY="19xx - 2xxx" DEFAULT="2008"' >RAM:Monatskalender.ps


Bei diesem konkreten Beispiel hatte ich damals eben RequestString verwendet.

Ich hatte gehofft, daß es diese .key file .bra { .ket } - Anwendung auch für ARexx gibt.
--


Gruß, Indy

[ - Antworten - Zitieren - Direktlink - ]

30.04.2008, 15:42 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von Indy:
Ich hatte gehofft, daß es diese .key file .bra { .ket } - Anwendung auch für ARexx gibt.

Du hast da etwas falsch verstanden - ".key" sowie die dazugehörigen bra/ket-Anweisungen dienen auschließlich dazu Parameter abzufragen, die dem Script beim Start übergeben wurden. In deinem Fall könnte man das Script also mit "pcal.rexx ram:test.ps" aufrufen und die Variable "{file}" würde dann "ram:test.ps" enthalten und könnte im Script genutzt werden.

Allerdings machst du das in deinem Beispiel ja gar nicht, also kannst die die ersten drei Zeilen auch löschen. Oder du ersetzt ">RAM:Monatskalender.ps" durch ">{file}" - dann kannst du beim Aufruf des Scripts gleich den gewünschten Dateinamen für den Kalender angeben ("pcal.rexx Work:Stuff/Jänner.ps").

Zitat:
Bei diesem konkreten Beispiel hatte ich damals eben RequestString verwendet.
Das von dir gepostete Beispiel funktioniert ohne irgendwelche Variablen, sondern nutzt offensichtlich den Trick mit den Backticks (die wieder von der Foren-Software vermurkst wurden), um zunächst die beiden Requeststring-Aufrufe auszuführen und dann mit deren Ergebnisse pcal zu füttern.

Das ist genau das Prinzip, das ich in meinem ersten Beitrag erwähnt habe. Schön kurz, aber wenn der Anwender in einem der Requester "Abbrechen" drückt wird pcal trotzdem gestartet und bricht dann wahrscheinlich mit einer Fehlermeldung ab.

Wenn dir das nichts ausmacht, kannst du die exakt gleiche Programmzeile (DH1:Grafik-Tools/...) auch in einem ARexx-Script verwenden. Zur Sicherheit die komplette Zeile in einfachen Anführungszeichen einschließen ('DH1:Grafik...Monatskalender.ps') und falls nötig ein "address command" davor - fertig.
--
Gutjahrs Amiga Seiten

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Amiga, AmigaOS 4 > ARexx [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.