amiga-news 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: 8089
Nutzer
Zitat:
Original von selco:
(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.

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? :D

edit:
Hm. hab grad gemerkt, daß der vorvorposter schon dasselbe geschrieben hat, sorry :glow:

[ 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-2022 by amiga-news.de - alle Rechte vorbehalten.
.