home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / graphics / degas2ps / degas2ps.c01 < prev    next >
Text File  |  1989-06-20  |  32KB  |  1,072 lines

  1. /*******************************************************************/
  2. /*                                                                                                                                */
  3. /*         DEGAS2PS.PRG                                                                                                 */
  4. /* Programme d'impression d'images provenant de DEGAS (.PI3).      */
  5. /* La sortie se fait en PostScript vers un fichier ou une laser.   */
  6. /* Il est possible de sélectionner une partie de l'image,                  */
  7. /* la réduction ou l'augmentation ainsi que la position sur                 */
  8. /* la page.                                                                                                                */
  9. /* IRISA de RENNES                                                                                                    */
  10. /*                                                                                                                               */
  11. /* Matériels : ATARI 1040 STFM + LaserWriter II NT                               */
  12. /* Langage : Megamax C                                                                                       */
  13. /*                                                                                                                               */
  14. /* ecrit par :     Bertrand DECOUTY (IRISA-INRIA, Rennes)                         */
  15. /*                            Philippe LE THOMAS (stage IUT Lannion 1988)                 */
  16. /*                                                                                                                                 */
  17. /*******************************************************************/
  18. char version[]= "DEGAS2PS 1.52";
  19.  
  20. /* 1= francais, 0= anglais */
  21. #define FRANCAIS 0
  22.  
  23. #include <stdio.h>
  24. #include <osbind.h>
  25. #include <gembind.h>
  26. #include <gemdefs.h>
  27. #include <obdefs.h>
  28. #include <string.h>
  29. #include "DEGAS2PS.H"
  30. #define RESSOURCE "DEGAS2PS.RSC"
  31.  
  32. #if FRANCAIS
  33. #define MESS0 "[3][ | Le fichier ressource | est introuvable... ][ STOP ]"
  34. #define MESS1 "[2][ | Le périphérique n'est | pas connecté... ][ OK | ANNULER ]"
  35. #define MESS2 "[3][ | Erreur lors de l'ouverture | du fichier de sortie... ][ STOP ]"
  36. #define MESS3 "[2][ | Voulez-vous réellement | stopper l'impression ? ][ NON | OUI ]"
  37. #define MESS4 "[3][ Erreur d'écriture | du fichier PostScript ...| disque plein ? ][ STOP ]"
  38. #define MESS5 "[3][ | Erreur lors de l'ouverture | du fichier image... ][ STOP ]"
  39.  
  40. #else         /* messages en anglais */
  41. #define MESS0 "[3][ | Resource file | not found... ][ STOP ]"
  42. #define MESS1 "[2][ | Peripheral device | not connected or off-line... ][ OK | CANCEL ]"
  43. #define MESS2 "[3][ | I can't open | output file... ][ STOP ]"
  44. #define MESS3 "[2][ | Do you really want | to stop printing ? ][ NO | YES ]"
  45. #define MESS4 "[3][ I/O ERROR while | writing PostScript file | disk full ?][ Sorry.. ]"
  46. #define MESS5 "[3][ | I can't open | image file... ][ STOP ]"
  47. #endif
  48.  
  49. #define void /**/
  50. #define VRAI 1
  51. #define FAUX 0
  52. #define RESW 639                                                            /* Largeur maximale de l'écran */
  53. #define RESH 399                                                            /* Hauteur maximale de l'écran */
  54. #define Souris_Croix graf_mouse(5,&dummy)
  55. #define Souris_Normale graf_mouse(0,&dummy)
  56. #define Cache_Souris graf_mouse(256,&dummy)
  57. #define Montre_Souris graf_mouse(257,&dummy)
  58.  
  59. /* structure pour informations sur fichier */
  60. /*
  61. typedef struct {
  62.     long b_free;
  63.     long b_total;
  64.     long b_secsiz;
  65.     long b_clsiz;
  66. } disk_info;
  67. */
  68.  
  69. /* variables utilisées par le GEM */
  70.  
  71. int work_in[12],work_out[57],contrl[12],intin[256],intout[256],
  72.     ptsin[128],ptsout[128];
  73.  
  74. /* variables globales */
  75.  
  76. int periph; /* indique le peripherique de sortie : 0 = centronics (PRT:) */
  77.                         /*                                                                         1 = RS 232     (AUX:) */
  78.                         /*                                                                         2 = fichier (file.PS) */
  79. int    handle,x,y,w,h,xres,yres,nombre,sortie,
  80.     xsouris,ysouris,etatbout,etatclav,codeclav,nbpress,event,
  81.     xdial,ydial,wdial,hdial,test,mgbuf[11],debut,lon,
  82.     xstart,ystart,width,height,xso,yso,swo,sho,ouvert,
  83.     rx,ry,rw,rh,dummy,boxw,boxh,deja,sw,sh,suppl,
  84.     w_handle,wx,wy,wh,ww,lecture,ecriture,
  85.     dfbb[10],dfbs[10],frmary[8],clpry[4],fin;
  86. long buffer,ecran;
  87. char source[80],tex[4][80],mode[80],cheminlecture[80],
  88.          cheminecriture[80],nomfenetre[50],nomsortie[30];
  89. OBJECT *barre,*dial;
  90. /**************************************************************************/
  91. /* initialisation des tableaux contenant les coordonnées des     */
  92. /* blocs pour le clipping                                                                         */
  93.  
  94. void init()
  95.  
  96. {        
  97.     xres = work_out[0]+1;
  98.     yres = work_out[1]+1;
  99.     vq_extnd(handle,1,work_out);
  100.     dfbb[0]=(ecran+34)>>16;
  101.     dfbb[1]=(ecran+34)&0xffff;
  102.     dfbb[2]=xres;
  103.     dfbb[3]=yres;
  104.     dfbb[4]=xres>>4;
  105.     dfbb[5]=0;
  106.     dfbb[6]=work_out[4];
  107.     dfbs[0]=dfbs[1]=0;
  108.     ouvert = lecture = ecriture = FAUX;
  109. /* lecture des coordonnées maximales de la fenetre */
  110.     wind_get(0,WF_WORKXYWH,&wx,&wy,&ww,&wh);
  111.     buffer = Malloc((long)32000+256+256);
  112.     w_handle = wind_create(NAME,wx,wy,ww,wh);
  113. }
  114. /**************************************************************************/
  115. void main()
  116.  
  117. {
  118.     int i;
  119.     register int boucle;
  120.     
  121. /* Initialisation des variables utilisées par le système */
  122.     for (boucle=1; boucle<10; work_in[boucle++]=1);
  123.     work_in[10]=2;
  124.     appl_init();
  125.     Cache_Souris;
  126. /* ouverture de la station de travail virtuelle */
  127.     handle = graf_handle(&i,&i,&i,&i);
  128.     v_opnvwk(work_in,&handle,work_out);
  129.     init();                            
  130.     Montre_Souris;
  131. /* chargement du fichier ressource contenant le menu, */
  132. /* les boites de dialogue et les différentes icones */
  133.     if (!rsrc_load(RESSOURCE))
  134.     {
  135.         form_alert(1,MESS0);
  136.     }
  137.     else
  138.     {
  139. /* affichage du menu et lecture de son adresse dans l'arbre    */            
  140.         Souris_Normale;
  141.         rsrc_gaddr(R_TREE,MENU,&barre);
  142.         edition();
  143.     }                                                
  144.     quitter();
  145. }
  146. /**************************************************************************/
  147. /* fermeture de la station, de le fenetre et liberation de la    */
  148. /* memoire                                                                                                         */
  149. void quitter()
  150.  
  151. {
  152.     menu_bar(barre,FAUX);
  153. /* on libère la mémoire occupée par l'image */
  154.     Mfree(buffer);
  155.     if (ouvert) 
  156.     {
  157. /* effacement de la fenetre */
  158.         wind_close(w_handle);
  159.         wind_delete(w_handle);
  160.     }
  161.     v_clsvwk(handle);
  162.     Souris_Normale;
  163.     Montre_Souris;
  164.     appl_exit();
  165. }
  166. /**************************************************************************/
  167. /* routine de copie de bloc                                                             */
  168. /* drap : 1 = copie sans changement, 0 = inversion video */
  169. void image(sx,sy,dx,dy,l,h,drap)
  170.  
  171. register int sx,sy,dx,dy,l,h,drap;
  172. {
  173.     frmary[0]=sx;        
  174.     frmary[1]=sy;            
  175.     frmary[2]=sx+l-1;    
  176.     frmary[3]=sy+h-1;        
  177.     frmary[4]=dx;        
  178.     frmary[5]=dy;        
  179.     frmary[6]=dx+l-1;    
  180.     frmary[7]=dy+h-1;
  181.     clpry[0]=dx;
  182.     clpry[1]=dy;
  183.     clpry[2]=dx+l-1;
  184.     clpry[3]=dy+h-1;
  185.     vs_clip(handle,1,clpry);
  186.     Cache_Souris;
  187.     if (drap) 
  188.         vro_cpyfm(handle,3,frmary,dfbb,dfbs);
  189.     else 
  190.         vro_cpyfm(handle,12,frmary,dfbb,dfbs);
  191.     Montre_Souris;
  192. }
  193. /**************************************************************************/
  194. /* attend un appui sur le bouton gauche pour renvoyer les coordonnées */
  195. /* de la souris, si bouton droit => on quitte. Un appui sur ALTERNATE */
  196. /* réinitialise l'ecran                                                                                             */
  197. void gestion()
  198.  
  199. {
  200.     int bouton,key;
  201.  
  202.     Souris_Croix;
  203.     undo();
  204.     do
  205.     {
  206.         event = evnt_mouse(0,0,0,RESW,RESH,&xsouris,&ysouris,&bouton,&key);
  207. /* test le bouton gauche */
  208.         if (bouton & 0x0001) souris();
  209. /* test la touche ALT */
  210.         if (key & 0x0008) undo();
  211.     }    
  212. /* test le bouton droit */
  213.     while (!(bouton & 0x0002));
  214.     Souris_Normale;
  215. }
  216. /**************************************************************************/
  217. /* restitution de l'écran original */
  218. void undo()
  219.  
  220. {
  221.     deja = FAUX;
  222.     sho = 400; swo = 640;
  223.     image(0,0,0,0,RESW+1,RESH+1,VRAI);
  224. }
  225. /**************************************************************************/
  226. /* affichage d'un rectangle de sélection pour indiquer la zone */
  227. /* que l'on désire imprimer                                                                            */
  228. void souris()
  229.  
  230. {
  231.     int status,x,y,xx,yy,xd,yd;
  232.     char message[80],texte[50];
  233.     
  234.     undo();
  235.     deja = VRAI;
  236.     xx = x = 0; yy = y = 0;
  237.     xd = xsouris;
  238.     yd = ysouris;
  239.     Cconout(0x07);
  240.     do
  241.     {
  242.         vq_mouse(handle,&status,&x,&y);
  243.         if ((xx != x) || (yy != y)) 
  244.         {
  245.             image(xd,yd,xd,yd,xx-xd+1,yy-yd+1,VRAI);
  246.             image(xd,yd,xd,yd,x-xd+1,y-yd+1,FAUX);
  247.             xx = x; yy = y;
  248.         }
  249.     }
  250.     while ((status & 0x0001));
  251. /*    form_alert(1,MESS6);*/
  252.     Souris_Croix;
  253.     if (xd <= x) { xso = xd;swo = x - xso; }
  254.     else { xso = x;swo = xd - xso; }
  255.     if (yd <= y) { yso = yd;sho = y - yso; }
  256.     else { yso = y;sho = yd - yso; }
  257. }
  258. /**************************************************************************/
  259. /* gestion des évènements : menu, raffraichissement écran */
  260. void edition()
  261.  
  262. {
  263.     int xstart,ystart,wstart,hstart,rx,ry,rh,rw;
  264.     
  265.     Souris_Normale;
  266.     menu_ienable(barre,IMPRIMER,FAUX);
  267.     menu_ienable(barre,EDITER,FAUX);
  268.     menu_bar(barre,VRAI);
  269.     while (fin != 1)
  270.     {
  271.         event = evnt_mesag(mgbuf);
  272.         wind_update(VRAI);
  273.         switch (mgbuf[0])
  274.         {
  275. /* un menu a ete selectionne */
  276.             case MN_SELECTED : selection();
  277.                 break;
  278. /* rafraichissement de la fenetre */
  279.             case WM_REDRAW :
  280.                 wind_get(mgbuf[3],WF_WORKXYWH,&xstart,&ystart,&wstart,&hstart);
  281.                 wind_get(mgbuf[3],WF_FIRSTXYWH,&rx,&ry,&rw,&rh);
  282.                 frmary[0]=0;        
  283.                 frmary[1]=0;            
  284.                 frmary[2]=wstart-1;    
  285.                 frmary[3]=hstart-1;        
  286.                 frmary[4]=xstart;        
  287.                 frmary[5]=ystart;        
  288.                 frmary[6]=xstart+wstart-1;    
  289.                 frmary[7]=ystart+hstart-1;
  290.                 clpry[0]=rx;
  291.                 clpry[1]=ry;
  292.                 clpry[2]=rx+rw-1;
  293.                 clpry[3]=ry+rh-1;
  294.                 vs_clip(handle,1,clpry);
  295.                 Cache_Souris;
  296.                 vro_cpyfm(handle,3,frmary,dfbb,dfbs);
  297.                 Montre_Souris;
  298.                 break;
  299.         }
  300.         wind_update(FAUX);
  301.     }
  302. }
  303. /**************************************************************************/
  304. /* aiguillage vers le choix fait par l'utilisateur */
  305. void selection()
  306.  
  307. {    
  308.     switch (mgbuf[4])
  309.     {
  310.         case COPY :
  311. /* affichage du copyright */ 
  312.             apropos();
  313.         break;
  314.         case QUITTER : 
  315. /* quitte le programme */
  316.             fin = 1;
  317.         break;
  318. /* affiche la boite d'aide */
  319.         case AIDE :
  320.             aide();
  321.         break;
  322.         case IMPRIMER : 
  323. /* affiche les boites de dialogue pour l'impression */
  324.         impression();
  325.         break;
  326.         case OUVRIR :
  327. /* reservation de la memoire pour l'image */
  328.             ecran = (0xffff00&buffer);
  329.             ecran += (0x200);
  330. /* selection d'un fichier image *.PI? */
  331.             if (dialogue(source,0,"PI?")>0)
  332.             {
  333.                 strcpy(nomsortie,rindex(source,'\\')+1);
  334.                 strcpy(nomfenetre," ");
  335.                 strcat(nomfenetre,rindex(source,'\\')+1);
  336.                 strcat(nomfenetre," ");
  337. /* si une fenetre était déjà ouverte, on la ferme */
  338.                 if (ouvert) wind_close(w_handle);
  339.                 ouvert = VRAI;
  340.                 menu_ienable(barre,IMPRIMER,VRAI);
  341.                 menu_ienable(barre,EDITER,VRAI);
  342. /* initialise la palette des couleurs */
  343.                 Setpalette(ecran+2);
  344.                 dfbb[0]=(ecran+34)>>16;
  345.                 dfbb[1]=(ecran+34)&0xffff;
  346.                 menu_bar(barre,FAUX);
  347.                 gestion();
  348. /*            impression();*/
  349. /* ouvre une fenetre contenant l'image */
  350.                 wind_set(w_handle,WF_NAME,nomfenetre);
  351.                 wind_open(w_handle,wx,wy,ww,wh);
  352.                 menu_bar(barre,VRAI);
  353.             }
  354.         break;
  355.         case EDITER :
  356. /* edite une image en memoire */
  357.             if (ouvert) 
  358.             {
  359.                 wind_close(w_handle);
  360.                 menu_bar(barre,FAUX);
  361.                 gestion();
  362. /*            impression();*/
  363.                 wind_open(w_handle,wx,wy,ww,wh);
  364.                 menu_bar(barre,VRAI);
  365.             }
  366.         break;
  367.     }
  368.     menu_tnormal(barre,mgbuf[3],VRAI);
  369. }
  370. /**************************************************************************/
  371. /* sélection de la sortie : rs 232, fichier, centronics */
  372. int sortieimprimante()
  373.  
  374. {    
  375.     rsrc_gaddr(R_TREE,SORTIE,&dial);
  376.     Cache_Souris;
  377.     afficheboite();
  378.     Montre_Souris;
  379.     sortie = form_do(dial,FAUX);
  380.     Cache_Souris;
  381.     effaceboite();
  382.     Montre_Souris;
  383.     if (sortie != ANN1) 
  384.     {
  385.         switch (sortie)
  386.         {
  387.             case FICHIER : periph = 2;
  388. /* selection du fichier de sortie *.PS */
  389.                 if (dialogue(source,1,"PS")>0)
  390.                 {
  391.                     strcpy(mode,source);
  392.                     return(VRAI);
  393.                 }
  394.                 else return(FAUX);
  395.                 break; 
  396.             case LASER : strcpy(mode,"AUX:"); periph = 1;
  397.                 break;
  398.             case PRINTER : strcpy(mode,"PRT:"); periph = 0;
  399.                 break;
  400.         }
  401. /* test si le peripherique est pret ou connecte */
  402.         while (!Bcostat(periph)) if (form_alert(1,MESS1) == 2) return(FAUX);
  403.         return(VRAI);
  404.     }
  405.     else return(FAUX);
  406. }
  407.  
  408. /**************************************************************************/
  409. /* conversion points => centimetre */
  410. float calculpoint(width,resolution)
  411.  
  412. float width,resolution;
  413. {
  414.     return((width*resolution*2.540*1)/300.0);
  415. }
  416.  
  417. /**************************************************************************/
  418. sens_off(page)
  419.  
  420. int *page;
  421.  
  422. /*     selection du sens (portrait, paysage) de l'impression et invalidation    *
  423.  *    du sens non-retenu                                                                                                        */
  424. {
  425.     if (swo<=sho)
  426.     {
  427.         objc_change(dial,PORTRAIT,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  428.         objc_change(dial,PAYSAGE,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  429.         *page = FAUX;
  430.     }
  431.     else
  432.     {
  433.         objc_change(dial,PORTRAIT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  434.         objc_change(dial,PAYSAGE,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  435.         *page = VRAI;
  436.     }
  437.     objc_change(dial,PORTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  438.     objc_change(dial,PAYTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  439.     objc_change(dial,REDUC,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  440.     objc_change(dial,MOINS,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  441.     objc_change(dial,PLUS,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  442.     dial[PLUS].ob_flags=NONE;
  443.     dial[MOINS].ob_flags=NONE;
  444.  
  445. }
  446.  
  447. /**************************************************************************/
  448. sens_on(page)
  449.  
  450. int *page;
  451.  
  452. /*     selection du sens (portrait, paysage) de l'impression et validation        *
  453.  *    de l'autre choix                                                                                                            */
  454. {
  455.     if (swo<=sho)
  456.     {
  457.         objc_change(dial,PORTRAIT,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  458.         objc_change(dial,PAYSAGE,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  459.         *page = FAUX;
  460.     }
  461.     else
  462.     {
  463.         objc_change(dial,PORTRAIT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  464.         objc_change(dial,PAYSAGE,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  465.         *page = VRAI;
  466.     }
  467.     objc_change(dial,PORTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  468.     objc_change(dial,PAYTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  469.     objc_change(dial,REDUC,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  470.     objc_change(dial,MOINS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  471.     objc_change(dial,PLUS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  472.     dial[PLUS].ob_flags=TOUCHEXIT;
  473.     dial[MOINS].ob_flags=TOUCHEXIT;
  474. }
  475.  
  476.  
  477. /**************************************************************************/
  478. /* sélection des options de mise en page */
  479.  
  480. int choixformat(page,centre,copie,latex,reduction)
  481.  
  482. int *page,*centre,*copie,*latex;
  483. float *reduction;
  484. {    
  485.     char cop[5],reduc[5],haut[10],larg[10];
  486.     float agrand,largeur,hauteur;
  487.     
  488.     rsrc_gaddr(R_TREE,FORMAT,&dial);
  489.     Cache_Souris;
  490.     agrand = 4.00;
  491.     largeur = calculpoint((float)swo,agrand);
  492.     hauteur = calculpoint((float)sho,agrand);
  493.     strcpy(cop,"01");
  494.     sprintf(reduc,"%04.0f",agrand*100);
  495.     sprintf(larg,"%05.0f",largeur*100);
  496.     sprintf(haut,"%05.0f",hauteur*100);
  497.     ((TEDINFO *)dial[REDUC].ob_spec)->te_ptext = reduc;
  498.     ((TEDINFO *)dial[REDUC].ob_spec)->te_txtlen = 5;
  499.     ((TEDINFO *)dial[COPIE].ob_spec)->te_ptext = cop;
  500.     ((TEDINFO *)dial[COPIE].ob_spec)->te_txtlen = 3;
  501.     ((TEDINFO *)dial[LARGEUR].ob_spec)->te_ptext = larg;
  502.     ((TEDINFO *)dial[LARGEUR].ob_spec)->te_txtlen = 6;
  503.     ((TEDINFO *)dial[HAUTEUR].ob_spec)->te_ptext = haut;
  504.     ((TEDINFO *)dial[HAUTEUR].ob_spec)->te_txtlen = 6;
  505.     afficheboite();
  506.     
  507. /* initialise la boite de selection */
  508.     
  509.     objc_change(dial,REEL,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  510.     objc_change(dial,NOLATEX,0,xdial,ydial,wdial,hdial,SELECTED,VRAI);
  511.     objc_change(dial,LATEX,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  512.     objc_change(dial,AUTO,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  513.     objc_change(dial,CUSTOM,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  514.     objc_change(dial,TMAXTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  515.     objc_change(dial,TREELTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  516.     objc_change(dial,PERSOTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  517.     objc_change(dial,COPIE,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  518.     dial[PORTRAIT].ob_flags=TOUCHEXIT | RBUTTON | SELECTABLE;
  519.     dial[PAYSAGE].ob_flags= TOUCHEXIT | RBUTTON | SELECTABLE;
  520.     dial[CUSTOM].ob_flags=  TOUCHEXIT | RBUTTON | SELECTABLE;
  521.     dial[COPIE].ob_flags=   EDITABLE;
  522.     dial[AUTO].ob_flags=    TOUCHEXIT | RBUTTON | SELECTABLE;
  523.     dial[REEL].ob_flags=    TOUCHEXIT | RBUTTON | SELECTABLE;
  524.     sens_off(page);
  525.     Montre_Souris;
  526.     *latex = FAUX;
  527.     *centre = 0;
  528.     do
  529.     {
  530.         sortie = form_do(dial,0);
  531.         switch (sortie) 
  532.         {
  533.         case AUTO : *centre = 1; sens_off(page);
  534.             break;
  535.         case REEL : *centre = 0; sens_off(page);
  536.             break;
  537.         case CUSTOM : *centre = 2;sens_on(page);
  538.             break;
  539.         case PAYSAGE : *page = VRAI;
  540.             break;
  541.         case PORTRAIT : *page = FAUX;
  542.             break;
  543.         case LATEX : *latex = VRAI;
  544.             objc_change(dial,TMAXTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  545.             objc_change(dial,TREELTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  546.             objc_change(dial,PERSOTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  547.             objc_change(dial,COPIE,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  548. /*            objc_change(dial,PORTRAIT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);*/
  549. /*            objc_change(dial,PAYSAGE,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);*/
  550. /*            objc_change(dial,CUSTOM,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);*/
  551.             objc_change(dial,PORTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  552.             objc_change(dial,PAYTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  553.             objc_change(dial,REDUC,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  554.             objc_change(dial,MOINS,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  555.             objc_change(dial,PLUS,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  556.             dial[PLUS].ob_flags=    NONE;
  557.             dial[MOINS].ob_flags=   NONE;
  558.             dial[COPIE].ob_flags=   NONE;
  559.             dial[PORTRAIT].ob_flags=NONE;
  560.             dial[PAYSAGE].ob_flags= NONE;
  561.             dial[CUSTOM].ob_flags=  NONE;
  562.             dial[AUTO].ob_flags=    NONE;
  563.             dial[REEL].ob_flags=    NONE;
  564.             break;
  565.         case NOLATEX : *latex = FAUX;
  566.             objc_change(dial,TMAXTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  567.             objc_change(dial,TREELTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  568.             objc_change(dial,PERSOTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  569.             objc_change(dial,COPIE,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  570.             if(*centre==2)
  571.             {
  572.                 objc_change(dial,REDUC,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  573.                 objc_change(dial,MOINS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  574.                 objc_change(dial,PLUS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  575.                 objc_change(dial,PORTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  576.                 objc_change(dial,PAYTXT,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  577.                 dial[PLUS].ob_flags=    TOUCHEXIT;
  578.                 dial[MOINS].ob_flags=   TOUCHEXIT;
  579.             } else
  580.             {
  581.                 objc_change(dial,PORTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  582.                 objc_change(dial,PAYTXT,0,xdial,ydial,wdial,hdial,DISABLED,VRAI);
  583.             }
  584.             dial[PORTRAIT].ob_flags=TOUCHEXIT | RBUTTON | SELECTABLE;
  585.             dial[PAYSAGE].ob_flags= TOUCHEXIT | RBUTTON | SELECTABLE;
  586.             dial[CUSTOM].ob_flags=  TOUCHEXIT | RBUTTON | SELECTABLE;
  587.             dial[COPIE].ob_flags=   EDITABLE;
  588.             dial[AUTO].ob_flags=    TOUCHEXIT | RBUTTON | SELECTABLE;
  589.             dial[REEL].ob_flags=    TOUCHEXIT | RBUTTON | SELECTABLE;
  590.             break;
  591.         case PLUS :
  592.             if (agrand+0.050<99.9)
  593.             { 
  594.                 agrand += 0.050;
  595.                 largeur = calculpoint((float)swo,agrand);
  596.                 hauteur = calculpoint((float)sho,agrand);
  597.                 sprintf(reduc,"%04.0f",agrand*100);
  598.                 sprintf(larg,"%05.0f",largeur*100);
  599.                 sprintf(haut,"%05.0f",hauteur*100);
  600.                 objc_draw(dial,REDUC,0,xdial,ydial,wdial,hdial);
  601.                 objc_draw(dial,HAUTEUR,0,xdial,ydial,wdial,hdial);
  602.                 objc_draw(dial,LARGEUR,0,xdial,ydial,wdial,hdial);
  603.             }
  604.             objc_change(dial,PLUS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  605.             break;
  606.         case MOINS : 
  607.             if (agrand-0.050>0.99)
  608.             {
  609.                 agrand -= 0.050;
  610.                 largeur = calculpoint((float)swo,agrand);
  611.                 hauteur = calculpoint((float)sho,agrand);
  612.                 sprintf(reduc,"%04.0f",agrand*100);
  613.                 sprintf(larg,"%05.0f",largeur*100);
  614.                 sprintf(haut,"%05.0f",hauteur*100);
  615.                 objc_draw(dial,REDUC,0,xdial,ydial,wdial,hdial);
  616.                 objc_draw(dial,HAUTEUR,0,xdial,ydial,wdial,hdial);
  617.                 objc_draw(dial,LARGEUR,0,xdial,ydial,wdial,hdial);
  618.             }
  619.             objc_change(dial,MOINS,0,xdial,ydial,wdial,hdial,NORMAL,VRAI);
  620.             break;
  621.         }
  622.     }
  623.     while ((sortie != PRINT) && (sortie != ANN2));
  624.     if (*centre == 0) strcpy(reduc,"400");
  625.     *copie = atoi(cop);
  626.     *reduction=agrand;
  627.     Cache_Souris;
  628.     effaceboite();
  629.     Montre_Souris;
  630.     if (sortie == PRINT) 
  631.         return(VRAI);
  632.     else 
  633.         return(FAUX);
  634. }
  635.  
  636. /**************************************************************************/
  637. /* calcul des coordonnées d'un bloc pour l'envoi vers la laser */
  638. void calcul(masqueg,masqued,masquageg,masquaged)
  639.  
  640. int *masqueg,*masqued,*masquageg,*masquaged;
  641. {
  642.     register int x,y,h,w,bitdroite,bitgauche;
  643.     
  644.     x = xso;y = yso;h = sho;w = swo;
  645.     *masquageg = FAUX;
  646.     *masquaged = FAUX;
  647.     if (x % 8)
  648.     {
  649.         *masquageg = VRAI;    
  650.         bitgauche = (x % 8);
  651.         *masqueg = 0xff >> bitgauche;
  652.         x -= bitgauche;
  653.     }
  654.     if ((w % 8) != 7)
  655.     {
  656.         *masquaged = VRAI;
  657.         bitdroite = 7 - (w % 8);
  658.         *masqued = (0x00ff << bitdroite) & 0x00ff;
  659.         w += bitdroite;
  660.     }    
  661.     debut = (int)(x / 8) + y*80;
  662.     lon = (int)(w / 8);
  663.     if (w % 8) lon ++;
  664.     nombre = h * lon;
  665. }
  666. /**************************************************************************/        
  667. void impression()
  668.  
  669. /* impression de l'image avec toutes les options */
  670.  
  671. {
  672.     register FILE *fd;
  673.     register int i,j,k;
  674.     register long inc;
  675.     unsigned int date,time;
  676.     int hauteur,largeur,x,bouton,compteur,dep,masqueg,masqued;
  677.     int masquaged,masquageg,page,centre,copie,latex;
  678.     int llx,lly,urx,ury;
  679.     float reduction,unite;
  680.     
  681.     date=Tgetdate(); time=Tgettime();
  682.     if (choixformat(&page,¢re,&copie,&latex,&reduction))
  683.     {
  684.         if (sortieimprimante())
  685.         {
  686.             if ((fd = fopen(mode,"w")) == NULL)
  687.             {
  688.                 form_alert(1,MESS2);
  689.             }
  690.             else
  691.             {
  692.         printf("ouverture fichier: %s ... OK\n",mode);getchar();
  693.                 Cache_Souris;
  694.                 calcul(&masqueg,&masqued,&masquageg,&masquaged);
  695.                 rsrc_gaddr(R_TREE,ANNONCE,&dial);
  696.                 if (deja)
  697.                 {
  698.                     hauteur = sho;
  699.                     largeur = lon * 8;
  700.                 }
  701.                 else
  702.                 {
  703.                     hauteur = 400;                    
  704.                     largeur = 640;                    
  705.                 }
  706.                 dial[CADRE].ob_width = (dial[CADRE].ob_width/dial[BOITE].ob_width)*dial[BOITE].ob_width;
  707.                 objc_change(dial,CADRE,0,xdial,ydial,wdial,hdial,NORMAL,1);
  708.                 dial[BOITE].ob_x = 0;
  709.                 objc_change(dial,BOITE,0,xdial,ydial,wdial,hdial,NORMAL,1);
  710.                 afficheboite();
  711.                 resetboite();    
  712. /* début du code PostScript */
  713.                 if (periph!=2) fprintf(fd,"\004"); /* initialisation de l'imprimante */
  714.                 if (copie == 0) copie = 1;
  715.                 llx=72; lly=72; unite=(72.0*4.0)/300.0;
  716.                 urx=llx+(((float)largeur)*unite); ury=lly+(((float)hauteur)*unite);
  717.                 if (latex)
  718.                 {    fprintf(fd,"%%!PS-Adobe-2.0 EPSF-2.0");
  719.                     fprintf(fd,"%%%%BoundingBox: %d %d %d %d\n",llx,lly,urx,ury);
  720.                     fprintf(fd,"%%%%Creator: DEGAS2PS on Atari ST\n");
  721.                     fprintf(fd,"%%%%Title: %s\n",rindex(source,'\\')+1);
  722.                     fprintf(fd,"%%%%CreationDate: %02d/%02d/%4d  %02d:%02d\n",
  723.                                       date&0x1f,(date>>5)&0x0f,((date>>9)&0x7f)+1980,
  724.                                       (time>>11)&0x1f,(time>>5)&0x3f);
  725.                     fprintf(fd,"%%%%EndComments\n");
  726.                     fprintf(fd,"%%%%Pages 1\n%%%%EndComments\n%%%%Page: 1 1\n");
  727.                     fprintf(fd,"gsave 72 72 translate /height %d def /width %d def\n",hauteur, largeur);
  728.                     fprintf(fd,"/dot {%1.2f mul}def width dot height dot scale\n",unite);
  729.                 } else{
  730.                     fprintf(fd,"%%!\ngsave initmatrix /#copies %d def\n",copie);
  731.                     fprintf(fd,"/reduc %2.2f def /page %d def /centre %d def\n",reduction,page,centre);
  732.                     fprintf(fd,"/height %d def /width %d def\n",hauteur,largeur);
  733.                     fprintf(fd,"/devit { dtransform 2 copy dup mul exch dup mul exch add sqrt\n");
  734.                     fprintf(fd,"         dup 3 1 roll div 3 1 roll div exch idtransform } def\n");
  735.                     fprintf(fd,"/xdev 1 0 devit pop def /ydev 0 1 devit exch pop def\n");
  736.                     fprintf(fd,"xdev reduc mul ydev reduc mul scale\n/reduc2 1 def\n");
  737.                     fprintf(fd,"clippath pathbbox\n");                                    /* On récupère les valeurs */
  738.                     fprintf(fd,"/yhaut exch def /xhaut exch def\n");        /* exactes des coordonnées */
  739.                     fprintf(fd,"/ybas  exch def /xbas  exch def\n");        /* de l'imprimante                */
  740.                     fprintf(fd,"/yutil yhaut ybas sub def /xutil xhaut xbas sub def\n");
  741.                     fprintf(fd,"centre 1 le\n");
  742.                     fprintf(fd," { height width gt\n");
  743.                     fprintf(fd,"  { /page 0 def } { /page 1 def } ifelse } if\n");
  744.                     fprintf(fd,"centre 1 eq\n");
  745.                     fprintf(fd," { /reduc2 0.05 def\n");
  746.                     fprintf(fd,"  { /h reduc2 height mul def\n");
  747.                     fprintf(fd,"    /l reduc2 width mul def\n");
  748.                     fprintf(fd,"    h xutil le l yutil le and\n");
  749.                     fprintf(fd,"     { /reduc2 reduc2 0.05 add def } {exit} ifelse");
  750.                     fprintf(fd,"  } loop\n");
  751.                     fprintf(fd," /reduc2 reduc2 0.05 sub def }if \n");
  752.                      fprintf(fd,"1 page eq { /topoffset  { yutil width  dot sub 2 div cvi } def\n");
  753.                     fprintf(fd,"            /leftoffset { xutil height dot sub 2 div cvi } def }\n");
  754.                     fprintf(fd,"          { /leftoffset { xutil width  dot sub 2 div cvi } def\n");
  755.                     fprintf(fd,"            /topoffset  { yutil height dot sub 2 div cvi } def } ifelse\n");
  756.                     fprintf(fd,"/dot { reduc2 mul } def xbas ybas translate\n");
  757.                     fprintf(fd,"1 page eq\n");
  758.                     fprintf(fd,"{ xutil 0 translate 90 rotate topoffset leftoffset translate }\n");
  759.                     fprintf(fd,"{ leftoffset topoffset translate } ifelse\n");
  760.                     fprintf(fd,"width dot height dot scale\n");
  761.                 }
  762.                 fprintf(fd,"/imagedegas { width height 1 [width 0 0 height neg 0 height]\n");
  763.                 fprintf(fd,"{ currentfile picstr readhexstring pop } image } def\n");
  764.                 fprintf(fd,"/picstr width 8 idiv string def\n");
  765.                 fprintf(fd,"{ 1 exch sub } settransfer\n");
  766.                 fprintf(fd,"imagedegas\n");
  767.                 
  768.                 printf("fin prologue...\n");getchar();
  769.                 compteur = 0;
  770.                 dep = (int)(dial[CADRE].ob_width/dial[BOITE].ob_width);
  771.                 /* envoi d'une partie d'image */
  772.                 if (deja)
  773.                 {
  774.                     inc = debut + 34;
  775.                     dep = (int)(nombre/dep);            
  776.                     for (j=1; j<=sho; j++)
  777.                     {
  778.                         if (testarret() == 2) { if (periph == 2) fclose(fd); Montre_Souris;return;}
  779.                         compteur++;
  780.                         if (masquageg) fprintf(fd,"%02x",*(unsigned char *)(ecran+inc++) & masqueg);
  781.                         else fprintf(fd,"%02x",*(unsigned char *)(ecran+inc++));
  782.                         for (i=2; i<lon; i++)
  783.                         {
  784.                             if (periph == 1) gestionerreur();
  785.                             fprintf(fd,"%02x",*(unsigned char *)(ecran+inc++));
  786.                             if (compteur++ >= dep)
  787.                             {
  788.                                 compteur = 0;
  789.                                 dial[BOITE].ob_x += dial[BOITE].ob_width;
  790.                                 objc_draw(dial,CADRE,xdial,ydial,wdial,hdial);
  791.                                 objc_draw(dial,BOITE,xdial,ydial,wdial,hdial);
  792.                             }
  793.                         }
  794.                         if (masquaged) fprintf(fd,"%02x",*(unsigned char *)(ecran+inc++) & masqued);
  795.                         else fprintf(fd,"%02x",*(unsigned char *)(ecran+inc++));
  796.                         if(fprintf(fd,"\n")<0) {
  797.                                 form_alert(1,MESS4);
  798.                                 if (periph == 2) fclose(fd);    Montre_Souris;
  799.                                 return;
  800.                         }                    
  801.                         inc += (80 - lon);
  802.                         compteur++;
  803.                     }
  804.                 }
  805.                 else
  806.                 /* envoi de l'image entière */    
  807.                 {
  808.                     dep = (int)(32000/dep);            
  809.                     for (j=i=0; i<=32000;i++)
  810.                     {
  811.                         if (testarret() == 2) {if (periph == 2) fclose(fd); Montre_Souris;return;}
  812.                         if (periph == 1) gestionerreur();
  813.                         fprintf(fd,"%02x",*(unsigned char *)((ecran+34)+i));
  814.                         if (j++==40) {
  815.                             if(fprintf(fd,"\n")<0) {
  816.                                 form_alert(1,MESS4);
  817.                                 if (periph == 2) fclose(fd);    Montre_Souris;
  818.                                 return;
  819.                             }
  820.                             j=0;
  821.                         }
  822.                         if (compteur++ == dep){
  823.                             compteur = 0;
  824.                             dial[BOITE].ob_x += dial[BOITE].ob_width;
  825.                             objc_draw(dial,CADRE,xdial,ydial,wdial,hdial);
  826.                             objc_draw(dial,BOITE,xdial,ydial,wdial,hdial);
  827.                         }
  828.                     }
  829.                     fprintf(fd,"\n");
  830.                 }
  831.                 if (fprintf(fd,"grestore showpage\n%%%%Trailer\n")<0){
  832.                     form_alert(1,MESS4);
  833.                 };
  834.                 if (periph == 2) fclose(fd); else fflush(fd); /* on ne ferme pas si AUX ou PRN */
  835.                 Cconout(0x07);
  836.                 /* attend les messages de la laser */
  837.                 if (periph != 2)
  838.                 {
  839.                     Bconout(periph,0x04);
  840.                     k = 0;
  841.                     if (periph == 1)
  842.                     do
  843.                     {    
  844.                         evnt_mouse(0,0,0,RESW,RESH,&x,&x,&bouton,&x);
  845.                         if (k++ == 1000) 
  846.                         {
  847.                             Bconout(periph,0x14);
  848.                             k = 0;
  849.                         }
  850.                         gestionerreur();
  851.                     }
  852.                     while (!(bouton & 0x0002));
  853.                 }
  854.                 effaceboite();
  855.                 Montre_Souris;
  856.             }
  857.       }
  858.   }
  859. }
  860. /**************************************************************************/
  861. /* test si on appuie sur le bouton de droite pour l'arret de     */
  862. /* l'impression                                                                                                */
  863. int testarret()
  864.  
  865. {
  866.     int status,x;
  867.     
  868.     vq_mouse(handle,&status,&x,&x);
  869.     if (status & 0x0002)
  870.         return(form_alert(1,MESS3));
  871.     else return(0);
  872. }
  873. /**************************************************************************/
  874. /* initialise la boite de dialogue */
  875. void resetboite()
  876.  
  877. {
  878.     register int i;
  879.     char mess[80];
  880.     
  881.     strcpy(mess,"");
  882.     for (i=PHRASE1; i<=PHRASE4; i++)
  883.     {
  884.         ((TEDINFO *)dial[i].ob_spec)->te_ptext = mess;
  885.         ((TEDINFO *)dial[i].ob_spec)->te_txtlen = 40;
  886.         objc_draw(dial,i,0,xdial,ydial,wdial,hdial);
  887.     }
  888.     for (i=0; i<=3; i++) strcpy(tex[i],"");
  889. }
  890. /**************************************************************************/
  891. /* test si l'imprimante envoie des messages pour signaler des    */
  892. /* anomalies lors de l'impression    */
  893. void gestionerreur()
  894.  
  895. {
  896.     register int i,j,l;
  897.     char texte[20],mess[80];
  898.     
  899.     while (Bconstat(periph))
  900.     {
  901.         while (((l = (int)Bconin(periph)) != 13) && ( l <= 122) && (l >= 32))
  902.         {
  903.             strcpy(texte,"");
  904.             if ((l != 37) && (l != 91) && (l != 93))
  905.             {
  906.                 sprintf(texte,"%c",l);
  907.                 strcat(mess,texte);
  908.             }
  909.         }
  910.         if (l == 13)
  911.         {
  912.             l = (int)Bconin(periph);
  913.             for (i = 0; i <= 2; i++) strcpy(tex[i],tex[i+1]);
  914.             strcpy(tex[3],mess);
  915.             j = 0;
  916.             for (i=PHRASE1; i<=PHRASE4; i++)
  917.             {
  918.                 ((TEDINFO *)dial[i].ob_spec)->te_ptext = tex[j++];
  919.                 ((TEDINFO *)dial[i].ob_spec)->te_txtlen = 40;
  920.                 objc_draw(dial,i,0,xdial,ydial,wdial,hdial);
  921.             }
  922.             strcpy(mess,"");
  923.         }
  924.     }
  925. }
  926. /**************************************************************************/
  927. /* réserve la place pour l'affichage d'une boite de dialogue */
  928. void afficheboite()
  929.  
  930. {
  931.     form_center(dial,&xdial,&ydial,&wdial,&hdial);
  932.     form_dial(FMD_START,1,1,10,10,xdial,ydial,wdial,hdial);
  933.     form_dial(FMD_GROW,1,1,10,10,xdial,ydial,wdial,hdial);
  934.     objc_draw(dial,ROOT,MAX_DEPTH,xdial,ydial,wdial,hdial);
  935. }
  936. /**************************************************************************/
  937. /* libère la place occupée par la boite et l'efface */
  938. void effaceboite()
  939.  
  940. {
  941.     form_dial(FMD_SHRINK,1,1,10,10,xdial,ydial,wdial,hdial);
  942.     form_dial(FMD_FINISH,1,1,10,10,xdial,ydial,wdial,hdial);
  943.     objc_change(dial,sortie,0,xdial,ydial,wdial,hdial,NORMAL,FAUX);
  944. }
  945. /**************************************************************************/
  946. /* affiche une fenetre d'aide */
  947. void aide()
  948.  
  949. {    
  950.     rsrc_gaddr(R_TREE,HELP,&dial);
  951.     Cache_Souris;
  952.     afficheboite();
  953.     Montre_Souris;
  954.     sortie = form_do(dial,FAUX);
  955.     Cache_Souris;
  956.     effaceboite();
  957.     Montre_Souris;
  958. }
  959. /**************************************************************************/
  960. /* affiche le copyright */
  961. void apropos()
  962.  
  963. {
  964.     rsrc_gaddr(R_TREE,COPYRIG,&dial);
  965.     ((TEDINFO *)dial[NUMVER].ob_spec)->te_ptext=version;
  966.     ((TEDINFO *)dial[NUMVER].ob_spec)->te_txtlen=strlen(version);
  967.     Cache_Souris;
  968.     afficheboite();
  969.     Montre_Souris;
  970.     sortie = form_do(dial,FAUX);
  971.     Cache_Souris;
  972.     effaceboite();
  973.     Montre_Souris;
  974. }
  975. /**************************************************************************/
  976. /* sélection d'un fichier à partir d'un disque */
  977. int dialogue(source,type,suffixe)
  978.  
  979. char *source;
  980. int type;
  981. char *suffixe;
  982. {
  983.     int fichier,drive;
  984.     char nomfich[80];
  985.     char inpath[80];               /* chemin d'acces */
  986.     char insel[80];                   /* selection document */
  987.     int bouton,res;
  988.     long longueur = 32034;    /* longueur d'un fichier DEGAS */
  989.     disk_info diskinfo;
  990.     long space;
  991.  
  992. /* Obtention du nom du fichier source */
  993. /* On affiche les fichiers dans le repertoire */
  994. /* courant, sur le drive actif */
  995.  
  996.     drive=Dgetdrv();
  997.     inpath[0]=drive+0x41;
  998.     inpath[1]=NULL;
  999.     strcat(inpath,":");
  1000.     Dgetpath(&inpath[2],drive+1);
  1001.     strcat(inpath,"\\*.");
  1002.     strcat(inpath,suffixe);
  1003.     insel[0]='\0';
  1004.     if (lecture && (!type)) 
  1005.     {
  1006.         strcpy(inpath,cheminlecture);
  1007.         strcpy(rindex(inpath,'.')+1,suffixe);
  1008.     }    
  1009.     if (ecriture && (type))
  1010.     {
  1011.         strcpy(inpath,cheminecriture);
  1012.         strcpy(rindex(inpath,'.')+1,suffixe);
  1013.     }
  1014.     if (type) 
  1015.     {
  1016.         strcpy(insel,nomsortie);
  1017.         strcpy(rindex(insel,'.')+1,suffixe);
  1018.     }
  1019.     if (!fsel_input(inpath,insel,&bouton)) return(FAUX);
  1020.     if (((bouton) && (insel[0] == '\0')) || (!bouton)) return(FAUX);
  1021.     else
  1022.     {
  1023. /* sauve le chemin pour le lecture des fichiers PI3 */
  1024.         if (type)
  1025.         {
  1026.             strcpy(cheminecriture,inpath);
  1027.             ecriture = VRAI;
  1028.         } 
  1029.         else 
  1030.         { 
  1031. /* sauve le chemin pour l'écriture des fichiers PS */
  1032.             strcpy(cheminlecture,inpath);
  1033.             lecture = VRAI;
  1034.         }
  1035.         strcpy(nomfich,inpath);
  1036.         strcpy(rindex(nomfich,'\\')+1,insel);
  1037.         strcpy(source,nomfich);    
  1038.         if (type) 
  1039.         {
  1040. /*
  1041.             Dfree(&diskinfo,(source[0]-'A')+1);
  1042.             space = diskinfo.b_free * diskinfo.b_clsiz * diskinfo.b_secsiz;
  1043.             if (space < 70000) 
  1044.             {
  1045.                 form_alert(1,MESS4);
  1046.                 return(FAUX);
  1047.             }
  1048.             else 
  1049. */
  1050.                 return(VRAI);
  1051.         }
  1052.         else
  1053.         {      
  1054.             if ((fichier = Fopen(nomfich,0)) < 0) 
  1055.             {
  1056.                 form_alert(1,MESS5);
  1057.                 return(FAUX);
  1058.             }
  1059.             else 
  1060.             {        
  1061.                 Fread(fichier,longueur,ecran);
  1062.                 Fclose(fichier);    
  1063.                 return(VRAI); 
  1064.             }
  1065.         }
  1066.     }
  1067.  
  1068. /**********************************/
  1069. /* fin du programme ST_PostScript */
  1070. /***********************************************************************/
  1071. }
  1072.