home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / EDITOR / NVI179B / NVI179B.ZIP / ex / ex_screen.c < prev    next >
C/C++ Source or Header  |  1996-10-22  |  2KB  |  139 lines

  1. /*-
  2.  * Copyright (c) 1993, 1994
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  * Copyright (c) 1993, 1994, 1995, 1996
  5.  *    Keith Bostic.  All rights reserved.
  6.  *
  7.  * See the LICENSE file for redistribution information.
  8.  */
  9.  
  10. #include "config.h"
  11.  
  12. #ifndef lint
  13. static const char sccsid[] = "@(#)ex_screen.c    10.11 (Berkeley) 6/29/96";
  14. #endif /* not lint */
  15.  
  16. #include <sys/types.h>
  17. #include <sys/queue.h>
  18. #include <sys/time.h>
  19.  
  20. #include <bitstring.h>
  21. #include <limits.h>
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25.  
  26. #include "../common/common.h"
  27. #include "../vi/vi.h"
  28.  
  29. /*
  30.  * ex_bg --    :bg
  31.  *    Hide the screen.
  32.  *
  33.  * PUBLIC: int ex_bg __P((SCR *, EXCMD *));
  34.  */
  35. int
  36. ex_bg(sp, cmdp)
  37.     SCR *sp;
  38.     EXCMD *cmdp;
  39. {
  40.     return (vs_bg(sp));
  41. }
  42.  
  43. /*
  44.  * ex_fg --    :fg [file]
  45.  *    Show the screen.
  46.  *
  47.  * PUBLIC: int ex_fg __P((SCR *, EXCMD *));
  48.  */
  49. int
  50. ex_fg(sp, cmdp)
  51.     SCR *sp;
  52.     EXCMD *cmdp;
  53. {
  54.     SCR *nsp;
  55.     int newscreen;
  56.  
  57.     newscreen = F_ISSET(cmdp, E_NEWSCREEN);
  58.     if (vs_fg(sp, &nsp, cmdp->argc ? cmdp->argv[0]->bp : NULL, newscreen))
  59.         return (1);
  60.  
  61.     /* Set up the switch. */
  62.     if (newscreen) {
  63.         sp->nextdisp = nsp;
  64.         F_SET(sp, SC_SSWITCH);
  65.     }
  66.     return (0);
  67. }
  68.  
  69. /*
  70.  * ex_resize --    :resize [+-]rows
  71.  *    Change the screen size.
  72.  *
  73.  * PUBLIC: int ex_resize __P((SCR *, EXCMD *));
  74.  */
  75. int
  76. ex_resize(sp, cmdp)
  77.     SCR *sp;
  78.     EXCMD *cmdp;
  79. {
  80.     adj_t adj;
  81.  
  82.     switch (FL_ISSET(cmdp->iflags,
  83.         E_C_COUNT | E_C_COUNT_NEG | E_C_COUNT_POS)) {
  84.     case E_C_COUNT:
  85.         adj = A_SET;
  86.         break;
  87.     case E_C_COUNT | E_C_COUNT_NEG:
  88.         adj = A_DECREASE;
  89.         break;
  90.     case E_C_COUNT | E_C_COUNT_POS:
  91.         adj = A_INCREASE;
  92.         break;
  93.     default:
  94.         ex_emsg(sp, cmdp->cmd->usage, EXM_USAGE);
  95.         return (1);
  96.     }
  97.     return (vs_resize(sp, cmdp->count, adj));
  98. }
  99.  
  100. /*
  101.  * ex_sdisplay --
  102.  *    Display the list of screens.
  103.  *
  104.  * PUBLIC: int ex_sdisplay __P((SCR *));
  105.  */
  106. int
  107. ex_sdisplay(sp)
  108.     SCR *sp;
  109. {
  110.     GS *gp;
  111.     SCR *tsp;
  112.     int cnt, col, len, sep;
  113.  
  114.     gp = sp->gp;
  115.     if ((tsp = gp->hq.cqh_first) == (void *)&gp->hq) {
  116.         msgq(sp, M_INFO, "149|No background screens to display");
  117.         return (0);
  118.     }
  119.  
  120.     col = len = sep = 0;
  121.     for (cnt = 1; tsp != (void *)&gp->hq && !INTERRUPTED(sp);
  122.         tsp = tsp->q.cqe_next) {
  123.         col += len = strlen(tsp->frp->name) + sep;
  124.         if (col >= sp->cols - 1) {
  125.             col = len;
  126.             sep = 0;
  127.             (void)ex_puts(sp, "\n");
  128.         } else if (cnt != 1) {
  129.             sep = 1;
  130.             (void)ex_puts(sp, " ");
  131.         }
  132.         (void)ex_puts(sp, tsp->frp->name);
  133.         ++cnt;
  134.     }
  135.     if (!INTERRUPTED(sp))
  136.         (void)ex_puts(sp, "\n");
  137.     return (0);
  138. }
  139.