home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / EXAMPLES / DEMOMOUS.C < prev    next >
C/C++ Source or Header  |  1991-03-09  |  7KB  |  248 lines

  1. /*
  2.     demomous.c
  3.  
  4.     C-scape 3.2    Example Program
  5.     Copyright (c) 1988, 1990 by Oakland Group, Inc.
  6.     ALL RIGHTS RESERVED.
  7.  
  8.     This program demonstrates how to use a mouse with C-scape.
  9.  
  10.     There are three seds (windows).
  11.     One is a small data entry screen.
  12.     Two is a list of choices that can be selected with the mouse or
  13.         space bar.
  14.     Three is a text window.
  15.  
  16.     You can select windows by moving the mouse over the desired window.
  17.     When you are finished you can quit by pressing ESC or by 
  18.     clicking the mouse on the field that says "Done".
  19.  
  20.     This program keeps a global list of its seds.  This list
  21.     is used by the special function spc_Jump to cycle between the windows
  22.     when the TAB key is pressed in order to simulate the mouse via
  23.     the keyboard.  The special function is attached to the seds in order
  24.     to intercept the TAB key.
  25.  
  26.     All of the seds use the mouse border, bd_mouse.  You can move any window
  27.     by clicking on its border and dragging.  If you click on a corner
  28.     and drag the sed changes size. 
  29.  
  30.     Revision History:
  31.     -----------------
  32.      2/15/90 jmd    added an auxiliary function to handle window topping
  33.      4/01/90 jmd    ansi-fied
  34.      6/06/90 jmd    changed main to return an int
  35.      9/14/90 bkd    changed to use exit(0) instead of return(0).
  36.     10/19/90 pmcm    included ostdlib.h for exit(), added return(1)
  37.     12/01/90 ted    prototyped main, except if Turbo C++.
  38.     12/04/90 ted    restored "" includes for C-scape headers (not <> includes).
  39. */
  40.  
  41. #include <stdio.h>
  42.  
  43. #include "cscape.h"
  44. #include "ostdlib.h"    /*    for exit() */
  45. #include "popdecl.h"    /* for pop_Prompt */
  46. #include "scancode.h"    /* for key names */
  47.  
  48. #include "useful.h"        /* for state names */
  49.  
  50. #ifdef OAK_DOS
  51. #    include "pcmode.h"    /* for pc_IsCompaq, pc_IsEGA, etc. */
  52. #endif
  53.  
  54. spc_func (spc_Jump);
  55.  
  56. #define WHITE_RED        0x47
  57. #define RED_WHITE        0x74
  58. #define WHITE_BLUE        0x17
  59. #define BLUE_WHITE        0x71
  60.  
  61. #define    THREETEXT        "C-scape mouse demostration.\nUse the mouse to select fields or move the windows.\n\nTo quit, click Done or press Escape."
  62.  
  63. #define    SHIP_NAMES        "US Mail,UPS Red,UPS Blue,Fedex"
  64.  
  65. char *choices[] = {
  66.         "Oregano  ",
  67.         "Basil    ",
  68.         "Garlic   ",
  69.         "Thyme    ",
  70.         "Ginger   ",
  71.         "Coriander",
  72.         "Galanga  "
  73. };
  74.  
  75. #define CHOICE_COUNT    (sizeof(choices) / sizeof(char *))
  76.  
  77. /*** global sedlist (see notes above) ***/
  78. sed_type sedlist[2];
  79.  
  80. /* Turbo C++ complains if main is prototyped */
  81. #ifndef TCP
  82. int main(void);
  83. #endif
  84.  
  85. int main(void)
  86. {
  87.     sed_type     sedone, sedtwo, sedthree;
  88.     menu_type     menuone, menutwo;
  89.     char         name[20], city[20], state[3], ship[20];
  90.     boolean        checklist[CHOICE_COUNT];
  91.     int            row;
  92.  
  93.     name[0] = '\0';
  94.     city[0] = '\0';
  95.     state[0] = '\0';
  96.     ship[0] = '\0';
  97.  
  98.     /* Open the display in text mode */
  99.     disp_Init(def_ModeText, FNULL);
  100.  
  101.     /* Turn on the mouse */
  102.     if (!hard_InitMouse()) {
  103.         pop_Prompt("Mouse driver not found!", -1, -1, -1, 25, 0x70, bd_mouse);
  104.     }
  105.     else {
  106.         /* Turn on sedwin mouse, link in mouse border support */
  107.         /* You must call this if you want to use mouse borders */
  108.         /* You can ignore this call if you do not want to use mouse borders */
  109.  
  110.         sedwin_ClassInit();
  111.     }
  112.  
  113.     /* map colors to black and white for mono (or compaq CGAs) displays */
  114. #ifdef OAK_DOS
  115.     if (disp_GetColors() <= 2L || (pc_IsCompaq() && pc_IsCGA() && !pc_IsEGA())){
  116. #else
  117.     if (disp_GetColors() <= 2L){        /* Non-DOS system */
  118. #endif
  119.  
  120.         disp_MapMono(TRUE);
  121.     }
  122.  
  123.     /*** create the first sed ***/
  124.     /* A small data entry window */
  125.  
  126.     menuone = menu_Open();
  127.  
  128.     menu_Printf(menuone, " Customer Information \n\n");
  129.  
  130.     menu_Printf(menuone, "Name:    @fd[#########]\n\n", 
  131.         name, &string_funcs, "Enter customer name");
  132.  
  133.     menu_Printf(menuone, "City:    @fd[#########]\n\n",
  134.         city, &alpha_funcs, "Enter customer city");
  135.  
  136.     menu_Printf(menuone, "State:   @fd2[##       ]\n\n", state, &alpha_funcs,
  137.             "Enter state abbrev.", STATE_2NAMES);
  138.  
  139.     menu_Printf(menuone, "Ship By: @fd2[#########]\n\n", ship, &toggle_funcs,
  140.             "Click for courier", SHIP_NAMES);
  141.  
  142.     menu_Printf(menuone, " @fd[       Done        ]",
  143.             NULL, &click_funcs, "Click to quit");
  144.  
  145.     sedone = sed_Open(menuone);
  146.  
  147.     sed_SetColors(sedone, RED_WHITE, RED_WHITE, WHITE_RED);
  148.     sed_SetBorder(sedone, bd_mouse);
  149.     sed_SetPosition(sedone, 10, 3);
  150.  
  151.     /* Attach a mouse handler to the sed */
  152.     sed_SetMouse(sedone, sedmou_Track);
  153.  
  154.     /*** create the second sed ***/
  155.     /* A list of things to check off */
  156.  
  157.     menutwo = menu_Open();
  158.  
  159.     menu_Printf(menutwo, " Select spice(s) to ship. "); 
  160.  
  161.     for (row = 0; row < CHOICE_COUNT; row++) {
  162.         checklist[row] = FALSE;
  163.  
  164.         menu_Printf(menutwo, "@p[%d,1]@f[# %s ]", row + 2, 
  165.                         &checklist[row], &check_funcs, choices[row]);
  166.     }
  167.  
  168.     sedtwo = sed_Open(menutwo);
  169.  
  170.     sed_SetColors(sedtwo, WHITE_RED, WHITE_RED, RED_WHITE);
  171.     sed_SetBorder(sedtwo, bd_mouse);
  172.     sed_SetPosition(sedtwo, 12, 45);
  173.  
  174.     /* Attach a mouse handler to the sed */
  175.     sed_SetMouse(sedtwo, sedmou_Track);
  176.  
  177.     /*** create the third sed ***/
  178.     /* This is a text box, we will use pop_Text to create it */
  179.     sedthree = pop_Text(THREETEXT, 1, 20, -1, 40, WHITE_BLUE, bd_mouse);
  180.  
  181.     /* Attach a mouse handler to the sed */
  182.     /* For this sed we use the 'click' handler, otherwise
  183.        simply moving the mouse into this window would quit the program.
  184.     */    
  185.     sed_SetMouse(sedthree, sedmou_Click);
  186.  
  187.     /*** put the seds into the global sed list ***/
  188.     /*  This is so the special function, spc_Jump can move between 
  189.         seds without using the mouse */
  190.     sedlist[0] = sedone;
  191.     sedlist[1] = sedtwo;
  192.     sed_SetSpecial(sedone, spc_Jump);
  193.     sed_SetSpecial(sedtwo, spc_Jump);
  194.  
  195.     /* attach a special function to the seds to ensure that they
  196.        are brought to the foreground when they are selected
  197.     */
  198.     sed_SetAux(sedone, aux_Top);
  199.     sed_SetAux(sedtwo, aux_Top);
  200.  
  201.     /*** paint the seds ***/
  202.     /* Note we only need call go on one sed, the mouse handlers
  203.         will pass control back and forth between the seds */
  204.  
  205.     sed_Repaint(sedone);
  206.     sed_Repaint(sedtwo);
  207.     sed_Repaint(sedthree);
  208.     sed_Go(sedone);
  209.  
  210.     /*** close the seds ***/
  211.     sed_Close(sedone);
  212.     sed_Close(sedtwo);
  213.     sed_Close(sedthree);
  214.  
  215.     /* shut down the display */
  216.     disp_Close();
  217.  
  218.     exit(0);
  219.     return(0);
  220. }
  221.  
  222. boolean spc_Jump(sed_type sed, int scancode)
  223. /*
  224.     A special which intercepts the TAB key and tells
  225.     the sed to quit and 'jump' to a new window.
  226.     Uses the global list of seds found at the top of this file.
  227. */
  228. {
  229.     if (scancode == TAB) {
  230.  
  231.         /* Quit this sed */
  232.         sed_ToggleExit(sed);
  233.  
  234.         /* Find other window, tell window manager to jump to it */
  235.         if (sed == sedlist[0]) {
  236.             /* we're sed one, jump to sed two */
  237.             sed_SetNextWin(sed, sed_GetWin(sedlist[1]));
  238.         }
  239.         else {
  240.             /* we're sed two, jump to sed one */
  241.             sed_SetNextWin(sed, sed_GetWin(sedlist[0]));
  242.         }
  243.         return(TRUE);
  244.     }
  245.     return(FALSE);
  246. }
  247.  
  248.