Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Probleme mit den SCREEN Bildschirmseiten und Shell Befehlen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 09.04.2005, 13:31    Titel: Probleme mit den SCREEN Bildschirmseiten und Shell Befehlen Antworten mit Zitat

Hallo...

Ich hab wieder mal Probleme mit QuickBasic: Auf den Tipp von Dusky_Joe habe ich mal die Bildschirmseiten Funktion von QB getestet. Die verschiedenen Bildschirmseiten kann man per SCREEN , , [Bildschrimnr.] aufrufen, zum Beispiel so:

Code:

SCREEN , , 0
PRINT "Dies ist Seite Nr. 0"
SLEEP
SCREEN , , 1
PRINT "Dies ist Seite Nr. 1"
SLEEP
SCREEN , , 2
PRINT "Dies ist Seite Nr. 1"
SLEEP
SCREEN , , 0
SLEEP
SCREEN , , 1
SLEEP
SCREEN , , 2




Das Funktioniert auch sehr gut...
Wenn ich jedoch nen Shell Befehl ausführen will, der mehr als 25 Zeilen lang ist, dann habe ich ein Problem:

Code:

SCREEN , , 0
PRINT "Dies ist Seite Nr. 0"
SHELL "dir %windir%"
SLEEP
SCREEN , , 1
PRINT "Dies ist Seite Nr. 1"
SHELL "dir %windir%"
SLEEP
SCREEN , , 2
PRINT "Dies ist Seite Nr. 2"
SHELL "dir %windir%"
SLEEP
SCREEN , , 0
SLEEP
SCREEN , , 1
SLEEP
SCREEN , , 2


Beim 0. SCREEN scheints zu gehen, aber danach nicht mehr..

Mache ich was falsch oder ist das ein Bug...
Wenn es ein Bug ist: Wie kann ich ihn umgehen...

THX
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 10.04.2005, 00:26    Titel: Antworten mit Zitat

DIR ist ein DOS-Befehl. Die Programmierer von DIR haben damals vielleicht nicht an mehrere Bildschirmseiten gedacht... Es wäre also gut möglich, dass DIR immer nur auf Seite 1 schreibt.

Überprüfen kannst du das, indem du gleich in den 1 oder 2. Screen schaltest, dann deinen Shell ausführst, und dann wieder zurück zum 0. screen. wenn der dann beschrieben ist, weißt du, was passiert ist.

Wenn du darauf angewiesen bist, dass der DIR-Output auch auf den Seiten 1 und 2 (oder anderen...) ausgegeben wird, ändere deine SHELL's ab:

SHELL "DIR %windir% >%temp%\files.tmp"

Dadurch wird das Ergebnis von DIR in die Datei files.tmp umgelenkt, im Temp-Ordner (meistens so was wie C:\WINDOWS\TEMP)
Selbstverständlich geht auch jeder andere Ordner zwinkern

Diese Datei musst du dann nur noch auslesen, und mit PRINT ausgeben:

Code:

datei$ = ENVIRON$("TEMP") + "\files.tmp"
f = FREEFILE
OPEN datei$ FOR INPUT AS #f
DO
 LINE INPUT #f, tmp$
 PRINT tmp$
LOOP UNTIL EOF(f)



sollte helfen *g*
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 10.04.2005, 11:48    Titel: Antworten mit Zitat

Es scheint nicht der Fall zu sein, dass die Befehle in den nullten Screen zeichnen...
Und das mit dem Umleiten in Textdateien ist mir auch schon in den Sinn gekommen, da leider theoretisch jeder DOS-Befehel ausgeführt werden soll, geht das mit dem Umleiten auch nicht, wenn der Befehl eine Eingabe verlangt (z.B. Format oder Debug) weinen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.04.2005, 11:55    Titel: Antworten mit Zitat

Hallo.

Zitat:
Dadurch wird das Ergebnis von DIR in die Datei files.tmp umgelenkt, im Temp-Ordner (meistens so was wie C:\WINDOWS\TEMP)
Selbstverständlich geht auch jeder andere Ordner

Diese Datei musst du dann nur noch auslesen, und mit PRINT ausgeben:
Code:
datei$ = ENVIRON$("TEMP") + "\files.tmp"


Ich glaube mal was gelesen zu haben, dass ENVIRON$("TEMP") <> ENVIRON$("temp"). Oder? Kann mich aber auch täuschen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 10.04.2005, 16:01    Titel: Antworten mit Zitat

Ja, das ist was Unterschiedliches.
Ist mir auch mal aufgefallen, als ich einen DOS-Befehl in eine
temporäre Datei umleiten wollte.

Alternative:
Code:

