ui • console_perso

Console personnalisée

Il peut être utile d'avoir une console attachée à une application, notamment pour la déboguer avec un meilleur confort.
On peut y afficher n'importe quelle donnée de type S à n'importe quel moment de l'exécution du programme.

Elle se présente comme une simple fenêtre avec un large champ texte. Une API basique permet d'écrire, effacer, ajouter, ... des données. Elle est suffisamment générique pour être réutilisée et/ou adaptée aux besoins.

Ce script est de Loïc Berthelot.

var CONSOLE_HIDE_LINENUM = 0;;
var CONSOLE_SHOW_LINENUM = 1;;

struct CONSOLE =
[
  win_CSL : ObjWin,
  txt_CSL : S,
  objtxt_CSL : ObjText,
  font_CSL : ObjFont,
  flag_CSL : I
] mkCONSOLE;;


typeof lastcsl = CONSOLE;;
var LINECOUNT = 0;;


fun console_destroy (a, csl) = 
  _DSfont csl.font_CSL;
  _DStext csl.objtxt_CSL;
  1;;


fun console_resize (win, csl, w, h) = 
  let _GETtextPositionSize csl.objtxt_CSL -> [x y _ _] in
  _SIZEtext csl.objtxt_CSL (w-20) (h-20) x y;
  1;;


fun console_getLineNum () = 
let
  if (LINECOUNT < 10)
  then strcat strcat "  " (itoa LINECOUNT) " : "
  else if (LINECOUNT < 100)
  then strcat strcat " " (itoa LINECOUNT) " : "
  else strcat (itoa LINECOUNT) " : "
-> linenum
in
(
  set LINECOUNT=LINECOUNT+1;
  linenum;
);;

  
fun console_clear (csl) = 
  let if (csl == nil) then lastcsl else csl -> csl
  in
  (
  	set csl.txt_CSL = "";
 	_SETtext csl.objtxt_CSL csl.txt_CSL;
   );;

fun console_print (csl, msg) = 
  let if (csl == nil) then lastcsl else csl -> csl
  in
  (
    if ((csl.flag_CSL == CONSOLE_SHOW_LINENUM) || (csl.flag_CSL == nil))
    then
    set csl.txt_CSL = strcat strcat strcat csl.txt_CSL "\n" console_getLineNum msg
    else set csl.txt_CSL = strcat csl.txt_CSL  msg;

    _SETtext csl.objtxt_CSL csl.txt_CSL;
    _SCROLLtext csl.objtxt_CSL 0 (_GETlineCount csl.objtxt_CSL)-1;

  );
  1;;



fun console_create (x, y, w, h, flag) = 
  let mkCONSOLE [nil nil nil nil flag] -> csl
  in
  (
    set csl.win_CSL = _CRwindow _channel nil x y w h WN_MENU|WN_SIZEBOX|WN_MINBOX "console";
    _CBwinDestroy csl.win_CSL @console_destroy csl;
    _CBwinSize csl.win_CSL @console_resize csl;

    set csl.font_CSL = _CRfont _channel 12 0 FF_WEIGHT "arial";

    set csl.objtxt_CSL = _CRtext _channel csl.win_CSL 10 10 w-20 h-20
                    ET_AHSCROLL|ET_AVSCROLL|ET_ALIGN_LEFT|ET_BORDER|ET_HSCROLL|ET_VSCROLL nil;

    set lastcsl = csl;

    csl;
  );;

Liste des articles de la rubrique ui :

console_perso
mini_editeur_texte
visionneuse_d_images