/*
	Wavy Lines for the H19/Z19/H89/Z89
	Written by Leor Zolman, 11/81

	This program is configured for the H19 terminal, but may be used
	on ANY cursor-addressable terminal by:

		a) modifying the first four #define lines to suit your
		   particular terminal, and
		b) modifying the cursor addressing sequence (commented)
		   in the program to work for your terminal.

	For best effect, compile with:
	  A>cc1 wavy.c -e2000 -o <cr>
*/

/* The following four #define statements need customizing for your terminal: */

#define INIT	"\33E\33F\33x5"	/* clear screen, enter graphics mode,	*/
				/* and turn off the cursor		*/
#define UNINIT	"\33E\33G\33y5"	/* clear screen, exit graphics mode,	*/
				/* and turn cursor back on		*/

#define SLASH 'x'		/* these are special characters in H19	*/
#define BACKSLASH 'y'		/* graphics mode. If you don't have an  */
				/* H19, make these simply '/' and '\\'	*/


#define MAXL 200		/* maximum number of lines at one time */

int direc[MAXL];
char column[MAXL];
char i;
char nlines;

main()
{
top:	puts(UNINIT);
	srand1("How many wavy lines (1-200, q to quit) ? ");
	if (!scanf("%d",&nlines) || nlines < 1 || nlines > MAXL) exit();
	puts(INIT);

	for (i=0; i<nlines; i++)	/* initialize lines */
	{
		column[i] = 40;		/* start out at center */
		direc[i] = rand() % 2 * 2 - 1;
	}

	while (1)
	{
	   putch('\n');
	   if (kbhit() && getchar()) goto top;	/* if key hit, stop	*/

	   for (i = 0; i < nlines; i++)
	   {	
		putch('\33');		/* position cursor at row 23, 	*/
		putch('Y');		/* 		      column i	*/
		putch(' '+23);		/*   MODIFY THIS SECTION FOR	*/
		putch(' '+column[i]);	/*     NON-H19 TERMINALS!	*/

		putch ((direc[i] == -1) ? SLASH : BACKSLASH);

		if (rand() % (40 - (column[i]-39) * direc[i]))
			column[i] += direc[i];	/* keep same direction	*/
		else
			direc[i] = -direc[i];	/* change direction	*/
	   }
	}
}
