home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / gpr140s / font.c < prev    next >
C/C++ Source or Header  |  1994-09-10  |  5KB  |  191 lines

  1. /**********************************************/
  2. /* FONT.C                                     */
  3. /* Erstellen und verwalten der Fontliste      */
  4. /* 12.01.94 sk                                */
  5. /**********************************************/
  6. #include <stdlib.h>
  7. #include <vdibind.h>
  8. #include <aesbind.h>
  9. #include <e_gem.h>
  10. #include <string.h>
  11. #include <stdio.h>
  12. #include "gprint.h"
  13. #include "gdos.h"
  14.  
  15. extern int load_fontliste (FONT *fonts, int *anzahl);
  16. extern int open_wkst      (int wk_handle);
  17.  
  18. extern int oldhandle, cb[];
  19. extern OBJECT *font_tree;
  20.  
  21. int  get_fonts(int wk_handle);
  22. int  set_font(int wk_handle, int font_id);
  23. void get_speed(int wkh, FONT *fp);
  24.  
  25. int  oldhandle, anz_font, akt_font, id_akt_font;
  26. /********************************************************/
  27. /* Fonts der Workstation ermitteln und Fontliste        */
  28. /* erstellen.                                           */
  29. /********************************************************/
  30. int get_fonts(int wk_handle)
  31. {
  32.   FONT *fp;
  33.   int i;
  34.   unsigned long memavail;
  35.  
  36.   if(oldhandle != PF.lh)                       /* Workstation geändert ? */
  37.   {
  38.     akt_font = 0;                              /* Fonts neuladen         */
  39.     font_tree[ZHBEL].ob_state &= ~SELECTED;    /* Flag Beliebige Höhe    */
  40.     if(fontp != NULL)
  41.       free((void *)fontp);
  42.     fontp = NULL;
  43.     afp   = NULL;
  44.   }
  45.   if(akt_font == 0)
  46.   {
  47.     oldhandle = wk_handle;                     /* für's nächste mal      */
  48.  
  49.     if((wk_handle = open_wkst(wk_handle)) != 0)
  50.     {
  51.       int char_width, char_height, cell_width, cell_height;
  52.       char fname[40];
  53.  
  54.       anz_font = vst_load_fonts(wk_handle, 0) + work_out[10] + 1;
  55.  
  56.       memavail = (long)malloc((unsigned long)-1) - 20000;
  57.       if(anz_font * sizeof(FONT) < memavail)
  58.       {
  59.         fontp = (FONT *)malloc(anz_font * sizeof(FONT));
  60.         fp  = fontp;
  61.         afp = fontp;
  62.       }
  63.  
  64.       if(fp != NULL)
  65.       {
  66.         for(i = 1; i <= anz_font; i++, fp++)     /* Für alle Fonts         */
  67.         {
  68.           fp->font_id = vqt_name(wk_handle, i, fname);    /* ID & Name     */
  69.  
  70.           if(fp->font_id != -1 && strcmp(fname, "System") != 0)
  71.           {
  72.             strcpy(fp->font_name, fname);
  73.             if(fname[32] == 0x01)                /* Byte 32 = 1 => Speedo  */
  74.               fp->font_spd = TRUE;
  75.             else
  76.               fp->font_spd = FALSE;
  77.  
  78.             if(akt_font == 0)
  79.             {
  80.               akt_font = i;
  81.               afp = fp;
  82.             }
  83.             vst_font(wk_handle, fp->font_id);    /* Aktuellen Font setzen  */
  84.  
  85.             vst_height(wk_handle, 10, &char_width, &char_height,
  86.                        &cell_width, &cell_height);
  87.             get_speed(wk_handle, fp);
  88.           }
  89.           else
  90.           {
  91.             strcpy(fp->font_name, fname);
  92.             fp->font_id   = -1;
  93.             fp->font_prop = FALSE;
  94.             fp->font_spd  = FALSE;
  95.           }
  96.         }
  97.         vst_unload_fonts(wk_handle, 0);
  98.         m_v_clswk(wk_handle);
  99.         return(TRUE);
  100.       }
  101.       else
  102.       {
  103.         form_alert(1, "[3][ GDOS-Print: | Nicht genug Speicher | für Fontliste! ][Abbruch]");
  104.         vst_unload_fonts(wk_handle, 0);
  105.         m_v_clswk(wk_handle);
  106.         return(FALSE);
  107.       }
  108.     }
  109.     return(FALSE);
  110.   }
  111.  
  112.   return(TRUE);
  113. } /* get_fonts() */
  114.  
  115. /******************************************************/
  116. /* Beim Start den eingestellten Font eintragen        */
  117. /******************************************************/
  118. int set_font(int wk_handle, int ft_id)
  119. {
  120.   FONT *fp;
  121.   int i;
  122.   unsigned long memavail;
  123.  
  124.   if(akt_font == 0)
  125.   {
  126.     oldhandle = wk_handle;
  127.  
  128.     if((wk_handle = open_wkst(wk_handle)) != 0)
  129.     {
  130.       int char_width, char_height, cell_width, cell_height;
  131.       char fname[50];
  132.  
  133.       anz_font = vst_load_fonts(wk_handle, 0) + work_out[10] + 1;
  134.  
  135.       memavail = (long)malloc((unsigned long)-1) - 20000;
  136.       if(anz_font * sizeof(FONT) < memavail)
  137.       {
  138.         fontp = (FONT *)malloc(anz_font * sizeof(FONT));
  139.         fp  = fontp;
  140.         afp = fontp;
  141.       }
  142.  
  143.       for(i = 1; i <= anz_font; i++, fp++)
  144.       {
  145.         fp->font_id = vqt_name(wk_handle, i, fname);
  146.         if(fp->font_id != -1)
  147.         {
  148.           strcpy(fp->font_name, fname);
  149.           if(fname[32] == 0x01) fp->font_spd = TRUE;
  150.  
  151.           if(fp->font_id == ft_id)
  152.           {
  153.             akt_font = i;
  154.             afp = fp;
  155.           }
  156.           vst_font(wk_handle, fp->font_id);
  157.  
  158.           vst_height(wk_handle, 10, &char_width, &char_height,
  159.                      &cell_width, &cell_height);
  160.           get_speed(wk_handle, fp);
  161.         }
  162.       }
  163.       vst_unload_fonts(wk_handle, 0);
  164.       m_v_clswk(wk_handle);
  165.       return(TRUE);
  166.     }
  167.     return(FALSE);
  168.   }
  169.   return(FALSE);
  170. } /* set_font() */
  171.  
  172. /*********************************/
  173. void get_speed(int wkh, FONT *fp)
  174. {
  175.   int ext1[8], ext2[8];
  176.  
  177.   if(fp->font_spd == TRUE)
  178.   {
  179.     vqt_f_extent(wkh, "m", ext1);
  180.     vqt_f_extent(wkh, "i", ext2);
  181.     if((ext1[2]-ext1[0]) != (ext2[2]-ext2[0]))
  182.       fp->font_prop = TRUE;
  183.     else
  184.       fp->font_prop = FALSE;
  185.   }
  186.   else
  187.   {
  188.     fp->font_prop = FALSE;
  189.   }
  190. } /* get_speed() */
  191.