'-------------------------------------------------------------------------------- ' This is "DosPrint+.inc" ' It allows to print formatted output to Windows console (CMD). ' Formats supported: ' [fc,bc] set foreground and background colors (fc/bc are the 0-15 DOS colors) '-------------------------------------------------------------------------------- ' In order to work, the produced .exe needs to have its byte #221 changed to ' CHR$(3), in order to enable console mode. See http://mougino.free.fr/code/ '-------------------------------------------------------------------------------- '-------------------------------------------------------------------------------- #INCLUDE ONCE "Win32Api.inc" #INCLUDE ONCE "WinBase.inc" '-------------------------------------------------------------------------------- '-------------------------------------------------------------------------------- FUNCTION DosPrint(BYVAL sText AS STRING) AS LONG STATIC iTxtDone AS LONG STATIC noConsole AS LONG STATIC hCon AS DWORD LOCAL e, sChar AS STRING LOCAL i, j AS LONG LOCAL fc, bc AS WORD IF hCon = 0 THEN hCon = GetStdHandle(BYVAL %STD_OUTPUT_HANDLE) IF hCon = %INVALID_HANDLE_VALUE THEN noConsole = %TRUE CALL FreeConsole() IF AllocConsole() THEN hCon = GetStdHandle(BYVAL %STD_OUTPUT_HANDLE) ELSE noConsole = %FALSE sText += $CRLF FOR i = 1 TO LEN(sText) sChar = MID$(sText, i, 1) IF sChar = "[" THEN INCR i j = INSTR(i, sText, "]") e = MID$(sText, i, j-i) IF INSTR(e,",") > 0 THEN fc = VAL(PARSE$(e,",",1)) bc = VAL(PARSE$(e,",",2)) : SHIFT LEFT bc, 4 CALL SetConsoleTextAttribute(hCon, fc+bc) END IF i += LEN(e) IF e <> "" THEN ITERATE FOR END IF CALL WriteConsole(hCon, BYCOPY sChar, LEN(sChar), iTxtDone, BYVAL 0) NEXT END IF FUNCTION = noConsole END FUNCTION '--------------------------------------------------------------------------------