/*************************************************************************\
*                                                                         *
* bestand:                                                                *
*  Demo.ProANSI                                                           *
*                                                                         *
* auteur:                                                                 *
*  Marcel Offermans                                                       *
*                                                                         *
* NB:                                                                     *
*  Dit is een demonstratie, waarin een aantal ARexx commando's van        *
*  ProANSI te zien zijn. Dit programma kun je gebruiken om de werking van *
*  de commando's te bekijken, of als basis voor je eigen ARexx scripts.   *
*                                                                         *
\*************************************************************************/

/* een paar variabelen: */

/* een lijstje met de namen van de kleuren in `normaal nederlands' */
col.0 = "zwart"
col.1 = "rood"
col.2 = "groen"
col.3 = "geel"
col.4 = "blauw"
col.5 = "paars"
col.6 = "cyaan"
col.7 = "lichtgrijs"
col.8 = "donkergrijs"
col.9 = "lichtrood"
col.10 = "lichtgroen"
col.11 = "lichtgeel"
col.12 = "lichtblauw"
col.13 = "lichtpaars"
col.14 = "lichtcyaan"
col.15 = "wit"

/* ARexx even melden dat we met ProANSI willen praten. */
address 'REXX_ProANSI'

/* En dat we ook antwoord willen! */
options results

/*  Toon ProANSI's versie string. Dit kan trouwens ook via de Shell met het
 *  volgende commando:
 *  > version ProANSI FULL
 *  of:
 *  > ProANSI ?
 */
version
progversion = result
say 'ProANSI programmaversie: ' || progversion || '0a'x

/* even laten zien dat we het begrepen hebben... */
get_fcol
fcol = result
get_bcol
bcol = result

'select_col' 7 0

'set_pos' 0 0

print_string 'Als je ook even niet oplet...' || '0a'x
'print_string' 'De voorgrond was net ' || col.fcol || ', de achtergrond ' || col.bcol

call simple_box(2,6,77,21)

/* Een beetje dollen met de cursor... */

'select_col' 15 1
call simple_box(17,9,59,11)
'set_pos' 18 10
'print_string' '   Welkom bij ProANSI, dit is een demo   '

'select_col' 15 2
call simple_box(19,12,57,14)
'set_pos' 20 13
'print_string' ' van het ingebouwde ARexx interface. '

'go_down' 5
'select_col' 9 0
'print_string' 'Marcel Offermans'
'set_pos' 0 0
'select_col' 15 0

'select_col' 3 0
call simple_box(3,7,76,20)

'save_ansi' 'ram:testing'

exit 0

/*  En nu een beetje geavanceerder, zo hoef je in het programma geen
 *  box functie te bouwen, je doet het gewoon in ARexx, veel flexibeler!
 *  Wel een beetje langzamer, maar dat moet je dan maar op de koop toe
 *  nemen! Deze box functie werkt ook in de anim mode, da's het hele verschil.
 */
simple_box:
arg xmin, ymin, xmax, ymax

'set_pos' xmin ymin

if ((xmax <= xmin) || (ymax <= ymin)) then do
	return
end

/* Maak een string met lengte xmax-xmin */
topline = 'da'x || Copies('c4'x, xmax-xmin-1) || 'bf'x
'print_string' topline

do y = ymin+1 to ymax-1
	'set_pos' xmin y
	'print_string' 'b3'x
	'set_pos' xmax y
	'print_string' 'b3'x
end

'set_pos' xmin ymax

/* Maak een string met lengte xmax-xmin */
bottomline = 'c0'x || Copies('c4'x, xmax-xmin-1) || 'd9'x
'print_string' bottomline

return

/* Verlaten zou zijn:
 * 'quit'
 */
