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

  1.  /*
  2.     demosled.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 the use of embedded screens.
  9.     Specifically, a screen (sed) is created which contains
  10.     a scrolling list (sled) and a text editor (ted) within it.
  11.  
  12.     This program includes mouse support.
  13.  
  14.     The data entered is saved in the ascii file "demosled.dat"
  15.  
  16.     Revision History:
  17.     -----------------
  18.      6/06/90 jmd    changed main to return an int
  19.      9/14/90 bkd    changed to use exit(0) instead of return(0).
  20.     10/05/90 pmcm    made notepad and sled prompts os sensitive
  21.     10/19/90 pmcm    included ostdlib.h for exit(), added return(1)
  22.     12/01/90 ted    prototyped main, except if Turbo C++.
  23.     12/04/90 ted    restored "" includes for C-scape headers (not <> includes).
  24.     12/07/90 bkd    merged changes from ted.
  25.     12/28/90 jmd    added second field data pointer to ted to enable cut/paste
  26. */
  27.  
  28. #include <stdio.h>
  29.  
  30. #include "cscape.h"
  31. #include "ostdlib.h"    /*    for exit() */
  32. #include "sled.h"
  33. #include "teddecl.h"
  34.  
  35. #define    DATAFILE    "demosled.dat"
  36.  
  37. #define BUF_LEN    1000
  38.  
  39. #define NAME_SIZE        11
  40. #define TYPE_SIZE       11
  41. #define WEIGHT_SIZE     4
  42. #define COMMENT_SIZE    40
  43.  
  44. static char buffer[BUF_LEN];
  45. static char text[BUF_LEN];
  46.  
  47. static char *notepad_prompt = 
  48. #    ifdef OAK_DOS
  49.             "Press Ctrl-PgUp to leave note pad";
  50. #    endif
  51. #    ifndef OAK_DOS
  52. #        ifdef OAK_VMS
  53.             "Press Ctrl-X PgUp (Ctrl-X Prev Screen) to leave note pad";
  54. #        else
  55.             "Press Ctrl-X PgUp to leave note pad";
  56. #        endif
  57. #    endif
  58.  
  59. static char *bobsled_prompt = 
  60. #    ifdef OAK_DOS
  61.             "Tab, Shift-Tab, GreyPlus to insert a fish, GreyMinus to delete";
  62. #    endif
  63. #    ifndef OAK_DOS
  64. #        ifdef OAK_VMS
  65.             "Tab, Ctrl-X Tab, Keypad Comma to insert, Keypad Minus to delete";
  66. #        else
  67.             "Tab, Ctrl-X Tab, Ctrl-X Plus to insert, Ctrl-X Minus to delete";
  68. #        endif
  69. #    endif
  70.     
  71. /* Turbo C++ complains if main is prototyped */
  72. #ifndef TCP
  73. int main(void);
  74. #endif
  75.  
  76. int main(void)
  77. {
  78.     menu_type     menu, slmenu, tmenu;
  79.     sed_type     sed, ted, sled;
  80.     int         row, array_size, weight;
  81.     char         owners_name[50];
  82.     FILE        *fp;
  83.  
  84.     /* Initialize the display interface */
  85.     disp_Init(def_ModeText, FNULL);
  86.  
  87.     /* Turn on the mouse */
  88.     hard_InitMouse();
  89.  
  90.     /* Turn on sed window class mouse support */
  91.     sedwin_ClassInit();
  92.  
  93.     /* create the sled */
  94.     slmenu = menu_Open();
  95.  
  96.     menu_Printf(slmenu, "Name       Type     Weight Comment\n");
  97.     menu_Printf(slmenu, "@p[0]@f[@[%d,#]]",  NULL, &string_funcs, NAME_SIZE);
  98.     menu_Printf(slmenu, "@p[11]@f[@[%d,#]]", NULL, &string_funcs, TYPE_SIZE);
  99.     menu_Printf(slmenu, "@p[22]@f[@[%d,#]]", NULL, &int_funcs, WEIGHT_SIZE);
  100.     menu_Printf(slmenu, "@p[27]@fw33[@[%d,#]]", NULL, &string_funcs, COMMENT_SIZE);
  101.     menu_Flush(slmenu);
  102.  
  103.     sled = sled_Open(slmenu, 4, spc_Sled);
  104.     sed_SetBorder(sled, bd_sidebar);
  105.     sed_SetMouse(sled, sedmou_Click);
  106.  
  107.     /* open data file */
  108.     if ((fp = fopen(DATAFILE, "r")) == NULL ) {
  109.         array_size = 1;
  110.         owners_name[0] = '\0';
  111.         text[0] = '\0';
  112.     }
  113.     if (fp != NULL) {
  114.         rewind(fp);
  115.         /* read list size and owners name, the '~' is used as a delimiter */
  116.         /* see scanf() reference for the meaning of [^\n] */
  117.         fscanf(fp, "%d~%[^\n]\n", &array_size, owners_name);
  118.     }
  119.  
  120.     /* read array data from file */
  121.     for (row = 0; row < array_size; row++) {
  122.  
  123.         if (fp != NULL) {
  124.  
  125.             fscanf(fp, "%[^~]~", buffer);
  126.             sled_SetColVar(sled, 0, row, (VOID *)buffer);
  127.     
  128.             fscanf(fp, "%[^~]~", buffer);
  129.             sled_SetColVar(sled, 1, row, (VOID *)buffer);
  130.     
  131.             fscanf(fp, "%d~", &weight);
  132.             sled_SetColVar(sled, 2, row, (VOID *)&weight);
  133.     
  134.             fscanf(fp, "%[^\n]\n", buffer);
  135.             sled_SetColVar(sled, 3, row, (VOID *)buffer);
  136.         }
  137.     }
  138.  
  139.     /* read the note data from file */
  140.     if (fp != NULL) {
  141.         fread(text, 1, BUF_LEN, fp);
  142.         fclose(fp);
  143.     }
  144.     
  145.     /* create the ted notepad */
  146.     tmenu = menu_Open();
  147.     menu_Printf(tmenu, "@fd2[]", text, &ted_funcs, NULL, NULL);
  148.     menu_Flush(tmenu);
  149.  
  150.     ted = sed_Open(tmenu);
  151.     sed_SetBorder(ted, bd_mouse);
  152.     sed_SetBorderTitle(ted, "General Notes");
  153.     sed_SetHeight(ted, 4);
  154.     sed_SetWidth(ted, 60);
  155.     sed_SetSpecial(ted, spc_EmbedTed);
  156.     sed_SetMouse(ted, sedmou_Click);
  157.  
  158.     ted_SetWrapWidth(ted, 56);
  159.     ted_SetMaxSize(ted, 400L);
  160.  
  161.     /* create the master sed */
  162.     menu = menu_Open();
  163.     menu_Printf(menu, "@p[1,2]Owner: @fd[@[30,#]] ", owners_name, 
  164.         &string_funcs, "Aquarium owner's name");
  165.  
  166.     menu_Printf(menu, "@p[3,2]@fbd[]", NULL, &bob_funcs, 
  167.         sed_CreateBob(sled, BOB_DEPENDENT), bobsled_prompt);
  168.  
  169.     menu_Printf(menu, "@p[9,1]@fbd[]", NULL, &bob_funcs, 
  170.         sed_CreateBob(ted, BOB_DEPENDENT), notepad_prompt);
  171.  
  172.     menu_Flush(menu);
  173.  
  174.     sed = sed_Open(menu);
  175.     sed_SetPosition(sed, 1, 1);
  176.     sed_SetBorder(sed, bd_mouse);
  177.     sed_SetBorderTitle(sed, "Aqua-O'Matic");
  178.     sed_SetMouse(sed, sedmou_Click);
  179.     sed_SetWidth(sed, sed_GetWidth(sed) + 1);
  180.  
  181.     /* the master sed handles painting, controling, and closing sub objects */
  182.     sed_Repaint(sed);
  183.     sed_Go(sed);
  184.  
  185.     /* We're done, now save data back to file */
  186.  
  187.     /* open data file */
  188.     fp = fopen(DATAFILE, "w");
  189.     rewind(fp);
  190.  
  191.     array_size = sled_GetColSize(sled);
  192.  
  193.     /* write list size and owners name, the '~' is used as a delimiter */
  194.     fprintf(fp, "%d~%s\n", array_size, owners_name);
  195.  
  196.     /* write array data to file, deallocate memory */
  197.     for (row = 0; row < array_size; row++) {
  198.  
  199.         fprintf(fp, "%s~%s~%d~%s\n", 
  200.             (char *)sled_GetColVar(sled, 0, row), 
  201.             (char *)sled_GetColVar(sled, 1, row), 
  202.             *(int *)sled_GetColVar(sled, 2, row), 
  203.             (char *)sled_GetColVar(sled, 3, row)
  204.         ); 
  205.     }
  206.  
  207.     /* write the note data to file, -1 so that we don't write the '\0' */
  208.     fwrite(text, 1, (SIZE_T) ted_GetSize(ted) - 1, fp);
  209.     fclose(fp);
  210.  
  211.     /* deallocate the seds, etc. */
  212.     sed_Close(sed);
  213.  
  214.     disp_Close();
  215.  
  216.     exit(0);
  217.     return(0);
  218. }
  219.