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

  1. /*
  2.     menusfld.c     4/11/88
  3.  
  4.     % menu_SwapFields
  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.  
  14.      4/16/89 jmd    adjusted for jarray macros
  15.      3/28/90 jmd    ansi-fied
  16.      9/11/90 jdc    added swap of name-to-fieldno references
  17. */
  18.  
  19. #include "menu.h"
  20.  
  21. void menu_SwapFields(menu_type menu, int fieldno_1, int fieldno_2)
  22. /*
  23.     Swaps two fields in the field array.
  24. */
  25. {
  26.     field_type  field_1, field_2;
  27.     int         rfld, lfld, row, temp, nameno;
  28.  
  29.     /* test menu and field number */
  30.     cs_Assert(menu_Ok(menu), CS_M_SWF_MENU, 0);    /* passed bad menu */
  31.     cs_Assert(fieldno_1 >= 0 && fieldno_1 < menu->fieldcount &&
  32.               fieldno_2 >= 0 && fieldno_2 < menu->fieldcount, CS_M_SWF_ARG, 0);    /* passed bad args */
  33.  
  34.     /* swap the references to the fields in their neighboring fields */
  35.     /* field 1 */
  36.     rfld = menu_GetFieldRight(menu, fieldno_1);
  37.     lfld = menu_GetFieldLeft(menu, fieldno_1);
  38.     
  39.     if (lfld >= 0) {
  40.         menu_SetFieldRight(menu, lfld, fieldno_2);
  41.     }
  42.     else {
  43.         /* adjust row array entry */
  44.         row = menu_GetFieldRow(menu, fieldno_1);
  45.         temp = fieldno_2 + 1;
  46.         ia_Put((menu)->fgrid, row, temp);
  47.     }
  48.  
  49.     if (rfld >= 0) {
  50.         menu_SetFieldLeft(menu, rfld, fieldno_2);
  51.     }
  52.  
  53.     /* field 2 */
  54.     rfld = menu_GetFieldRight(menu, fieldno_2);
  55.     lfld = menu_GetFieldLeft(menu, fieldno_2);
  56.     
  57.     if (lfld >= 0) {
  58.         menu_SetFieldRight(menu, lfld, fieldno_1);
  59.     }
  60.     else {
  61.         /* adjust row array entry */
  62.         row = menu_GetFieldRow(menu, fieldno_2);
  63.         temp = fieldno_1 + 1;
  64.         ia_Put((menu)->fgrid, row, temp);
  65.     }
  66.  
  67.     if (rfld >= 0) {
  68.         menu_SetFieldLeft(menu, rfld, fieldno_1);
  69.     }
  70.  
  71.     /* swap fields in field array */
  72.     field_1 = menu_GetField(menu, fieldno_1);
  73.     field_2 = menu_GetField(menu, fieldno_2);
  74.     xa_Put(menu->fa, fieldno_1, (VOID *) field_2);
  75.     xa_Put(menu->fa, fieldno_2, (VOID *) field_1);
  76.  
  77.     /* swap name-to-field references */
  78.     if ((nameno = field_GetNameNo(field_1)) >= 0 
  79.     && *((int *)oslist_GetData(menu->namelist, nameno)) == fieldno_1) {
  80.  
  81.         oslist_SetData(menu->namelist, 
  82.             field_GetNameNo(field_1), (VOID*)&fieldno_2);
  83.     }
  84.     if ((nameno = field_GetNameNo(field_2)) >= 0 
  85.     && *((int *)oslist_GetData(menu->namelist, nameno)) == fieldno_2) {
  86.         oslist_SetData(menu->namelist, 
  87.             field_GetNameNo(field_2), (VOID*)&fieldno_1);
  88.     }
  89. }
  90.  
  91.