![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > script test auf laufendes Programm | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
22.01.2010, 10:40 Uhr selco Posts: 64 Nutzer |
Hallo, ich habe folgendes Problem: Mit "recorder" (Aminet) nehme ich die Maus und Tastatureingaben eines Programmes auf und spiele sie später wieder ab. Geht super, z.B. für Demonstrationen. Jetzt möchte ich mehrere solcher Aufnahmen nacheinander abspielen. Also einfach ein Script schreiben, welches dann dann eine Reihe von recorder-play-Aufrufen enthält. So in der Art recorder play my_first_recorded_file.rec nowait recorder play my_second_recorded_file.rec nowait recorder play my_third_recorded_file.rec nowait (Nowait bewirkt, dass recorder sofort mit dem Abspielen beginnt, ohne diese Option würde er auf eine spezielle Tastenkombination warten) Das Problem dabei ist aber, dass das Script sofort nacheinander alle 3 Zeilen abarbeitet. Es wartet also nicht, bis das Abspielen eines Files beendet ist und beginnt dann mit dem nächsten sondern macht sifirt weiter. Das führt dann zu der Meldung "recorder already running"... Jetzt könnte ich natürlich einfach "wait" Befehle dazwischenschreiben aber das kann es ja eigentlich nicht sein. Was kann ich hier tun, um es richtig zu machen? Unter linux würde ich in einer Schleife ps aufrufen und nach recorder greppen, aber hier auf dem Amiga? "Status" könnte ein equivalenter Befehl sein, aber mit "status" wird das Programm nicht angezeigt... Was kann ich tun? MfG selco http://selco.da.ru [ - Antworten - Zitieren - Direktlink - ] |
22.01.2010, 10:49 Uhr Holger Posts: 8116 Nutzer |
Zitat:Na ja, dann macht das Programm ja exakt das, was Du mit "nowait" gefordert hast, oder? Kannst Du nicht am Ende eines Skriptes die Tastenkombination zum starten des nächsten aufnehmen? -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
22.01.2010, 11:24 Uhr Beeblebrox Posts: 723 Nutzer |
@selco: Kannst Du was mit Assembler anfangen ? Ich frage, weil ein ganz gut dokumenter Source vom recorder im Aminet liegt. Die Kommentarzeile ; V1.2 März 1996 ; - Programm löst sich automatisch von der Shell zeigt, daß dort der "run" Befehl quasi implementiert ist. Du könntest versuchen die folgenden Zeilen auszukommentieren und das Programm neu zu assemblieren um ein Lösen von der Shell zu verhindern (ich bin aber wirklich kein 68k Assembler Programmierer, also kann es gut sein, daß das nicht ganz ausreicht..). Für mich sieht es auch so aus, daß der rekorder nicht mehrfach gestartet werden kann, was hiermit ebenfalls unterbunden werden würde.. Auskommentieren: noInform: lea ProcessName(pc),a1 ; Überprüfen, ob Recorder schon einmal CALLSYS FindTask ; gestartet wurde. Dann Meldung ausgeben. tst.l d0 beq.s NotThere lea ErrorMsg(pc),a2 bsr PrintText bra noMain_Signal NotThere: moveq #-1,d0 ; Signal belegen CALLSYS AllocSignal moveq.l #1,d1 ; aus Nummer Maske erstellen lsl.l d0,d1 move.l d1,Main_Signal ; Signalmaske speichern move.l d0,Main_SigNum ; Signalnummer speichern bmi noMain_Signal sub.l a1,a1 CALLSYS FindTask move.l d0,Main_Task lea MemList(pc),a0 ; Speicher allokieren CALLSYS AllocEntry btst.l #31,d0 ; Bit 31 gesetzt --> Fehler bne.s noProcMem move.l d0,a4 ; Register a4 hält MemList Adresse move.l d0,SegmentMem lea Beginn_Process(pc),a0 ; Prozeß Code kopieren move.l 16(a4),a1 ; Zieladresse move.l 20(a4),d0 ; Länge CALLSYS CopyMem move.l 16(a4),TagList+4 ; Startadresse eintragen lea ProcessName(pc),a0 ; Prozeßname eintragen lea Beginn_Process(pc),a1 sub.l a1,a0 add.l 16(a4),a0 move.l a0,TagList+12 CALLDOS Output ; Ausgabehandle für Prozeß move.l d0,TagList+20 move.l #TagList,d1 CALLDOS CreateNewProc ; Prozeß starten tst.l d0 beq.s noNewProc move.l Main_Signal(pc),d0 CALLSYS Wait bra.s noProcMem noNewProc: move.l a4,a0 ; Wenn Start fehlgeschlagen, Speicher CALLSYS FreeEntry ; wieder freigeben -- >>> bEeBlEbRoX <<< http://www.endlosstudent.de [ Dieser Beitrag wurde von Beeblebrox am 22.01.2010 um 11:25 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.01.2010, 13:36 Uhr cha05e90 Posts: 157 Nutzer |
Tja, also falls die Programme einen ARexxPort haben, könnte man auch einfach WaitForPort nutzen. -- sam440ep OS4.1 A2000 Blizzard2040 DeInterlaceA2000 Cybervision64/3D Twin-X/GPIB MultifaceIII AmigaNet CyberGrafX4 OS3.9 A2000 A2630 A2632 A2320 SupraRAM2000 PicassoII MultifaceIII AmigaNet ImpactSeriesII/Guru Picasso96 OS3.9 [ - Antworten - Zitieren - Direktlink - ] |
23.01.2010, 00:26 Uhr inq Posts: 445 Nutzer |
Hi. Was'n das fürn Script? Arexx oder cli? normalerweise würde man ja erwarten, daß ein CLI-Script die einzelnen Sachen mit RUN aufruft, also 'Run recorder dingsda.script blabla'. RUN fürt dann das Programm bis zum Ende aus, es sei denn, es bietet eine Option, mit der es sich selbst vom aufrufenden Prozess abkoppelt und parallel weiterläuft (soll es geben, z.b. startup-sequences, die via execute andere Scripte aufrufen ![]() wenns aber arexx ist, wird dieses Abkoppeln evtl sowieso gemacht und du mußt es verhindern mit irgendeinem "Waitfinished"-Commando oder so. müßte dann aber die ArexxFraktion wissen... also, wasnu? ![]() edit: Hm. hab grad gemerkt, daß der vorvorposter schon dasselbe geschrieben hat, sorry ![]() [ Dieser Beitrag wurde von inq am 23.01.2010 um 00:29 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
04.02.2010, 10:29 Uhr selco Posts: 64 Nutzer |
So, ich habe mich mit dem Assembler-Quelltext beschäftig und wollte versuchen, die Rückmeldung des Child-Prozesses an den Parent-Prozess rauszunehmen. Dann würde der Parentprozess nicht beendet werden und ich hätte, was ich wollte. Allerdings komme ich nicht weiter. Ich habe den Quelltext mit a68k recorder.s assembliert und dann mit blink recorder.o gelinkt. Das Unveränderte, nur neu assemblierte) Programm stürzt ab. Es scheint im Childprozess, Routine PrintText beim Aufruf von Write() zu passieren, wenn der Titel Titel: dc.b 10,$9b,"1;33mRecorder V1.4",$9b,"0;33m by Oliver Grimm",10 dc.b "Written in 1991/1996 - All rights reserved.",$9b,"0;31;40m",10,10,0 ausgegeben werden soll. Ich bin mir an dieser Stelle nicht sicher, ob d1 richtig steht. (Returnwert von Output(). Kennt sich damit jemand aus? MfG selco, http://selco.da.ru [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > script test auf laufendes Programm | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |