home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 1.ddi / EXAMPLE.EXE / CSCAPE / EXAMPLE / DEMOSLED.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-12  |  4.5 KB  |  190 lines

  1. /*
  2.     demosled.c
  3.  
  4.     Copyright (c) 1988, by Oakland Group, Inc.
  5.     ALL RIGHTS RESERVED.
  6.  
  7.     This program demonstrates the use of embedded screens.
  8.     Specifically, a screen (sed) is created which contains
  9.     a scrolling list (sled) and a text editor (ted) within it.
  10.  
  11.     This program includes mouse support.
  12.  
  13.     The data entered is saved in the ascii file "demosled.dat"
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19.  
  20. #include <cscape.h>
  21. #include <sled.h>
  22. #include <teddecl.h>
  23.  
  24. #define    DATAFILE    "demosled.dat"
  25.  
  26. #define BUF_LEN    1000
  27.  
  28. #define NAME_SIZE        11
  29. #define TYPE_SIZE       11
  30. #define WEIGHT_SIZE     4
  31. #define COMMENT_SIZE    40
  32.  
  33. static char buffer[BUF_LEN];
  34. static char text[BUF_LEN];
  35.     
  36. void main()
  37. {
  38.     menu_type     menu, slmenu, tmenu;
  39.     sed_type     sed, ted, sled;
  40.     int         row, array_size, weight;
  41.     char         owners_name[50];
  42.     FILE        *fp;
  43.  
  44.     /* Initialize the display interface */
  45.     disp_Init(def_ModeText, NULL);
  46.  
  47.     /* Turn on the mouse */
  48.     hard_InitMouse();
  49.  
  50.     /* Turn on sed window class mouse support */
  51.     sedwin_ClassInit();
  52.  
  53.     /* create the sled */
  54.     slmenu = menu_Open();
  55.  
  56.     menu_Printf(slmenu, "Name       Type     Weight Comment\n");
  57.     menu_Printf(slmenu, "@p[0]@f[@[%d,#]]",  NULL, &string_funcs, NAME_SIZE);
  58.     menu_Printf(slmenu, "@p[11]@f[@[%d,#]]", NULL, &string_funcs, TYPE_SIZE);
  59.     menu_Printf(slmenu, "@p[22]@f[@[%d,#]]", NULL, &int_funcs, WEIGHT_SIZE);
  60.     menu_Printf(slmenu, "@p[27]@fw33[@[%d,#]]", NULL, &string_funcs, COMMENT_SIZE);
  61.     menu_Flush(slmenu);
  62.  
  63.     sled = sled_Open(slmenu, 4, spc_Sled);
  64.     sed_SetBorder(sled, bd_sidebar);
  65.     sed_SetMouse(sled, sedmou_Click);
  66.  
  67.     /* open data file */
  68.     if ((fp = fopen(DATAFILE, "r")) == NULL ) {
  69.         array_size = 1;
  70.         owners_name[0] = '\0';
  71.         text[0] = '\0';
  72.     }
  73.     if (fp != NULL) {
  74.         rewind(fp);
  75.         /* read list size and owners name, the '~' is used as a delimiter */
  76.         /* see scanf() reference for the meaning of [^\n] */
  77.         fscanf(fp, "%d~%[^\n]\n", &array_size, owners_name);
  78.     }
  79.  
  80.     /* read array data from file */
  81.     for (row = 0; row < array_size; row++) {
  82.  
  83.         if (fp != NULL) {
  84.  
  85.             fscanf(fp, "%[^~]~", buffer);
  86.             sled_SetColVar(sled, 0, row, (VOID *)buffer);
  87.     
  88.             fscanf(fp, "%[^~]~", buffer);
  89.             sled_SetColVar(sled, 1, row, (VOID *)buffer);
  90.     
  91.             fscanf(fp, "%d~", &weight);
  92.             sled_SetColVar(sled, 2, row, (VOID *)&weight);
  93.     
  94.             fscanf(fp, "%[^\n]\n", buffer);
  95.             sled_SetColVar(sled, 3, row, (VOID *)buffer);
  96.         }
  97.     }
  98.  
  99.     /* read the note data from file */
  100.     if (fp != NULL) {
  101.         fread(text, 1, BUF_LEN, fp);
  102.         fclose(fp);
  103.     }
  104.     
  105.     /* create the ted notepad */
  106.     tmenu = menu_Open();
  107.     menu_Printf(tmenu, "@f[]", text, &ted_funcs);
  108.     menu_Flush(tmenu);
  109.  
  110.     ted = sed_Open(tmenu);
  111.     sed_SetBorder(ted, bd_mouse);
  112.     sed_SetBorderTitle(ted, "General Notes");
  113.     sed_SetHeight(ted, 4);
  114.     sed_SetWidth(ted, 60);
  115.     sed_SetSpecial(ted, spc_EmbedTed);
  116.     sed_SetMouse(ted, sedmou_Click);
  117.  
  118.     ted_SetWrapWidth(ted, 56);
  119.     ted_SetMaxSize(ted, 400L);
  120.  
  121.     /* create the master sed */
  122.     menu = menu_Open();
  123.     menu_Printf(menu, "@p[1,2]Owner: @fd[@[30,#]] ", owners_name, 
  124.         &string_funcs, "Aquarium owner's name");
  125.  
  126.     menu_Printf(menu, "@p[3,2]@fbd[]", NULL, &sled_funcs, 
  127.         sed_CreateBob(sled, BOB_DEPENDENT), 
  128.         "Tab, Shift_Tab, GreyPlus to insert a fish, GreyMinus to delete");
  129.  
  130.     menu_Printf(menu, "@p[9,1]@fbd[]", NULL, &bob_funcs, 
  131.         sed_CreateBob(ted, BOB_DEPENDENT), 
  132.         "Press Ctrl-PgUp to leave note pad");
  133.  
  134.     menu_Flush(menu);
  135.  
  136.     sed = sed_Open(menu);
  137.     sed_SetPosition(sed, 1, 1);
  138.     sed_SetBorder(sed, bd_mouse);
  139.     sed_SetBorderTitle(sed, "Aqua-O'Matic");
  140.     sed_SetMouse(sed, sedmou_Click);
  141.     sed_SetWidth(sed, sed_GetWidth(sed) + 1);
  142.  
  143.     /* the master sed handles painting, controling, and closing sub objects */
  144.     sed_Repaint(sed);
  145.     sed_Go(sed);
  146.  
  147.     /* We're done, now save data back to file */
  148.  
  149.     /* open data file */
  150.     fp = fopen(DATAFILE, "w");
  151.     rewind(fp);
  152.  
  153.     array_size = sled_GetColSize(sled);
  154.  
  155.     /* write list size and owners name, the '~' is used as a delimiter */
  156.     fprintf(fp, "%d~%s\n", array_size, owners_name);
  157.  
  158.     /* write array data to file, deallocate memory */
  159.     for (row = 0; row < array_size; row++) {
  160.  
  161.         fprintf(fp, "%s~%s~%d~%s\n", 
  162.             (char *)sled_GetColVar(sled, 0, row), 
  163.             (char *)sled_GetColVar(sled, 1, row), 
  164.             *(int *)sled_GetColVar(sled, 2, row), 
  165.             (char *)sled_GetColVar(sled, 3, row)
  166.         ); 
  167.     }
  168.  
  169.     /* write the note data to file, -1 so that we don't write the '\0' */
  170.     fwrite(text, 1, (SIZE_T) ted_GetSize(ted) - 1, fp);
  171.     fclose(fp);
  172.  
  173.     /* deallocate the seds, etc. */
  174.     sed_Close(sed);
  175.  
  176.     disp_Close();
  177. }
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.