home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / MENUDFLD.C < prev    next >
C/C++ Source or Header  |  1990-08-23  |  3KB  |  135 lines

  1. /*
  2.     menudfld.c     4/10/88
  3.  
  4.     % menu_DeleteField
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      6/24/88 jmd    converted to new xarray/iarray calls
  13.      8/24/88 jmd    added bob list support
  14.  
  15.      2/01/89 jdc    fixed bob list support, menu->bobcount--;
  16.      2/02/89 jdc    fixed bob list support fix, if (menu->bobcount > 0)
  17.      4/22/89 jmd    really fixed bob list support, menu->bobcount--;
  18.      4/24/89 jdc    fixed namelist and funcnamea
  19.         5/29/89 jdc    added varname array
  20.      7/02/89 jdc    added functype array
  21.  
  22.     10/02/89 jmd    fixed NULL reference in delete field
  23.     11/12/89 jdc    fixed name reference
  24.     11/20/89 pmcm   really fixed name reference
  25.      1/20/90 jdc    speeded data retrieval (oslists)
  26.      3/28/90 jmd    ansi-fied
  27.      8/23/90 jdc    tweeked for CHILDCLOSE msg, added menu_RemoveFieldName
  28. */
  29.  
  30. #include "sed.h"
  31. #include "fldpriv.h"
  32. #include "sfile.h"        /* for os_list stuff */
  33.  
  34. void menu_DeleteField(menu_type menu, int fieldno)
  35. /*
  36.     Delete a field.
  37.     Close up the gap in the field array.
  38. */
  39. {
  40.     int                 i;
  41.     field_type         field, field1;
  42.     int             fld, moveflag, temp;
  43.     iarray            funcnamea, functypea, varnamea;
  44.  
  45.     /* test menu and field number */
  46.     cs_Assert(menu_Ok(menu), CS_M_DF_MENU, 0);    /* passed bad menu */
  47.     cs_Assert(fieldno >= 0 && fieldno < menu->fieldcount, CS_M_DF_MENU, 0);    /* passed bad fieldno */
  48.  
  49.     /* remove field from grid */
  50.     menu_TakeFieldFromGrid(menu, fieldno);
  51.  
  52.     /* adjust field references in fields */
  53.     for (i = 0; i < menu->fieldcount; i++) {
  54.         field = menu_GetField(menu, i);
  55.         if ((fld = field_GetRight(field)) > fieldno) {
  56.             field_SetRight(field, fld - 1);
  57.         }
  58.         if ((fld = field_GetLeft(field)) > fieldno) {
  59.             field_SetLeft(field, fld - 1);
  60.         }
  61.     }
  62.  
  63.     /* adjust row array */
  64.     for (i = 0; i < menu->frowcount; i++) {
  65.         if ((fld = ia_Get(menu->fgrid, i)) > fieldno) {
  66.             temp = fld - 1;
  67.             ia_Put(menu->fgrid, i, temp);
  68.         }
  69.     }
  70.  
  71.     if (menu->bobcount > 0) {
  72.         /* adjust bob list */
  73.         for (i = 0, moveflag = FALSE; i < menu->bobcount; i++) {
  74.             if ((fld = ia_Get(menu->boba, i)) > fieldno) {
  75.                 fld = fld - 1;    
  76.                 ia_Put(menu->boba, i, fld);
  77.             }
  78.             else if (fld == fieldno) {
  79.                 moveflag = TRUE;
  80.                 continue;
  81.             }
  82.             if (moveflag) {
  83.                 ia_Put(menu->boba, i - 1, fld);
  84.             }
  85.         }
  86.         if (moveflag) {
  87.             menu->bobcount--;
  88.         }
  89.     }
  90.  
  91.     field = menu_GetField(menu, fieldno);
  92.  
  93.     if (field->nameno != OSLIST_BADNAME) {
  94.         menu_RemoveFieldName(menu, fieldno);
  95.     }
  96.  
  97.     funcnamea = menu->funcnamea;
  98.     functypea = menu->functypea;
  99.     varnamea = menu->varnamea;
  100.  
  101.     for (i = fieldno; i < menu->fieldcount - 1; i++) {
  102.  
  103.         /* slide fields in field array */
  104.         field1 = (field_type) xa_Get(menu->fa, i + 1);
  105.         xa_Put((menu)->fa, i, (VOID *) field1);
  106.  
  107.         /* take care of names */
  108.         if (field1->nameno != -1) {
  109.             oslist_SetData(menu->namelist, field1->nameno, (VOID *)(&i));
  110.         }
  111.         if (funcnamea != NULL) {
  112.             /* take care of funcname array */
  113.             temp = ia_Get(funcnamea, SED_FSYM_COUNT + i + 1);
  114.             ia_Put(funcnamea, SED_FSYM_COUNT + i, temp);
  115.  
  116.             /* take care of functype array */
  117.             temp = ia_Get(functypea, i + 1);
  118.             ia_Put(functypea, i, temp);
  119.  
  120.             /* take care of varname array */
  121.             temp = ia_Get(varnamea, i + 1);
  122.             ia_Put(varnamea, i, temp);
  123.         }
  124.     }
  125.  
  126.     /* decrement fieldcount */
  127.     menu->fieldcount--;
  128.  
  129.     /* menu size is now incorrect */
  130.     menu_SetDirty(menu, TRUE);
  131.  
  132.     /* destroy field */
  133.     field_Close(field);
  134. }
  135.