|
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 |
Wh1sper
Anmeldungsdatum: 25.02.2016 Beiträge: 10
|
Verfasst am: 27.02.2016, 18:56 Titel: Ausgabe auf Console, trotz grafik (gelöst) |
|
|
Hi,
ich versuche mich in freebasic einzuarbeiten.
Ein einfaches Grafik Programm mit der Standard Grafik möchte ich beim Laufen "zusehen"
Ich möchte mir Variablen auf die Konsole ausgeben und nicht auf die Grafik um die nicht zu zerstören.
Das sollte dorch irgendwie gehen....
Mit Print gehts nicht so direkt.
Oder fehlt mir ein Parameter, den ich in der Referenz nicht gefunden habe?
Ps: Typischer Neuling, kaum angemeldet gleich ne blöde Frage
Zuletzt bearbeitet von Wh1sper am 01.03.2016, 15:53, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.02.2016, 19:00 Titel: |
|
|
OPEN CONS _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Wh1sper
Anmeldungsdatum: 25.02.2016 Beiträge: 10
|
Verfasst am: 27.02.2016, 19:22 Titel: |
|
|
Uih, das ging schnell, danke.
Musste etwas basteln, weil das wohl nicht ganz so toll unter Linux geht, klappt aber.
Zur Info, ich habe hier Debian Jessi,
Code: | FreeBASIC Compiler - Version 1.01.0 (12-28-2014), built for linux-x86_64 (64bit)
|
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 27.02.2016, 20:16 Titel: |
|
|
Funktioniert hervorragend auch unter Linux; allerdings wird da die Konsole nicht automatisch geöffnet (was mir auch lieber ist). Also: Programm aus der Konsole heraus starten oder im Dateibrowser einstellen, dass es in der Konsole gestartet werden soll. Falls du als IDE Geany verwendest - da starten die Programme standardmäßig in einer extra Konsole.
Übrigens ist inzwischen FreeBASIC 1.05 draußen; aber das für sollte OPEN CONS nicht relevant sein.
https://sourceforge.net/projects/fbc/files/ _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Wh1sper
Anmeldungsdatum: 25.02.2016 Beiträge: 10
|
Verfasst am: 28.02.2016, 09:09 Titel: |
|
|
Ok, war keine Linux Meckerung, das wäre ja noch schoner.
Ich nahm an, das sowas hier geht:
Code: | Dbg = FREEFILE
OPEN CONS FOR OUTPUT AS #Dbg
print #Dbg, "Spalte, Zeile ";spalte;zeile;felddata(spalte, zeile)
' Hie sind ein paar schleifen, die aus einem FILE lesen mit anderem Pointer FREEFILE
' und es soll noch was auf die Console ausgegeben werden
print #Dbg, " Irgendwas ";felddata(spalte, zeile)
CLOSE #Dbg
|
Das ging nicht.
Vermutlich, weil ich das nicht schachteln kann.
Oder es liegt daran, dass man auf die Console über einen Buffer schreibe?
Bei C würde ich flush(#Dbg) benutzen
I |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 28.02.2016, 19:31 Titel: |
|
|
Wh1sper hat Folgendes geschrieben: | Ok, war keine Linux Meckerung, das wäre ja noch schoner. |
Habe ich auch nicht so verstanden.
Code: | screenres 800, 600, 32
print "GRAFIK"
dim as integer Dbg = FREEFILE
open cons for output as #Dbg
print #Dbg, "KONSOLE"
print "noch mehr GRAFIK"
close #Dbg
sleep |
funktioniert soweit. Jetzt wäre die Frage, was der auskommentierte Teil macht. Zwei Datenströme mit OPEN CONS gleichzeitig geöffnet zu halten, macht bei mir auch keine Probleme, wenn du allerdings einen schließt, ist der andere auch zu.
Code: | screenres 800, 600, 32
dim as integer Dbg1 = FREEFILE
open cons for output as #Dbg1
print #Dbg1, "KONSOLE 1 (1)"
Dbg1 = FREEFILE
dim as integer Dbg2 = FREEFILE
open cons for output as #Dbg2
print #Dbg2, "KONSOLE 2 (1)"
print #Dbg1, "KONSOLE 1 (2)"
close #Dbg1
print #Dbg2, "KONSOLE 2 (2)"
close #Dbg2
sleep |
Ich verwende da einen festen "Konsolenkanal" für alle Programmteile, den man bei Bedarf ja an die Prozeduren übergeben kann. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 29.02.2016, 11:34 Titel: |
|
|
Zitat: | ...Zwei Datenströme mit OPEN CONS gleichzeitig geöffnet zu halten, macht bei mir auch keine Probleme, wenn du allerdings einen schließt, ist der andere auch zu. |
Es werden deshalb beide Kanäle geschlossen weil Du versehentlich den ersten Dateikanal überschreibst.
Code: |
screenres 800, 600, 32
dim as integer Dbg1 = FREEFILE ' erstes Dateihandle
open cons for output as #Dbg1
print #Dbg1, "KONSOLE 1 (1)"
Dbg1 = FREEFILE ' hier wird das erste handle überschrieben ohne das es geschlossen wurde!
dim as integer Dbg2 = FREEFILE ' jetzt besitzen beide Datei-Variablen die selbe Nummer!
open cons for output as #Dbg2
print #Dbg2, "KONSOLE 2 (1)"
print #Dbg1, "KONSOLE 1 (2)"
close #Dbg1
print #Dbg2, "KONSOLE 2 (2)"
close #Dbg2
sleep
|
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 29.02.2016, 15:19 Titel: |
|
|
Oh ja, ist richtig, da hat sich ein Fehler eingeschlichen. Muss ich nochmal testen, ob es dann ohne der fehlerhaften FREEFILE-Anweisung funktioniert. Ich weiß noch von früher, dass es (speziell unter Linux) Probleme beim Schließen gab, und es ist so noch in der Referenz vermerkt; kann aber sein, dass das zwischenzeitlich behoben ist.
Das kommt davon, wenn man unter Zeitdruck ein Programm schreiben soll. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 29.02.2016, 16:33 Titel: |
|
|
Das Funktioniert wunderbar! Aber... was mich im Moment ärgert ist, dass ich mit
Code: |
Shell "/bin/sh" 'z.B.
|
zwar eine Konsole öffnen kann, hab aber (bin ja noch nicht so alt mit Linux) keine Ahnung wie ich die mit meinem Programm verbinden soll. Vielleicht weiß hier jemand wie das geht? |
|
Nach oben |
|
|
Wh1sper
Anmeldungsdatum: 25.02.2016 Beiträge: 10
|
Verfasst am: 29.02.2016, 18:57 Titel: |
|
|
Wollte mich nur mal melden.
Das Problem ist nicht mehr akut, ich habe mir ein kleines sub geschrieben, was zum Debuggen völlig ausreicht.
Code: | /'
' declare sub CONSDBG (txt AS STRING) ' Zum debuggen auf Console
CONSDBG:
Zweck: Printausgabe auf die Console
Aufruf: CONSDBG txt
Beispiel:
CONSDBG "Ausgang: ausgx=" & ausgx
' Merken: & ist der String Concatenator
'/
sub CONSDBG (txt AS STRING)
DIM Dbg AS INTEGER
Dbg = FREEFILE
OPEN CONS FOR OUTPUT AS #Dbg
print #Dbg, "DBG:" & txt
CLOSE #Dbg
end sub |
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 29.02.2016, 23:06 Titel: |
|
|
Elor hat Folgendes geschrieben: | Das Funktioniert wunderbar! Aber... was mich im Moment ärgert ist, dass ich mit
Code: |
Shell "/bin/sh" 'z.B.
|
zwar eine Konsole öffnen kann, hab aber (bin ja noch nicht so alt mit Linux) keine Ahnung wie ich die mit meinem Programm verbinden soll. Vielleicht weiß hier jemand wie das geht? |
Da wirst du wohl eher mit OPEN PIPE arbeiten müssen. OPEN CONS öffnet nur zum bereits bekannten stdin bzw. stdout. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 01.03.2016, 11:56 Titel: |
|
|
nemored hat Folgendes geschrieben: |
Da wirst du wohl eher mit OPEN PIPE arbeiten müssen. OPEN CONS öffnet nur zum bereits bekannten stdin bzw. stdout. |
Für die Pipe's braucht man aber auch erst wieder eine Konsole, die ja nicht Automatisch geöffnet wird.
Ich hab Gestern nach einem Argument gesucht, das der Konsole sagt, gib die Kontrolle wieder an das aufrufende Programm zurück, ohne dich zu schließen.
Beispiel: Gibt zufällig farbige Punkte auf dem Bildschirm aus.
Code: |
/' ProgName: rndPoint.bas '/
#include "fbgfx.bi"
Dim hCon As Integer
hCon= FreeFile ()
Open Cons For OutPut As hCon
Print #hCon, "Zufallsgenerator initialisieren"
Randomize (Timer)
Print #hCon, "Grafik einschalten"
ScreenRes (800, 600, 8)
Print #hCon, "Zufällig Punkte mit zufälliger Farbe ausgeben, bis eine Taste gedrückt wird..."
Do
PSet ((Rnd* 799), (Rnd* 599)), (Rnd* 255)
Sleep (1)
Loop Until (InKey <> "")
Print #hCon, "Das Programm wird beendet!"
Close (hCon)
|
Wenn ich das aus dem File Browser starte, dann wird natürlich nur das Grafikfenster geöffnet. Entweder startet man das Programm aus der Konsole heraus, oder man stellt im Browser ein, dass dieses Programm mit der Konsole gestartet wird.
Es gibt ja noch die Möglichkeit das Programm mit Befehl "SHELL" zu starten.
Beispiel:
Code: |
/' ProgName: rndStart.bas '/
Shell "x-terminal-emulator -e ./rndPoint"
|
Meine Vorstellung war jetzt, dass ich diese Zeile in "rndPoint.bas" einfüge und den Dateinamen durch ein Argument ersetzte wie oben beschrieben (so ähnlich wie unter Windows die "cmd-start-argumente". Aber leider ist Linux doch nicht ganz so einfach gestrickt, schade!
Ach ja, das mit "x-terminal..." bezieht sich auf Linux Mint 17.1. |
|
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.
|
|