| ! ---------------------------------------------------------------------------- ! | |
| ! BoxClever.h by Roger Firth (roger@firthworks.com) | |
| ! | |
| ! 1.0 Jul 2002 | |
| ! Original version. | |
| ! | |
| ! ---------------------------------------------------------------------------- ! | |
| ! Installation: add the line: | |
| ! | |
| ! Include "BoxClever"; | |
| ! | |
| ! near the start of your game file. | |
| ! | |
| ! ---------------------------------------------------------------------------- ! | |
| ! | |
| ! BoxClever contains a replacement for Box__Routine, used by the compiler | |
| ! to implement the 'box' statement. By defining your own version of | |
| ! Box__Routine, you automatically override the standard definition (which | |
| ! can be found in the compiler source file veneer.c). | |
| ! | |
| ! The only purpose of the enhanced routine is to support the use of | |
| ! emboldening and underlining (or italics) in boxed text. These are controlled | |
| ! by surrounding the appropriate text by {...} and [..] respectively. | |
| ! For example: | |
| ! | |
| ! box "This display box" "uses both {bold}" "and [underlined] text"; | |
| ! | |
| ! You can use other controlling characters by defining the Constants boxB1, | |
| ! boxB0 etc before Including this file. For example: | |
| ! | |
| ! Constant boxB1 '<'; | |
| ! Constant boxB0 '>'; | |
| ! Include "BoxClever"; | |
| System_file; | |
| Array boxBuf -> 100; ! enough to hold a line of characters | |
| Default boxB1 '{'; ! character which turns bold ON | |
| Default boxB0 '}'; ! character which turns bold OFF | |
| Default boxU1 '['; ! character which turns underline ON | |
| Default boxU0 ']'; ! character which turns underline OFF | |
| [ Box__Routine | |
| maxw ! length of longest line of text | |
| table ! no. of lines, text1, text2, ... textN | |
| n w w2 line lc t b c; ! local variables | |
| n = table-->0; ! n = number of lines | |
| @add n 6 -> sp; | |
| @split_window sp; ! create upper window of n+6 lines | |
| @set_window 1; ! select upper window | |
| w = 0->33; ! w = width of window | |
| if (w == 0) w = 80; | |
| w2 = (w - maxw)/2; ! w2 = left margin | |
| style reverse; ! turn on reverse printing | |
| @sub w2 2 -> w; ! left/right border of two chars | |
| @set_cursor 4 w; ! position cursor to top of box | |
| spaces maxw + 4; ! print row of reverse spaces | |
| line = 5; lc = 1; ! get ready for text1 | |
| do { ! for each line of text... | |
| @set_cursor line w; ! position cursor | |
| spaces maxw + 4; ! print row of reverse spaces | |
| ! style roman; ! avoid reverse+bold|underline by... | |
| ! @set_cursor line w2; ! ...repositioning cursor, and... | |
| ! spaces maxw; ! ...printing row of normal spaces | |
| @set_cursor line w2; ! reposition cursor | |
| t = table-->lc; ! t = line of text | |
| @output_stream 3 boxBuf; | |
| print (string) t; ! expand into characters in buffer | |
| @output_stream -3; | |
| for (b=0 : b<boxBuf-->0 : b++) { | |
| c = boxBuf->(b+2); | |
| switch (c) { | |
| nothing: ; | |
| boxB1: style bold; | |
| boxB0: style roman; style reverse; | |
| boxU1: style underline; | |
| boxU0: style roman; style reverse; | |
| default: print (char) c; | |
| } | |
| } | |
| line++; lc++; ! done with this line | |
| style reverse; ! get ready for next line | |
| } until (lc > n); ! ...until all lines printed | |
| @set_cursor line w; ! position cursor to bottom of box | |
| spaces maxw + 4; ! print row of reverse spaces | |
| @buffer_mode true; ! turn on word-breaking | |
| style roman; ! turn off reverse printing | |
| @set_window 0; ! select lower window | |
| @split_window 1; ! create upper window of one line | |
| @output_stream -1; ! turn off screen output | |
| print "[ "; ! start transcript of box | |
| lc = 1; ! get ready for text1 | |
| do { | |
| t = table-->lc; ! t = line of text | |
| @output_stream 3 boxBuf; | |
| print (string) t; ! expand into characters in buffer | |
| @output_stream -3; | |
| for (b=0 : b<boxBuf-->0 : b++) { | |
| c = boxBuf->(b+2); | |
| if (c ~= nothing or boxB1 or boxB0 or boxU1 or boxU0) | |
| print (char) c; | |
| } | |
| lc++; ! done with this line | |
| if (lc > n) break; ! done with all lines? | |
| print "^ "; ! get ready for next line | |
| } until (false); | |
| print " ]^^"; ! end of box transcript | |
| @output_stream 1; ! turn on screen output | |
| ]; | |
| ! ---------------------------------------------------------------------------- ! | |
Xet Storage Details
- Size:
- 5.11 kB
- Xet hash:
- c00b0fef8ad3bbec8e928c94612142ca39a0f88efeb9de34a5cc2afa643719d6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.