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

  1. /*
  2.       puview.c
  3.  
  4.     % pop_View
  5.  
  6.     Popup file viewing routine.
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      8/06/87 jmd     added missing help function
  15.      6/02/88 jdc    converted to new textbuf stuff
  16.      8/23/88 jmd    fixed SetTB, removed attributes
  17.      9/16/88 jmd    updated for 3.0
  18.     11/05/88 jmd    removed menu_Close
  19.  
  20.      4/22/89 jmd    changed border to bord
  21.      6/12/89 jmd    removed kb_Clear
  22.      9/07/89 jmd    fixed default size trouble
  23.      3/28/90 jmd    ansi-fied
  24.     10/19/90 mla    added mouse support
  25.     10/21/90 bkd    fixed declaration of puview_fkey().
  26.     10/31/90 ted    changed NULL ff struct entries to FNULL.
  27.     12/14/90 jdc    polished auto-sizing
  28. */
  29.  
  30. #include <stdio.h>
  31. #include <string.h>
  32.  
  33. #include "cscape.h"
  34.  
  35. #include "scancode.h"
  36. #include "teddecl.h"
  37. #include "popdecl.h"
  38. #include "helpdecl.h"
  39.  
  40. OSTATIC void puview_fkey(sed_type sed);
  41.  
  42. OSTATIC field_funcs_struct puview_funcs = {
  43.     FNULL,
  44.     FNULL,
  45.     puview_fkey,
  46.     FNULL,
  47.     FNULL,
  48.     0
  49. };
  50.  
  51. void pop_View(char *title, char *text, int row, int col, int height, int width, byte color, int label, bd_fptr bord)
  52. /*
  53.     Places text in a window.
  54.     Allows the text to be scrolled around.
  55.     Exits when ESC is pressed.
  56.     standard use of row, col etc...
  57. */
  58. {
  59.     sed_type   sed;
  60.     menu_type  menu;
  61.     unsigned int len;
  62.     int w;
  63.  
  64.     if ((menu = menu_Open()) == NULL) {
  65.         return;
  66.     }
  67.     
  68.     if (!menu_Printf(menu, "@f[]", NULL, &puview_funcs)) {
  69.         menu_Destroy(menu);
  70.         return;
  71.     }
  72.     for (len = 0; text[len] != '\0'; len++) ;
  73.     if (!menu_SetTB(menu, text, len)) {
  74.         menu_Destroy(menu);
  75.         return;
  76.     }
  77.  
  78.     if ((sed = sed_Open(menu)) == NULL) {
  79.         menu_Destroy(menu);
  80.         return;
  81.     }
  82.  
  83.     sed_SetColors(sed, color, color, color);
  84.     sed_SetBorder(sed, bord);
  85.     sed_SetMouse(sed, sedmou_GreedyTrack);
  86.     sed_SetLabel(sed, label);
  87.     sed_SetCursorType(sed, CURSOR_NONE);    /* turn off the cursor */
  88.  
  89.     if (width > 0) {
  90.         w = width;
  91.     }
  92.     else if (popparms.width > 0) {
  93.         w = popparms.width;
  94.     }
  95.     else {
  96.         w = disp_GetWidth() - (bord_GetWidth(sed) - sed_GetWidth(sed));
  97.         if (col > 0) {
  98.             w -= col;
  99.         }
  100.     }
  101.      ted_SetWrapWidth(sed, w);
  102.     menu_SetDirty(menu, TRUE);
  103.     menu_RecalcSize(menu);
  104.  
  105.     pop_SetParms(sed, row, col, height, width, title);
  106.  
  107.     /* put up the sed */
  108.     sed_Repaint(sed);
  109.     sed_BorderPrompt(sed, ocountry.pressesc);
  110.  
  111.     sed_Go(sed);
  112.  
  113.     sed_Close(sed);
  114. }
  115.  
  116. static void puview_fkey(sed_type sed)
  117. /*
  118.     processes input events for pop_View
  119. */
  120. {
  121.     switch(kb_Read()) {
  122.     case FN1:
  123.         help_Show(sed_GetLabel(sed), 0);
  124.         break;
  125.     case INS:
  126.         break;
  127.     case HOME:
  128.         sed_ScrollUp(sed, sed_GetYoffset(sed)); 
  129.         break;
  130.     case END:
  131.         sed_ScrollDown(sed, sed_GetMenuHeight(sed)); 
  132.         break;
  133.     case UP:
  134.         sed_ScrollUp(sed, 1);
  135.         break;
  136.     case DOWN:
  137.         sed_ScrollDown(sed, 1);
  138.         break;
  139.     case LEFT:
  140.         sed_ScrollLeft(sed, 5);
  141.         break;
  142.     case RIGHT:
  143.         sed_ScrollRight(sed, 5);
  144.         break;
  145.     case CTRL_LEFT:
  146.         sed_ScrollLeft(sed, sed_GetXoffset(sed));
  147.         break;
  148.     case CTRL_RIGHT:
  149.         sed_ScrollRight(sed, sed_GetMenuWidth(sed));
  150.         break;
  151.     case PGUP:
  152.         sed_PageUp(sed);
  153.         break;
  154.     case PGDN:
  155.         sed_PageDown(sed);
  156.         break;
  157.     case MOU_THERE:        /*  the mouse was clicked outside this window  */
  158.     case ESC:
  159.         sed_ToggleExit(sed);
  160.     break;
  161.     default:
  162.         break;
  163.     }
  164. }
  165.