REM Memory Monitor utility v0.02 for use with SDLIDE.bbc REM R.T.Russell, http://www.rtrussell.co.uk/ 07-Sep-2023 GUIscale = 2.0 I% = INSTR(@cmd$, "-scale") : IF I% GUIscale = VALMID$(@cmd$, I% + 6) Darkmode% = INSTR(@cmd$, "-dark") <> 0 *ESC OFF VDU 23,22,200*GUIscale;150*GUIscale;8,16,16,128+8 - (128 AND Darkmode%) IF INKEY(-256) = &57 THEN SYS "SetWindowText", @hwnd%, "Memory Usage Monitor" *FONT Courier New,12,B ELSE SYS "SDL_SetWindowTitle", @hwnd%, "Memory Usage Monitor", @memhdc% OSCLI "FONT """ + @lib$ + "DejaVuSansMono""," + STR$INT(11 * GUIscale / 2) ENDIF OFF ON ERROR LOCAL IF FALSE THEN OSCLI "DELETE """ + @tmp$ + "memusage.dat""" ENDIF : RESTORE ERROR REM!WC Constants: SS_CENTER = 1 ON ERROR ERROR 0, REPORT$ + " at line " + STR$ERL : QUIT INSTALL @lib$ + "dlglib" INSTALL @lib$ + "fnusing" IF Darkmode% THEN COLOR 0, &FF, &FF, &FF COLOR 7, &40, &40, &40 COLOR 8, &80, &80, &80 COLOR 9, &7F, &7F, &7F COLOR 10, &60, &60, &60 COLOR 11, &FF, &FF, &FF COLOR 12, &00, &7F, &7F COLOR 13, &00, &7F, &FF COLOR 14, &C0, &C0, &00 COLOR 15, &10, &10, &10 ELSE PROC_setdialogpalette ENDIF Dlg% = FN_newdialog("", 180, 132) PROC_static(Dlg%,"Total heap usage:",100,16,11,90,16,0) PROC_textbox(Dlg%,"",101,106,10,56,12,0) PROC_static(Dlg%,"Total stack usage:",102,16,29,90,16,0) PROC_textbox(Dlg%,"",103,106,28,56,12,0) PROC_static(Dlg%,"Total library usage:",104,16,47,90,16,0) PROC_textbox(Dlg%,"",105,106,46,56,12,0) PROC_static(Dlg%,"String free space:",106,16,65,90,16,0) PROC_textbox(Dlg%,"",107,106,64,56,12,0) PROC_static(Dlg%,"Free heap/stack:",108,16,83,90,16,0) PROC_textbox(Dlg%,"",109,106,82,56,12,0) PROC_static(Dlg%,"(run program-under-test in debug mode)",110,4,106,172,16,SS_CENTER) PROC_registerdlgcallback(Dlg%, FNcallback()) PROC_getdlgrect(Dlg%, X%, Y%, W%, H%) IF INKEY(-256) = &57 THEN DIM rc{l%,t%,r%,b%} : rc.r% = W% DIV 2 + 2 : rc.b% = H% DIV 2 SYS "AdjustWindowRect", rc{}, &CF0000, 0 SYS "SetWindowPos", @hwnd%, FALSE, X%, Y%, rc.r% - rc.l%, rc.b% - rc.t%, 6 SYS "ShowWindow", @hwnd%, 5 ELSE SYS "SDL_SetWindowSize", @hwnd%, W% DIV 2 + 2, H% DIV 2, @memhdc% SYS "SDL_ShowWindow", @hwnd%, @memhdc% ENDIF VDU 26 IF FN_showdialogex(Dlg%, 0, H%, Darkmode%) PROC_closedialog(Dlg%) QUIT DEF FNcallback(dlg%, key%) IF key% <> TRUE THEN = FALSE LOCAL A%, B%, C%, D%, E%, F%, T% PRIVATE timout%, lastim%, oldA%, oldB%, oldC%, oldD%, oldE% OFF F% = OPENIN(@tmp$ + "memusage.dat") IF F% = 0 THEN = FALSE CASE EXT#F% OF WHEN 30: *FLOAT 40 WHEN 48: *FLOAT 64 WHEN 60: *FLOAT 80 OTHERWISE: CLOSE #F% : = FALSE ENDCASE INPUT #F%, T%, A%, B%, C%, D%, E% CLOSE #F% IF T% <> lastim% THEN lastim% = T% timout% = TIME + 200 ENDIF IF TIME > timout% THEN PROC_setdlgitemtext(dlg%, 101, "") PROC_setdlgitemtext(dlg%, 103, "") PROC_setdlgitemtext(dlg%, 105, "") PROC_setdlgitemtext(dlg%, 107, "") PROC_setdlgitemtext(dlg%, 109, "") A% = 0 : B% = 0 : C% = 0 : D% = 0 : E% = 0 ELSE PROC_setdlgitemtext(dlg%, 101, FNusing("###,###,###", A%)) PROC_setdlgitemtext(dlg%, 103, FNusing("###,###,###", B%)) PROC_setdlgitemtext(dlg%, 105, FNusing("###,###,###", D%)) PROC_setdlgitemtext(dlg%, 107, FNusing("###,###,###", E%)) PROC_setdlgitemtext(dlg%, 109, FNusing("###,###,###", C%)) ENDIF IF A% <> oldA% OR B% <> oldB% OR C% <> oldC% OR D% <> oldD% OR E% <> oldE% THEN PROC_refreshdialog(dlg%) oldA% = A% : oldB% = B% : oldC% = C% : oldD% = D% : oldE% = E% ENDIF = FALSE