home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / mincom15.zip / windiv.c < prev    next >
C/C++ Source or Header  |  1993-10-14  |  2KB  |  142 lines

  1. /*
  2.  * This file is part of the Minicom Communications Program,
  3.  * written by Miquel van Smoorenburg 1991/1992/1993.
  4.  */
  5. #include <sys/types.h>
  6. #include <setjmp.h>
  7. #if defined (_POSIX_SOURCE) || defined(_BSD43)
  8. #  include <stdlib.h>
  9. #include <unistd.h>
  10. #  undef NULL
  11. #endif
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include "window.h"
  15. #include "minicom.h"
  16.  
  17. /*
  18.  * Popup a window and put a text in it.
  19.  */  
  20. /*VARARGS1*/
  21. WIN *tell(s, a1, a2, a3, a4)
  22. char *s, *a1, *a2, *a3, *a4;
  23. {
  24.   WIN *w;
  25.   char buf[128];
  26.  
  27.   sprintf(buf, s, a1, a2, a3, a4);
  28.  
  29.   w = wopen((COLS / 2) - 2 - strlen(buf) / 2, 8,
  30.         (COLS / 2) + 2 + strlen(buf) / 2, 10,
  31.            BDOUBLE, stdattr, MFG, MBG, 0, 0, 0);
  32.   wcursor(w, CNONE);    
  33.   wlocate(w, 2, 1);
  34.   wputs(w, buf);
  35.   wredraw(w, 1);
  36.   return(w);
  37. }
  38.  
  39. /*
  40.  * Show an error message.
  41.  */
  42. /*VARARGS1*/
  43. void werror(s, a1, a2, a3, a4)
  44. char *s, *a1, *a2, *a3, *a4;
  45. {
  46.   WIN *tellwin;
  47.   
  48.   tellwin = tell(s, a1, a2, a3, a4);
  49.   sleep(2);
  50.   wclose(tellwin, 1);
  51. }
  52.  
  53. /*
  54.  * Vertical "wselect" function.
  55.  */
  56. int ask(what, s)
  57. char *what;
  58. char *s[];
  59. {
  60.   int num = 0;
  61.   int cur = 0, ocur = 0;
  62.   int f, c;
  63.   WIN *w;
  64.  
  65.   for(f = 0; s[f]; f++) num++;
  66.  
  67.   w = wopen(40 - 5*num , 8, 41 + 5*num, 9, BSINGLE, stdattr, MFG, MBG, 0, 0, 1);
  68.     
  69.   dirflush = 0;
  70.  
  71.   wcursor(w, CNONE);
  72.   wlocate(w, 1 + 5*num - (strlen(what) / 2), 0);
  73.   wputs(w, what);
  74.  
  75.   for(f = 1; f < num; f++) {
  76.       wlocate(w, 2 + 10*f, 1);
  77.       wputs(w, s[f]);
  78.   }
  79.   wredraw(w, 1);
  80.  
  81.   while(1) {
  82.       wlocate(w, 2 + 10*cur, 1);
  83.     if (!useattr)
  84.         wprintf(w, ">%s", s[cur] + 1);
  85.     else {
  86.           wsetattr(w, A_REVERSE | stdattr);
  87.           wputs(w, s[cur]);
  88.     }
  89.       ocur = cur;
  90.       wflush();
  91.       switch(c = getch()) {
  92.           case ' ':
  93.           case 27:
  94.           case 3:
  95.               dirflush = 1;
  96.               wclose(w, 1);
  97.               return(-1);
  98.           case '\r':
  99.           case '\n':
  100.               dirflush = 1;
  101.               wclose(w, 1);
  102.               return(cur);
  103.           case K_LT:
  104.           case 'h':
  105.               cur--;
  106.               if (cur < 0) cur = num - 1;
  107.               break;
  108.           default:
  109.               cur = (cur + 1) % num;
  110.               break;
  111.       }
  112.       wlocate(w, 2 + 10*ocur, 1);
  113.       wsetattr(w, stdattr);
  114.     if (!useattr)
  115.         wputs(w, " ");
  116.     else
  117.           wputs(w, s[ocur]);
  118.   }
  119. }
  120.  
  121. extern int editline();
  122.  
  123. /*
  124.  * Popup a window and ask for input.
  125.  */
  126. char *input(s, buf)
  127. char *s;
  128. char *buf;
  129. {
  130.   WIN *w;
  131.  
  132.   w = wopen(20, 11, 60, 12, BDOUBLE, stdattr, MFG, MBG, 1, 0, 1);
  133.   wputs(w, s);
  134.   wlocate(w, 0, 1);
  135.   wprintf(w, "> %-38.38s", buf);
  136.   wlocate(w, 2, 1);
  137.   if (wgets(w, buf, 38, 128) < 0) buf = CNULL;
  138.   wclose(w, 1);
  139.   return(buf);
  140. }
  141.  
  142.