int32_t insertFont (char **list, char *insert, int32_t len ) { int32_t i, j; if (!list || !(Q_strcasecmp(list[0],insert))) return 0; //i=1 so default stays first! for (i=1; i<len; i++) { int32_t res = 0; if (!list[i]) break; res = Q_strcasecmp(list[i], insert); if (res > 0) { for (j=len; j>i ;j--) list[j] = list[j-1]; list[i] = (char*)Z_TagStrdup(insert, TAG_MENU); return 1; } else if (res == 0) { return 0; } } list[len] = (char*)Z_TagStrdup(insert, TAG_MENU); return 1; }
void SetCrosshairNames (void) { char *curCrosshair; char *p; int32_t ncrosshairs = 0, ncrosshairnames; int32_t i; sset_t crosshairs; if (!crosshair_names[0]) crosshair_names[0] = (char*)Z_TagStrdup("none",TAG_MENU); //was default ncrosshairnames = 1; Q_SSetInit(&crosshairs, 100, MAX_OSPATH, TAG_MENU); ncrosshairs = FS_ListFilesWithPaks( "pics/ch*.*", &crosshairs, 0, SFF_SUBDIR | SFF_HIDDEN | SFF_SYSTEM ); for (i=0; i < ncrosshairs && ncrosshairnames < MAX_CROSSHAIRS; i++) { int32_t num, namelen; char *e; p = strstr(Q_SSetGetString(&crosshairs, i), "/"); p++; namelen = strlen(p); e = p + namelen - 4; if (!R_IsSupportedImageType(e)) continue; // filename must be chxxx if (strncmp(p, "ch", 2)) continue; if (namelen < 7 || namelen > 9) continue; if (!isNumeric(p[2])) continue; if (namelen >= 8 && !isNumeric(p[3])) continue; // ch100 is only valid 5-char name if (namelen == 9 && (p[2] != '1' || p[3] != '0' || p[4] != '0')) continue; num = namelen-4; p[num] = 0; //NULL; curCrosshair = p; if (!FS_ItemInList(curCrosshair, ncrosshairnames, crosshair_names)) { FS_InsertInList(crosshair_names, curCrosshair, ncrosshairnames, 1); //i=1 so none stays first! ncrosshairnames++; } p[num] = '.'; } Q_SSetFree(&crosshairs); // sort the list sortCrosshairs (crosshair_names, ncrosshairnames); numcrosshairs = ncrosshairnames; }