CFSLockFreeFixAlloc::~CFSLockFreeFixAlloc(){ while (m_pFreeHandle){ CFSFixAllocHandle *pNext=m_pFreeHandle->m_pNext; FSFree(m_pFreeHandle); m_pFreeHandle=pNext; } }
void CFSLockFreeFixAlloc::Free(void *pBlock){ if (m_lCacheSpace<=0) { FSFree(pBlock); } else{ CFSFixAllocHandle *pHandle=(CFSFixAllocHandle *)pBlock; pHandle->m_pNext=m_pFreeHandle; m_pFreeHandle=pHandle; m_lCacheSpace--; } }
static void get_list(const char *pattern) { int available = nnames + 1, i; char **fonts; FSXFontInfoHeader **info; FSPropInfo **props; FSPropOffset **offsets; unsigned char **pdata; /* Get list of fonts matching pattern */ for (;;) { if (long_list >= L_MEDIUM) fonts = FSListFontsWithXInfo(svr, pattern, nnames, &available, &info, &props, &offsets, &pdata); else fonts = FSListFonts(svr, pattern, nnames, &available); if (fonts == NULL || available < nnames) break; if (long_list >= L_MEDIUM) { for (i = 0; i < available; i++) { FSFree((char *) fonts[i]); FSFree((char *) info[i]); FSFree((char *) props[i]); FSFree((char *) offsets[i]); FSFree((char *) pdata[i]); } FSFree((char *) fonts); FSFree((char *) info); FSFree((char *) props); FSFree((char *) offsets); FSFree((char *) pdata); } else { FSFreeFontNames(fonts); } nnames = available * 2; } if (fonts == NULL) { fprintf(stderr, "%s: pattern \"%s\" unmatched\n", program_name, pattern); return; } if (font_list) font_list = (FontList *) realloc(font_list, (font_cnt + available) * sizeof(FontList)); else font_list = (FontList *) malloc((unsigned) (font_cnt + available) * sizeof(FontList)); for (i = 0; i < available; i++) { font_list[font_cnt].name = fonts[i]; if (long_list >= L_MEDIUM) { font_list[font_cnt].info = info[i]; font_list[font_cnt].pi = props[i]; font_list[font_cnt].po = offsets[i]; font_list[font_cnt].pd = pdata[i]; } else font_list[font_cnt].info = NULL; font_cnt++; } }
void operator delete(void* pBuf) { FSFree(pBuf); }
Bool EmitCharacters(FILE *outFile, FSServer *fontServer, FSXFontInfoHeader *fontHeader, Font fontID) { FSXCharInfo *extents; FSXCharInfo *charInfo; int encoding; FSOffset *offsets; unsigned char *glyph; unsigned char *glyphs; unsigned int nChars; int firstCharLow; int firstCharHigh; int lastCharLow; int lastCharHigh; int chLow; int chHigh; FSBitmapFormat format; nChars = 0; format = BYTE_ORDER | BIT_ORDER | SCANLINE_UNIT | SCANLINE_PAD | EXTENTS; firstCharLow = fontHeader->char_range.min_char.low; firstCharHigh = fontHeader->char_range.min_char.high; lastCharLow = fontHeader->char_range.max_char.low; lastCharHigh = fontHeader->char_range.max_char.high; (void) FSQueryXExtents16(fontServer, fontID, True, (FSChar2b *) 0, 0, &extents); (void) FSQueryXBitmaps16(fontServer, fontID, format, True, (FSChar2b *) 0, 0, &offsets, &glyphs); charInfo = extents; /* calculate the actual number of chars */ for (chHigh = 0; chHigh <= (lastCharHigh-firstCharHigh); chHigh++) { for (chLow = 0; chLow <= (lastCharLow-firstCharLow); chLow++) { if ((charInfo->width != 0) || (charInfo->left != charInfo->right)) nChars++; charInfo++; } } fprintf(outFile, "CHARS %u\n", nChars); /* * actually emit the characters */ charInfo = extents; glyph = glyphs; for (chHigh = firstCharHigh; chHigh <= lastCharHigh; chHigh++) { for (chLow = firstCharLow; chLow <= lastCharLow; chLow++) { int bpr; bpr = GLWIDTHBYTESPADDED((charInfo->right - charInfo->left), SCANLINE_PAD_BYTES); encoding=(chHigh << 8)+chLow; if ((charInfo->width != 0) || (charInfo->right != charInfo->left)) EmitBitmap(outFile, fontHeader, charInfo, encoding, bpr, glyph); glyph += (charInfo->descent + charInfo->ascent) * bpr; charInfo++; } } FSFree((char *) extents); FSFree((char *) glyphs); FSFree((char *) offsets); return (True); }
int main(int argc, char *argv[]) { FSServer *fontServer; Font fontID, dummy; FSBitmapFormat bitmapFormat; FSXFontInfoHeader fontHeader; FSPropInfo propInfo; FSPropOffset *propOffsets; unsigned char *propData; FILE *outFile; char *fontName; char *serverName; int i; fontName = NULL; serverName = NULL; outFile = stdout; for (i = 1; i < argc; i++) { if (!strncmp(argv[i], "-s", 2)) { if (argv[++i]) serverName = argv[i]; else usage(argv[0]); } else if (!strncmp(argv[i], "-fn", 3)) { if (argv[++i]) fontName = argv[i]; else usage(argv[0]); } } if (fontName == NULL) usage(argv[0]); fontServer = FSOpenServer(serverName); if (!fontServer) { const char *sn = FSServerName(serverName); if (sn) fprintf(stderr, "%s: can't open font server \"%s\"\n", argv[0], sn); else fprintf(stderr, "%s: No font server specified.\n", argv[0]); exit(0); } bitmapFormat = 0; fontID = FSOpenBitmapFont(fontServer, bitmapFormat, (FSBitmapFormatMask) 0, fontName, &dummy); if (!fontID) { printf("can't open font \"%s\"\n", fontName); exit(0); } FSQueryXInfo(fontServer, fontID, &fontHeader, &propInfo, &propOffsets, &propData); if (!EmitHeader(outFile, &fontHeader, &propInfo, propOffsets, propData)) Fail(argv[0]); if (!EmitProperties(outFile, &fontHeader, &propInfo, propOffsets, propData)) Fail(argv[0]); if (!EmitCharacters(outFile, fontServer, &fontHeader, fontID)) Fail(argv[0]); fprintf(outFile, "ENDFONT\n"); FSFree((char *) propOffsets); FSFree((char *) propData); exit (0); }
void operator delete(void* pBuf) noexcept { FSFree(pBuf); }