%kl_dbg_included = 1 %kl_dbg_new = 0 'create new window - up to 16, b$ = caption, returns instaance id on succes - use this idea for other operations %kl_dbg_cleanup = -1 'close all windows, returns true on succes %kl_dbg_size = -2 'resize window; string "id,x,y,width,height", values as text %kl_dbg_returnhw = -3 'return window handle; string "id", instance value as text %kl_dbg_setcolor = -4 ' 'string "id, fgcol, bgcol" &Hbbggrr format, returns true on success %kl_dbg_logfile = -5 'string "id, logfilename", returns logfile nr %kl_dbg_killwindow = -6 'for internal use only %kl_dbg_winstyle = %WS_POPUP OR _ %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR %WS_SYSMENU OR _ %WS_MINIMIZEBOX OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _ %DS_SETFOREGROUND OR %DS_3DLOOK OR %DS_NOFAILCREATE _ OR %DS_SETFONT %kl_dbg_winexstyle = %WS_EX_APPWINDOW OR %WS_EX_LEFT OR _ %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR 'OR %WS_EX_TOOLWINDOW #IF NOT %DEF(%WM_EXITSIZEMOVE) %WM_EXITSIZEMOVE = &H232 #ENDIF DECLARE FUNCTION kl_debug(BYVAL ins AS INTEGER, b$) AS INTEGER DECLARE CALLBACK FUNCTION kldebugproc FUNCTION kl_debug(BYVAL ins AS INTEGER, b$) AS INTEGER STATIC lastins AS LONG STATIC hw() AS LONG STATIC buf() AS STRING STATIC klogfile() AS LONG LOCAL i AS LONG LOCAL x AS LONG, y AS LONG, xx AS LONG, yy AS LONG IF ISFALSE lastins THEN DIM hw(255): DIM klogfile(255) IF ins < 0 THEN SELECT CASE ins CASE %kl_dbg_cleanup FOR i = 1 TO lastins IF klogfile(i) THEN CLOSE(klogfile(i)) klogfile(i) = 0 DIALOG END hw(i) hw(i) = 0 NEXT lastins = 0 FUNCTION = %true CASE %kl_dbg_size IF PARSECOUNT(b$, ",") < 5 THEN EXIT FUNCTION i = VAL(PARSE$(b$, ",", 1)) x = VAL(PARSE$(b$, ",", 2)) y = VAL(PARSE$(b$, ",", 3)) xx = VAL(PARSE$(b$, ",", 4)) yy = VAL(PARSE$(b$, ",", 5)) DIALOG SET LOC hw(i), x, y DIALOG SET SIZE hw(i), xx, yy CONTROL SET SIZE hw(i), 1, xx - 2, yy - 2 CONTROL SET TEXT hw(i), 1, buf(i) FUNCTION = %true CASE %kl_dbg_returnhw i = VAL(b$) FUNCTION = hw(i) CASE %kl_dbg_setcolor i = VAL(PARSE$(b$, ",", 1)) x = VAL(PARSE$(b$, ",", 2)) y = VAL(PARSE$(b$, ",", 3)) DIALOG SET COLOR hw(i), x, y CONTROL SET COLOR hw(i), 1, x, y CONTROL SET TEXT hw(i), 1, buf(i) CASE %kl_dbg_logfile i = VAL(PARSE$(b$, ",", 1)) IF i < 1 OR i > 16 THEN EXIT FUNCTION b$ = TRIM$(PARSE$(b$, ",", 2)) IF klogfile(i) THEN CLOSE klogfile(i) klogfile(i) = 0 END IF IF b$ = "" THEN EXIT FUNCTION END IF klogfile(i) = FREEFILE OPEN b$ FOR OUTPUT ACCESS WRITE LOCK WRITE AS klogfile(i) FUNCTION = klogfile(i) CASE %kl_dbg_killwindow ' for i = 1 to lastins ' if hw(i) = val(b$) then ' dialog end hw(i) ' hw(i) = 0 ' end if ' next END SELECT EXIT FUNCTION END IF IF ISFALSE ins THEN INCR lastins IF lastins > 16 THEN DECR lastins: ins = lastins b$ = "MAX DEBUGWINDOWS = 16 - EXCEEDED!!"+ $CRLF + b$ GOTO upd END IF ins = lastins REDIM PRESERVE buf(lastins) DIALOG FONT "Lucida Console", 8 'fixed with font.. DIALOG NEW 0, b$ + STR$(ins),ins * 10,ins * 10, 150, 70, %kl_dbg_winstyle, %kl_dbg_winexstyle TO hw(ins) CONTROL ADD TEXTBOX, hw(ins), 1, "", 1, 1, 148, 68, %ES_MULTILINE OR %WS_VSCROLL OR %ES_AUTOVSCROLL OR %ES_READONLY DIALOG SHOW MODELESS hw(ins), CALL kldebugproc REDIM PRESERVE buf(lastins) ' buf(lastins) = b$ + $crlf ELSEIF ins > lastins THEN INCR lastins b$ = "DEBUG INSTANCE SET!!" + $CRLF + b$ IF lastins > 16 THEN DECR lastins: ins = lastins b$ = "MAX DEBUGWINDOWS = 16 - EXCEEDED!!"+ $CRLF + b$ GOTO upd END IF ins = lastins DIALOG FONT "Lucida Console", 8 'fixed with font.. DIALOG NEW 0, b$ + STR$(ins),ins * 10,ins * 10, 150, 70, %kl_dbg_winstyle, %kl_dbg_winexstyle TO hw(ins) CONTROL ADD TEXTBOX, hw(ins), 1, "", 1, 1, 148, 68, %ES_MULTILINE OR %WS_VSCROLL OR %ES_AUTOVSCROLL OR %ES_READONLY DIALOG SHOW MODELESS hw(ins), CALL kldebugproc REDIM PRESERVE buf(lastins) ' buf(lastins) = b$ + $crlf END IF upd: IF klogfile(ins) THEN PRINT# klogfile(ins), b$ buf(ins) = b$ + $CRLF + LEFT$(buf(ins), 25000) IF hw(ins) THEN CONTROL SET TEXT hw(ins), 1, buf(ins) FUNCTION = ins END FUNCTION CALLBACK FUNCTION kldebugproc LOCAL rct AS rect LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_EXITSIZEMOVE, %WM_MOVE, %WM_INITDIALOG GetClientRect CBHNDL, rct y = rct.nbottom ' - 20 x = rct.nright '(rct.nright - rct.nleft) - 185 DIALOG PIXELS CBHNDL, x, y TO UNITS x, y x = x - 2 '176 y = y - 2 '3 CONTROL SET SIZE CBHNDL, 1, x, y FUNCTION = 0 CASE %WM_CLOSE kl_debug %kl_dbg_killwindow, STR$(CBHNDL) END SELECT END FUNCTION