changing the text color in DOS possible?

BlitzMax Forums/BlitzMax Programming/changing the text color in DOS possible?

Triforce Guardian(Posted 2006) [#1]
im not sure if its possible but could you change the color for DOS using blitzmax. its for a blitzmax program im working on and i dunno if thats possible


ozak(Posted 2006) [#2]
If you use Windows you could use the console API calls.
Otherwise I think it's one of those things that's hard to make crossplatform without core BlitzMax support for it.


Triforce Guardian(Posted 2006) [#3]
no im not making a cross platform. Its just for windows. also what api calls do i need to do?


ozak(Posted 2006) [#4]
Can't remember. Search MSDN.com. I can remember that you use SetConsoleTextAttribute to set the fore/background color of the text so maybe that's a starting point.

Heres a link to a quick example im C++: http://support.microsoft.com/default.aspx?scid=kb;en-us;104094


SoggyP(Posted 2006) [#5]
Hello.

Can't remember, but can't you change the prompt and throw in some ANSI codes...or was that the Amiga? (It's been a while :o) )

Goodbye.


Helios(Posted 2006) [#6]
Here you go, pretty simple

Edit: And oh btw its probably not the best idea to post the same topic multiple times (you've posted it in the beginners area as well)

' Simple console color example
' Written by Tim Leonard (Aka. Helios)

' Setup compiler
SuperStrict

' Import win32 functions
Extern "Win32"
	Function SetConsoleTextAttribute:Int(hConsoleOutput:Int Ptr,wAttributes:Int)
	Function GetStdHandle:Int Ptr(nStdHandle:Int)
End Extern

' A few usefull constants
Const STD_OUTPUT_HANDLE:Int = -11;
Const COLOR_BLACK:Int	= $0000
Const COLOR_BLUE:Int 	= $0001
Const COLOR_GREEN:Int 	= $0002 
Const COLOR_CYAN:Int 	= $0003
Const COLOR_RED:Int	= $0004
Const COLOR_MAGENTA:Int= $0005
Const COLOR_YELLOW:Int = $0006
Const COLOR_GREY:Int 	= $0007
Const COLOR_WHITE:Int 	= $0008

' Print out some junk to test the colors
Print "Hello world!"
SetConsoleColor(COLOR_RED|COLOR_WHITE) ; Print "Hello world!"
SetConsoleColor(COLOR_GREEN,True) 	   ; Print "Hello world!"

' Wait till somone presses a key
Print "Done, press any key to exit"
While Not AppTerminate()
Wend

' Sets the color of the console
Function SetConsoleColor(Color:Int,Background:Int = False)
	If Background = True Then Color:*$0010
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),Color)	
End Function



Stu_ovine(Posted 2007) [#7]
Sorry to bump an old thread, but with 1.24 running the above code and pressing the "X" in the console window crashes.

(compiled as non gui app)

Does anyone have a work around or fix for it ?


grable(Posted 2007) [#8]
It doesn crash actualy, but it is non-responsive so windows has to terminate it abnormaly.

Its because of this code:
' Wait till somone presses a key
Print "Done, press any key to exit"
While Not AppTerminate()
Wend


It seems polled input is only activated by a call to Graphics, (and possibly MaxGUI canvas?)

Its better to use feks Input()

or something like:
' Wait till somone presses a key
Print "Done, press any key to exit"
While Not getch()
	Delay 20 ' avoids eating cpu
Wend
End
Extern "C"
	Function getch:Int()
EndExtern


EDIT: i see now it doesnt realy solve the "crash" ;) but atleast it exits on key-press hehe.


SebHoll(Posted 2007) [#9]
More to the point, shouldn't clicking on the (X) on a console window generate an AppTerminate() event...


FlameDuck(Posted 2007) [#10]
More to the point, shouldn't clicking on the (X) on a console window generate an AppTerminate() event...
EVENT_APPTERMINATE only works on Macs AFAIK.