home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / MENUNAME.C < prev    next >
C/C++ Source or Header  |  1990-09-07  |  2KB  |  102 lines

  1. /*
  2.     menuname.c
  3.  
  4.     % menu field name routines
  5.  
  6.     A name contains an integer (fieldno) and a string in one buffer.
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1988, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      3/04/89 jdc    rewrote for non class function symbols
  15.      8/09/89 jdc    changed oslist_GetSym to oslist_Get
  16.      1/20/90 jdc    speeded data retrieval (oslists)
  17.      1/21/90 jdc    changed oslist stuff
  18.      1/22/90 jdc    preened
  19.      3/28/90 jmd    ansi-fied
  20.      8/22/90 jdc    made menu_RemoveName a function 
  21.      9/07/90 jmd    renamed oslist funcs
  22. */
  23.  
  24. #include "menu.h"
  25.  
  26. int menu_AddName(menu_type menu, char *name, int fieldno)
  27. /*
  28.     Add a name to the menu's name list.
  29.     return a handle to the name.
  30.     Initialize the name first time called.
  31.     Returns -1 if it fails.
  32. */
  33. {
  34.     int nameno;
  35.  
  36.     if (menu->namelist == NULL) {
  37.         /* create name array */
  38.         if ((menu->namelist = oslist_Open(4, sizeof(int))) == NULL) {
  39.             return(-1);
  40.         }
  41.     }
  42.     nameno = oslist_SetSym(menu->namelist, name, (VOID *)(&fieldno));
  43.     
  44.     return(nameno);
  45. }
  46.  
  47. void menu_SetFieldName(menu_type menu, int fieldno, char *name)
  48. /*
  49.     Set a field's name name.
  50. */
  51. {
  52.     int nameno;
  53.  
  54.     if ((nameno = menu_GetFieldNameNo(menu, fieldno)) != OSLIST_BADNAME) {
  55.         /* remove old name */
  56.         menu_RemoveFieldName(menu, fieldno);
  57.     }
  58.  
  59.     /* add name */
  60.     nameno = menu_AddName(menu, name, fieldno);
  61.     menu_SetFieldNameNo(menu, fieldno, nameno);
  62. }
  63.  
  64. int menu_GetNameNo(menu_type menu, char *name)
  65. {
  66.     int h;
  67.  
  68.     if ((h = oslist_FindHandle(menu->namelist, name)) == OSLIST_BADNAME) {
  69.         return(-1);
  70.     }
  71.     return(*((int *)oslist_GetData(menu->namelist, h)));
  72. }
  73.  
  74. boolean    menu_RemoveFieldName(menu_type menu, int fld)
  75. {
  76.     int nameno, i, *namedata;
  77.  
  78.     if ((nameno = menu_GetFieldNameNo(menu, fld)) != OSLIST_BADNAME) {
  79.  
  80.         /* remove field to name connection */
  81.         menu_SetFieldNameNo(menu, fld, OSLIST_BADNAME);
  82.  
  83.         /* remove name to field connection, if necessary */
  84.          namedata = ((int *)oslist_GetData(menu->namelist, nameno));
  85.         if (*namedata == fld) {
  86.             *namedata = -1;
  87.         }
  88.  
  89.         for (i = 0; i < menu_GetFieldCount(menu); i++) {
  90.  
  91.             if (menu_GetFieldNameNo(menu, i) == nameno) {
  92.  
  93.                 /* can't delete name from list, used by another field */
  94.                 return(FALSE);
  95.             }
  96.         }
  97.         oslist_Delete(menu->namelist, nameno);
  98.     }
  99.  
  100.     return(TRUE);
  101. }
  102.