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

amiga-news.de Forum > Programmierung > Execute() aus dos.library unter AmigaBasic (AmigaOS1.3) [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

09.02.2025, 23:25 Uhr

PouvaStart
Posts: 5
Nutzer
Guten Abend in die Runde,
ich bin völlig neu hier im Forum, da ich eine Frage habe:

Ich möchte ein Programm unter dem Original AmigaBasic (AmigaOS 1.3) schreiben, welches mittels dem Execute()-Befehl der dos.library ein Programm startet (PlayFile, um genau zu sein).

Ich habe schon alles probiert, aber ich weiß nicht genau, wie ich beim Execute-Befehl dem Programm PlayFile das 8svx-Sample übergeben kann innerhalb des Execute-Befehls.

Ich wäre um jede Hilfe dankbar.

Beste Grüße,
Michael

P.S.: Und nein, ich möchte keine andere Programmiersprache verwenden, nur AmigaBasic. Es geht um ein Kunstprojekt.

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 14:43 Uhr

thomas
Posts: 7719
Nutzer
Execute bekommt drei Parameter:
- die Kommandozeile
- ein Eingabefenster
- ein Ausgabefenster

Die Kommandozeile ist genauso aufgebaut, wie du sie in einem CLI-Fenster eingeben würdest.

Also vermutlich

playfile dateiname.8svx






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

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 17:50 Uhr

PouvaStart
Posts: 5
Nutzer
@thomas:

Guten Abend, vielen Dank für Deine Antwort.

Ich habe es eben einmal probiert, also mit

x = Execute(PlayFile sound, 1, 1)

1 ist die ID des Fensters, welches ich im Code öffne.

Setze ich den Befehl "PlayFile sound" in Anführungszeichen, erhalte ich einen "Type mismatch" - Error, ohne Anführungszeichen einen "Syntax error".

Beste Grüße,
Michael

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 18:46 Uhr

FlynnTheAvatar
Posts: 49
Nutzer
@PouvaStart:

Systemroutinen brauchen C-Strings, keine AmigaBasic Strings.

Der richtige Aufruf wäre:

DECLARE FUNCTION Execute% LIBRARY
LIBRARY "dos.library"

x% = Execute%(SADD("PlayFile sound" + CHR$(0)), 0, 0)

Und der Aufruf braucht DOS-File-Descriptors (BPTRs), die bekommst du nur, wenn du mit xOpen& ein neues Fenster öffnest. 1 geht gar nicht. Wenn 0 verwendest, dann meinst, es gibt keinen Input oder Output.

[ Dieser Beitrag wurde von FlynnTheAvatar am 10.02.2025 um 18:49 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 19:12 Uhr

PouvaStart
Posts: 5
Nutzer
@FlynnTheAvatar:

Super, habe den Execute-Aufruf genau wie so geändert, nun wird der Ton abgespielt ...
Input und Output brauche ich nicht.

Das Problem ist aber nun, dass das Programm nicht weiterläuft, d.h. egal was nach dem Execute-Befehl kommt, es wird nicht ausgeführt. Es lässt sich aber auch nicht stoppen oder Basic-Fenster schließen.

Hängt das damit zusammen, dass ich ein Fenster mit den AmigaBasic-Befehlen geöffnet habe?

Vielen Dank!

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 20:10 Uhr

FlynnTheAvatar
Posts: 49
Nutzer
@PouvaStart:

Laut Autodoc sollte der Execute-Aufruf zurückkehren, wenn der ausgeführte Befehl fertig ist.

Spielt der Sound nur einmal, oder länger/in einer Schleife?

[ - Antworten - Zitieren - Direktlink - ]

10.02.2025, 20:15 Uhr

PouvaStart
Posts: 5
Nutzer
@FlynnTheAvatar:

Genau einmal, wie ich das auch so wollte.

[ - Antworten - Zitieren - Direktlink - ]

11.02.2025, 08:08 Uhr

FlynnTheAvatar
Posts: 49
Nutzer
@PouvaStart:

Okay, das Problem ist, dass die meisten Programme einen Output brauchen.

code:
DECLARE FUNCTION Execute% LIBRARY
DECLARE FUNCTION xOpen& LIBRARY
LIBRARY "dos.library"   

win$ = "CON:20/20/400/100/Output" + CHR$(0)
cmd$ = "playfile sound:" + CHR$(0)

out& = xOpen&(SADD(win$), 1005)

e% = Execute%(SADD(cmd$), 0&, out&)
xClose(out&)


Dann sollte das Basic-Programm weiter gehen.

[ Dieser Beitrag wurde von FlynnTheAvatar am 11.02.2025 um 08:31 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.02.2025, 22:29 Uhr

PouvaStart
Posts: 5
Nutzer
@FlynnTheAvatar:

GANZ wunderbar! Es funktioniert. Vielen Dank, Du bist ein Schatz!

Mich stört zwar, dass dann da das CLI-Fenster rumlungert, aber ich habe das jetzt so gelöst, dass es nur 1x1 Pixel groß ist. Das stört nicht weiter!

VIELEN herzlichen Dank nochmals.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Execute() aus dos.library unter AmigaBasic (AmigaOS1.3) [ - Suche - Neue Beiträge - Registrieren - Login - ]


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