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

  1. /* 
  2.     demoslug.c
  3.  
  4.     C-scape 3.2    Example Program
  5.     Copyright (c) 1988, 1990 by Oakland Group, Inc.
  6.     ALL RIGHTS RESERVED.
  7.  
  8.     Example using the slug menuing system.
  9.  
  10.     In this example the user is asked whether to build a vertical
  11.     (ala Look & Feel) menu or a horizontal (123-type) menu.
  12.  
  13.     All the menu choices call the function 'empty' defined below.
  14.  
  15.     Revision History:
  16.     -----------------
  17.      4/01/90 jmd    ansi-fied
  18.      5/18/90 jmd    converted a NULL to FNULL
  19.      6/06/90 jmd    changed main to return an int
  20.      9/14/90 bkd    changed to use exit(0) instead of return(0).
  21.     10/19/90 pmcm    included ostdlib.h for exit(), added return(1)
  22.     12/01/90 ted    added oak_notused() macro to suppress warnings.
  23.     12/01/90 ted    prototyped main, except if Turbo C++.
  24.     12/01/90 ted    added disp_Close in default case.
  25.     12/04/90 ted    restored "" includes for C-scape headers (not <> includes).
  26. */
  27.  
  28. #include <stdio.h>
  29.  
  30. #include "cscape.h"
  31. #include "ostdlib.h"    /*     for exit() */
  32. #include "popdecl.h"
  33. #include "slug.h"
  34.  
  35. /*** Function prototypes ***/
  36.  
  37. /* Turbo C++ complains if main is prototyped */
  38. #ifndef TCP
  39. int main(void);
  40. #endif
  41.  
  42. int empty(VOID *sdata, int idata);
  43.  
  44. /* slug menu definition */
  45.  
  46. struct slug_list dbv_menu[] = {         /* note: values must be positive */
  47.  
  48.     {    " Insert ", "Insert a record",            NULL, empty, 20 },
  49.     {    " Delete ", "Delete a record",              NULL, empty, 23 },
  50.     {    " Next ",     "Display next record",        NULL, empty, 24 },
  51.     {    " Previous ", "Display previous record",NULL, empty, 25 },
  52.     {    " Locate ", "Locate record",             NULL, empty, 26 },
  53.     {    " Sort ",     "Sort records",                  NULL, empty, 27 },
  54.     {    " Output ", "List data records",         NULL, empty, 28 },
  55.     {   NULL,         "Database Menu",                  NULL, FNULL,   0 }
  56. };
  57.  
  58. struct slug_list block_menu[] = {
  59.  
  60.     {    " Copy ",   "Copy block to buffer",         NULL, empty, 22 },
  61.     {    " Delete ", "Delete block",                 NULL, empty, 23 },
  62.     {    " Move ",   "Move block",                  NULL, empty, 25 },
  63.     {    " Paste ",  "Paste buffer",                 NULL, empty, 26 },
  64.     {    " Fill ",   "Fill block",                NULL, empty, 27 },
  65.     {    " Attribute ", "Colour block",            NULL, empty, 28 },
  66.     {    " DataBase? ", "Access data base",        dbv_menu, empty, 20 },
  67.     {   NULL,         "Block Menu",                  NULL, FNULL,      0 }
  68. };
  69.  
  70. #define    QUIT        6
  71.  
  72. struct slug_list main_menu[] = {
  73.  
  74.     {    " Block ",    "Block functions",             block_menu,    FNULL,      1},
  75.     {    " Characters ",    "Character set",         NULL,     empty,        2},
  76.     {    " Disk ",    "Disk functions",            NULL,     empty,         4},
  77.     {    " Erase ",    "Clear entire screen",        NULL,     empty,         8},
  78.     {    " Field ",    "Field functions",            NULL,     empty,         3},
  79.     {    " Lines ",    "Line drawing  (^L)",          NULL,     empty,         7},
  80.     {    " Set up ", "Set global data",             NULL,     empty,        5},
  81.     {    " Quit ",    "Leave the program",        NULL,     FNULL,      QUIT},
  82.     {   NULL,         "Main Menu",                  NULL,     FNULL,         0}
  83. };
  84.  
  85. /* list for pop_Menu */
  86. static char *dir[] = {
  87.     "Horizontal",
  88.     "Vertical", 
  89.     NULL
  90. };
  91.  
  92. int main(void)
  93. {
  94.     sed_type slug;
  95.     int row, col;
  96.  
  97.     /* Initialize the display */
  98.     disp_Init(def_ModeText, FNULL);
  99.  
  100.     /* Turn on the mouse */
  101.     if (!hard_InitMouse()) {
  102.         pop_Prompt("Mouse driver not found!", -1, -1, -1, 25, 0x70, bd_prompt);
  103.     }
  104.     else {
  105.         /* Turn on sedwin mouse, link in mouse border support */
  106.         /* You must call this if you want to use mouse borders */
  107.         /* You can ignore this call if you do not want to use mouse borders */
  108.         sedwin_ClassInit();
  109.     }
  110.  
  111.     switch (pop_Menu("Select menu direction", dir, -1, -1, -1, -1, 0x70, 0, bd_title)) {
  112.     case 1:
  113.         slug = slug_Open(main_menu,    SLUG_HORIZONTAL, bd_123, 0x07, 0x70, 0x07);
  114.         row = 0;
  115.         col = 0;
  116.         /* Paint the menu bar first */
  117.         slug_Repaint(slug, row, col);
  118.         break;
  119.     case 2:
  120.         slug = slug_Open(main_menu, SLUG_VERTICAL, bd_std, 0x70, 0x07, 0x70);
  121.         row = 5;
  122.         col = 20;
  123.         break;
  124.     default:
  125.         /* Close down the display interface */
  126.         disp_Close();
  127.  
  128.         exit(0);
  129.         return(0);
  130.     }
  131.  
  132.     slug_Go(slug, 0, row, col, NULL);
  133.     slug_Close(slug);
  134.  
  135.     /* Close down the display interface */
  136.     disp_Close();
  137.  
  138.     exit(0);
  139.     return(0);
  140. }
  141.  
  142. int empty(VOID *sdata, int idata)
  143. /*
  144.     A user supplied function...
  145. */
  146. {
  147.     char msg[80];
  148.  
  149.     oak_notused(sdata);
  150.  
  151.     sprintf(msg, "This is message number %d\n", idata);
  152.  
  153.     pop_Prompt(msg, -1, -1, -1, -1, 0x70, bd_2);
  154.  
  155.     /* return 0 to return to menuing system */
  156.     /* return positive value to exit menuing system */
  157.  
  158.     return(0);
  159. }
  160.  
  161.