 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 09.04.2005, 13:31 Titel: Probleme mit den SCREEN Bildschirmseiten und Shell Befehlen |
|
|
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 10.04.2005, 00:26 Titel: |
|
|
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
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 |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 10.04.2005, 11:48 Titel: |
|
|
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)  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 10.04.2005, 11:55 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 10.04.2005, 16:01 Titel: |
|
|
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 10.04.2005, 17:43 Titel: |
|
|
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 |
|
 |
Stephan

Anmeldungsdatum: 05.10.2004 Beiträge: 358 Wohnort: Hessen - 20km Nördlich von Frankfurt am Main
|
Verfasst am: 10.04.2005, 17:53 Titel: |
|
|
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  _________________ 'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 10.04.2005, 20:40 Titel: |
|
|
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 11.04.2005, 16:34 Titel: |
|
|
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 |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 11.04.2005, 18:53 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|