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; }
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; }
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; }
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; }