home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / xfedor.zip / XFree86 / src / xfedor / dialogue.c < prev    next >
C/C++ Source or Header  |  1999-03-02  |  4KB  |  177 lines

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>              
  3. #include "couche.h"      /* CURS */
  4.  
  5. extern root,nf_mono ;
  6.  
  7. int gd_confirm() ;
  8. void gd_envoyermsg() ;
  9. void gd_lireentier() ;
  10. void gd_lirechaine() ;
  11. void gd_askscale() ;
  12.  
  13. static int nf_scan ;        /* id fenetre question */
  14. static int nf_msg ;             /* id fenetre message  */
  15.  
  16. static int idmconfirm;       /* idf du menu oui-non */
  17. static char * choixconfirm[] = {"YES",0};
  18.  
  19. #define WSCAN 250 
  20. #define HENT 20
  21. #define HLEC 30
  22. #define HSCAN (HENT + HLEC)
  23.  
  24. #define WMSG 600
  25. #define HMSG 200
  26.  
  27. void Init_dialogue()
  28. {
  29.         int MenuCreat(char *[]);
  30.     idmconfirm = MenuCreat(choixconfirm);
  31.  
  32.     nf_scan = w_ouvrir(root, 0, 0, WSCAN, HSCAN, 
  33.                "XFEDOR : Scan Window",CURS3,
  34.                KeyPressed|ButtonPressed,WMOFF);
  35.  
  36.     nf_msg  = w_ouvrir(nf_mono, 140, 200, WMSG, HMSG, 
  37.                "XFEDOR : Message Window",CURS3,
  38.                KeyPressed|ButtonPressed,WMOFF);
  39.  
  40. }
  41.  
  42. /*---------------------------------------*/
  43. int gd_confirm()
  44. {
  45.     return((MenuPop(idmconfirm,choixconfirm)==0));
  46. }
  47.  
  48.  
  49. /*---------------------------------------------------------*/
  50. void gd_envoyermsg(s)
  51. register char * s;
  52. {
  53.     w_montrer(nf_msg);
  54.     w_centrer(nf_msg,"ATTENTION",0,0,WMSG,20);
  55.     w_inv(nf_msg,0,0,WMSG,20);
  56.     w_centrer(nf_msg,s,0,20,WMSG,HMSG);
  57.  
  58.     w_flush() ;
  59.     sleep(2) ;
  60.  
  61.     w_cacher(nf_msg);
  62. }
  63.  
  64.  
  65. /*-------------------------------------------------------*/
  66. static wscan(prompt, format, scanned)
  67.      char * prompt;
  68.      int format ;       /* 0 = string, 1 = int */
  69.      char * scanned;
  70.  
  71. /* prompt est le titre de la fenetre saisie 
  72.    format le type de la variable lue 
  73.    scanned un pointeur sur la variable lue et afficher */
  74.  
  75. {
  76.         int x, y ;
  77.         register char c;
  78.         register int strlg;
  79.         char buffer[256];
  80.         char * cutbuf ;
  81.         myEvent evt;
  82.         int i ;
  83.  
  84.     w_pop(nf_scan) ;   /* montre la fenetre et place la souris dedans
  85.               gere les depassements hors ecran */  
  86.  
  87.     w_centrer(nf_scan,prompt,0,0,WSCAN,HENT);
  88.     w_inv(nf_scan,0,0,WSCAN,HENT);
  89.     w_setfocus(nf_scan);
  90.  
  91.     for (i=0 ; i< 255 ; i++) buffer[i] = '\0' ;
  92.     if (format == 0) strcpy(buffer,scanned);
  93.     strlg = strlen(buffer) ;
  94.  
  95.     do {
  96.       w_centrer(nf_scan, buffer, 4, HENT, WSCAN, HSCAN);
  97.       w_getevent(&evt);
  98.       if (evt.window != nf_scan) continue ;
  99.       if ((evt.type == ButtonPressed) && (evt.click == 2)){
  100.     cutbuf = (char *) w_cutbuf() ;
  101.     while ((c = *cutbuf++) && (c!='\r')) {
  102.       if ((c >= 32) && (strlg < 49)) {
  103.         buffer[strlg++] = c;
  104.         buffer[strlg] = '\0' ;
  105.       }
  106.     }
  107.       }  else
  108.       if (evt.type == ButtonPressed) break ; 
  109.          else
  110.       if (evt.type == KeyPressed) {
  111.     c = evt.key;
  112.     if ((c == '\b') && (strlg > 0)) buffer[--strlg] = '\0' ;
  113.       else
  114.     if (c == 11) {
  115.       strlg = 0 ;
  116.       for (i=0 ; i<256 ; i++) buffer[i] = '\0' ;
  117.     } else
  118.     if ((c >= 32) && (strlg < 49)) {
  119.         buffer[strlg++] = c;
  120.         buffer[strlg] = '\0' ;
  121.       }
  122.       }
  123.      } while ((c!='\r')&&(strlg<255));
  124.      w_cacher(nf_scan);
  125.      w_clear(nf_scan);
  126.      if (format == 0) 
  127.        strcpy(scanned,buffer) ; else
  128.      if (format == 1) 
  129.        if ((buffer[0] < '0') || (buffer[0] > '9'))
  130.      *(int*)scanned = 0 ; else
  131.        sscanf(buffer, "%d", scanned) ;
  132. }
  133.  
  134.  
  135. void gd_lirechaine(prompt,ch) 
  136.     char * prompt ;
  137.     char * ch ;
  138. {
  139.     wscan(prompt,0,ch) ;
  140. }
  141.  
  142. void gd_lireentier(prompt,i) 
  143.     char * prompt ;
  144.     int * i ;
  145. {
  146.     wscan(prompt,1,i) ;
  147. }
  148.  
  149.     
  150. void gd_askscale(numx,denx,numy,deny)
  151.    int *numx,*denx,*numy,*deny ;
  152. {
  153.    char scale[50] ;
  154.    int ns,i ;
  155.  
  156.    scale[0] = '\0' ;
  157.    gd_lirechaine("syntax : N [D [Ny Dy]]",scale) ;
  158.    ns = sscanf(scale,"%2d%2d%2d%2d",numx,denx,numy,deny);
  159.    if (ns == 1) {
  160.       *denx = 1 ;
  161.       *numy = *numx ;
  162.       *deny = 1 ;
  163.    } else
  164.    if (ns == 2) {
  165.       *numy = *numx ;
  166.       *deny = *denx ;
  167.    } else 
  168.    if (ns == 3) {
  169.       *deny = 1 ;
  170.    } 
  171.       
  172.    if (*numx <= 0) *numx = 1 ;
  173.    if (*denx <= 0) *denx = 1 ;
  174.    if (*numy <= 0) *numy = 1 ;
  175.    if (*deny <= 0) *deny = 1 ;
  176. }
  177.