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

  1. /*
  2.       puedit.c    9/16/88
  3.  
  4.     % pop_Edit
  5.  
  6.     Popup editor.
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1988 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.     11/05/88 jmd    removed menu_Close
  15.     11/19/88 jmd    now uses ted_funcs
  16.  
  17.      4/22/89 jmd    changed border to bord
  18.      9/07/89 jmd    fixed default size trouble
  19.      3/28/90 jmd    ansi-fied
  20.     10/19/90 mla    added mouse support
  21.     12/03/90 jdc    added data pointers to ted_funcs field (for copy buffer)
  22.     12/14/90 jdc    polished auto-sizing
  23. */
  24.  
  25. #include <stdio.h>
  26.  
  27. #include "cscape.h"
  28. #include "strdecl.h"            /* for invert_char() */
  29. #include "teddecl.h"
  30. #include "popdecl.h"
  31.  
  32. void pop_Edit(char *title, char *text, unsigned tlen, int row, int col, int height, int width, byte color, int label, bd_fptr bord)
  33. /*
  34.     Places text in a window.
  35.     The text can be edited.
  36.     Exits when ESC is pressed.
  37.     standard use of row, col etc...
  38. */
  39. {
  40.     sed_type   sed;
  41.     menu_type  menu;
  42.     int w;
  43.     unsigned int len;
  44.  
  45.     if ((menu = menu_Open()) == NULL) {
  46.         return;
  47.     }
  48.  
  49.     if (!menu_Printf(menu, "@fD2[]", text, &ted_funcs)) {
  50.         menu_Destroy(menu);
  51.         return;
  52.     }
  53.     if ((width < 0 && popparms.width < 0) || (height < 0 && popparms.height < 0)) {
  54.         /* must load text to auto-size */
  55.         for (len = 0; text[len] != '\0'; len++) ;
  56.         if (!menu_SetTB(menu, text, len)) {
  57.             menu_Destroy(menu);
  58.             return;
  59.         }
  60.     }
  61.  
  62.     menu_Flush(menu);    
  63.     if ((sed = sed_Open(menu)) == NULL) {
  64.         menu_Destroy(menu);
  65.         return;
  66.     }
  67.  
  68.     sed_SetColors(sed, color, color, invert_char(color) & 0x7f);
  69.     sed_SetMouse(sed, sedmou_GreedyTrack);
  70.     sed_SetLabel(sed, label);
  71.     sed_SetBorder(sed, bord);
  72.  
  73.     if (width > 0) {
  74.         w = width;
  75.     }
  76.     else if (popparms.width > 0) {
  77.         w = popparms.width;
  78.     }
  79.     else {
  80.         w = disp_GetWidth() - (bord_GetWidth(sed) - sed_GetWidth(sed));
  81.         if (col > 0) {
  82.             w -= col;
  83.         }
  84.     }
  85.      ted_SetWrapWidth(sed, w - 1);
  86.     menu_SetDirty(menu, TRUE);
  87.     menu_RecalcSize(menu);
  88.  
  89.     pop_SetParms(sed, row, col, height, w, title);
  90.  
  91.     /* clear out pre-loaded text */
  92.     sed_ClearTB(sed);
  93.  
  94.     /* set ted parameters */
  95.     ted_SetInsert(sed, TED_INSERT);
  96.     ted_SetMoveMethod(sed, ted_Follow);
  97.     ted_SetMaxSize(sed, (long) tlen);
  98.  
  99.     /* put up the sed */
  100.     sed_Repaint(sed);
  101.     sed_Go(sed);
  102.  
  103.     /* close the sed */
  104.     sed_Close(sed);
  105. }
  106.