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

  1. /*
  2.     menucfld.c
  3.  
  4.     % menu_CopyField
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      8/24/88 jdc    created
  13.  
  14.      4/21/89 jmd    now uses @fD syntax
  15.      4/25/89 jdc    added funcname array stuff
  16.      4/28/89 jdc    copied field's var now points to the scratchpad
  17.      5/29/89 jdc    added varname array
  18.      7/02/89 jdc    added functype array
  19.      7/26/89 jmd    added menu_Unprintf arg
  20.      8/13/89 jmd    added failure test
  21.      3/28/90 jmd    ansi-fied
  22. */
  23.  
  24. #include "sed.h"
  25. #include "sfile.h"
  26.  
  27. int menu_CopyField(menu_type dmenu, int row, int col, menu_type smenu, int fldno)
  28. /*
  29.     copies fldno from smenu to dmenu at row, col ( uses same if -1, -1 ).
  30.     returns: the new field's no. or -1 if it fails.
  31. */
  32. {
  33.     int     i, ret = -1;
  34.     char   *s;
  35.     field_type field;
  36.  
  37.     field = menu_GetField(smenu, fldno);
  38.  
  39.     if ((s = (char *) omalloc(CSA_MCOPYFLD, menu_GetScratchSize(smenu) + 10)) == NULL) {
  40.         goto QUIT1;
  41.     }
  42.  
  43.     if (!menu_Printf(dmenu, menu_UnPrintf(smenu, fldno, s, row, col, 1),
  44.         menu_GetScratchPad(dmenu), field_GetFuncs(field))) {
  45.         goto QUIT2;
  46.     }
  47.  
  48.     for (i = 0; i < field_GetDataCount(field); i++) {
  49.         menu_SetFieldData(dmenu, dmenu->fieldcount - 1, i, field_GetData(field, i)); 
  50.     }
  51.  
  52.     if (field_GetMarked(field)) {
  53.         menu_MarkField(dmenu, dmenu->fieldcount - 1, 
  54.             field_GetRegAttr(field),
  55.             field_GetSelAttr(field));
  56.     }
  57.  
  58.     if (smenu->funcnamea != NULL && dmenu->funcnamea != NULL) {
  59.  
  60.         i = ia_Get(smenu->funcnamea, SED_FSYM_COUNT + fldno);
  61.         if (!ia_Put(dmenu->funcnamea, SED_FSYM_COUNT + dmenu->fieldcount - 1, i)) {
  62.             goto QUIT2;
  63.         }
  64.  
  65.         i = ia_Get(smenu->functypea, fldno);
  66.         if (!ia_Put(dmenu->functypea, dmenu->fieldcount - 1, i)) {
  67.             goto QUIT2;
  68.         }
  69.  
  70.         i = menu_PutVarName(dmenu, menu_GetVarName(smenu, fldno));
  71.         if (!ia_Put(dmenu->varnamea, dmenu->fieldcount - 1, i)) {
  72.             goto QUIT2;
  73.         }
  74.     }
  75.  
  76.     ret = dmenu->fieldcount - 1;
  77.  
  78. QUIT2:
  79.     ofree(CSA_MCOPYFLD, s);
  80. QUIT1:
  81.     
  82.     return(ret);
  83. }
  84.