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

  1. /*
  2.     menuxfld.c
  3.  
  4.     % menu_ExchangeFields(menu, f1, f2)
  5.  
  6.     exchanges the fields number, but not position
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1988, 1989 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      4/24/89 jdc    fixed namelist and funcnamea
  15.     05/29/89 jdc    added varname array
  16.     06/01/89 jdc    fixed grid
  17.      7/02/89 jdc    added functype array
  18.      7/17/89 jdc    added f1 == f2 check
  19.  
  20.      3/28/90 jmd    ansi-fied
  21.      4/19/90 jdc    fixed problem when many fields have the same name
  22. */
  23.  
  24. #include "sed.h"
  25. #include "sfile.h"        /* for os_list stuff */
  26.  
  27. void menu_ExchangeFields(menu_type menu, int f1, int f2)
  28. {
  29.     field_type fld1, fld2;
  30.     int i, temp1, temp2, hit = FALSE;
  31.  
  32.     if (f1 == f2) {
  33.         return;
  34.     }
  35.  
  36.     /* remove the fields from the grid */
  37.     menu_TakeFieldFromGrid(menu, f1);
  38.     menu_TakeFieldFromGrid(menu, f2);
  39.  
  40.     /* swap the field array */
  41.     fld1 = (field_type)xa_Get(menu->fa, f1);
  42.     fld2 = (field_type)xa_Get(menu->fa, f2);
  43.     xa_Put(menu->fa, f2, (VOID *)fld1);
  44.     xa_Put(menu->fa, f1, (VOID *)fld2);
  45.  
  46.     /* swap the names, if applicable */
  47.     if (fld1->nameno != -1 
  48.         && *((int *)oslist_GetData(menu->namelist, fld1->nameno)) == f1) {
  49.  
  50.         oslist_SetData(menu->namelist, fld1->nameno, (VOID *)&f2);
  51.         hit = TRUE;
  52.     }
  53.     if ((!hit || fld2->nameno != fld1->nameno)
  54.         && fld2->nameno != -1
  55.         && *((int *)oslist_GetData(menu->namelist, fld2->nameno)) == f2) {
  56.  
  57.         oslist_SetData(menu->namelist, fld2->nameno, (VOID *)&f1);
  58.     }
  59.     /* take care of the bob array */
  60.     for (i = 0; i < menu->bobcount; i++) {
  61.         if (ia_Get(menu->boba, i) == f1) {
  62.             ia_Put(menu->boba, i, f2);
  63.         }
  64.         else if (ia_Get(menu->boba, i) == f2) {
  65.             ia_Put(menu->boba, i, f1);
  66.         }
  67.     }
  68.     if (menu->funcnamea != NULL) {
  69.         /* take care of funcname array */
  70.         temp1 = ia_Get(menu->funcnamea, SED_FSYM_COUNT + f1);
  71.         temp2 = ia_Get(menu->funcnamea, SED_FSYM_COUNT + f2);
  72.         ia_Put(menu->funcnamea, SED_FSYM_COUNT + f1, temp2);
  73.         ia_Put(menu->funcnamea, SED_FSYM_COUNT + f2, temp1);
  74.  
  75.         /* take care of functype array */
  76.         temp1 = ia_Get(menu->functypea, f1);
  77.         temp2 = ia_Get(menu->functypea, f2);
  78.         ia_Put(menu->functypea, f1, temp2);
  79.         ia_Put(menu->functypea, f2, temp1);
  80.  
  81.         /* take care of varname array */
  82.         temp1 = ia_Get(menu->varnamea, f1);
  83.         temp2 = ia_Get(menu->varnamea, f2);
  84.         ia_Put(menu->varnamea, f1, temp2);
  85.         ia_Put(menu->varnamea, f2, temp1);
  86.     }
  87.  
  88.     /* put them back into the grid in their original positions */
  89.     menu_AddFieldToGrid(menu, f1, field_GetRow(fld2), field_GetCol(fld2));
  90.     menu_AddFieldToGrid(menu, f2, field_GetRow(fld1), field_GetCol(fld1));
  91. }
  92.  
  93.