📄 test.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 + -