void EScale::run() { bool ret; isRun = true; Dev = new QSerialPort; INIT: if (!isRun) goto EXIT; if (!devInit("COM9")) { msleep(200); goto INIT; } while (isRun) { ReadWeight(); msleep(500); } EXIT: Dev->close(); delete Dev; Dev = NULL; }
/******************************************************************************* * ReadFontMetrics * * Allocates space for the AFM on the driver heap and reads basic font metrics. * Returns FALSE for memory allocation failure; sets *p_afm to NULL if AFM file * is unusable. * */ static BOOL ReadFontMetrics(FILE *file, CHAR buffer[], INT bufsize, AFM **p_afm) { AFM *afm; BOOL retval, found; *p_afm = afm = HeapAlloc(PSDRV_Heap, 0, sizeof(*afm)); if (afm == NULL) return FALSE; retval = ReadWeight(file, buffer, bufsize, afm, &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadFloat(file, buffer, bufsize, "ItalicAngle", &(afm->ItalicAngle), &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadFixedPitch(file, buffer, bufsize, afm, &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadBBox(file, buffer, bufsize, afm, &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadFloat(file, buffer, bufsize, "UnderlinePosition", &(afm->UnderlinePosition), &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadFloat(file, buffer, bufsize, "UnderlineThickness", &(afm->UnderlineThickness), &found); if (retval == FALSE || found == FALSE) goto cleanup_afm; retval = ReadFloat(file, buffer, bufsize, "Ascender", /* optional */ &(afm->Ascender), &found); if (retval == FALSE) goto cleanup_afm; retval = ReadFloat(file, buffer, bufsize, "Descender", /* optional */ &(afm->Descender), &found); if (retval == FALSE) goto cleanup_afm; afm->WinMetrics.usUnitsPerEm = 1000; afm->WinMetrics.sTypoAscender = (SHORT)Round(afm->Ascender); afm->WinMetrics.sTypoDescender = (SHORT)Round(afm->Descender); if (afm->WinMetrics.sTypoAscender == 0) afm->WinMetrics.sTypoAscender = (SHORT)Round(afm->FontBBox.ury); if (afm->WinMetrics.sTypoDescender == 0) afm->WinMetrics.sTypoDescender = (SHORT)Round(afm->FontBBox.lly); afm->WinMetrics.sTypoLineGap = 1200 - (afm->WinMetrics.sTypoAscender - afm->WinMetrics.sTypoDescender); if (afm->WinMetrics.sTypoLineGap < 0) afm->WinMetrics.sTypoLineGap = 0; return TRUE; cleanup_afm: /* handle fatal or non-fatal errors */ HeapFree(PSDRV_Heap, 0, afm); *p_afm = NULL; return retval; }