⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 字体缩放显示
💻 C
字号:
#include <os2.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "32pmifi.h"//#define USE_ORIG#ifdef USE_ORIG   #pragma import (fdhdr, "FONT_DRIVER_DISPATCH_TABLE", "TRUETYPE", 0)#else  #if defined USE_ATM    #pragma import (fdhdr, "FONT_DRIVER_DISPATCH_TABLE", "PMATM", 0)  #else    #pragma import (fdhdr, "FONT_DRIVER_DISPATCH_TABLE", "FREETYPE", 0)  #endif#endifextern FDHEADER fdhdr;char *fontnames[20] = { "G:\\OS2\\MDOS\\WINOS2\\SYSTEM\\SYMBOL.TTF", "G:\\OS2\\MDOS\\WINOS2\\SYSTEM\\WINGDING.TTF", "G:\\PSFONTS\\ARIALB.ttf", "G:\\PSFONTS\\ARIALI.ttf", "G:\\PSFONTS\\ARIALZ.ttf", "G:\\PSFONTS\\COUR.TTF", "G:\\PSFONTS\\COURB.TTF", "G:\\PSFONTS\\COURI.TTF", "G:\\PSFONTS\\COURZ.TTF", "G:\\PSFONTS\\ARIAL.ttf", "G:\\PSFONTS\\TIMESB.TTF", "G:\\PSFONTS\\TIMESI.ttf", "G:\\PSFONTS\\TIMESZ.ttf", "G:\\PSFONTS\\TIMES.TTF", "G:\\PSFONTS\\ARIBLK.ttf", "G:\\CHINESE\\AVSV.TTF", "G:\\CHINESE\\MINGLI.TTC", "D:\\PSFONTS\\TNRMT30.TTF"};#define FNTNAME1 "\\PSFONTS\\TIMES.TTF"#ifdef USE_ATM   #define FNTNAME2 "\\PSFONTS\\helv.ofm"#else   #define FNTNAME2 "\\PSFONTS\\symbol.tTf"#endif#define BUFSIZE 32768void ShowChar(PCHARATTR pca, PBITMAPMETRICS pbmm) {   int i, j;   int bufwidth = ((pbmm->sizlExtent.cx + 31) & -32) / 8;   for (i =0; i <  pbmm->sizlExtent.cy; i++) {      for (j = 0; j < bufwidth * 8; j++)         if (pca->pBuffer[i * bufwidth + j / 8] & (1 << (7-(j % 8))))            printf("*");         else            printf(" ");      printf("\n");   }}void main(int argc, char **argv){   char          fname[260];   PFDDISPATCH   pfdisp;   LONG          rc;   HFF           hff, hff2;      /* font file */   HFC           hfc, hfc2;      /* font context */   static   IFIMETRICS    ifimet[12];      /* IFI metrics */   CONTEXTINFO   ci;   CHARATTR      charattr; /* character attributes */   BITMAPMETRICS bmm;      /* bit-map metrics */   PBYTE         buf;   int           glyph = 0, i, j;   int           numFaces;   int           faceIndex = 0;   switch (argc) {      case 4:         strcpy(fname, argv[1]);         glyph = atoi(argv[2]);         faceIndex = atoi(argv[3]);         break;      case 2:         glyph = atoi(argv[1]);      case 1:         strcpy(fname, FNTNAME1);         break;      default:         strcpy(fname, argv[1]);         glyph = atoi(argv[2]);   }   buf = (PBYTE)malloc(BUFSIZE);   if (strncmp("OS/2 FONT DRIVER", fdhdr.strId, 16)) {      printf("Invalid Font Driver\n");      return;   }   printf("Font Driver OK, ");   printf("Version %d\n", fdhdr.ulVersion);   printf("Technology: %s\n", fdhdr.szTechnology);   hff = fdhdr.pfddisp->FdLoadFontFile(fname);   printf("Loading font... HFF = %X\n", hff);   if (hff == (HFF)0xFFFFFFFF)      return;/*   rc = fdhdr.pfddisp->FdConvertFontFile("G:\\PSFONTS\\TIMES.TTF",           "G:\\PSFONTS", buf); */#if 0   for (i = 0; i < 18; i++) {      hff = fdhdr.pfddisp->FdLoadFontFile(fontnames[i]);      if (hff == (HFF)-1) {         printf("x");         continue;      }      numFaces = fdhdr.pfddisp->FdQueryFaces(hff, NULL, 0, -1, 0);      if (numFaces < 0) {         printf("x");         continue;      }      for (j = 0; j < numFaces; j++) {         rc = fdhdr.pfddisp->FdQueryFaces(hff, &ifimet[0], 238, 1, j);         if (rc < 0) {            printf("x");            continue;         }      }      rc = fdhdr.pfddisp->FdUnloadFontFile(hff);      if (rc)         printf("x");      else         printf(".");   }   printf("\n");#endif   hff = fdhdr.pfddisp->FdLoadFontFile(FNTNAME2);   hff = fdhdr.pfddisp->FdLoadFontFile(fname);   rc = fdhdr.pfddisp->FdUnloadFontFile(hff);   hff = fdhdr.pfddisp->FdLoadFontFile(fname);   printf("Loading font... HFF = %X\n", hff);   if (hff == (HFF)0xFFFFFFFF)      return;   numFaces = fdhdr.pfddisp->FdQueryFaces(hff, NULL, 0, -1, 0);   printf("Number of faces = %d\n", numFaces);   rc = fdhdr.pfddisp->FdQueryFaces(hff, &ifimet[0], sizeof(IFIMETRICS), numFaces, 0);   printf("Querying faces... RC = %X\n", rc);   hfc = fdhdr.pfddisp->FdOpenFontContext(hff, faceIndex);   printf("Opening context... HFC = %X\n", hfc);   if (hfc == (HFC)0xFFFFFFFF) {      rc = fdhdr.pfddisp->FdUnloadFontFile(hff);      printf("Unloading font... RC = %X\n", rc);   }   ci.cb = sizeof(ci);   ci.fl = 0;/*   ci.sizlPPM.cx = 3618;   ci.sizlPPM.cy = 3622;   ci.pfxSpot.x = 46340;   ci.pfxSpot.y = 46340;   ci.matXform.eM11 = 511;   ci.matXform.eM12 = 0;   ci.matXform.eM21 = 0;   ci.matXform.eM22 = 511; */   ci.sizlPPM.cx = 3622;   ci.sizlPPM.cy = 3622;   ci.pfxSpot.x = 46340;   ci.pfxSpot.y = 46340;   ci.matXform.eM11 = 768;   ci.matXform.eM12 = 0;   ci.matXform.eM21 = 0;   ci.matXform.eM22 = 768;   rc = fdhdr.pfddisp->FdQueryFaceAttr(hfc, FD_QUERY_ABC_WIDTHS, buf,                                       sizeof(ABC_TRIPLETS), NULL, glyph);   printf("Querying face attrs... RC = %d\n", rc);   rc = fdhdr.pfddisp->FdQueryFaceAttr(hfc, FD_QUERY_KERNINGPAIRS, buf,                                       ifimet[0].cKerningPairs * sizeof(FD_KERNINGPAIRS),                                       NULL, 0);   rc = fdhdr.pfddisp->FdSetFontContext(hfc, &ci);   printf("Setting context... rc = %X\n", rc);   charattr.cb = sizeof(charattr);   charattr.iQuery = FD_QUERY_BITMAPMETRICS | FD_QUERY_CHARIMAGE;//   charattr.iQuery = FD_QUERY_OUTLINE;   charattr.gi = glyph;   charattr.pBuffer = buf;   charattr.cbLen = BUFSIZE;   if (rc == -1)      return;   rc = fdhdr.pfddisp->FdQueryCharAttr(hfc, &charattr, &bmm);   printf("Querying char attrs... bytes = %d\n", rc);   ShowChar(&charattr, &bmm);//   rc = fdhdr.pfddisp->FdQueryCharAttr(hfc, &charattr, &bmm, NULL);//   printf("Querying char attrs... bytes = %d\n", rc);   hff2 = fdhdr.pfddisp->FdLoadFontFile(FNTNAME2);   printf("Loading font... HFF = %X\n", hff2);   if (hff2 == (HFF)0xFFFFFFFF)      return;   charattr.cbLen = 0;   rc = fdhdr.pfddisp->FdQueryCharAttr(hfc, &charattr, &bmm);   printf("Querying char attrs... bytes = %d\n", rc);   rc = fdhdr.pfddisp->FdQueryFaces(hff2, &ifimet[0], sizeof(ifimet), 1, 0);   printf("Querying faces... RC = %X\n", rc);   hfc2 = fdhdr.pfddisp->FdOpenFontContext(hff2, 0);   printf("Opening context... HFC = %X\n", hfc2);   if (hfc2 == (HFC)0xFFFFFFFF) {      rc = fdhdr.pfddisp->FdUnloadFontFile(hff2);      printf("Unloading font... RC = %X\n", rc);   }   rc = fdhdr.pfddisp->FdCloseFontContext(hfc);   printf("Closing context... RC = %X\n", rc);   rc = fdhdr.pfddisp->FdUnloadFontFile(hff);   printf("Unloading font... RC = %X\n", rc);   rc = fdhdr.pfddisp->FdUnloadFontFile(hff);   printf("Unloading font... RC = %X\n", rc);   rc = fdhdr.pfddisp->FdCloseFontContext(hfc2);   printf("Closing context... RC = %X\n", rc);   rc = fdhdr.pfddisp->FdUnloadFontFile(hff2);   printf("Unloading font... RC = %X\n", rc);   rc = fdhdr.pfddisp->FdUnloadFontFile(hff2);   printf("Unloading font... RC = %X\n", rc);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -