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

amiga-news.de Forum > Programmierung > multiview starten [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

13.02.2012, 23:53 Uhr

AGSzabo
Posts: 1663
Nutzer
Hi,

habe mir schon seit einiger Zeit überlegt dass ich es in meinen Filebrowser einbaue, eine Datei mit Mutliview zu öffnen. Dabei soll natürlich KEINE Shell auf gehen. Soweit ich die docs verstanden habe, gibt es dafür mindestens diese Möglichkeiten:

- Execute()
- SystemTagList()
- LoadSeg() -> CreateNewProc()

Hier oder da muß man ein Outputfilehandle auf "NIL:" übergeben. welchen Weg würdet ihr wählen?

ags
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 08:21 Uhr

RhoSigma
Posts: 67
Nutzer
@AGSzabo:
success = Execute("MultiView Bild.jpg", NULL, NULL);
if (IoErr() == 205) puts("MultiView not found");

Das Resultat vom Execute() Aufruf gibt nicht wirklich Auskunft ueber Erfolg od. Fehler, daher anschliessend sofort IoErr() verwenden. Ist dieses z.B. ERROR_OBJECT_NOT_FOUND (205), dann heisst das nicht, das das Bild nicht gefunden wurde, sondern dass MultiView selbst nicht gefunden wurde.

Zu beachten ist noch, das Execute synchron arbeitet, d.h. es kehrt erst zurueck, wenn der Anwender MultiView wieder beendet hat. Da du aber immer darauf bedacht bist, deine Sachen asynchron zu handhaben, wuerde die Kombi LoadSeg() -> CreateProc() wahrscheinlich besser fuer deine Zwecke geeignet sein.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 10:06 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von AGSzabo:
Hier oder da muß man ein Outputfilehandle auf "NIL:" übergeben. welchen Weg würdet ihr wählen?

Auf keinen Fall NIL: benutzen. Es gibt doch extra dafür das tolle Auto-Open Feature der Konsole, das ein Fenster nur dann öffnet, wenn tatsächlich Ausgaben geschrieben werden. So wie bei der Workbench, wenn Du den Menüpunkt „Befehl ausführen“ verwendest.

Du musst als Datei lediglich CON:x/y/breite/höhe/titel/AUTO/WAIT verwenden.

Du kannst die Größenangaben und den Fenstertitel auch weglassen. Ich habe sie nur hingeschrieben, weil man sonst beim Abschreiben von CON://///AUTO/WAIT leicht Fehler macht.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 10:59 Uhr

p-OS
Posts: 131
Nutzer
Du könntest natürlich auch das im System integrierte "Multiview" benutzen.
Befindet sich gut getarnt in der amigaguide.library.

Bsp:
E code:
MODULE 'amigaguide','libraries/amigaguide'
DEF guide
PROC main()
  IF amigaguidebase:=OpenLibrary('amigaguide.library',39)
    IF guide:=OpenAmigaGuideA([0,'Bild.png',NIL,NIL,NIL,NIL,NIL,0/*flags*/,NIL,NIL,0,NIL,0]:newamigaguide,NIL)
      CloseAmigaGuide(guide)
    ENDIF
    CloseLibrary(amigaguidebase)
  ENDIF
ENDPROC


Hier synchroner Aufruf, gibt aber auch eine asynchrone Variante.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:08 Uhr

AGSzabo
Posts: 1663
Nutzer
Ich habe mich erstmal für SystemTagList() entschieden. Funktioniert auch, bis auf das Async-Flag. Wenn ich das verwende, kommt es zu seltsamen Gurus mit der Bedeutung "Double Close" unter anderem. Natürlich schließe ich das Outputfenster dabei nicht selbst. Habe ich etwas vergessen?
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:12 Uhr

p-OS
Posts: 131
Nutzer
Kann dir zwar nicht sagen, warum das ASYNC nicht funktioniert.
Aber kannst es dir auch einfach machen:

SystemTagList('run <>NIL: multiview bild.png',...)

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:16 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von AGSzabo:
Ich habe mich erstmal für SystemTagList() entschieden.


Weise Entscheidung.

Zitat:
Habe ich etwas vergessen?

Das Lesen der Autodocs vielleicht?

code:
WARNING
        If used with the SYS_Asynch flag, it WILL by default, close both
        its input and output filehandles after running the command
        (even if these were your Input() and Output()!)


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

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:20 Uhr

AGSzabo
Posts: 1663
Nutzer
@p-OS:

Das wiederum funktioniert. Ich bekomme aber keine Rückmeldung, wenn das Dateiformat nicht unterstützt wird.

Hier mein Code von vorhin:

code:
.spawn		move.l	dosbase(pc),a6

		move.l	#.output,d1
		move.l	#MODE_NEWFILE,d2
		jsr	_LVOOpen(a6)
		tst.l	d0
		beq	.no

		move.l	#.command,d1

		clr.l	-(a7)
		move.l	d0,-(a7)
		move.l	#SYS_Output,-(a7)
		move.l	#TRUE,-(a7)
		move.l	#SYS_Asynch,-(a7)
		move.l	a7,d2
		jsr	_LVOSystemTagList(a6)
		lea	4+8*2(a7),a7

.no		rts

.command	dc.b	'sys:utilities/multiview s:startup-sequence',0
.output		dc.b	"CON:0/0/400/200/Modifyle View/AUTO/WAIT",0
		even


--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:24 Uhr

AGSzabo
Posts: 1663
Nutzer
@thomas:

> Das Lesen der Autodocs vielleicht?

Ne, das habe ich 3x 4x 5x gelesen, Darum schließe ich das Handle wie oben schon erwähnt NICHT selbst. Oder?
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 13:47 Uhr

thomas
Posts: 7716
Nutzer
@AGSzabo:

Aber alles hast du nicht gelesen?

code:
By default the new process will use your current Input(), Output()
        and ErrorOutput() filehandles.


Was ist mit Input?


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

[ - Antworten - Zitieren - Direktlink - ]

14.02.2012, 14:37 Uhr

AGSzabo
Posts: 1663
Nutzer
@thomas:

Input hab ich garkeins angegeben. Versucht er dann meinen eigenen, der vererbt wurde, zu schließen?

EDIT:

Ok ich hab mal auf die Gefahr hin, dass etwas schief geht, ausprobiert, das Input explizit auf 0 zu setzen. Jetzt geht es!

--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ Dieser Beitrag wurde von AGSzabo am 14.02.2012 um 15:05 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > multiview starten [ - Suche - Neue Beiträge - Registrieren - Login - ]


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