+ int i, oldsize;
+
+ // find font
+ for(i = 0; i < dp_fonts.maxsize; ++i)
+ if(!strcmp(dp_fonts.f[i].title, title))
+ return &dp_fonts.f[i];
+ // if not found - try allocate
+ if (allocate_new)
+ {
+ // find any font with empty title
+ for(i = 0; i < dp_fonts.maxsize; ++i)
+ {
+ if(!strcmp(dp_fonts.f[i].title, ""))
+ {
+ strlcpy(dp_fonts.f[i].title, title, sizeof(dp_fonts.f[i].title));
+ return &dp_fonts.f[i];
+ }
+ }
+ // if no any 'free' fonts - expand buffer
+ oldsize = dp_fonts.maxsize;
+ dp_fonts.maxsize = dp_fonts.maxsize + FONTS_EXPAND;
+ if (developer_font.integer)
+ Con_Printf("FindFont: enlarging fonts buffer (%i -> %i)\n", oldsize, dp_fonts.maxsize);
+ dp_fonts.f = (dp_font_t *)Mem_Realloc(fonts_mempool, dp_fonts.f, sizeof(dp_font_t) * dp_fonts.maxsize);
+ // relink ft2 structures
+ for(i = 0; i < oldsize; ++i)
+ if (dp_fonts.f[i].ft2)
+ dp_fonts.f[i].ft2->settings = &dp_fonts.f[i].settings;
+ // register a font in first expanded slot
+ strlcpy(dp_fonts.f[oldsize].title, title, sizeof(dp_fonts.f[oldsize].title));
+ return &dp_fonts.f[oldsize];
+ }