Ejemplo n.º 1
0
int main()
{
	char s1[S1MAXLN];
	char s2[S2MAXLN];
	int p;

	printf("\npattern: ");
	getlinex(s2, S2MAXLN);
	printf("\ntext:\n");
	while (getlinex(s1, S1MAXLN) > 0)
		if ((p = strrindex(s1, s2)) >= 0)
			printf("%sposition: %d\n", s1, p);
	return 0;
}
Ejemplo n.º 2
0
int setCPUtype(char* cpu)
    {
    int name_len,i,read;
    name_len = strlen (cpu);
    for(i = 0; i<name_len; i++) cpu[i] = tolower(cpu[i]);
    char * line = NULL;
    char * filename = "pp3_devices.dat";
    char read_cpu_type[20], read_algo_type[20];
    int read_flash_size, read_page_size, read_id, read_mask;

    size_t len = 0;
    if (verbose>2) printf ("Opening filename %s \n", filename);
    FILE* sf = fopen(filename, "r");
    if (sf==0)
        {
        return -1;
        if (verbose>0) printf ("Can't open database file %s\n",filename);
        }
    if (verbose>2) printf ("File open\n");
    while ((read =  getlinex(&line, &len, sf)) != -1)
        {
        if (verbose>3) printf("\nRead %d chars: %s",read,line);
        if (line[0]!='#')
			{
			sscanf (line,"%s %d %d %x %x %s",(char*)&read_cpu_type,&read_flash_size,&read_page_size,&read_id,&read_mask,(char*)&read_algo_type);
			if (verbose>3) printf("\n*** %s,%d,%d,%x,%x,%s",read_cpu_type,read_flash_size,read_page_size,read_id,read_mask,read_algo_type);
			if (strcmp(read_cpu_type,cpu)==0)
				{
				flash_size = read_flash_size;
				page_size = read_page_size;
				devid_expected = read_id;
				devid_mask = read_mask;
				if (verbose>1) printf("Found database match %s,%d,%d,%x,%x,%s\n",read_cpu_type,read_flash_size,read_page_size,read_id,read_mask,read_algo_type);
				if (strcmp("CF_P16F_A",read_algo_type)==0) chip_family = CF_P16F_A;
				if (strcmp("CF_P16F_B",read_algo_type)==0) chip_family = CF_P16F_B;
				if (strcmp("CF_P18F_A",read_algo_type)==0) chip_family = CF_P18F_A;
				if (strcmp("CF_P18F_B",read_algo_type)==0) chip_family = CF_P18F_B;
				if (strcmp("CF_P18F_C",read_algo_type)==0) chip_family = CF_P18F_C;
				if (strcmp("CF_P18F_D",read_algo_type)==0) chip_family = CF_P18F_D;
				if (strcmp("CF_P18F_E",read_algo_type)==0) chip_family = CF_P18F_E;
				if (chip_family == CF_P18F_A) config_size = 16;
				if (chip_family == CF_P18F_B) config_size = 8;
				if (chip_family == CF_P18F_C) 
					{
						config_size = 16;
						chip_family = CF_P18F_B;
					}
				if (chip_family == CF_P18F_D) config_size = 16;
				if (chip_family == CF_P18F_E) config_size = 16;
				if (verbose>2) printf("chip family:%d, config size:%d\n",chip_family,config_size);
				}
			}
        }
    fclose(sf);
    return 0;
    }
Ejemplo n.º 3
0
int readlines(char *lineptr[], int maxlines) {
	int len, nlines;
	char line[MAXLEN];
	char *linestop = allocp + MAXLEN;

	nlines = 0;
	while ((len = getlinex(line, MAXLEN)) > 0) {
		if (nlines >= maxlines || allocp + len > linestop) {
			return -1;
		} else {
			line[len-1] = '\0';
			strcpy(allocp, line);
			lineptr[nlines++] = allocp;
			allocp += len;
		}
	}
	return nlines;
}
Ejemplo n.º 4
0
int parse_hex (char * filename, unsigned char * progmem, unsigned char * config)
    {
    char * line = NULL;
    unsigned char line_content[128];
    size_t len = 0;
    int i,temp, read,line_len, line_type, line_address, line_address_offset,effective_address;
    int p16_cfg = 0;
    if (verbose>2) printf ("Opening filename %s \n", filename);
    FILE* sf = fopen(filename, "r");
    if (sf==0)
        return -1;
    line_address_offset = 0;
    if (chip_family==CF_P16F_A) p16_cfg = 1;
    if (chip_family==CF_P16F_B) p16_cfg = 1;

    if (verbose>2) printf ("File open\n");
    while ((read =  getlinex(&line, &len, sf)) != -1)
        {
        if (verbose>2) printf("\nRead %d chars: %s",read,line);
        if (line[0]!=':')
            {
            if (verbose>1) printf("--- : invalid\n");
            return -1;
            }
        sscanf(line+1,"%2X",&line_len);
        sscanf(line+3,"%4X",&line_address);
        sscanf(line+7,"%2X",&line_type);
        effective_address = line_address+(65536*line_address_offset);
        if (verbose>2) printf("Line len %d B, type %d, address 0x%4.4x offset 0x%4.4x, EFF 0x%6.6x\n",line_len,line_type,line_address,line_address_offset,effective_address);
        if (line_type==0)
            {
            for (i=0; i<line_len; i++)
                {
                sscanf(line+9+i*2,"%2X",&temp);
                line_content[i] = temp;
                }
            if (effective_address<flash_size)
                {
                if (verbose>2) printf("PM ");
                for (i=0; i<line_len; i++) progmem[effective_address+i] = line_content[i];
                }
            if ((line_address_offset==0x30)&((chip_family==CF_P18F_A)|(chip_family==CF_P18F_D)|(chip_family==CF_P18F_E)))
                {
                if (verbose>2) printf("CB ");
                for (i=0; i<line_len; i++) config[i] = line_content[i];
                }
            if ((chip_family==CF_P18F_B)&(effective_address==(flash_size-config_size)))
                {
                if (verbose>2) printf("CB ");
                for (i=0; i<line_len; i++) config[i] = line_content[i];
                }
            if ((line_address_offset==0x01)&(p16_cfg==1))
                {
                if (verbose>2) printf("CB ");
                for (i=0; i<line_len; i++) config[line_address+i-0x0E] = line_content[i];
                }
            }
        if (line_type==4)
            {
            sscanf(line+9,"%4X",&line_address_offset);
            }
        if (verbose>2) for (i=0; i<line_len; i++) printf("%2.2X",line_content[i]);
        if (verbose>2) printf("\n");
        }
    fclose(sf);
    return 0;
    }