Annotation of mstools/samples/sdktools/fontedit/fonthead.c, revision 1.1.1.1

1.1       root        1: #include "windows.h"
                      2: #include <windowsx.h>
                      3: #include "fontedit.h"
                      4: #include "fcntl.h"
                      5: #include "stdio.h"
                      6: 
                      7: #define ATTRDIRLIST 0x4010      /* Include directories and drives in listbox */
                      8: 
                      9: /****************************************************************************/
                     10: /*              Shared Variables                                            */
                     11: /****************************************************************************/
                     12: extern LONG lSizeOfOldFontHeader;              /* Old font header type. */
                     13: extern FontHeaderType font;             /* Structure of Font File Header */
                     14: extern FontHeaderType fontBuffer;       /* temp structure of font file header */
                     15: CHAR szFontFileFull[FILENAMEMAX] = {"*.FNT"}; /* Name of Font File */
                     16: CHAR szFontFile[FILENAMEMAX] = {"*.FNT"}; /* Name of Font File */
                     17: CHAR szNewFile[FILENAMEMAX] = {"*.FNT"};  /* Name of New File */
                     18: extern CHAR szFaceName[];               /* Face Name of Font */
                     19: extern BOOL NewFile;                    /* flag indicating if file was opened
                     20:                                            by selecting NEW on menu */
                     21: extern CHAR *vrgsz[CSTRINGS];           /* string table */
                     22: extern BOOL fChanged;                   /* Note if we did anything */
                     23: extern INT swH;
                     24: extern BYTE iChar, jChar;
                     25: 
                     26: extern HWND hFont;                      /* Handle to Show window */
                     27: extern HWND hBox;                       /* Handle to Edit Window */
                     28: extern HDC hMemDC;                      /* Handle to Memory Display Context */
                     29: 
                     30: extern CHAR szAppName[];
                     31: extern INT iFontFormat;             /* format of font currently being edited */
                     32: extern DWORD cTable;                /* offset table size */
                     33: /****************************************************************************/
                     34: /*              Local Variables                                             */
                     35: /****************************************************************************/
                     36: WORD newCharSet;                  /* Temporary value of font.CharSet */
                     37: WORD newFamily;                   /* Temporary value of font.Family << 4 */
                     38: BOOL newFV;     /* Temporay value of Fixed/Variable flag */
                     39: WORD newItalic, newUnderline, newStrikeOut;
                     40: WORD newWeight;         /* Temporary value of font.Weight */
                     41: BOOL fMsgBoxUp; /* Bug Fix Hack explained in ReSizeProc */
                     42: /****************************************************************************/
                     43: /*              Local Functions                                             */
                     44: /****************************************************************************/
                     45: 
                     46: VOID SetCharSet(HWND hDial);
                     47: VOID SetFamily(HWND hDial);
                     48: VOID SetFixed(HWND hDial, BOOL fFV);
                     49: VOID SetWeight(HWND hDial);
                     50: 
                     51: /****************************************************************************
                     52:  * BOOL  APIENTRY HeaderProc(hDial, message, wParam, lParam)
                     53:  *
                     54:  * purpose : Dialog function which verifies and accepts inputs which may
                     55:  *           alter font's header information (font attributes)
                     56:  *
                     57:  * params  : Same as for all dialog functions
                     58:  *
                     59:  * side effects: may alter font attributes
                     60:  *
                     61:  ***************************************************************************/
                     62: BOOL  APIENTRY 
                     63: HeaderProc(
                     64:        HWND   hDial,
                     65:        WORD   message,
                     66:        WPARAM wParam,
                     67:        LPARAM lParam
                     68:        )
                     69: {
                     70:        FontHeaderType FAR * lpFont;
                     71:        BOOL fOk;               /* for GetDlgItemInt errors! */
                     72:        UINT i;
                     73: 
                     74:        UNREFERENCED_PARAMETER(lParam);
                     75:        
                     76:     lpFont = (FontHeaderType FAR *)&font;
                     77:     switch (message)
                     78:         {
                     79:     default:
                     80:         return FALSE;
                     81:     case WM_INITDIALOG:
                     82:         newCharSet = font.CharSet;
                     83:         SetCharSet(hDial);      /* Set OEM/ANSI buttons */
                     84: 
                     85:         newFamily = (WORD) (font.Family >> 4);   /* Working value */
                     86:         SetFamily(hDial);               /* Set Font Family */
                     87: 
                     88:         CheckDlgButton(hDial, ID_ITALIC, newItalic = font.Italic);
                     89:         CheckDlgButton(hDial, ID_UNDERLINE, newUnderline = font.Underline);
                     90:         CheckDlgButton(hDial, ID_STRIKEOUT, newStrikeOut = font.StrikeOut);
                     91: 
                     92:         SetDlgItemInt(hDial, ID_POINTS, lpFont->Points, FALSE);
                     93:         SetDlgItemInt(hDial, ID_VERT_RES, lpFont->VertRes, FALSE);
                     94:         SetDlgItemInt(hDial, ID_HORIZ_RES, lpFont->HorizRes, FALSE);
                     95:         SetDlgItemInt(hDial, ID_ASCENT, lpFont->Ascent, FALSE);
                     96:         SetDlgItemInt(hDial, ID_EXT_LEADING, lpFont->ExtLeading, FALSE);
                     97:         SetDlgItemInt(hDial, ID_INT_LEADING, lpFont->IntLeading, FALSE);
                     98:         SetDlgItemInt(hDial, ID_DEFAULT_CHAR,lpFont->DefaultChar , FALSE);
                     99:         SetDlgItemInt(hDial, ID_BREAK_CHAR, lpFont->BreakChar, FALSE);
                    100: 
                    101:         SetDlgItemText(hDial, ID_COPYRIGHT, lpFont->Copyright);
                    102:         SetDlgItemText(hDial, ID_FACE_NAME, (LPSTR)szFaceName);
                    103:         SetDlgItemText(hDial, ID_FONT_NAME, (LPSTR)szFontFile);
                    104:         break;
                    105:     case WM_COMMAND:
                    106:         switch (LOWORD(wParam))
                    107:             {
                    108:         case ID_ANSI:
                    109:             newCharSet = ANSI_CHARSET;
                    110:             SetCharSet(hDial);          /* Set OEM/ANSI buttons */
                    111:             break;
                    112:         case ID_SYMBOL:
                    113:             newCharSet = SYMBOL_CHARSET;
                    114:             SetCharSet(hDial);          /* Set OEM/ANSI buttons */
                    115:             break;
                    116:         case ID_OEM:
                    117:             newCharSet = OEM_CHARSET;
                    118:             SetCharSet(hDial);          /* Set OEM/ANSI buttons */
                    119:             break;
                    120:         case ID_UNKNOWN:
                    121:             newFamily = 0;
                    122:             SetFamily(hDial);
                    123:             break;
                    124:         case ID_ROMAN:
                    125:             newFamily = 1;
                    126:             SetFamily(hDial);
                    127:             break;
                    128:         case ID_SWISS:
                    129:             newFamily = 2;
                    130:             SetFamily(hDial);
                    131:             break;
                    132:         case ID_MODERN:
                    133:             newFamily = 3;
                    134:             SetFamily(hDial);
                    135:             break;
                    136:         case ID_SCRIPT:
                    137:             newFamily = 4;
                    138:             SetFamily(hDial);
                    139:             break;
                    140:         case ID_DECORATIVE:
                    141:             newFamily = 5;
                    142:             SetFamily(hDial);
                    143:             break;
                    144:         case ID_ITALIC:
                    145:             newItalic = (WORD) !newItalic;
                    146:             CheckDlgButton(hDial, ID_ITALIC, newItalic);
                    147:             break;
                    148:         case ID_UNDERLINE:
                    149:             newUnderline = (WORD) !newUnderline;
                    150:             CheckDlgButton(hDial, ID_UNDERLINE, newUnderline);
                    151:             break;
                    152:         case ID_STRIKEOUT:
                    153:             newStrikeOut = (WORD) !newStrikeOut;
                    154:             CheckDlgButton(hDial, ID_STRIKEOUT, newStrikeOut);
                    155:             break;
                    156:         case ID_CHAR_SET  :
                    157:             i = GetDlgItemInt(hDial, ID_CHAR_SET, (LPBOOL)&fOk, FALSE);
                    158:             if (fOk && (i < 256))
                    159:                 {
                    160:                 font.CharSet = (BYTE) (newCharSet = (WORD) i);
                    161:                 CheckDlgButton(hDial, ID_ANSI, (WORD) (i == ANSI_CHARSET));
                    162:                 CheckDlgButton(hDial, ID_SYMBOL, (WORD) (i == SYMBOL_CHARSET));
                    163:                 CheckDlgButton(hDial, ID_OEM, (WORD) (i == OEM_CHARSET));
                    164:                 }
                    165:             break;
                    166: 
                    167:         case IDOK:
                    168:             font.CharSet = (BYTE) newCharSet;
                    169:             font.Family = (BYTE) ((newFamily << 4) | (font.Family & 1));
                    170:             font.Italic = (BYTE) newItalic;
                    171:             font.Underline = (BYTE) newUnderline;
                    172:             font.StrikeOut = (BYTE) newStrikeOut;
                    173:             fChanged = TRUE;
                    174: 
                    175:             /* nominal point size */
                    176:             i = GetDlgItemInt(hDial, ID_POINTS, (LPBOOL)&fOk, FALSE);
                    177:             if (fOk)
                    178:                 lpFont->Points = (WORD) i;
                    179:             else{
                    180:                 ErrorBox(hDial, vszNomPtSizeNotOk);
                    181:                 SetFocus(GetDlgItem(hDial, ID_POINTS));
                    182:                 break;
                    183:                 }
                    184:             /* nominal vertical resolution */
                    185:             i = GetDlgItemInt(hDial, ID_VERT_RES, (LPBOOL)&fOk, FALSE);
                    186:             if (fOk)
                    187:                 lpFont->VertRes = (WORD) i;
                    188:             else{
                    189:                 ErrorBox(hDial, vszNomVertResNotOk);
                    190:                 SetFocus(GetDlgItem(hDial, ID_VERT_RES));
                    191:                 break;
                    192:                 }
                    193:             /* nominal horizontal resolution */
                    194:             i = GetDlgItemInt(hDial, ID_HORIZ_RES, (LPBOOL)&fOk, FALSE);
                    195:             if (fOk)
                    196:                 lpFont->HorizRes = (WORD) i;
                    197:             else{
                    198:                 ErrorBox(hDial, vszNomHorResNotOk);
                    199:                 SetFocus(GetDlgItem(hDial, ID_HORIZ_RES));
                    200:                 break;
                    201:                 }
                    202:             /* font ascent */
                    203:             i = GetDlgItemInt(hDial, ID_ASCENT, (LPBOOL)&fOk, FALSE);
                    204:             if (fOk)
                    205:                 {
                    206:                 if (i <= font.PixHeight)
                    207:                     lpFont->Ascent = (WORD) i;
                    208:                 else{
                    209:                     ErrorBox(hDial, vszAscentTooBig);
                    210:                     SetFocus(GetDlgItem(hDial, ID_ASCENT));
                    211:                     break;
                    212:                     }
                    213:                 }
                    214:             else{
                    215:                 ErrorBox(hDial, vszAscentNotOk);
                    216:                 SetFocus(GetDlgItem(hDial, ID_ASCENT));
                    217:                 break;
                    218:                 }
                    219:             /* font external leading */
                    220:             i = GetDlgItemInt(hDial, ID_EXT_LEADING, (LPBOOL)&fOk, FALSE);
                    221:             if (fOk)
                    222:                 lpFont->ExtLeading = (WORD) i;
                    223:             else{
                    224:                 ErrorBox(hDial, vszExtLeadNotOk);
                    225:                 SetFocus(GetDlgItem(hDial, ID_EXT_LEADING));
                    226:                 break;
                    227:                 }
                    228:             /* font internal leading */
                    229:             i = GetDlgItemInt(hDial, ID_INT_LEADING, (LPBOOL)&fOk, FALSE);
                    230:             if (fOk)
                    231:                 {
                    232:                 if (i <= font.Ascent)
                    233:                     lpFont->IntLeading = (WORD) i;
                    234:                 else{
                    235:                     ErrorBox(hDial, vszIntLeadTooBig);
                    236:                     SetFocus(GetDlgItem(hDial, ID_INT_LEADING));
                    237:                     break;
                    238:                     }
                    239:                 }
                    240:             else{
                    241:                 ErrorBox(hDial, vszIntLeadNotOk);
                    242:                 SetFocus(GetDlgItem(hDial, ID_INT_LEADING));
                    243:                 break;
                    244:                 }
                    245:             /* font character set */
                    246:             i = GetDlgItemInt(hDial, ID_CHAR_SET, (LPBOOL)&fOk, FALSE);
                    247:             if (fOk && i < 256)
                    248:                 {
                    249:                 font.CharSet = (BYTE) i;
                    250:                 SetCharSet(hDial);
                    251:                 }
                    252:             else{
                    253:                 ErrorBox(hDial, vszCharSetOutOfBounds);
                    254:                 SetFocus(GetDlgItem(hDial, ID_CHAR_SET));
                    255:                 break;
                    256:                 }
                    257:             /* font default char number */
                    258:             i = GetDlgItemInt(hDial, ID_DEFAULT_CHAR, (LPBOOL)&fOk, FALSE);
                    259: 
                    260:             if (fOk)
                    261:                 {
                    262:                 if ((i >= font.FirstChar) && (i <= font.LastChar))
                    263:                     lpFont->DefaultChar = (BYTE) i;
                    264:                 else{
                    265:                     ErrorBox(hDial, vszDefCharOutsideFont);
                    266:                     SetFocus(GetDlgItem(hDial, ID_DEFAULT_CHAR));
                    267:                     break;
                    268:                     }
                    269:                 }
                    270:             else{
                    271:                 ErrorBox(hDial, vszDefCharNotOk);
                    272:                 SetFocus(GetDlgItem(hDial, ID_DEFAULT_CHAR));
                    273:                 break;
                    274:                 }
                    275:             /* break char number */
                    276:             i = GetDlgItemInt(hDial, ID_BREAK_CHAR, (LPBOOL)&fOk, FALSE);
                    277:             if (fOk)
                    278:                 {
                    279:                 if ((BYTE)i <= (font.LastChar - font.FirstChar))
                    280:                     lpFont->BreakChar = (BYTE) i;
                    281:                 else{
                    282:                     ErrorBox(hDial, vszBreakCharOutsideFont);
                    283:                     SetFocus(GetDlgItem(hDial, ID_BREAK_CHAR));
                    284:                     break;
                    285:                     }
                    286:                 }
                    287:             else{
                    288:                 ErrorBox(hDial, vszBreakCharNotOk);
                    289:                 SetFocus(GetDlgItem(hDial, ID_BREAK_CHAR));
                    290:                 break;
                    291:                 }
                    292:             /* facename string */
                    293:             GetDlgItemText(hDial, ID_COPYRIGHT, lpFont->Copyright, 60);
                    294:             GetDlgItemText(hDial, ID_FACE_NAME, (LPSTR)szFaceName, szNamesMax);
                    295:             if (!lstrlen((LPSTR)szFaceName))
                    296:                 {
                    297:                 lstrcpy((LPSTR)szFaceName, (LPSTR)vszUnknown);
                    298:                 ErrorBox(hDial, vszUnknownFace);
                    299:                 }
                    300:             /* fall thru to enddialog */
                    301: 
                    302: 
                    303:         case IDCANCEL:
                    304:             EndDialog(hDial, wParam != IDCANCEL);
                    305:             break;
                    306: 
                    307:         default:
                    308:             break;
                    309:             }
                    310:         }
                    311:     return TRUE;
                    312: }
                    313: 
                    314: /****************************************************************************
                    315:  * char * VerifyHeaderContents()
                    316:  *
                    317:  * purpose: Checks if the Header information of the file just read makes
                    318:  *          sense. If not, returns an error message string to FontLoad
                    319:  *
                    320:  * params : none
                    321:  *
                    322:  * returns :char *szError : ptr to error string if error occurs
                    323:  *                          NULL otherwise
                    324:  *
                    325:  * side effects: none
                    326:  *
                    327:  ***************************************************************************/
                    328: CHAR * PASCAL 
                    329: VerifyHeaderContents(
                    330:        VOID
                    331:        )
                    332: {
                    333:      if (fontBuffer.Points > 999)
                    334:         return vszNomPtSizeNotOk;
                    335:      if (fontBuffer.VertRes > 999)
                    336:         return vszNomVertResNotOk;
                    337:      if (fontBuffer.HorizRes > 999)
                    338:         return vszNomHorResNotOk;
                    339:      if (fontBuffer.Ascent > fontBuffer.PixHeight)
                    340:         return vszAscentTooBig;
                    341:      if (fontBuffer.Ascent > 999)
                    342:         return vszAscentNotOk;
                    343:      if (fontBuffer.ExtLeading > 999)
                    344:         return vszExtLeadNotOk;
                    345:      if (fontBuffer.IntLeading > fontBuffer.Ascent)
                    346:         return vszIntLeadTooBig;
                    347:      if (fontBuffer.IntLeading > 999)
                    348:         return vszIntLeadNotOk;
                    349:      if (fontBuffer.LastChar > 255)
                    350:         return vszCharSetOutOfBounds;
                    351:      if (fontBuffer.DefaultChar > fontBuffer.FirstChar + (fontBuffer.LastChar - fontBuffer.FirstChar))
                    352: #if 0
                    353:           fontBuffer.DefaultChar = 0;
                    354: #else
                    355:         return vszDefCharOutsideFont;
                    356: #endif
                    357:      if (fontBuffer.DefaultChar > 255)
                    358:         return vszDefCharNotOk;
                    359:      if (fontBuffer.BreakChar > (fontBuffer.LastChar - fontBuffer.FirstChar))
                    360:         return vszBreakCharOutsideFont;
                    361:      if (fontBuffer.BreakChar > 255)
                    362:         return vszBreakCharNotOk;
                    363:      if (fontBuffer.PixHeight > 64) 
                    364:         return vszHeightOutOfBounds;
                    365:      if (fontBuffer.MaxWidth > 64)
                    366:         return vszMaxWidthOutOfBounds;
                    367:      if (fontBuffer.AvgWidth > 64)
                    368:         return vszAvgWidthOutOfBounds;
                    369:      if (iFontFormat == ID_FORMAT2)
                    370:         if (fontBuffer.BitsOffset > (DWORD)SEGMENT_SIZE)
                    371:             return vszBitsOffsetNotOk;
                    372:      return NULL;
                    373: }
                    374: 
                    375: /****************************************************************************
                    376:  * BOOL PASCAL Format20FileTooBig(iHeight, iWidth)
                    377:  *
                    378:  * purpose: Checks if the 2.0 font file size is within the 64k
                    379:  *          limit imposed by the 2.0 format offset table.( if file over
                    380:  *          size limit is saved  in 2.0 format, loss of information will
                    381:  *          result)
                    382:  *
                    383:  * params:  WORD iHeight : current height of font in pixels
                    384:  *          WORD iWidth  : current width of font in pixels
                    385:  *
                    386:  * returns: TRUE  : file too large
                    387:  *          FALSE : ok to save
                    388:  *
                    389:  * side effects: none
                    390:  *
                    391:  ***************************************************************************/
                    392: BOOL PASCAL 
                    393: Format20FileTooBig(
                    394:        WORD iHeight,
                    395:        WORD iWidth
                    396:        )
                    397: {
                    398:     if ((DWORD)lSizeOfOldFontHeader + (DWORD)cTable
                    399:          + (font.LastChar - font.FirstChar +1)
                    400:          * (((DWORD)iHeight * (DWORD)iWidth ) >> 3) >= WORD_LIMIT)
                    401:              return TRUE;
                    402:     return FALSE;
                    403: }
                    404: 
                    405: /****************************************************************************
                    406:  * BOOL  APIENTRY ReSizeProc(hDial, message, wParam, lParam)
                    407:  *
                    408:  * purpose : dialog fn. which verifies and accepts font resize (stretch,
                    409:  *           shrink...) input and calls the appropriate routine to perform
                    410:  *           the function. Also alters font weight attributes (bold, light,
                    411:  *           extra light...)
                    412:  *
                    413:  * params  : same as for all dialog functions
                    414:  *
                    415:  * side effects: alters header information regarding font dimensions and font
                    416:  *               weight
                    417:  *
                    418:  ***************************************************************************/
                    419: BOOL  APIENTRY 
                    420: ReSizeProc(
                    421:        HWND   hDial,
                    422:        WORD   message,
                    423:        WPARAM wParam,
                    424:        LPARAM lParam 
                    425:        )
                    426: {
                    427:        FontHeaderType FAR * lpFont;
                    428:        BOOL fOk;               /* for GetDlgItemInt errors! */
                    429:        UINT i;
                    430:        HMENU hMenu;
                    431:        static BOOL fFV; /* temporary fixed/var width flag */
                    432: 
                    433:        UNREFERENCED_PARAMETER(lParam);
                    434: 
                    435:     lpFont = (FontHeaderType FAR *)&font;
                    436:     switch (message)
                    437:         {
                    438:     case WM_INITDIALOG:
                    439:         fMsgBoxUp = FALSE;
                    440:         newWeight = (WORD) font.Weight;
                    441:         newFV = (BOOL) (font.Family & 1);
                    442:         fFV = newFV;
                    443:         SetFixed(hDial, fFV);   /* Set Fixed or Variable width */
                    444:         SetDlgItemInt(hDial, ID_PIX_HEIGHT, lpFont->PixHeight, FALSE);
                    445:         SetDlgItemInt(hDial, ID_FIRST_CHAR, lpFont->FirstChar, FALSE);
                    446:         SetDlgItemInt(hDial, ID_WIDTH, lpFont->MaxWidth, FALSE);
                    447:         SetDlgItemInt(hDial, ID_AVERAGE, lpFont->AvgWidth, FALSE);
                    448:         SetDlgItemInt(hDial, ID_LAST_CHAR, lpFont->LastChar, FALSE);
                    449:         SetWeight(hDial);
                    450:         SetFixed(hDial, fFV);
                    451:         break;
                    452: 
                    453:     case WM_COMMAND:
                    454:         switch (LOWORD(wParam))
                    455:             {
                    456:         case ID_THIN:
                    457:             newWeight = FW_THIN;
                    458:             SetWeight(hDial);
                    459:             break;
                    460:         case ID_EXTRALIGHT:
                    461:             newWeight = FW_EXTRALIGHT;
                    462:             SetWeight(hDial);
                    463:             break;
                    464:         case ID_LIGHT:
                    465:             newWeight = FW_LIGHT;
                    466:             SetWeight(hDial);
                    467:             break;
                    468:         case ID_NORMAL:
                    469:             newWeight = FW_NORMAL;
                    470:             SetWeight(hDial);
                    471:             break;
                    472:         case ID_MEDIUM:
                    473:             newWeight = FW_MEDIUM;
                    474:             SetWeight(hDial);
                    475:             break;
                    476:         case ID_BOLD:
                    477:             newWeight = FW_BOLD;
                    478:             SetWeight(hDial);
                    479:             break;
                    480:         case ID_SEMIBOLD:
                    481:             newWeight = FW_SEMIBOLD;
                    482:             SetWeight(hDial);
                    483:             break;
                    484:         case ID_EXTRABOLD:
                    485:             newWeight = FW_EXTRABOLD;
                    486:             SetWeight(hDial);
                    487:             break;
                    488:         case ID_HEAVY:
                    489:             newWeight = FW_HEAVY;
                    490:             SetWeight(hDial);
                    491:             break;
                    492: 
                    493:         case ID_FIXED:
                    494:             fFV = 0;
                    495:             SetFixed(hDial, fFV);
                    496:             break;
                    497:         case ID_VARIABLE:
                    498:             fFV = 1;
                    499:             SetFixed(hDial, fFV);
                    500:             break;
                    501: 
                    502:         case IDOK:
                    503:             fChanged = TRUE;
                    504:             font.Weight = newWeight;
                    505:             /* give warning if user attempts to change from variable to
                    506:                fixed width */
                    507:             if ((fFV == 0) && (newFV != 0))
                    508:                 {
                    509:                 fMsgBoxUp = TRUE;
                    510:                 ErrorBox(hDial, vszNoVarToFixChange);
                    511:                 fMsgBoxUp = FALSE;
                    512:                 SetFocus(GetDlgItem(hDial, ID_VARIABLE));
                    513:                 break;
                    514:                 }
                    515:             else
                    516:                 newFV = fFV;
                    517: 
                    518:             if (newFV && !(font.Family & 1))
                    519:                 {
                    520:                 font.PixWidth = 0;      /* All we need to do to make this */
                    521:                 font.Family |= 1;       /* .. font variable width */
                    522:                 }
                    523:             /* change height command */
                    524:             i = GetDlgItemInt(hDial, ID_PIX_HEIGHT, (LPBOOL)&fOk, FALSE);
                    525:             if (fOk && i && i < kBoxLim && i>0 )
                    526:                 {
                    527:                     if (i != font.PixHeight){        /* Same size ? */
                    528:                         /* No: Resize body height */
                    529:                         if (!ResizeBody(font.WidthBytes, i)){
                    530:                             SetFocus(hDial);
                    531:                             break;
                    532:                         }
                    533:                     }
                    534:                 }
                    535:             else{
                    536:                 ErrorBox(hDial, vszHeightOutOfBounds);
                    537:                 SetFocus(GetDlgItem(hDial, ID_PIX_HEIGHT));
                    538:                 break;
                    539:                 }
                    540: 
                    541:             /* change width command */
                    542:             i = GetDlgItemInt(hDial, ID_WIDTH, (LPBOOL)&fOk, FALSE);
                    543:             if (fOk && i < wBoxLim && i > 0){
                    544:                 if (i != font.MaxWidth){
                    545:                     if (newFV){
                    546:                         if (!SpreadWidths(i)){
                    547:                             SetFocus(hDial);
                    548:                             break;        /* New Variable Widths */
                    549:                         }
                    550:                     }
                    551:                     else{
                    552:                         if (!ResizeWidths(i)){
                    553:                             SetFocus(hDial);
                    554:                             break;        /* New Fixed Widths */
                    555:                         }
                    556:                     }
                    557:                 }
                    558:             }
                    559:             else{
                    560:                 ErrorBox(hDial, vszWidthOutOfBounds);
                    561:                 SetFocus(GetDlgItem(hDial, ID_WIDTH));
                    562:                 break;
                    563:                 }
                    564: 
                    565:             /* new first char command */
                    566:             i = GetDlgItemInt(hDial, ID_FIRST_CHAR, (LPBOOL)&fOk, FALSE);
                    567:             if (fOk)
                    568:                 {
                    569:                 if ((i <= font.LastChar) && (i <= font.DefaultChar))
                    570:                     {
                    571:                     if (i != font.FirstChar)
                    572:                         {
                    573:                         if (!NewFirstChar(i))
                    574:                             break;
                    575:                         iChar = jChar = (CHAR) i;
                    576:                         swH = 0;
                    577:                         ScrollFont();           /* Show front end */
                    578:                         }
                    579:                     }
                    580:                 else{
                    581:                     ErrorBox(hDial, vszChar1MoreThanDChar);
                    582:                     SetFocus(GetDlgItem(hDial, ID_FIRST_CHAR));
                    583:                     break;
                    584:                     }
                    585:                 }
                    586:             else{
                    587:                 ErrorBox(hDial, vszChar1NotOk);
                    588:                 SetFocus(GetDlgItem(hDial, ID_FIRST_CHAR));
                    589:                 break;
                    590:                 }
                    591: 
                    592: 
                    593:             /* new last char command */
                    594:             i = GetDlgItemInt(hDial, ID_LAST_CHAR, (LPBOOL)&fOk, FALSE);
                    595:             if (fOk && i < 256)
                    596:                 {
                    597:                 if ((i >= font.FirstChar) && 
                    598:                                        (i >= font.DefaultChar))
                    599:                     {
                    600:                     if (i != font.LastChar)
                    601:                         {
                    602:                         if (!NewLastChar(i))
                    603:                             break;
                    604:                         iChar = jChar = (CHAR) i;
                    605:                         swH = 100;
                    606:                         ScrollFont();           /* Show back end */
                    607:                         }
                    608:                     }
                    609:                 else{
                    610:                     ErrorBox(hDial, vszLastCharTooSmall);
                    611:                     SetFocus(GetDlgItem(hDial, ID_LAST_CHAR));
                    612:                     break;
                    613:                     }
                    614:                 }
                    615:             else{
                    616:                 ErrorBox(hDial, vszLastCharNotOk);
                    617:                 SetFocus(GetDlgItem(hDial, ID_LAST_CHAR));
                    618:                 break;
                    619:                 }
                    620: 
                    621:             /* this is moved from SetFixed, since it should only be done
                    622:              * if idok pressed. */
                    623:             if (newFV)
                    624:                 {  /* Enable "width" if variable-width font */
                    625:                 hMenu = GetMenu(hBox);
                    626:                 EnableMenuItem(hMenu, 4, MF_BYPOSITION | MF_ENABLED);
                    627:                 DrawMenuBar(hBox);
                    628:                 }
                    629: 
                    630:             /* fall thru to enddialog...*/
                    631: 
                    632:         case IDCANCEL:
                    633:             EndDialog(hDial, wParam != IDCANCEL);
                    634:             break;
                    635: 
                    636:         default:
                    637:             return FALSE;
                    638:             break;
                    639:             }  /* end switch wParam */
                    640: 
                    641:     default:
                    642:         return FALSE;
                    643:         } /* end switch message */
                    644: 
                    645:     return TRUE;
                    646: }
                    647: 
                    648: VOID
                    649: ErrorBox(
                    650:        HWND hWndparent,    
                    651:        CHAR * szMessage
                    652:        )
                    653:        /* Show Message Box */
                    654: {
                    655:     MessageBox(hWndparent, (LPSTR)szMessage, (LPSTR)szAppName,
                    656:                   MB_OK | MB_ICONASTERISK | MB_APPLMODAL);
                    657: }
                    658: 
                    659: /****************************************************************************
                    660:  * SetCharSet(hDial)
                    661:  *
                    662:  * purpose : Set ANSI/OEM dialog button and set the number in edit window
                    663:  *
                    664:  * param   : HWND hDial : handle to dialog box window
                    665:  *
                    666:  * returns : none
                    667:  *
                    668:  ***************************************************************************/
                    669: VOID
                    670: SetCharSet(
                    671:        HWND hDial
                    672:        )
                    673: {
                    674:     CheckDlgButton(hDial, ID_ANSI, (WORD) (newCharSet == ANSI_CHARSET));
                    675:     CheckDlgButton(hDial, ID_SYMBOL, (WORD) (newCharSet == SYMBOL_CHARSET));
                    676:     CheckDlgButton(hDial, ID_OEM, (WORD) (newCharSet == OEM_CHARSET));
                    677:     SetDlgItemInt(hDial,  ID_CHAR_SET, newCharSet, FALSE);
                    678: }
                    679: 
                    680: /****************************************************************************
                    681:  * SetFixed(hDial)
                    682:  *
                    683:  * purpose : Set fixed/variable dialog button
                    684:  *
                    685:  * params  : HWND hDial : handle to dialog box window
                    686:  *           BOOL fFV   : variable or fixed
                    687:  *
                    688:  * returns : none
                    689:  *
                    690:  ***************************************************************************/
                    691: VOID
                    692: SetFixed(
                    693:        HWND hDial,
                    694:        BOOL fFV
                    695:        )
                    696: {
                    697:     CheckDlgButton(hDial, ID_FIXED, (WORD)(fFV == 0));
                    698:     CheckDlgButton(hDial, ID_VARIABLE, (WORD)(fFV == 1));
                    699:     if (newFV)
                    700:         SetDlgItemText(hDial, ID_WIDTH_TEXT, (LPSTR)vszMaxWidth);
                    701:     else
                    702:         SetDlgItemText(hDial, ID_WIDTH_TEXT, (LPSTR)vszCharPixelWidth);
                    703: }
                    704: 
                    705: /****************************************************************************
                    706:  * SetWeight(hDial)
                    707:  *
                    708:  * purpose : Set font weight dialog button
                    709:  *
                    710:  * params  : HWND hDial : handle to dialog box window
                    711:  *
                    712:  * returns : none
                    713:  *
                    714:  ****************************************************************************/
                    715: VOID
                    716: SetWeight(
                    717:        HWND hDial
                    718:        )
                    719: {
                    720:     CheckDlgButton(hDial, ID_THIN, (WORD)(newWeight == FW_THIN));
                    721:     CheckDlgButton(hDial, ID_EXTRALIGHT, (WORD)(newWeight == FW_EXTRALIGHT));
                    722:     CheckDlgButton(hDial, ID_LIGHT, (WORD)(newWeight == FW_LIGHT));
                    723:     CheckDlgButton(hDial, ID_NORMAL, (WORD)(newWeight == FW_NORMAL));
                    724:     CheckDlgButton(hDial, ID_MEDIUM, (WORD)(newWeight == FW_MEDIUM));
                    725:     CheckDlgButton(hDial, ID_SEMIBOLD, (WORD)(newWeight == FW_SEMIBOLD));
                    726:     CheckDlgButton(hDial, ID_BOLD, (WORD)(newWeight == FW_BOLD));
                    727:     CheckDlgButton(hDial, ID_EXTRABOLD, (WORD)(newWeight == FW_EXTRABOLD));
                    728:     CheckDlgButton(hDial, ID_HEAVY, (WORD)(newWeight == FW_HEAVY));
                    729: }
                    730: 
                    731: /****************************************************************************
                    732:  * SetFamily(hDial)
                    733:  *
                    734:  * purpose : Set font family dialog button
                    735:  *
                    736:  * params  : HWND hDial : handle to dialog box window
                    737:  *
                    738:  * returns : none
                    739:  *
                    740:  ***************************************************************************/
                    741: VOID
                    742: SetFamily(
                    743:        HWND hDial
                    744:        )
                    745: {
                    746:     CheckDlgButton(hDial, ID_UNKNOWN, (WORD) (newFamily == 0));
                    747:     CheckDlgButton(hDial, ID_ROMAN, (WORD)(newFamily == 1));
                    748:     CheckDlgButton(hDial, ID_SWISS, (WORD)(newFamily == 2));
                    749:     CheckDlgButton(hDial, ID_MODERN, (WORD)(newFamily == 3));
                    750:     CheckDlgButton(hDial, ID_SCRIPT, (WORD)(newFamily == 4));
                    751:     CheckDlgButton(hDial, ID_DECORATIVE, (WORD) (newFamily == 5));
                    752: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.