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

  1. /* Copyright 1989 GROUPE BULL -- See licence conditions in file COPYRIGHT */
  2. #include <stdio.h>
  3. #include "couche.h"      /*  CURS2 */
  4. #include "clientimage.h"  /* ClientImage pour fedor.h */
  5. #include "fedor.h"      /* BdfHeader */
  6. #include "sos.h"      /* SAVE */
  7.  
  8. extern nf_mono ;
  9. extern char FileName[20] ;    /* depuis filer.c */
  10. extern BdfHeader header ;    /* pour entete du ficher */
  11.  
  12.  
  13. void Autom_save();
  14. void Init_save();
  15. void Aff_filename();
  16. void ShowHeader() ;
  17. static void Aff_item() ;
  18.       
  19. int nf_save ;   /* NUMERO DE LA FENETRE SAVE */      
  20.  
  21.     /*-------- le reste est du LOCAL */
  22.  
  23. static int     znamefile,zsave,zhelp,zfamilyname,zsize,zresol ;
  24.  
  25. static char * llib [] = {"FONTNAME","SIZE","RESOL"};
  26.  
  27. #define RangFontname 0
  28. #define RangSize 1
  29. #define RangResol 2
  30.  
  31. #define NbSaveItem 3
  32. #define HSAVITEM 22
  33. #define WSAVITEM 98
  34. #define WVAL 142
  35. #define WSAVE (WSAVITEM+WVAL)
  36. #define HSAVE (NbSaveItem*HSAVITEM + HEAD)
  37. #define HEAD 28
  38.  
  39. #define XSAVE (10 + 100+514+12 + 10 + 2)
  40. #define YSAVE  (10 + 22 + 44 )  /* 2*HITEM de nf_tabbord */
  41.  
  42.  
  43. void Init_save () 
  44.  
  45. {    int i,y ;
  46.  
  47.     nf_save = w_ouvrir(nf_mono, XSAVE, YSAVE, WSAVE, HSAVE,
  48.               "XFEDOR : Save",CURS2,
  49.               EnterZone|ButtonPressed|LeaveZone,WMON) ;
  50.  
  51.     znamefile = w_crzon(nf_save,WSAVITEM,0,WSAVE,HEAD,CURS2);
  52.     zsave = w_crzon(nf_save,0,0,WSAVITEM,HEAD,CURS2);
  53.     zhelp = w_crzon(nf_save,0,HEAD,WSAVITEM,HSAVE,CURS2);
  54.  
  55.     zfamilyname = w_crzon(nf_save,WSAVITEM,HEAD+RangFontname*HSAVITEM,
  56.                 WSAVE,HEAD+(RangFontname+1)*HSAVITEM,CURS2);
  57.     zsize = w_crzon(nf_save,WSAVITEM,HEAD+RangSize*HSAVITEM,
  58.                 WSAVE,HEAD+(RangSize+1)*HSAVITEM,CURS2);
  59.     zresol = w_crzon(nf_save,WSAVITEM,HEAD+RangResol*HSAVITEM,
  60.                 WSAVE,HEAD+(RangResol+1)*HSAVITEM,CURS2);
  61. }
  62.  
  63. static Reaffich(fen)
  64. int fen ;
  65. {
  66.     int y,i ;
  67.  
  68.     if (fen == nf_save) {
  69.      for (i=1,y=HEAD;i<=NbSaveItem;i++,y+=HSAVITEM) {
  70.          w_line(nf_save,0,y,WSAVE,y,ON);
  71.          w_centrer(nf_save,llib[i-1],0,y,WSAVITEM,
  72.                 y+HSAVITEM);
  73.      }
  74.      w_line(nf_save,WSAVITEM,0,WSAVITEM,HSAVE,ON); /* barre vertic */
  75.      w_centrer(nf_save,"S A V E",0,0,WSAVITEM,HEAD);
  76.     
  77.     ShowHeader() ;
  78.     }
  79. }
  80.  
  81. /******** sous modules de l'automate general Autom_garb *******/
  82.  
  83.  
  84. static int Inverser_zone(zone)
  85.     int zone;
  86. {   int y ;
  87.  
  88.     y = HEAD + 2 ;
  89.     if (zone==zfamilyname) y += RangFontname*HSAVITEM ; else
  90.      if (zone==zsize) y += RangSize*HSAVITEM ; else
  91.     if (zone==zresol) y += RangResol*HSAVITEM ; 
  92.  
  93.     if ((zone!=zhelp)&&(zone!=znamefile)&&(zone!=zsave)) 
  94.         w_inv(nf_save,WSAVITEM+2,y,WSAVE-2,y+HSAVITEM-4);
  95.     if (zone==zsave)  
  96.         w_inv(nf_save,2,2,WSAVITEM-2,HEAD-2);
  97.     if (zone==znamefile)  
  98.         w_inv(nf_save,WSAVITEM+2,2,WSAVE-2,HEAD-2);                 
  99.              
  100. }    
  101.  
  102. static int Traiter_clic(evt)
  103.     myEvent * evt ;
  104. {    int i;
  105.     char s[20] ;
  106.  
  107.     if (evt->zone==zhelp) Helping(SAVE); else
  108.         if (evt->zone==zsave) {
  109.                if (gd_confirm()) {
  110.                 if(SauveFont()) {
  111.                    gd_envoyermsg("CANNOT SAVE FONT") ;
  112.                 }
  113.                }
  114.                w_cacher(nf_save) ;
  115.                } else
  116.     if (evt->zone==znamefile) {
  117.                gd_lirechaine("Filename ?",FileName); 
  118.                Aff_filename();           
  119.               } else
  120.     if (evt->zone==zfamilyname) {
  121.                gd_lirechaine("FAMILY NAME ?",header.FamilyName);
  122.                Aff_item(RangFontname,header.FamilyName);
  123.               } else
  124.     if (evt->zone==zsize) {
  125.                gd_lireentier("SIZE ?",&header.Size);
  126.                sprintf(s,"%d",header.Size);
  127.                Aff_item(RangSize,s);
  128.                } else
  129.     if (evt->zone==zresol) {
  130.                gd_lireentier("RESOLUTION ?",&header.Resol);
  131.                sprintf(s,"%d",header.Resol);
  132.                Aff_item(RangResol,s);
  133.                } 
  134. }
  135.  
  136. void Aff_filename()
  137. /* affiche le nom du fichier devant contenir la fonte courante */
  138. {
  139.     w_centrer(nf_save,FileName,WSAVITEM,0,WSAVE,HEAD);
  140. }
  141.  
  142.  
  143. static void Aff_item(rang,s)
  144. /* affiche la chaine s au niveau dependant de rang (rang 1,2..) */
  145.     int rang ;
  146.     char * s ;
  147. {
  148.     w_centrer(nf_save,s,WSAVITEM,HEAD+rang*HSAVITEM,WSAVE,
  149.             HEAD+(rang+1)*HSAVITEM);
  150. }
  151.  
  152.  
  153. void ShowHeader() 
  154. /* affiche les valeurs du BdfHeader  courant : header */
  155. /* header est rempli par GetFont("initfont" | Name ) */
  156. {    char s[20] ;
  157.     
  158.     
  159.     Aff_filename(0);
  160.  
  161.     Aff_item(RangFontname,header.FamilyName);    
  162.     sprintf(s,"%d",header.Size);
  163.     Aff_item(RangSize,s);
  164.     sprintf(s,"%d",header.Resol);
  165.     Aff_item(RangResol,s);
  166.  
  167. }
  168.  
  169.  
  170. void Autom_save(pev) 
  171.   myEvent * pev ;  
  172.     static zonecour = 0 ;
  173.   switch(pev->type){
  174.     case Exposure :
  175.         Reaffich(pev->window) ;
  176.         if (zonecour) Inverser_zone(zonecour);
  177.         break ;
  178.     case EnterZone   : 
  179.         if(pev->zone==zhelp) Afficher_boutons("Help","Help") ; else
  180.                      Afficher_boutons("Select","Select") ;
  181.         Inverser_zone(pev->zone);
  182.         zonecour = pev->zone ;
  183.         break;
  184.      case ButtonPressed :  
  185.         Traiter_clic(pev);
  186.                break ;
  187.         case LeaveZone : 
  188.         Inverser_zone(pev->zone);
  189.         zonecour = 0 ;
  190.             Afficher_boutons("","") ;
  191.             break ;
  192.     case CloseWindow : break ;                
  193.   }
  194. }
  195.