A console in Scol » History » Version 1
iri, 09/24/2012 10:04 PM
| 1 | 1 | iri | h1. A console in Scol |
|---|---|---|---|
| 2 | |||
| 3 | The Scol console is very simple. It allows to display values and messages for debugging. |
||
| 4 | You must define a mask from the Scol settings (launch Scol, click right on the icon et choose Settings. Select the item "Mintenance"). |
||
| 5 | |||
| 6 | To show the console : *_showconsole* |
||
| 7 | To hide the console : *_hideconsole* |
||
| 8 | |||
| 9 | To display a string in the console : *_fooS* |
||
| 10 | To display an integer in the console : *_fooId* |
||
| 11 | To display an hexa in the console : *_fooI* |
||
| 12 | To display a list in the console : *_fooIList* or *_fooSList* |
||
| 13 | |||
| 14 | Others functions *_fooXXX* are availables from the non-standard library Syspack. |
||
| 15 | |||
| 16 | h2. How to have a customized console ? |
||
| 17 | |||
| 18 | This is an example, you can adapt at your case. |
||
| 19 | |||
| 20 | The code (by Loïc Berthelot, Scol language developer, 2000-2005) is : |
||
| 21 | |||
| 22 | <pre> |
||
| 23 | /* By Loïc Berthelot, aka Neywen */ |
||
| 24 | |||
| 25 | var CONSOLE_HIDE_LINENUM = 0;; |
||
| 26 | var CONSOLE_SHOW_LINENUM = 1;; |
||
| 27 | |||
| 28 | struct CONSOLE = |
||
| 29 | [ |
||
| 30 | win_CSL : ObjWin, // console window |
||
| 31 | txt_CSL : S, // content |
||
| 32 | objtxt_CSL : ObjText, // 2d text object |
||
| 33 | font_CSL : ObjFont, // font object |
||
| 34 | flag_CSL : I // flag |
||
| 35 | ] mkCONSOLE;; |
||
| 36 | |||
| 37 | |||
| 38 | typeof lastcsl = CONSOLE;; // console object |
||
| 39 | var LINECOUNT = 0;; // initial line count = 0 |
||
| 40 | |||
| 41 | /* When the console window is destroyed, font and text object are destroyed before the window */ |
||
| 42 | fun console_destroy (a, csl) = |
||
| 43 | _DSfont csl.font_CSL; |
||
| 44 | _DStext csl.objtxt_CSL; |
||
| 45 | 1;; |
||
| 46 | |||
| 47 | /* When the window object is resized, the text object is resized too */ |
||
| 48 | fun console_resize (win, csl, w, h) = |
||
| 49 | let _GETtextPositionSize csl.objtxt_CSL -> [x y _ _] in |
||
| 50 | _SIZEtext csl.objtxt_CSL (w-20) (h-20) x y; |
||
| 51 | 1;; |
||
| 52 | |||
| 53 | |||
| 54 | fun console_getLineNum () = |
||
| 55 | let |
||
| 56 | if (LINECOUNT < 10) then |
||
| 57 | strcat strcat " " (itoa LINECOUNT) " : " |
||
| 58 | else if (LINECOUNT < 100) then |
||
| 59 | strcat strcat " " (itoa LINECOUNT) " : " |
||
| 60 | else |
||
| 61 | strcat (itoa LINECOUNT) " : " |
||
| 62 | -> linenum in |
||
| 63 | ( |
||
| 64 | set LINECOUNT = LINECOUNT+1; |
||
| 65 | linenum; |
||
| 66 | );; |
||
| 67 | |||
| 68 | |||
| 69 | fun console_clear (csl) = |
||
| 70 | let if (csl == nil) then lastcsl else csl -> csl in |
||
| 71 | ( |
||
| 72 | set csl.txt_CSL = ""; |
||
| 73 | _SETtext csl.objtxt_CSL csl.txt_CSL; |
||
| 74 | );; |
||
| 75 | |||
| 76 | /* print a message in the console */ |
||
| 77 | fun console_print (csl, msg) = |
||
| 78 | let if (csl == nil) then lastcsl else csl -> csl in |
||
| 79 | ( |
||
| 80 | if ((csl.flag_CSL == CONSOLE_SHOW_LINENUM) || (csl.flag_CSL == nil)) then |
||
| 81 | set csl.txt_CSL = strcat strcat strcat csl.txt_CSL "\n" console_getLineNum msg |
||
| 82 | else |
||
| 83 | set csl.txt_CSL = strcat csl.txt_CSL msg; |
||
| 84 | |||
| 85 | _SETtext csl.objtxt_CSL csl.txt_CSL; |
||
| 86 | _SCROLLtext csl.objtxt_CSL 0 (_GETlineCount csl.objtxt_CSL)-1; |
||
| 87 | |||
| 88 | ); |
||
| 89 | 1;; |
||
| 90 | |||
| 91 | /* create the console window : |
||
| 92 | x, y : its position on the screen |
||
| 93 | w, h : its width and its height |
||
| 94 | flag : CONSOLE_HIDE_LINENUM ot CONSOLE_SHOW_LINENUM |
||
| 95 | the new console object is returned */ |
||
| 96 | fun console_create (x, y, w, h, flag) = |
||
| 97 | let mkCONSOLE [nil nil nil nil flag] -> csl in |
||
| 98 | ( |
||
| 99 | set csl.win_CSL = _CRwindow _channel nil x y w h WN_MENU|WN_SIZEBOX|WN_MINBOX "console"; |
||
| 100 | _CBwinDestroy csl.win_CSL @console_destroy csl; |
||
| 101 | _CBwinSize csl.win_CSL @console_resize csl; |
||
| 102 | |||
| 103 | set csl.font_CSL = _CRfont _channel 12 0 FF_WEIGHT "arial"; |
||
| 104 | |||
| 105 | set csl.objtxt_CSL = _CRtext _channel csl.win_CSL 10 10 w-20 h-20 |
||
| 106 | ET_AHSCROLL|ET_AVSCROLL|ET_ALIGN_LEFT|ET_BORDER|ET_HSCROLL|ET_VSCROLL nil; |
||
| 107 | |||
| 108 | set lastcsl = csl; |
||
| 109 | |||
| 110 | csl; |
||
| 111 | );; |
||
| 112 | |||
| 113 | Here is a very basic example for use this console : |
||
| 114 | |||
| 115 | fun main ()= |
||
| 116 | _showconsole; |
||
| 117 | |||
| 118 | // we create the console |
||
| 119 | console_create 50 50 500 300 CONSOLE_SHOW_LINENUM; |
||
| 120 | |||
| 121 | let 50 -> counter in |
||
| 122 | while counter >= 0 do |
||
| 123 | ( |
||
| 124 | // we write a message inside |
||
| 125 | console_print nil strcat "count : " itoa counter; |
||
| 126 | set counter = counter-1; |
||
| 127 | ); |
||
| 128 | |||
| 129 | 0;; |
||
| 130 | </pre> |
||
| 131 | |||
| 132 | |||
| 133 | |||
| 134 | |||
| 135 | License : "CC-BY-SA-2.0":https://creativecommons.org/licenses/by-sa/2.0/ |
||
| 136 | Tutorial by iri |
||
| 137 | Updated by / |