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;
}
Beispiel #2
0
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;
}