/* C_WDEMO.C

        C Windowing Toolbox demonstration program compiled as C_WDEMO.EXE

*/

#include <c_wdef.h>


main()

{
        int     w1, w2, w3, w4;
        int     i, c;
        char    str[10];
        char    *strptr;

        /* variables used so this demo runs correctly on either */
        /* mono or color screen */
        char w1bgc, w2bgc, w3bgc, w4bgc; /* window background */
        char w1bfgc, w2bfgc, w3bfgc, w4bfgc; /* border foreground */
        char w1bbgc, w2bbgc, w3bbgc, w4bbgc; /* border background */
        char w1tfg, w2tfg, w3tfg, w4tfg; /* text foreground */
        char gsfgc; /* color of text input by w_getstr () */

        /* Look at byte located at 40:49 in memory. If it */
        /* equals 2 or 3, then a color card is being used;*/
        /* if it equals 7, a monochrome card is installed */
        peek (0x40, 0x49, &str[0], 1);
        if ((str[0] == 2) || (str[0] == 3)) {
                /* window background, border foreground, border background */
                w1bgc = BG_RED;   w1bfgc = FG_BLUE;    w1bbgc = BG_BLUE;
                w2bgc = BG_GREEN;  w2bfgc = FG_LTGREEN; w2bbgc = BG_GREEN;
                w3bgc = BG_CYAN;  w3bfgc = FG_MAGENTA; w3bbgc = BG_MAGENTA;
                w4bgc = BG_GREEN; w4bfgc = FG_BROWN;   w4bbgc = BG_BROWN;
                /* window text foreground */
                w1tfg = FG_WHITE;
                w2tfg = FG_LTGREEN;
                w3tfg = FG_RED;
                w4tfg = FG_BLACK;
                gsfgc = FG_YELLOW;
        }
        else {
                /* plain white on black */
                w1bgc = w1bbgc = w2bgc = w2bbgc = w3bgc = w3bbgc =
                w4bgc = w4bbgc = NORM;
                w1bfgc = w2bfgc = w3bfgc = w4bfgc = NORM;
                w1tfg = w2tfg = w3tfg = w4tfg = NORM;
                gsfgc = NORM|BRIGHT;
        }

        /* always call this function first */
        w_init ();

        strptr = str;
        w_bgcolor (BG_BLACK);
        w_fgcolor (FG_BRTWHITE);
        border (10, 5, 55, 6, BLK_LN);
        w_writexy (27, 7, "C Windowing Toolbox");
        w_fgcolor (FG_WHITE);
        w_writexy (24, 8, "* Demonstration Program *");
        w_writexy (22, 15, "Send $15 for the C source to:");
        w_fgcolor (FG_BRTWHITE);
        w_writexy (26, 17, "Christopher McVicar");
        w_writexy (25, 18, "124 Wellington Heights");
        w_writexy (28, 19, "Avon, CT  06001");
        w_writexy (50, 23, "Press any key to continue");
        keyin ();

        /* define 4 windows */
        w1 = w_def (75, 5, BORDER);
        w2 = w_def (60, 20, BORDER);
        w3 = w_def (33, 14, BORDER);
        w4 = w_def (44, 9, BORDER);

        w_open (w1, 0, 3, CLR, w1bgc, BLK_LN, w1bfgc, w1bbgc);
        w_fgcolor (FG_WHITE);
        w_bgcolor (w1bgc);
        w_write ("Text can be ");
        w_fgcolor (NORM|BLINK);
        w_write ("blinking, ");
        w_fgcolor (FG_BRTWHITE|BLINK);
        w_write ("blinking bright, ");
        w_fgcolor (FG_BRTWHITE);
        w_write ("or just bright. ");
        w_fgcolor (NORM);
        w_write ("All graphics card colors are also available. ");
        w_write ("Press any key to continue");
        keyin ();

        w_open (w2, 20, 2, CLR, w2bgc, DBL_LN, w2bfgc, w2bbgc);
        w_fgcolor (w2tfg);
        w_bgcolor (w2bgc);
        w_write ("The window can scroll up or down...");
        w_writexy (0, 1, "Press any key to continue");
        keyin ();
        for (i = 0; i < 100; i++) {
                w_write ("Scrolling ");
                w_fgcolor (FG_BRTWHITE|BLINK);
                w_write ("UP ");
                w_fgcolor (w2tfg);
                w_write ("in the window ");
        }
        w_scroll (UP, 5);
        w_fgcolor (NORM);
        w_writexy (0, 17, "Press any key to continue");
        keyin ();

        w_open (w3, 10, 5, CLR, w3bgc, MXD_1, w3bfgc, w3bbgc);
        w_fgcolor (w3tfg);
        w_bgcolor (w3bgc);
        w_write ("Press any key to continue");
        keyin ();

        w_open (w4, 4, 10, CLR, w4bgc, BLK_LN, w4bfgc, w4bbgc);
        w_fgcolor (w4tfg);
        w_bgcolor (w4bgc);
        *(strptr+1) = 0; /* NULL terminated string */
        w_writexy (0, 1, "When a window is open, lines automatically");
        w_writexy (0, 2, "wrap around when the right edge is reached");
        w_writexy (0, 3, "Type in a line of characters or press");
        w_writexy (0, 4, "<Carriage Return>..");
        w_writexy (0, 5, "Press ");
        w_fgcolor (NORM|BRIGHT);
        w_write ("FUNCTION KEY 1 ");
        w_fgcolor (w4tfg);
        w_write ("to quit.");
        w_gotoxy (0, 6);
        while (1) {
                /* 59 is extended code for function key 1 */
                if (((*strptr = keyin ()) == 59) && extend)
                        break;
                /* carriage return */
                if (*strptr == 0x0D) {
                        w_scroll (UP, 1);
                        i = w_getcy ();
                        w_gotoxy (0, i);
                }
                else
                        w_write (strptr);
        }
        w_close ();

        w_fgcolor (w3tfg);
        w_bgcolor (w3bgc);
        strptr = "This is a string";
        w_writexy (0, 0, "Strings can be edited using the");
        w_writexy (0, 1, "usual editing keys. Try editing");
        w_writexy (0, 2, "the following sixteen character");
        w_writexy (0, 3, "string:");
        w_writexy (0, 4, "<Carriage Return> to continue..");
        w_gotoxy (8, 3);
        w_fgcolor (gsfgc);
        w_getstr (strptr, 16);
        w_close ();

        keyin ();
        w_close ();

        /* reopen prev window */
        w_open (w2, 0, 3, NOCLR, w2bgc, DBL_LN, w2bfgc, w2bbgc);
        w_fgcolor (NORM);
        w_bgcolor (w2bgc);
        w_writexy (0, 16, "Windows can be re-opened at a different location..");
        w_writexy (0, 17, "Press any key to continue");

        keyin ();
        w_close ();

        keyin ();
        w_close ();

        /* 'b_usage' == maximum window buffer storage used
        printf ("\nWindow buffer space used: %d", b_usage);
        */
}

