~michael-gruz/+junk/geepro

« back to all changes in this revision

Viewing changes to src/files.cpp

  • Committer: Michael Gruz
  • Date: 2013-10-28 11:50:54 UTC
  • Revision ID: michael-gruz@seznam.cz-20131028115054-fk8zz7uvejaxy5qd
r194

Show diffs side-by-side

added added

removed removed

Lines of Context:
198
198
    return 2;
199
199
}
200
200
 
201
 
const char *file_load(s_buffer_list *bf, const char *fname, long file_offset, long buffer_offset, long bytes_count )
 
201
const char *file_load(geepro *gep, const char *fname, long file_offset, long buffer_offset, long bytes_count )
202
202
{
203
203
    FILE *f;
204
204
    int err = 0, x=0;
205
 
    unsigned int dev_size;
206
 
    char *data;
207
 
 
208
 
    if(!bf) return "No chip memory size specified.";    
209
 
 
210
 
    dev_size = bf->size;
211
 
    data = bf->data;
212
 
    if( !data ) return NULL;
 
205
 
 
206
    if(!gep->chp) return "No chip memory size specified.";    
213
207
    
214
 
    if( file_offset < 0 ) memset(data, 0xff, dev_size);
 
208
    if( file_offset < 0 )
 
209
        memset(gep->chp->buffer, 0xff, gep->chp->dev_size); // set buffer by 0xff
215
210
 
216
211
    if(!(f = fopen(fname , "r-"))) return "Open file error.";
217
212
 
218
 
 
219
213
    if( file_offset >= 0){
220
 
        err = file_load_bin(f, dev_size, data, file_offset, buffer_offset, bytes_count);
 
214
        err = file_load_bin(f, gep->chp->dev_size, gep->chp->buffer, file_offset, buffer_offset, bytes_count);
221
215
        x = 2;
222
216
    } else {
223
217
        if((x = file_test_extension(f, fname, "hex")) == 2) 
224
 
            err = file_load_hex(f, dev_size, data);
 
218
            err = file_load_hex(f, gep->chp->dev_size, gep->chp->buffer);
225
219
        else
226
220
            if((x = file_test_extension(f, fname, "srec")) == 2) 
227
 
                err = file_load_srec(f, dev_size, data);
 
221
                err = file_load_srec(f, gep->chp->dev_size, gep->chp->buffer);
228
222
        else
229
223
            if((x = file_test_extension(f, fname, "s19")) == 2) 
230
 
                err = file_load_srec(f, dev_size, data);
 
224
                err = file_load_srec(f, gep->chp->dev_size, gep->chp->buffer);
231
225
        else
232
226
            if(x == 1) 
233
 
                err = file_load_bin(f, dev_size, data, -1, -1, -1);
 
227
                err = file_load_bin(f, gep->chp->dev_size, gep->chp->buffer, -1, -1, -1);
234
228
    }
235
229
    if(x == 0) return "Filename error."; // no fname or NULL
236
230
    if(err == -10) err = 0; // end of HEX file, normal termination
343
337
    return 0;
344
338
}
345
339
 
346
 
const char *file_save(s_buffer_list *bf, const char *fname)
 
340
const char *file_save(geepro *gep, const char *fname)
347
341
{
348
 
    char *data;
349
342
    FILE *f;
350
 
    int err = 0, x=0, size;
 
343
    int err = 0, x=0, size = gep->chp->dev_size;
351
344
 
352
345
    if(!fname)  return "No file name";
353
346
    if(fname[0] == 0)  return "No file name";
354
 
    
355
 
    size = bf->size;
356
 
    data = bf->data;    
357
 
 
358
 
    if( !bf ) return NULL;
359
347
    if( !size ) return "Buffer size is 0 bytes.";
360
 
 
361
 
    for(; size && (((data[size - 1]) & 0xff) == 0xff); size--); // skraca bufor o puste 'FF'
362
 
 
 
348
    for(; size && (((gep->chp->buffer[size - 1]) & 0xff) == 0xff); size--); // skraca bufor o puste 'FF'
 
349
    if(!gep->chp) return "No chip memory size specified.";    
363
350
    if(!(f = fopen(fname , "w"))) return "Open file error.";
364
351
    if((x = file_test_extension(f, fname, "hex")) == 2) 
365
 
        err = file_save_hex(f, size, data);
 
352
        err = file_save_hex(f, size, gep->chp->buffer);
366
353
    else
367
354
      if((x = file_test_extension(f, fname, "srec")) == 2) 
368
 
        err = file_save_srec(f, size, data);
 
355
        err = file_save_srec(f, size, gep->chp->buffer);
369
356
    else
370
357
      if((x = file_test_extension(f, fname, "s19")) == 2) 
371
 
        err = file_save_srec(f, size, data);
 
358
        err = file_save_srec(f, size, gep->chp->buffer);
372
359
    else
373
 
      if(x == 1) err = file_save_bin(f, size, data);
 
360
      if(x == 1) err = file_save_bin(f, size, gep->chp->buffer);
374
361
    if(x == 0) return "Filename error."; // no fname or NULL
375
362
 
376
363
    fclose(f);    
393
380
 
394
381
//------------------------------------------------------------------------------------------
395
382
 
396
 
const char *file_get_time(long long *time, const char *fname)
 
383
const char *file_get_time(geepro *gep, long long *time, const char *fname)
397
384
{
398
385
    struct stat st;
399
386
 
407
394
    return 0;
408
395
}
409
396
 
410
 
char file_regex_match(const char *str, regex_t *rgx, char *error)
 
397
boolean file_regex_match(const char *str, regex_t *rgx, char *error)
411
398
{
412
399
    char tmp[100];
413
400
    int  ret;
423
410
    return false;
424
411
}
425
412
 
426
 
char file_ls(const char *path, const char *regex, char *error, file_ls_callback fcb, void *arg)
 
413
boolean file_ls(const char *path, const char *regex, char *error, file_ls_callback fcb, void *arg)
427
414
{
428
415
    regex_t rgx;
429
416
    DIR     *dp;
430
417
    struct dirent *ep;
431
 
    char tmp;
 
418
    boolean tmp;
432
419
 
433
420
    if( regcomp(&rgx, regex, REG_EXTENDED | REG_NOSUB) ){
434
421
        sprintf( error, "regcomp() failed: Could not compile regex. { files.c -> file_regex_match() }\n");