RESTORE Varianten
DO
 READ Variante$
 datei$ = ENVIRON$(Variante$)
LOOP UNTIL RTRIM$(LTRIM$(datei$)) <> ""
 
Varianten:
DATA "TEMP", "TMP", "temp", "tmp"
[...]



Da wo [...] steht, müsste man dann nur noch andere Varianten hinpacken...

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 10.04.2005, 17:43    Titel: Antworten mit Zitat

Jetz bin ich aber neugierig!
willst du so was wie ein Textmodus-Gui aufziehen?
Hört sich ja ganz danach an, was?


Hast du auf den Screens 0,1,2,... vorher schon was stehen?
Sorg mal dafür, dass alle Screens beschrieben werden (komplett, also von Zeile 1 bis 25/50, Spalte 1 bis 80), und seh nach, ob irgendwas überschrieben wird.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stephan



Anmeldungsdatum: 05.10.2004
Beiträge: 358
Wohnort: Hessen - 20km Nördlich von Frankfurt am Main

BeitragVerfasst am: 10.04.2005, 17:53    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
Textmodus-Gui aufziehen?


Das ist doch ein Wiederspruch in sich, oder hast du schonmal ein 4 Rädriges 3 Rad gesehen ??
Also entweder GUI oder TUI zwinkern
_________________
'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 10.04.2005, 20:40    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
Jetz bin ich aber neugierig!
willst du so was wie ein Textmodus-Gui aufziehen?
Hört sich ja ganz danach an, was?


Hast du auf den Screens 0,1,2,... vorher schon was stehen?
Sorg mal dafür, dass alle Screens beschrieben werden (komplett, also von Zeile 1 bis 25/50, Spalte 1 bis 80), und seh nach, ob irgendwas überschrieben wird.


Fast...
Ich bastle an nem Prog namens Crystal, es soll später mal ein alternativer COMMAND.COM ersatz werden (also schon fast sowas wie nen FakeOS). Halt eben mit verschiedenen Features, wie Multishell. Ich sag absichtlich nicht Multitasking, da dies mit DOS ja nicht möglich ist, jedoch versuche ich jetzt nen Fake-Multitasking, welches so wie bei Linux funktioniert: ALT + F1 - ALT + F6 = Mehrere Shells...

Aber am besten saugst du es selbst mal (QB 7.1 benötigt): http://www.web-upload.com/uploads/Crystal0160.zip

Zu beachten ist, dass die TMP Umgebungsvariable definiert sein muss...
Das ganze steht unter der GPL, wer nicht weiss was das ist: Wikipedia hilft nach...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 11.04.2005, 16:34    Titel: Antworten mit Zitat

Stimmt, TUI *g*


Coole Idee übrigens!
Sieht schon mal ganz gut aus *g*


Kleiner Vorschlag:
Überprüfe einfach, ob die %temp% definiert ist, und erstelle sie selbst, wenn nicht.

IF LEN(ENVIRON$("temp")) THEN SHELL "SET temp C:\TEMP"

oder so was.
Um sicher zu stellen, dass TEMP existiert, kannst du's ja erstellen, falls es nicht schon existiert. Dazu gibts ja in QBX den Befehl DIR$, um zu prüfen, ob das Verzeichnix existiert, und dann noch MKDIR "TEMP".
(oder geht des auf Ordner prüfen nur bei freeBASIC?)



Aber, bist du auch sicher, dass das funktioniert?
Wenn jetzt z.B. gerade DEBUG.EXE (oder sonst irgendwas) aktiv ist, kann man dann trotzdem per ALT F... den Task ändern?


Mach mal weiter, wird bestimmt cool!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gandro



Anmeldungsdatum: 18.02.2005
Beiträge: 108
Wohnort: Schweiz

BeitragVerfasst am: 11.04.2005, 18:53    Titel: Antworten mit Zitat

Das mit dem TMP nehm ich dann später bei ner höhren Version mal genauer unter die Lupe...

Dass bei DEBUG, EDIT usw. kein Multishell verfügbar ist, ist so, weil diese nicht multitaskingfähig sind. Man kann also nur welchseln, wenn der Prompt aktiv ist...
(EDIT:) Ich hab aber noch geplant einige wenige nützliche Progs einzubauen, die Multishell fähig sind, wie z.B. nen minimalistischen Editor, nen Calc oder nen Hilfebrowser...

Aber es sollen ja noch mehr Features hinzukommen. Multishell ist nur eine der wichtigen...


PS: SHELL "SET temp C:\TEMP" wird nicht klappen, daran hab ich mir schon die zähne rausgebissen, aber ENVIRON "TEMP=C:\TEMP" sollte helfen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz