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

amiga-news.de Forum > Programmierung > Shell in Window? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

18.11.2008, 16:19 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Irgendwo hatte ich mal gelesen, dass man eine Shell in ein eigenes Fenster integrieren kann. Ich würde sowas gerne machen, da ich z.B. in einer Entwicklungsumgebung gerne den Output eines CLI Tools anzeigen würde, neben anderen GUI Elementen. (ohne eine eigene Shell aufzumachen). Geht das, und wenn ja, wie?


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

18.11.2008, 16:47 Uhr

thomas
Posts: 7650
Nutzer
Du meinst sicher nicht Shell, sondern Console. Hier ist ein Beispiel:

code:
#include <proto/dos.h>
#include <proto/intuition.h>
#include <stdio.h>

int main (void)

{
struct Screen *scr;
struct Window *win;
BPTR console;
char buffer[80];

if (scr = OpenScreenTags (NULL,SA_LikeWorkbench,TRUE,TAG_END))
	{
	if (win = OpenWindowTags (NULL,WA_CustomScreen,scr,WA_Activate,TRUE,TAG_END))
		{
		sprintf (buffer,"con://///window %08lx",win);
		if (console = Open (buffer,MODE_NEWFILE))
			{
			FPrintf (console,"Please press Return to close the window.\n");
			Read (console,buffer,80);
			Close (console);
			}
		else
			CloseWindow (win);
		}
	CloseScreen (scr);
	}

return (0);
}


Falls es doch eine Shell sein soll, hier ein etwas aufwändigeres Beispiel:

code:
#include <proto/dos.h>
#include <proto/intuition.h>
#include <stdio.h>

int main (void)

{
struct Screen *scr;
struct Window *win1,*win2;
BPTR console;
char buffer[80];

if (scr = OpenScreenTags (NULL,
		SA_LikeWorkbench,TRUE,
		SA_Title,"Application Screen",
		TAG_END))
	{
	if (win1 = OpenWindowTags (NULL,
			WA_Height,scr->Height / 2 - scr->BarHeight - 1,
			WA_CustomScreen,scr,
			WA_Title,"Application Window",
			TAG_END))
		{
		if (win2 = OpenWindowTags (NULL,
				WA_Top,scr->Height / 2,
				WA_Height,scr->Height / 2,
				WA_CustomScreen,scr,
				WA_Title,"Console Window",
				WA_Activate,TRUE,
				TAG_END))
			{
			sprintf (buffer,"con://///window %08lx",win2);
			if (console = Open (buffer,MODE_NEWFILE))
				{
				FPrintf (console,"Please enter EndCLI to close the window.\n");
				Execute ("",console,(BPTR)0);
				Close (console);
				}
			else
				CloseWindow (win2);
			}
		CloseWindow (win1);
		}
	CloseScreen (scr);
	}

return (0);
}


Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

18.11.2008, 17:22 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Sehr schön, Danke! Kann ich der Console jetzt noch sagen, wo sich ihre Koordinaten befinden, wenn sie nicht das ganze Fenster bedecken soll? Kann man die Koordinaten zur Lebenszeit der Console noch ändern, z.B. wenn das Fenster gesized wird?

Nachtrag:
Warum öffnest du im zweiten Beispiel zwei Fenster?

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 18.11.2008 um 17:24 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.11.2008, 17:46 Uhr

thomas
Posts: 7650
Nutzer
Zitat:
Kann ich der Console jetzt noch sagen, wo sich ihre Koordinaten befinden, wenn sie nicht das ganze Fenster bedecken soll?

Nicht, daß ich wüßte.


Zitat:
Warum öffnest du im zweiten Beispiel zwei Fenster?

Genau aus dem Grund, daß die Konsole das ganze Fenster einnimmt. Das zweite Fenster ist für die GUI.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

19.11.2008, 09:32 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von Der_Wanderer:
Sehr schön, Danke! Kann ich der Console jetzt noch sagen, wo sich ihre Koordinaten befinden, wenn sie nicht das ganze Fenster bedecken soll? Kann man die Koordinaten zur Lebenszeit der Console noch ändern, z.B. wenn das Fenster gesized wird?

Ja, Du kannst ANSI-Steuerungssequenzen benutzen, um der Konsole einen Bereich zuzuweisen. Allerdings ist es so, dass die Eingabeverarbeitung durch eine Konsole beeinflusst wird, und die Verwendung eines zweiten Fensters wahrscheinlich einfacher zu programmieren ist.

Wenn es nur darum geht Output anzuzeigen, kann man die Eingabeverarbeitung der Konsole unterdrücken und hat mit der eigenen keine Probleme. Allerdings stellt sich dann die Frage, ob es nicht sinnvoller wäre, die Ausgabe der CLI-Tools in eine Pipe umzuleiten und selbst darzustellen (das geht natürlich auch unter Verwendung des console.device). Das hätte den Vorteil, dass man den Inhalt kennt und somit auch das nachträgliche Abspeichern des Outputs (gerade bei eine IDE und Fehlermeldungen sinnvoll) anbieten kann. Statt eine Pipe zu verwenden könnte man auch einen eigenen DOS-Handler schreiben, das wäre gar nicht mal so viel komplizierter.

Ach ja, die Steuerungssequenzen habe ich natürlich nicht im Kopf. Ich poste sie bei Gelegenheit, wenn Du Interesse hast.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

19.11.2008, 14:19 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich dachte, wenn es schon eine Console gibt, warum nicht nutzen.
Ich baue gerade eine GUI Toolkit und dachte, ein "Console" Widget wäre cool, wo man alles mögliche ausgeben kann, gerade für eine IDE GUI ist das praktisch, aber auch für Dinge wie eine Encoder GUI für LAME, sodass man den Output des jewieligen CLI Tools sehen kann.
Eine eigene Implementierung hat natürlich Vorteile, z.B. kann man die History bestimmen, Text abspeichern etc., aber man bekommt sie nicht für "lau", so wie in den Source Beispielen oben.

Danke für die Hinweise.



--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

19.11.2008, 20:04 Uhr

Holger
Posts: 8038
Nutzer
Das hängt davon ab, wieviel man haben will. Deshalb ja auch die Frage, ob es nur um Ausgabe geht. Die Implementierung einer Ausgabe ist nicht so kompliziert, da man im Prinzip nur die Daten der Anwendungen entgegennimmt und an das console.device weiterreicht (mit optionalem Speichern).

Erst bei der Eingabe wird es kompliziert, aber auch interessant, weil die Standard-Konsole ja gar nicht so komfortabel ist.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

19.11.2008, 22:10 Uhr

Holger
Posts: 8038
Nutzer
Der Konsolebereich kann wie folgt gesetzt werden:

<CSI>linksx<CSI>obeny<CSI>breiteu<CSI>höhet

Wobei <CSI> wahlweise durch Zeichen 0x9b (Escape mit gesetztem höchsten Bit) oder durch die Zeichenfolge <ESC>[ (Escape gefolgt von öffnender eckigen Klammer) abgebildet werden kann.

Die Koordinaten für links und oben sind in Pixel, die Breite und Höhe dagegen in Zeichen.

Die vier Eigenschaften können auch unabhängig voneinander gesetzt werden. (Sind vier einzelne Steuerungssequenzen)

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

20.11.2008, 09:50 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Das ist cool. Vielleicht probiere ich dann doch mal eine echte Shell. Wie kann ich die Shell initial setzen? Mit den Parametern beim öffnen, die normalerweise die Fesnter größe angeben?
--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.11.2008, 18:05 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von Der_Wanderer:
Das ist cool. Vielleicht probiere ich dann doch mal eine echte Shell. Wie kann ich die Shell initial setzen? Mit den Parametern beim öffnen, die normalerweise die Fesnter größe angeben?

Die Steuerungssequenz wird wie normaler Text in die Konsole geschrieben. Danach startest Du eine Shell unter Verwendung Deiner Konsole.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Shell in Window? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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