/* $VER: DropMe.rexx V1.0 (12.5.96) © by Nils Görs Dies ist ein Skript mit welchem man Aktionen automatisieren kann, wie z.B. Archive entpacken, Bilder anzeigen, Musik abspielen etc. */ /* Informationen über das Ausgabefenster */ LeftBorder = 10 /*Abstand linker Rand */ TopBorder = 300 /*Abstand vom oberen Rand*/ OutPutWidth = 640 /*Breite des Fensters */ OutPutHeight = 150 /*Höhe des Fensters */ OPTIONS RESULTS PARSE ARG PubScreen IF PubScreen == "?" THEN DO OPTIONS PROMPT "PUBSCREEN/K: " PARSE PULL PubScreen END CALL _InitAll /* ** Beschreibung der Applikation */ appname = 'DropMe' applongname = 'DropMe - ©1996 by Nils Görs' appinfo = 'Drop and enjoy...' appversion = '1.0' apprelease = '1' appdate = '12.5.96' _maintags: windowtags = WindowID(1), PubScreenName(PubScreen), WindowBackfillFB, WindowTitle(appname appversion), BeginMenu('Projekt'), MenuItem('W_PubScreen wechseln',10), MenuItem('E_Einstellungen',13), MenuItem('B_Beenden',11), BeginMenu('Aktion'), MenuItem('O_DropMeBase laden',12), 'HorizGroupA', 'Space', 'VertGroupA', 'Space', Button("Bitte File(s) _auswählen",1), 'Space', CenteredText("oder Icon(s) hier fallen lassen."), DropBox(2), 'Space EndGroup Space EndGroup EndProject' /* ** Unterbrechungssignale */ SIGNAL ON break_c SIGNAL ON failure SIGNAL ON halt SIGNAL ON ioerr SIGNAL ON syntax app = TR_CREATEAPP('TRCA_Name' '"'appname'"', 'TRCA_LongName' '"'applongname'"', 'TRCA_Info' '"'appinfo'"', 'TRCA_Version' '"'appversion'"', 'TRCA_Release' '"'apprelease'"', 'TRCA_Date' '"'appdate'"', 'TAG_END') IF app ~= '00000000'x THEN DO window = TR_OPENPROJECT(app,windowtags) WindowProject=C2D(window) /* zum Locken des Fensters bei About */ IF window ~= '00000000'x THEN DO nummer = 0 DO WHILE nummer = 0 CALL TR_WAIT(app,'') DO WHILE TR_HANDLEMSG(app,'event') /****************** *** CLOSEGADGET *** *******************/ IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN nummer = -1 IF event.trm_class = 'TRMS_ICONDROPPED' THEN DO SELECT WHEN event.trm_id = 2 THEN DO DO i = 1 TO event.trm_data.0 CALL _UseWhatIs event.trm_data.i END END OTHERWISE NOP END END IF event.trm_class = 'TRMS_ACTION' THEN DO SELECT WHEN event.trm_id = 1 THEN CALL _OpenRequest WHEN event.trm_id == 10 THEN CALL _NewPubScreen WHEN event.trm_id == 11 THEN DO Quit=TR_EasyRequest(app,"Wirklich beenden?",, "Ja|Nein","TREZ_LockProject" WindowProject) IF Quit == 1 THEN nummer=1 END WHEN event.trm_id == 12 THEN CALL RXTR_READFILE(progdir||"/DropMe.base",DropMeBase) WHEN event.trm_id == 13 THEN CALL _Einstellungen OTHERWISE NOP END END /* */ END END CALL TR_CLOSEPROJECT(window) END CALL TR_DELETEAPP(app) END EXIT(0) _OpenRequest: bool = ASL_RequestFile(window,filename,, "ASLFR_PubScreenName" PubScreen, "ASLFR_InitialDrawer" Prefs.1, "ASLFR_DoMultiSelect" 1, "ASLFR_DoPatterns" 1, "ASLFR_TitleText" '"Bitte Archive auswählen"') IF bool == 0 THEN RETURN DO i = 1 to filename.0 CALL _UseWhatIs filename.i END RETURN _UseWhatIs: PARSE ARG Dateiname typ=RXTR_WHATIS(dateiname) zeile = RXTR_LSEARCH(typ,DropMeBase,,,) IF zeile = -1 THEN DO CALL TR_EasyRequest(app,"der Filetyp:" Typ, NL"wurde nicht gefunden.","OK", "TREZ_Activate" 1 "TREZ_Title" '"Achtung!"' "TREZ_LockProject" WindowProject) RETURN END zeile = zeile+1 UseCommand=DropMeBase.zeile /* Platzhalter, der mit dem Namen der temporären Datei gefüllt wird. */ Position = INDEX(UseCommand,'%f') IF Position == 0 THEN DO CALL TR_EasyRequest(app,"Sie haben keinen Platzhalter", NL"für den Filenamen definiert:", NL UseCommand,"OK", "TREZ_Activate" 1 "TREZ_Title" '"Achtung!"' "TREZ_LockProject" WindowProject) RETURN END String = DELSTR(UseCommand,Position,2) UseCommand = INSERT(DateiName,String,Position-1) /* Platzhalter, der mit dem Namen des Zieldevices gefüllt wird. */ Position = INDEX(UseCommand,'%d') IF Position ~= 0 THEN DO String2 = DELSTR(UseCommand,Position,2) UseCommand = INSERT(Prefs.2,String2,Position-1) END /* Platzhalter, der mit dem Namen des PublicScreens gefüllt wird. */ Position = INDEX(UseCommand,'%s') IF Position ~= 0 THEN DO String2 = DELSTR(UseCommand,Position,2) UseCommand = INSERT(PubScreen,String2,Position-1) END CALL _OutPut ADDRESS COMMAND UseCommand IF (rc) ~= 0 THEN DO say "...FEHLER bei" UseCommand RETURN END CALL CLOSE('STDOUT') CALL CLOSE('STDIN') RETURN /********************************** *** Standard-Output umlenken ;) *** ***********************************/ _OutPut: ScreenOutPut = 'CON:'LeftBorder'/'TopBorder'/'OutPutWidth'/'OutPutHeight'/'UseCommand'/SCREEN 'PubScreen'/AUTO/CLOSE' CALL CLOSE('STDOUT') IF ~OPEN('STDOUT',ScreenOutPut,'W') THEN EXIT(10) CALL CLOSE('STDIN') CALL OPEN('STDIN','*','W') CALL PRAGMA('*','STDOUT') CALL PRAGMA('*','STDIN') RETURN _InitAll: NL = '0a'x TRUE = 1 FALSE = 0 Files.0 = 0 /* ** Open libs */ IF ~SHOW('LIBRARIES','tritonrexx.library') THEN IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN quit('Cannot open tritonrexx.library!',10) IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN quit('Cannot open rexxtricks.library!',10) IF ~SHOW('LIBRARIES','rexxsupport.library') THEN IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN quit('Cannot open rexxsupport.library!',10) /* ** Set current dir */ PARSE SOURCE . . . script . progdir = PATHPART(script) booll = LENGTH(progdir) booli= LASTPOS(":",progdir) boolh= LASTPOS("/",progdir) IF booli <= booll THEN progdir2=progdir||"/" IF boolh == 0 THEN progdir2=progdir||"/" CALL PRAGMA('D',progdir) /* Gibt es einen Parameter für den Bildschirm. Wenn nicht, dann wird der Screen auf dem defaultPubScreen geöffnet. */ IF PubScreen == "" THEN PubScreen = RXTR_GETDEFAULTPUBSCREEN() CALL RXTR_PUBSCREENTOFRONT(PubScreen) IF RXTR_READFILE(progdir||"/DropMe.prefs",Prefs) == 0 THEN DO Prefs.0 = 2 Prefs.1 = "Ram:" /* Archive Path */ Prefs.2 = "Ram:" /* OutPutPath */ END IF RXTR_READFILE(progdir||"/DropMe.base",DropMeBase) == 0 THEN DO say "Konnte" progdir||"/DopeMe.base nicht finden!" EXIT(5) END RETURN /******************************************************************* *** Routine, die das GUI auf einem neuen PubScreen öffnen läßt *** *******************************************************************/ _NewPubScreen: IF PUBSCREENLIST('ScreenList') == 0 THEN RETURN delstart=LSEARCH(PubScreen,Screenlist) IF delstart ~= -1 THEN RXTR_STEMREMOVE(ScreenList,delstart) ScreenListTags = WindowID(2), WindowBackfillFB, WindowPosition('TRWP_MOUSEPOINTER'), WindowTitle('neuen PubScreen auswählen'), WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'), PubScreenName(Pubscreen), 'VertGroupA', 'Space', 'HorizGroupA', 'Space', ListSel('screenlist',301,0), 'Space', 'EndGroup', 'Space', 'HorizSeparator', 'Space', 'HorizGroupA', 'Space', ButtonRE('Abbrechen',302), 'Space', 'EndGroup Space EndGroup EndGroup EndProject' PubScreenProject = TR_OPENPROJECT(app,Screenlisttags) IF PubScreenProject ~= '00000000'x THEN DO CALL TR_LOCKPROJECT(window) DO WHILE ende ~= 1 DO WHILE TR_HANDLEMSG(app,'event2') IF event2.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */ IF event2.trm_class = 'TRMS_NEWVALUE' THEN DO nummer = TR_GETATTRIBUTE(PubScreenProject,301,'TRAT_Value')+1 PubScreen = ScreenList.nummer CALL TR_UNLOCKPROJECT(window) CALL TR_CLOSEPROJECT(PubScreenProject) CALL TR_CLOSEPROJECT(window) CALL TR_DELETEAPP(app) CALL RXTR_PUBSCREENTOFRONT(PubScreen) fromNewPub=1 CALL _MainTags END END END ende = 0 CALL TR_UNLOCKPROJECT(window) CALL TR_CLOSEPROJECT(PubScreenProject) END RETURN _Einstellungen: EinstellungenTags = WindowID(3), WindowBackfillFB, WindowPosition('TRWP_MOUSEPOINTER'), WindowTitle('Einstellungen'), PubScreenName(Pubscreen), 'HorizGroupA', 'Space', 'VertGroupA', 'Space', Text3('Pfad der _Programme.') 'TRAT_ID 1', StringGadget(Prefs.1,1), 'Space', Text3('Pfad des _Zielverzeichnisses.') 'TRAT_ID 2', StringGadget(Prefs.2,2), 'Space', 'BeginLine', Button('_Speichern',3), Button('_Benutzen',4), 'EndLine', 'Space', 'EndGroup Space EndGroup EndGroup EndProject' EinstellungenProject = TR_OPENPROJECT(app,EinstellungenTags) IF EinstellungenProject ~= '00000000'x THEN DO CALL TR_LOCKPROJECT(window) DO WHILE ende ~= 1 DO WHILE TR_HANDLEMSG(app,'event3') IF event3.trm_class = 'TRMS_CLOSEWINDOW' THEN ende = 1 IF event3.trm_class = 'TRMS_ACTION' THEN DO IF event3.trm_id = 3 THEN DO Prefs.1 = TR_GetAttribute(Einstellungenproject,1,TROB_String) Prefs.2 = TR_GetAttribute(Einstellungenproject,2,TROB_String) CALL RXTR_WRITEFILE(progdir||"/DropMe.prefs",Prefs) ende = 1 END IF event3.trm_id = 4 THEN DO Prefs.1 = TR_GetAttribute(Einstellungenproject,1,TROB_String) Prefs.2 = TR_GetAttribute(Einstellungenproject,2,TROB_String) ende = 1 END END END END ende = 0 CALL TR_UNLOCKPROJECT(window) CALL TR_CLOSEPROJECT(EinstellungenProject) END RETURN /******************************************************************************* ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird *******************************************************************************/ break_c: failure: halt: ioerr: syntax: SAY '+++ Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc) SAY SOURCELINE(sigl) IF app ~= '00000000'x THEN CALL TR_DELETEAPP(app) EXIT(10) /*EOS*/