home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / prog1 / boss719a.lzh / BOSSDEMO.C < prev    next >
C/C++ Source or Header  |  1990-06-16  |  31KB  |  895 lines

  1. /*
  2. ** Demo for The Window Boss
  3. **
  4. ** Copyright (c) 1985-1990 - Philip A. Mongelluzzo
  5. ** All rights reserved.
  6. **
  7. */
  8.  
  9. #include "windows.h"                    /* windows header file */
  10.  
  11. #if DLC
  12. int _stack = 8192;                      /* Datalight C */
  13. #endif
  14.  
  15. #if BORLAND
  16. unsigned _stklen = 8192;
  17. #endif
  18.  
  19. #define MAXWIN 100                      /* for 100 windows */
  20. WINDOWPTR wins[MAXWIN];                 /* DONT INCREASE IN SMALL MODEL */
  21.  
  22. unsigned blue = BLUE;                   /* remap for mono */
  23.  
  24. /*
  25. ** Prototypes to keep the new ANSI Compilers Happy
  26. */
  27.  
  28. #if BORLAND | WATCOM | MSC
  29. int main(int argc, char **argv);
  30. int dedemo(void);
  31. int pddemo(void);
  32. int dotelecom(int ch);
  33. int dosetup(int ch);
  34. int dofileman(int ch);
  35. int dooutput(int ch);
  36. int dorun(int ch);
  37. int doedit(int ch);
  38. int nap(int ticks);
  39. int hiber(int seconds);
  40. int chkesc(void);
  41. int paktc(void);
  42. #endif
  43.  
  44. main(argc,argv)
  45. int argc;
  46. char *argv[];
  47. {
  48. WINDOWPTR     w2, w3;                   /* a few windows */
  49. WINDOWPTR tw1, tw2, tw3;                /* and a few more */
  50.  
  51. WINDOWPTR wn_qpopup();                  /* function returns WP */
  52. int i,j;                                /* scratch integers */
  53. int t50rib;                             /* top 50 atrib */
  54. int watrib,batrib;                      /* scratch atributes */
  55. int rv;                                 /* for popup */
  56. int row,col;                            /* for 100 windows */
  57.  
  58. MOUSEPTR mm;                            /* my mouse ptr */
  59. int mstat, mclik, mrow, mcol;           /* mouse stuff */
  60.  
  61.   static struct pmenu m1 = {
  62.     00, FALSE, 00,
  63.     00, 00, {
  64.     01, 02, "Presenting", 0,
  65.     99, 99, "",99 }
  66.   };
  67.  
  68.   static struct pmenu m2 = {
  69.     00, FALSE, 00,
  70.     00, 00, {
  71.     01, 02, "The", 0,
  72.     03, 02, "W i n d o w   B O S S", 0,
  73.     05, 02, "Fast - Easy - Windows", 0,
  74.     07, 02, "for the C Language", 0,
  75.     99, 99, "",99 }
  76.   };
  77.  
  78.   static struct pmenu intelc = {
  79.     00, FALSE, 00,
  80.     02, 06, {
  81.     01, 02, "         Intellicom", 0,
  82.     02, 02, "        Quick - Help", 0,
  83.     04, 05, "1 General Information  ", 1,
  84.     05, 05, "2 Terminal Mode Options", 2,
  85.     06, 05, "3 XMODEM File Send     ", 3,
  86.     07, 05, "4 XMODEM File Receive  ", 4,
  87. #if MSC | DLC | CI86 | LC3
  88.      8, 05, "5 CompuServe Exec Mode ", 5,
  89. #else         
  90.     08, 05, "5 CompuServe Exec Mode ", 5,
  91. #endif
  92.     10, 02, "Press: ESC to quit or Cursor", 0,
  93.     11, 02, " Keys to Position Cursor then", 0,
  94.     12, 02, " press RETURN for MORE info.", 0,
  95.     99, 99, "",99 }
  96.   };
  97.  
  98. if(argc > 2) wn_dmaflg=FALSE;         /* for testing bios access */
  99.   if(wns_mtflg == 7) blue = BLACK;      /* remap if mono */
  100.   if(argc > 1) wn_dmode(PAINT);         /* pretend CGA */
  101.  
  102.   wn_init();                            /* save entry screen */
  103.  
  104.   batrib = v_setatr(WHITE,BLACK,0,BOLD);/* set border atrib */
  105.   watrib = v_setatr(WHITE,RED,0,0);     /* make it american */
  106.   w2 = wn_qpopup(0,0,0,16,3,watrib,batrib,&m1);
  107.   for(i=1; i<11; i++)                   /* move it into place */
  108.     w2 = wn_move(w2, i, i*2); 
  109.  
  110.   hiber(1);                             /* wait 1 second (aprx) */
  111.  
  112.   batrib = v_setatr(RED,WHITE,0,BOLD);  /* set border atrib */
  113.   watrib = v_setatr(blue,WHITE,0,BOLD); /* make this american too */
  114.   w3 = wn_qpopup(0,0,0,30,9,watrib|BOLD,batrib,&m2);
  115.   for(i=1; i<8; i++)                    /* move into place */
  116.     w3 = wn_move(w3,i,6*i);             /* move into place */
  117.  
  118.   hiber(5);                             /* reading time.. */
  119.  
  120.   wn_clr(w3);
  121.   wn_title(w3," PLEASE NOTE ");
  122.   wn_printf(w3,"\n");
  123.   wn_printf(w3,"This demo contains reading\n");
  124.   wn_printf(w3,"time delays that you can\n");
  125.   wn_printf(w3,"shorten by pressing the ESC\n");
  126.   wn_printf(w3,"key.\n\n");
  127.   wn_printf(w3,"Press any key to continue...");
  128.   paktc();
  129.  
  130.   wn_close(w3);                         /* close a couple */
  131.   hiber(1);
  132.   wn_close(w2);
  133.   hiber(1);
  134.  
  135.   watrib = v_setatr(WHITE,BLACK,0,BOLD);
  136.   for(i=0; i<25; i++) {                 /* build the back drop */
  137.     v_locate(0,i,0);                    /* position cursor */
  138.     v_wca(0, 0xb0, watrib, 80);         /* the fast way */
  139.   }
  140.   v_hidec();                            /* hide the cursor */
  141.  
  142.   watrib = v_setatr(WHITE,BLACK,0,0);   /* window attribute */
  143.   batrib = v_setatr(blue,WHITE,0,0);    /* border attribute */
  144.   w3 = wn_open(800,1,9,60,21,watrib,batrib);
  145.   w3->bstyle |= BOLD;                   /* toggle bold on then off */
  146.   wn_title(w3," The Window BOSS for C ");
  147.   w3->bstyle ^= BOLD;
  148.   wn_puts(w3,1,1,"The Window BOSS puts YOU in control of the most important");
  149.   wn_puts(w3,2,1,"sophisticated state-of-the-art screen handling techniques");
  150.   wn_puts(w3,3,1,"available today.  Pop-up windows, pull-down menus, status ");
  151.   wn_puts(w3,4,1,"lines and context sensitive help functions are a breeze ");
  152.   wn_puts(w3,5,1,"to implement!  Your program automatically senses the ");
  153.   wn_puts(w3,6,1,"video card installed and ALL your video output takes ");
  154.   wn_puts(w3,7,1,"place with no snow, no flicker, and no delay. But best of");
  155.   wn_puts(w3,8,1,"all, The Window BOSS is available as SHAREWARE software!");
  156.   wn_puts(w3,9,1," ");
  157.   wn_puts(w3,10,1,"The Window BOSS is available for the Lattice, Microsoft,  ");
  158.   wn_puts(w3,11,1,"Datalight, Borland, Mix Power C, Aztec, WATCOM, Zortech,");
  159.   wn_puts(w3,12,1,"and Computer Innovation CI86 C Compilers.  Registered");
  160.   wn_puts(w3,13,1,"users receive complete documentation, all source code,");
  161.   wn_puts(w3,14,1,"and libaries for the small and large memory models for");
  162.   wn_puts(w3,15,1,"all supported compilers (others can be locally created)!");
  163.   wn_puts(w3,16,1," ");
  164.   wn_puts(w3,17,1,"I challenge you to compare: The Window BOSS is faster");
  165.   wn_puts(w3,18,1,"and easier to use than most commercial products on the");
  166.   wn_puts(w3,19,1,"market today!");
  167.   hiber(30);
  168.  
  169.   wn_clr(w3);
  170.   wn_puts(w3, 1,1,"Tim Parker's column in the February 87 issue of Computer ");
  171.   wn_puts(w3, 2,1,"Language stated \"the ease of use will cause some ");
  172.   wn_puts(w3, 3,1,"programmers to go overboard with windows\", and \"if you ");
  173.   wn_puts(w3, 4,1,"are a die-hard C programmer looking for a useful, ");
  174.   wn_puts(w3, 5,1,"license-free product, this is it\".");
  175.   wn_puts(w3, 6,1," ");
  176.   wn_puts(w3, 7,1,"Hardin Bothers' column in the June 88 issue of PC ");
  177.   wn_puts(w3, 8,1,"Resource stated \"Within its domain, The Window BOSS is ");
  178.   wn_puts(w3, 9,1,"as useful and as powerful as any C library I've used\". ");
  179.   wn_puts(w3,10,1,"\"The Window BOSS owes much of its power to its ");
  180.   wn_puts(w3,11,1,"uncluttered organization. Although the product supports ");
  181.   wn_puts(w3,12,1,"five C Compilers - Microsoft C, Lattice C, Borland's ");
  182.   wn_puts(w3,13,1,"Turbo C, Computer Innovations CI86, and Datalight C - it ");
  183.   wn_puts(w3,14,1,"does it with a minmum of fuss\".");
  184.   wn_puts(w3,15,1," ");
  185.   wn_puts(w3,16,1,"The BOSS is currently being used by dozens of Fortune ");
  186.   wn_puts(w3,17,1,"500 Companies, numerous universities, and discriminating ");
  187.   wn_puts(w3,18,1,"\"C\" programmers around the world!  Haven't you waited ");
  188.   wn_puts(w3,19,1,"long enough?");
  189.   hiber(30);
  190.  
  191.  
  192.   wn_clr(w3);
  193.   wn_puts(w3, 1,1,"  Psst...");
  194.   wn_puts(w3, 2,1,"  ");
  195.   wn_puts(w3, 3,1,"    The Window BOSS is one of ");
  196.   wn_puts(w3, 4,1,"               PC-SIG's TOP 50 Best Selling Programs");
  197.   wn_puts(w3, 5,1,"  ");
  198.   wn_puts(w3, 6,1,"              ██████     █████      █████ ");
  199.   wn_puts(w3, 7,1,"                ██       █   █      █   █");
  200.   wn_puts(w3, 8,1,"                ██       █   █      █████");
  201.   wn_puts(w3, 9,1,"                ██       █   █      ██");
  202.   wn_puts(w3,10,1,"                ██       █████      ██");
  203.   wn_puts(w3,11,1,"  ");
  204.   wn_puts(w3,12,1,"                   █████      █████");
  205.   wn_puts(w3,13,1,"                   █          █   █");
  206.   wn_puts(w3,14,1,"                   █████      █   █");
  207.   wn_puts(w3,15,1,"                       █      █   █");
  208.   wn_puts(w3,16,1,"                   █████      █████");
  209.   wn_puts(w3,17,1,"  ");
  210.   wn_puts(w3,18,1,"            Shareware Magazine Jan-Feb 1990");
  211.   wn_puts(w3,19,1,"  ");
  212.   for(j=0; j<=WHITE; j++) {
  213.     t50rib = v_setatr(WHITE,j,0,BOLD);
  214.     wn_natrib(w3,t50rib);
  215.   }
  216.   wn_dmode(PAINT);
  217.   wn_natrib(w3,watrib);
  218.   wn_dmode(FLASH);
  219.   hiber(5);
  220.   
  221.   watrib = v_setatr(WHITE,blue,0,0);    /* window attribute */
  222.   batrib = v_setatr(RED,WHITE,0,BOLD);  /* border attribute */
  223.   w2 = wn_open(0,5,5,50,10,watrib,batrib);
  224.   if(!w2) exit(1);                      /* yes.. it should be better */
  225.   wn_puts(w2,0,0," Simple text output is very fast");
  226.   wn_puts(w2,1,0," and snow free.");
  227.   wn_puts(w2,3,0," Watch this....");
  228.   hiber(3);
  229.   wn_clr(w2);                           /* clear it then fill it */
  230.   for(i=0; i<10; i++)
  231.     wn_puts(w2,i,0," Very fast screen output - no snow!");
  232.   hiber(5);
  233.   wn_clr(w2);                           /* do it again */
  234.   for(i=0; i<10; i++)
  235.     wn_puts(w2,i,0," Another window full of fast text.");
  236.   hiber(5);
  237.  
  238.   wn_clr(w2);
  239.   wn_printf(w2," The BOSS also supports a printf function!\n");
  240.   wn_printf(w2," Its as simple as:\n\n");
  241.   wn_printf(w2," \twn_printf(wn,\"%%d\\n\",i);\n\n");
  242.   wn_printf(w2," to print a value in a window.\n\n");
  243.   wn_printf(w2," Scrolling works too\n");
  244.   wn_printf(w2," Lets count (slowly) to 10...\n");
  245.   wn_sync(w2, TRUE);
  246.   hiber(10);
  247.   for(i=1;i<11;i++) {
  248.     wn_printf(w2," The count is: %d\n", i);
  249.     nap(5);
  250.   }
  251.   wn_printf(w2," Ok, lets see what it looks like at\n");
  252.   wn_printf(w2," full speed.. (counting to 25)\n");
  253.   hiber(5);
  254.   for(i=1;i<26;i++)
  255.     wn_printf(w2," The count is: %d\n", i);
  256.   hiber(5);                             /* reading time */
  257.   wn_sync(w2, FALSE);
  258.   v_hidec();
  259.  
  260.   wn_clr(w2);
  261.   wn_putsa(w2,0,0," Full color support is provided.",WHITE<<4);
  262.   for(i=1; i<6; i++)
  263.     wn_putsa(w2,i,0, " Add a little color to your life.",WHITE<<4|i);
  264.   wn_putsa(w2,6,0," As is window movement....watch...",WHITE<<4|BLACK);
  265.   hiber(5);
  266.  
  267.   for(i=0; i<13; i++)                   /* move the window around */
  268.     w2 = wn_move(w2, i, i*2); 
  269.   hiber(5);
  270.   wn_printf(w2,"\n Lets put it back where we started...\n");
  271.   hiber(3);
  272.   w2 = wn_move(w2,5,5); 
  273.   wn_printf(w2," Now, lets add a title to our window!\n");
  274.   hiber(3);
  275.   w2->bstyle |= BOLD;
  276.   wn_title(w2," Pretty Powerful Stuff ");
  277.   w2->bstyle ^= BOLD;
  278.   hiber(5);
  279.  
  280. /* ============================= Tiled Window Stuff ===================== */
  281.  
  282.   wn_printf(w2," Tiled windows are supported\n");
  283.   wn_printf(w2," Lets add three.\n");
  284.   hiber(5);
  285.  
  286.   wn_sbit=FAST;
  287.   tw1 = wn_open(500,3,5,40,10, RED<<4|YELLOW|BOLD, RED<<4|WHITE|BOLD);
  288.   wn_sync(tw1,TRUE);
  289.   wn_printf(tw1,"ONE\n");
  290.   tw2 = wn_open(500,6,8,40,10, blue<<4|WHITE|BOLD, blue<<4|GREEN|BOLD);
  291.   wn_sync(tw2,TRUE);
  292.   wn_printf(tw2,"TWO\n");
  293.   tw3 = wn_open(500,9,11,40,10,GREEN<<4|WHITE|BOLD, GREEN<<4|WHITE|BOLD);
  294.   wn_sync(tw3,TRUE);
  295.   wn_printf(tw3,"THREE\n");
  296.   wn_printf(tw3," Press a key and watch TWO move\n");
  297.   wn_printf(tw3," To the top!!\n");
  298.   v_getch();
  299.  
  300.   wn_activate(tw2);
  301.   wn_printf(tw2," Press a key and watch THREE move\n");
  302.   wn_printf(tw2," To the top!!\n");
  303.   v_getch();
  304.   wn_activate(tw3);
  305.   wn_printf(tw3," Press a key and watch ONE move\n");
  306.   wn_printf(tw3," To the top!!\n");
  307.   v_getch();
  308.   wn_activate(tw1);
  309.  
  310.   wn_printf(tw1, " Ok..Press a key\n");
  311.   wn_printf(tw1, " and we will continue with the show!");
  312.   v_getch();
  313.  
  314.   wn_close(tw1);
  315.   wn_close(tw3);
  316.   wn_close(tw2);
  317.  
  318.   wn_clr(w2);
  319.   wn_printf(w2," 100 are as easy as 3!!\n");
  320.   wn_printf(w2," Press any key please..\n");
  321.   v_getch();
  322.  
  323.   for (i = 0; i < MAXWIN; i++) {
  324.      row = (rand() % 12) +3;
  325.      col = (rand() % 62) +2;
  326.      batrib = rand() % 16;
  327.      watrib = rand() % 128;
  328.      if(wns_mtflg == 7) {
  329.        batrib = v_setatr(BLACK,WHITE,0,BOLD);
  330.        watrib = v_setatr(BLACK,WHITE,0,BOLD);
  331.      }
  332.      wins[i] = wn_open(0,row,col,11,7,watrib, batrib);
  333.      if(!wins[i]) {
  334.        v_locate(0,0,0);
  335.        v_cls(NORMAL);
  336.        printf("wn_open failed...reduce MAXWIN!!\n");
  337.        exit(1);
  338.      }  
  339.      wn_printf(wins[i],"%d",i);
  340.   }
  341.   hiber(5);
  342.   
  343.   wn_clr(w2);
  344.   wn_printf(w2," Lets activate the bottom 10 one at a time.\n");
  345.   wn_printf(w2," When you hear the beep press a key...\n");
  346.   hiber(5);
  347.  
  348.   paktc();
  349.   for(i=0;i<10;i++) {
  350.     wn_printf(wins[i]," Activated!\n");
  351.     paktc();
  352.   }
  353.  
  354.   wn_clr(w2);
  355.   wn_printf(w2, " Truly Powerful Stuff!!\n");
  356.   wn_printf(w2, " Ok..Press a key\n");
  357.   wn_printf(w2, " and we will SLOWLY close all 100 windows by\n");
  358.   wn_printf(w2, " floating each window to the top of the stack\n");
  359.   wn_printf(w2, " and restoring the image that existed prior to\n");
  360.   wn_printf(w2, " the window being opened. Concurrently, all \n");
  361.   wn_printf(w2, " other hidden images will be adjusted to reflect\n"); 
  362.   wn_printf(w2, " the fact that a window has vanished!!\n");
  363.   v_getch();
  364.  
  365.   for(i=MAXWIN-1; i>=0; i--) {
  366.     wn_printf(wins[i]," Closing\n");
  367.     nap(2);
  368.     if(!wn_close(wins[i])) {
  369.       v_cls(7);
  370.       v_locate(0,0,0);
  371.       printf("wn_close failed!\n");
  372.       exit(1);
  373.     }
  374.   }
  375.  
  376.   wn_sbit=SLOW;
  377.  
  378. /* ========================= Popup & Help Stuff ========================= */
  379.  
  380.   wn_clr(w2);
  381.   wn_printf(w2," Popup Menus are a breeze.\n\n");
  382.   wn_printf(w2," Watch....");
  383.   hiber(2);
  384.  
  385.   wn_hlinit(0,0,78,23,BLUE<<4 | WHITE, BLUE<<4 | WHITE,"intelc");
  386.   do {
  387.     rv = wn_popup(0,0,0,33,14, WHITE<<4|BLACK, blue<<4|WHITE, &intelc,FALSE);
  388.  
  389.     switch (rv) {                       /* dispatch */
  390.       case 1:
  391.         wn_help("%general information%");
  392.         break;
  393.       case 2:
  394.         wn_help("%terminal%");
  395.         break;
  396.       case 3:
  397.         wn_help("%checksum xmit1%");
  398.         break;
  399.       case 4:
  400.         wn_help("%checksum recv1%");
  401.         break;
  402.       case 5:
  403.         wn_help("%cistty1%");
  404.         break;
  405.       case 99:
  406.       default:
  407.         break;
  408.     }
  409.   } while(rv !=99);
  410.  
  411. /***************************** Pulldown Stuff *****************************/
  412.  
  413.   wn_clr(w2);                           /* setup for pulldown */
  414.   wn_printf(w2," Pulldown Menus are easy too!!\n\n");
  415.   wn_printf(w2," Watch....");
  416.   hiber(2);
  417.   pddemo();                             /* pulldown sample */
  418.  
  419. /***************************** Data Entry Stuff **************************/
  420.  
  421.                                         /* set up for data entry */
  422.   wn_clr(w2);
  423.   wn_printf(w2," Naturally, The Window BOSS fully supports\n");
  424.   wn_printf(w2," data entry in windows!!\n\n");
  425.   wn_printf(w2," Lets try a small sample ....");
  426.   hiber(5);
  427.   dedemo();                             /* do the data entry demo */
  428.  
  429. /**************************** Summary Stuff *******************************/
  430.  
  431.   wn_clr(w2);                           /* clear the window */
  432.   w2->bstyle |= BOLD;                   /* toggle bold on then off */
  433.   wn_title(w2," The Window BOSS for C ");
  434.   w2->bstyle ^= BOLD;
  435.   wn_printf(w2,"\n\n  The following is a quick summary\n");
  436.   wn_printf(w2,"  of SOME of the functions available...");
  437.   hiber(4);
  438.  
  439.   wn_help("%bossinfo%");                /* provide some details */
  440.  
  441.   wn_clr(w2);                           /* and now the credits */
  442.   wn_printf(w2,"\n\n\n");
  443.   wn_printf(w2,"                  The Window BOSS\n");
  444.   wn_printf(w2,"             Copyright (c) 1985 - 1990\n");
  445.   wn_printf(w2,"              Philip  A. Mongelluzzo\n");
  446.   wn_printf(w2,"                 273 Windy Drive\n");
  447.   wn_printf(w2,"              Waterbury, Conn  06705\n");
  448.  
  449.   wn_printf(w2,"\n\t\t\t\tThats all folks...\n\n");
  450.  
  451.   hiber(10);                            /* all done ! */
  452.   wn_close(w2);
  453.   wn_close(w3);
  454.   wn_exit();                            /* restore entry screen */
  455.  
  456. /**************************** Mouse Stuff *********************************/
  457.  
  458.  
  459.   mm = mo_reset();                      /* init mouse */
  460.  
  461.   if(mm) {                              /* mouse exists */
  462.     printf("Simple Mouse Demo - press any key to continue...");
  463.     v_getch();
  464.     v_cls(NORMAL);                      /* clear the screen */
  465.     v_locate(0,0,0);                    /* locate the cursor */
  466.     printf("Mouse exists with %d buttons.\n", mo_nbutt(mm));
  467.     printf("Move mouse, randomly click right button, click left to end.\n");
  468.     mo_motion(mm);                      /* set motion counters */
  469.     mo_setptr(mm, 0x1E, NORMAL);        /* set mouse pointer style */
  470.     mo_reigon(mm, 0, 0, 80, 25);        /* set mouse "window" */
  471.     mo_show(mm);                        /* show the critter */
  472.  
  473.     do {                                /* click tests */
  474.       mo_press(mm, MO_RIGHT, &mstat, &mclik, &mrow, &mcol);
  475.       if(mclik > 0) {                   /* right button PRESSED ? */                           
  476.         v_locate(0,3,0);                /* display info if so */
  477.         printf("Right button @ %03d,%03d", mrow, mcol);
  478.       }
  479.       mo_release(mm, MO_LEFT, &mstat, &mclik, &mrow, &mcol); 
  480.       if(mclik > 0) {                   /* left RELEASED ? */
  481.         v_locate(0,4,0);
  482.         printf("Left  button @ %03d,%03d", mrow, mcol);
  483.       }
  484.     } while (mclik != 1);
  485.  
  486.     v_locate(0,5,0);
  487.     printf("Roll test... move mouse, click left or right for next test.\n");
  488.     do {                                /* rolling test */
  489.       mo_rcpos(mm, &mstat, &mrow, &mcol);
  490.       v_locate(0,6,0);
  491.       printf("Mouse @ %03d,%03d", mrow, mcol);
  492.     } while (!mstat);
  493.  
  494.     mo_wait(mm);                        /* wait for mouse to settle */
  495.     v_cls(NORMAL);                      /* clear screen */
  496.     v_locate(0,0,0);                    /* locate cursor */
  497.     printf("Mouse fence test\n");
  498.     printf("Just try n' get out!! (click)\n");
  499.     mo_locate(mm, 5, 0);                /* home mouse .. almost */
  500.     mo_reigon(mm, 5, 0, 10, 10);        /* set mouse window size */
  501.  
  502.     do {                                /* exit on button release */
  503.       mo_release(mm, MO_LEFT,  &mstat, &mclik, &mrow, &mcol); 
  504.       if(mclik)
  505.         break;
  506.       mo_release(mm, MO_RIGHT, &mstat, &mclik, &mrow, &mcol); 
  507.       if(mclik)
  508.         break;
  509.     } while (TRUE);
  510.  
  511.     v_cls(NORMAL);                      /* clear screen */
  512.     v_locate(0,0,0);                    /* home cursor */
  513.     mo_hide(mm);                        /* hide mouse */
  514.     mm = mo_reset();                    /* reset mouse */
  515.     exit(0);                            /* finito */
  516.   }
  517.   exit(0);
  518. }
  519.  
  520. /************************* Data Entry Demo Code ***************************/
  521.  
  522. dedemo()                                /* data entry demo */
  523. {
  524. WINDOWPTR wn;                           /* window pointer */
  525. WIFORM frm;                             /* form pointer */
  526. static struct db {                      /* record layout */
  527.   char  date[10];                       /* date string */
  528.   int   month,day,year;                 /* date numerics */
  529.   char  time[10];                       /* time string */
  530.   int   thrs,tmin,tsec;                 /* time numerics */
  531.   char  name[32];                       /* name */
  532.   char  adr[32];                        /* street address */
  533.   char  city[17];                       /* city */
  534.   char  st[4];                          /* state */
  535.   char  zip[8];                         /* zip */
  536.   char  phone[18];                      /* phone string */
  537.   int   ac, nnx, num;                   /* phone numerics */
  538.   char  age[4];                         /* age */
  539.   int   old;                            /* age numeric */
  540. } rec;
  541. unsigned atrib;                         /* data entry field atribute */
  542. char *emsg1,*emsg2,*emsg3;              /* error msg ptr */
  543. char fchar;                             /* fill character */
  544.  
  545.                                         /* open window */
  546.   wn = wn_open(0,10,10,42,9,(BLUE<<4|YELLOW|BOLD),(BLUE<<4|WHITE|BOLD));
  547.   if(!(wn)) {                           /* errors ?? */
  548.     printf("wn_open failed!!\n");       /* tell of woe... */
  549.     exit(1);                            /* and die */
  550.   }  
  551.   wn_title(wn," Sample Data Entry Form ");
  552.  
  553.   frm = wn_frmopn(11);                  /* form open for 10 fields */
  554.   if(!frm) {                            /* errors ?? */
  555.     printf("wn_frmopn failed!!\n");     /* tell of woe... */
  556.     exit(1);                            /* and die */
  557.   }
  558.  
  559.   atrib = (BLUE<<4) | WHITE | BOLD;     /* field attribute */
  560.   *rec.date = NUL;                      /* set edit buffer to zip */
  561.   *rec.time = NUL;                      /* set edit buffer to zip */
  562.   *rec.adr = NUL;                       /* set edit buffer to zip */
  563.   *rec.city = NUL;                      /* set edit buffer to zip */
  564.   *rec.st = NUL;                        /* set edit buffer to zip */
  565.   *rec.zip = NUL;                       /* set edit buffer to zip */
  566.   *rec.phone = NUL;                     /* set edit buffer to zip */
  567.   *rec.age = NUL;                       /* set edit buffer to zip */
  568.  
  569.   emsg1 = "Invalid date, press any key to continue...";
  570.   emsg2 = "Invalid time, press any key to continue...";
  571.   emsg3 = "Age must be between 1 and 99, press any key to continue...";
  572.  
  573.   fchar = '_';
  574.  
  575.   wn_gdate (SET,frm,0, wn,1,1, "Date: ",atrib,fchar,&rec.month,&rec.day,&rec.year,rec.date,NSTR,emsg1);
  576.   wn_gtime (SET,frm,1, wn,1,23,"Time: ",atrib,fchar,&rec.thrs,&rec.tsec,&rec.tmin, rec.time,NSTR,emsg2);
  577.   wn_gtext (SET,frm,2, wn,3,1, "Name: ",atrib,fchar,30,rec.name,NSTR,NSTR);
  578.   wn_gtext (SET,frm,3, wn,4,1, "Addr: ",atrib,fchar,30,rec.adr,NSTR,NSTR);
  579.   wn_gtext (SET,frm,4, wn,5,1, "City: ",atrib,fchar,15,rec.city,NSTR,NSTR);
  580.   wn_gutext(SET,frm,5, wn,5,23,  "ST: ",atrib,fchar,2,rec.st,NSTR,NSTR);
  581.   wn_gtext (SET,frm,6, wn,5,31, "Zip: ",atrib,fchar,5,rec.zip,NSTR,NSTR);
  582.   wn_gphone(SET,frm,7, wn,7,1, "Tele: ",atrib,fchar,&rec.ac,&rec.nnx,&rec.num,rec.phone,NSTR,NSTR);
  583.   wn_gint  (SET,frm,8, wn,7,23,"Age : ",atrib,fchar,&rec.old,2,1,99,rec.age,NSTR,emsg3);
  584.  
  585.   if(!wn_frmget(frm)) {                 /* get (read) form */
  586.     v_cls(7);                           /* die if errors !! */
  587.     v_locate(0,0,0);
  588.     printf("Memory Corruption Error!\n");
  589.     exit(1);
  590.   }
  591.  
  592.   wn_clr(wn);                           /* clear window & display data */
  593.   wn_printf(wn,"Data entered was:\n");
  594.   wn_printf(wn,"Date: %02d/%02d/%02d  ", rec.month, rec.day, rec.year);
  595.   wn_printf(wn,"Time: %02d:%02d:%02d\n", rec.thrs, rec.tmin, rec.tsec);
  596.   wn_printf(wn,"Name: %s\n",rec.name);
  597.   wn_printf(wn,"Adr:  %s\n",rec.adr);
  598.   wn_printf(wn,"City: %s ST: %s Zip: %s\n",rec.city, rec.st, rec.zip);
  599.   wn_printf(wn,"Tele: (%03d) %03d-%04d\n", rec.ac, rec.nnx, rec.num);
  600.   wn_printf(wn,"Age:  %2d\n",rec.old);
  601.   wn_printf(wn,"\nPress any key to continue..");
  602.   v_getch();
  603.  
  604.   wn_frmcls(frm);                       /* close for */
  605.   wn_close(wn);                         /* close window */
  606.   return(NULL);                         /* keep the compilers happy */
  607. }
  608.  
  609. /*********************** Pulldown Menu Code *******************************/
  610.  
  611. pddemo()
  612. {
  613. WINDOWPTR w0;                           /* back drop */
  614. int fini;                               /* finished flag */
  615. int watrib,batrib;                      /* scratch atributes */
  616. int rv;                                 /* for popup */
  617. int currch;                             /* current choice */
  618.  
  619. static struct pmenu mainbar = {         /* menu bar */
  620.   00, FALSE, 00,
  621.   00, 06, {
  622.   00, 05, "EDIT", 1,
  623.   00, 15, "RUN", 2,
  624.   00, 25, "OUTPUT", 3,
  625.   00, 35, "FILE MANAGER", 4,
  626.   00, 50, "SETUP", 5,
  627.   00, 60, "TELECOM", 6,
  628.   00, 70, "QUIT", 7,
  629.   99, 99, "",99 }
  630. };
  631.  
  632. static struct pmenu pdedit = {          /* Edit Pulldown */
  633.   00, FALSE, 00,
  634.   00, 05, {
  635.   00, 00, "Edit existing data file      ", 1,
  636.   01, 00, "Edit new data file           ", 2,
  637.   02, 00, "Pull up data file template   ", 3,
  638.   03, 00, "Select data file group       ", 4,
  639.   04, 00, "Print all data files         ", 5,
  640.    5, 00, "Save                         ", 6,
  641.   99, 99, "",99 }
  642. };
  643.  
  644. static struct pmenu pdrun = {           /* Run Pulldown */
  645.   00, FALSE, 00,
  646.   00, 01, {
  647.   00, 00, "Single  ", 1,
  648.   01, 00, "Batch   ", 2,
  649.   99, 99, "",99 }
  650. };
  651.  
  652. static struct pmenu pdoutput = {        /* Output Pulldown */
  653.   00, FALSE, 00,
  654.   00, 02, {
  655.   00, 00, "View    ", 1,
  656.   01, 00, "Print   ", 2,
  657.   02, 00, "Graphics", 3,
  658.   99, 99, "",99 }
  659. };
  660.  
  661. static struct pmenu pdfileman = {       /* File Manager Pulldown */
  662.   00, FALSE, 00,
  663.   00, 06, {
  664.   00, 00, "Rename  ", 1,
  665.   01, 00, "Copy    ", 2,
  666.   02, 00, "Delete  ", 3,
  667.   03, 00, "Chdir   ", 4,
  668.   04, 00, "Editor  ", 5,
  669.   05, 00, "Print   ", 6,
  670.   06, 00, "DOS     ", 7,
  671.   99, 99, "",99 }
  672. };
  673.  
  674. static struct pmenu pdsetup = {         /* Setup Pulldown */        
  675.   00, FALSE, 00,
  676.   00, 02, {
  677.   00, 00, "Colors  ", 1,
  678.   01, 00, "Printers", 2,
  679.   02, 00, "Plotters", 3,
  680.   99, 99, "",99 }
  681. };
  682.  
  683. static struct pmenu pdtelecom = {       /* Telcomm Pulldown */
  684.   00, FALSE, 00,
  685.   00, 01, {
  686.   00, 00, "No      ", 1,
  687.   01, 00, "Yes     ", 2,
  688.   99, 99, "",99 }
  689. };
  690.  
  691. static struct pmenu pdquit = {          /* Quit Pulldown */
  692.   00, FALSE, 00,
  693.   00, 01, {
  694.   00, 00, "No      ", 1,
  695.   01, 00, "Yes     ", 2,
  696.   99, 99, "",99 }
  697. };
  698.  
  699.   fini = FALSE;                         /* say we are not done */
  700.   w0 = wn_open(1000,0,0,80,25,NVIDEO,NVIDEO);   /* save entry screen */
  701.   if(!w0) return(NULL);                 /* less than graceful exit */
  702.  
  703.   wn_puts(w0,22,0, "Use cursor keys to highlight, Enter key to select");
  704.   wn_puts(w0,23,0, "Press ESC to return to Menu Bar");
  705.   wn_puts(w0,24,0, "To continue the demo ... Select Quit from menu bar, then YES from pulldown");
  706.  
  707.   batrib = v_setatr(BLACK,WHITE,0,0);   /* set border atrib */
  708.   watrib = v_setatr(BLACK,WHITE,0,0);   /* keep it simple too */
  709.  
  710.   do {                                  /* Pull down Loop */
  711.     rv = wn_popup(0,0,0,78,01, watrib, batrib, &mainbar, FALSE);
  712.     switch (rv) {                       /* dispatch based on mainbar */
  713.       case 1:                           /* Edit */
  714.         do {
  715.           currch = wn_popup(00,03, 5, 29, 6, watrib, batrib, &pdedit, FALSE);
  716.           doedit(currch);
  717.         } while (currch != 99);
  718.         break;
  719.       case 2:                           /* Run */
  720.         do {
  721.           currch = wn_popup(00,03, 15, 8, 2, watrib, batrib, &pdrun, FALSE);
  722.           dorun(currch);
  723.         } while (currch != 99);
  724.         break;
  725.       case 3:                           /* Output */
  726.         do {
  727.           currch = wn_popup(00,03, 25, 8, 3, watrib, batrib, &pdoutput, FALSE);
  728.           dooutput(currch);
  729.         } while (currch != 99);
  730.         break;
  731.       case 4:                           /* Filemanager */
  732.         do {
  733.           currch = wn_popup(00,03, 35, 8, 7, watrib, batrib, &pdfileman, FALSE);
  734.           dofileman(currch);
  735.         } while (currch != 99);
  736.         break;
  737.       case 5:                           /* Setup */
  738.         do {
  739.           currch = wn_popup(00,03, 50, 8, 3, watrib, batrib, &pdsetup, FALSE);
  740.           dosetup(currch);
  741.         } while (currch !=99);
  742.         break;
  743.       case 6:
  744.         do {
  745.           currch = wn_popup(00,03, 60, 8, 2, watrib, batrib, &pdtelecom, FALSE);
  746.           dotelecom(currch);
  747.         } while (currch != 99);
  748.         break;
  749.       case 7:                           /* quit */
  750.         currch = wn_popup(00,03, 70, 8, 2, watrib, batrib, &pdquit, TRUE);
  751.         if(currch == 2) {
  752.           fini = TRUE;
  753.           mainbar.winopn = FALSE;
  754.           wn_close(mainbar.wpsave);
  755.         }
  756.         break;
  757.       case 99:
  758.       default:
  759.         break;
  760.     }
  761.   } while(!fini);                       /* do till fini == TRUE */
  762.   wn_close(w0);
  763. }
  764.  
  765. dotelecom(ch)                           /* telcomm */
  766. int ch;
  767. {
  768. WINDOWPTR wn;
  769. static char *msg = "Telcom";
  770.  
  771.   if(ch == 99) return(NULL);
  772.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  773.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  774.   v_getch();
  775.   wn_close(wn);
  776. }
  777.  
  778. dosetup(ch)                             /* setup */
  779. int ch;
  780. {
  781. WINDOWPTR wn;
  782. static char *msg = "Setup";
  783.  
  784.   if(ch == 99) return(NULL);
  785.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  786.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  787.   v_getch();
  788.   wn_close(wn);
  789. }
  790.  
  791. dofileman(ch)                           /* file manager */
  792. int ch;
  793. {
  794. WINDOWPTR wn;
  795. static char *msg = "File";
  796.  
  797.   if(ch == 99) return(NULL);
  798.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  799.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  800.   v_getch();
  801.   wn_close(wn);
  802. }
  803.  
  804. dooutput(ch)                            /* output manager */
  805. int ch;
  806. {
  807. WINDOWPTR wn;
  808. static char *msg = "Output";
  809.  
  810.   if(ch == 99) return(NULL);
  811.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  812.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  813.   v_getch();
  814.   wn_close(wn);
  815. }
  816.  
  817. dorun(ch)                               /* single/batch mngr */
  818. int ch;
  819. {
  820. WINDOWPTR wn;
  821. static char *msg = "Run Manager";
  822.  
  823.   if(ch == 99) return(NULL);
  824.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  825.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  826.   v_getch();
  827.   wn_close(wn);
  828. }
  829.  
  830. doedit(ch)                              /* edit mngr */
  831. int ch;
  832. {
  833. WINDOWPTR wn;
  834. static char *msg = "Edit";
  835.  
  836.   if(ch == 99) return(NULL);
  837.   wn=wn_open(0,15,10,60,1,NVIDEO,NVIDEO);
  838.   wn_printf(wn,"  %s choice: %d,  Press any key to continue...............",msg,ch);
  839.   v_getch();
  840.   wn_close(wn);
  841. }
  842.  
  843. /************************* Miscellaneous Code *****************************/
  844.  
  845.  
  846. nap(ticks)                              /* sleep a few clock ticks */
  847. int ticks;
  848. {
  849. unsigned long tc;
  850. unsigned long ts, te;
  851.  
  852.   ts = wns_gticks();                    /* get current tick count */
  853.   do {
  854.     if(chkesc()) return(NULL);
  855.     te = wns_gticks();
  856.     tc = te-ts;
  857.   } while (tc < (unsigned long)ticks);
  858. }
  859.  
  860. hiber(seconds)
  861. int seconds;
  862. {
  863.   nap(seconds * 18);
  864.   return(NULL);
  865. }
  866.  
  867. chkesc()                                /* check for ESC while napping */
  868. {
  869. int c;
  870.  
  871.   if(v_kstat()) {
  872.     c=v_getch() & 0x7f;
  873.     switch(c) {
  874.       case ESC:
  875.         return(TRUE);
  876.       case ETX:
  877.         v_cls(7);
  878.         v_locate(0,0,0);
  879.         exit(0);
  880.       default:
  881.         return(FALSE);
  882.     }
  883.   }
  884.   return(FALSE);
  885. }
  886.  
  887. paktc()                                 /* press any key to continue */
  888. {
  889.   v_wtty(0x07);                         /* beep */
  890.   v_getch();
  891.   return(NULL);
  892. }
  893.  
  894. /* End */
  895.