| 
				
					|  | 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: 4710
 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: 4710
 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: 4710
 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: 4710
 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.
 
 |  |