diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-10-02 16:33:26 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-10-02 16:33:26 +0000 |
commit | 0e6088fc9cdadbd488da990488944e177a19bfe5 (patch) | |
tree | f9492f273ded5089a43d81b8e5c79a6658a87227 /apps/settings.c | |
parent | 175747d0ec64afbef48025d9ec0cdc9f573d448d (diff) | |
download | rockbox-0e6088fc9cdadbd488da990488944e177a19bfe5.tar.gz rockbox-0e6088fc9cdadbd488da990488944e177a19bfe5.zip |
Changed .eq file format to simple 'setting: value' model.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2478 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/settings.c')
-rw-r--r-- | apps/settings.c | 257 |
1 files changed, 109 insertions, 148 deletions
diff --git a/apps/settings.c b/apps/settings.c index 450a85b2da..98258f5d8d 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -39,6 +39,8 @@ | |||
39 | #include "status.h" | 39 | #include "status.h" |
40 | #include "atoi.h" | 40 | #include "atoi.h" |
41 | #include "screens.h" | 41 | #include "screens.h" |
42 | #include "ctype.h" | ||
43 | #include "file.h" | ||
42 | #ifdef HAVE_LCD_BITMAP | 44 | #ifdef HAVE_LCD_BITMAP |
43 | #include "icons.h" | 45 | #include "icons.h" |
44 | #include "font.h" | 46 | #include "font.h" |
@@ -459,161 +461,120 @@ void settings_load(void) | |||
459 | #endif | 461 | #endif |
460 | } | 462 | } |
461 | 463 | ||
462 | /* | 464 | static int read_line(int fd, char* buffer, int buffer_size) |
463 | * Loads a .eq file | 465 | { |
464 | */ | 466 | int count = 0; |
467 | |||
468 | while (count < buffer_size) | ||
469 | { | ||
470 | unsigned char c; | ||
471 | |||
472 | if (1 != read(fd, &c, 1)) | ||
473 | break; | ||
474 | |||
475 | if ( c == '\n' ) | ||
476 | break; | ||
477 | |||
478 | if ( c == '\r' ) | ||
479 | continue; | ||
480 | |||
481 | buffer[count++] = c; | ||
482 | } | ||
483 | |||
484 | if ( count < buffer_size ) | ||
485 | buffer[count] = 0; | ||
486 | |||
487 | return count; | ||
488 | } | ||
489 | |||
490 | /* parse a line from a configuration file. the line format is: | ||
491 | |||
492 | setting name: setting value | ||
493 | |||
494 | Any whitespace before setting name or value (after ':') is ignored. | ||
495 | A # as first non-whitespace character discards the whole line. | ||
496 | Function sets pointers to null-terminated setting name and value. | ||
497 | Returns false if no valid config entry was found. | ||
498 | */ | ||
499 | |||
500 | static bool settings_parseline(char* line, char** name, char** value) | ||
501 | { | ||
502 | char* ptr; | ||
503 | |||
504 | while ( isspace(*line) ) | ||
505 | line++; | ||
506 | |||
507 | if ( *line == '#' ) | ||
508 | return false; | ||
509 | |||
510 | ptr = strchr(line, ':'); | ||
511 | if ( !ptr ) | ||
512 | return false; | ||
513 | |||
514 | *name = line; | ||
515 | *ptr = 0; | ||
516 | ptr++; | ||
517 | while (isspace(*ptr)) | ||
518 | ptr++; | ||
519 | *value = ptr; | ||
520 | return true; | ||
521 | } | ||
522 | |||
523 | static void set_eq_sound(char* value, int type, int* setting) | ||
524 | { | ||
525 | int num = atoi(value); | ||
526 | |||
527 | num = mpeg_phys2val(type, num); | ||
528 | |||
529 | if ((num > mpeg_sound_max(type)) || | ||
530 | (num < mpeg_sound_min(type))) | ||
531 | { | ||
532 | num = mpeg_sound_default(type); | ||
533 | } | ||
534 | |||
535 | *setting = num; | ||
536 | mpeg_sound_set(type, num); | ||
537 | } | ||
538 | |||
465 | bool settings_load_eq(char* file) | 539 | bool settings_load_eq(char* file) |
466 | { | 540 | { |
467 | char buffer[512]; | ||
468 | char buf_set[16]; | ||
469 | char buf_disp[16]; | ||
470 | char buf_val[8]; | ||
471 | bool syntax_error = false; | ||
472 | int fd; | 541 | int fd; |
473 | int i; | 542 | char line[128]; |
474 | int d = 0; | ||
475 | int vtype = 0; | ||
476 | int line = 0; | ||
477 | |||
478 | 543 | ||
479 | lcd_clear_display(); | ||
480 | fd = open(file, O_RDONLY); | 544 | fd = open(file, O_RDONLY); |
481 | 545 | if (-1 == fd) | |
482 | if (-1 != fd) | 546 | return false; |
547 | |||
548 | while (read_line(fd, line, sizeof line)) | ||
483 | { | 549 | { |
484 | int numread = read(fd, buffer, sizeof(buffer) - 1); | 550 | char* name; |
485 | 551 | char* value; | |
486 | if (numread > 0) { | 552 | |
487 | buffer[numread] = 0; | 553 | if (!settings_parseline(line, &name, &value)) |
488 | for(i=0;i<numread;i++) { | 554 | continue; |
489 | switch(buffer[i]) { | 555 | |
490 | case '[': | 556 | if (!strcasecmp(name, "volume")) |
491 | vtype = 1; | 557 | set_eq_sound(value, SOUND_VOLUME, &global_settings.volume); |
492 | buf_set[0] = 0; | 558 | else if (!strcasecmp(name, "bass")) |
493 | d = 0; | 559 | set_eq_sound(value, SOUND_BASS, &global_settings.bass); |
494 | break; | 560 | else if (!strcasecmp(name, "treble")) |
495 | case ']': | 561 | set_eq_sound(value, SOUND_TREBLE, &global_settings.treble); |
496 | vtype = 2; | 562 | else if (!strcasecmp(name, "balance")) |
497 | buf_set[d] = 0; | 563 | set_eq_sound(value, SOUND_BALANCE, &global_settings.balance); |
498 | buf_val[0] = 0; | 564 | else if (!strcasecmp(name, "channels")) |
499 | d = 0; | 565 | set_eq_sound(value, SOUND_CHANNELS, &global_settings.bass); |
500 | break; | 566 | #ifdef HAVE_MAS3587F |
501 | case '#': | 567 | else if (!strcasecmp(name, "loudness")) |
502 | buf_val[d] = 0; | 568 | set_eq_sound(value, SOUND_LOUDNESS, &global_settings.loudness); |
503 | vtype = 3; | 569 | else if (!strcasecmp(name, "bass boost")) |
504 | break; | 570 | set_eq_sound(value, SOUND_SUPERBASS, &global_settings.bass_boost); |
505 | default: | 571 | else if (!strcasecmp(name, "auto volume")) |
506 | switch(vtype) { | 572 | set_eq_sound(value, SOUND_AVC, &global_settings.avc); |
507 | case 1: | 573 | #endif |
508 | buf_set[d++] = buffer[i]; | ||
509 | break; | ||
510 | case 2: | ||
511 | buf_val[d++] = buffer[i]; | ||
512 | break; | ||
513 | case 3: | ||
514 | snprintf(buf_disp,sizeof(buf_disp),"[%s]%s", buf_set, buf_val); | ||
515 | lcd_puts(0,line++ % MAX_LINES, buf_disp); | ||
516 | lcd_update(); | ||
517 | sleep(HZ/2); | ||
518 | if (!strcasecmp(buf_set,"volume")) { | ||
519 | global_settings.volume = (atoi(buf_val)/2); | ||
520 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME) || | ||
521 | global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) { | ||
522 | global_settings.volume = mpeg_sound_default(SOUND_VOLUME); | ||
523 | syntax_error = true; | ||
524 | } | ||
525 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
526 | |||
527 | } else | ||
528 | if (!strcasecmp(buf_set,"bass")) { | ||
529 | if (buf_val[0] == '-') | ||
530 | global_settings.bass = ((mpeg_sound_max(SOUND_BASS)/2)-atoi(buf_val+1)); | ||
531 | else | ||
532 | global_settings.bass = (atoi(buf_val)+(mpeg_sound_max(SOUND_BASS)/2)); | ||
533 | if (global_settings.bass > mpeg_sound_max(SOUND_BASS) || | ||
534 | global_settings.bass < mpeg_sound_min(SOUND_BASS)) { | ||
535 | global_settings.bass = mpeg_sound_default(SOUND_BASS); | ||
536 | syntax_error = true; | ||
537 | } | ||
538 | mpeg_sound_set(SOUND_BASS, global_settings.bass); | ||
539 | } else | ||
540 | if (!strcasecmp(buf_set,"treble")) { | ||
541 | if (buf_val[0] == '-') | ||
542 | global_settings.treble = ((mpeg_sound_max(SOUND_TREBLE)/2)-atoi(buf_val+1)); | ||
543 | else | ||
544 | global_settings.treble = (atoi(buf_val)+(mpeg_sound_max(SOUND_TREBLE)/2)); | ||
545 | if (global_settings.treble > mpeg_sound_max(SOUND_TREBLE) || | ||
546 | global_settings.treble < mpeg_sound_min(SOUND_TREBLE)) { | ||
547 | global_settings.treble = mpeg_sound_default(SOUND_TREBLE); | ||
548 | syntax_error = true; | ||
549 | } | ||
550 | mpeg_sound_set(SOUND_TREBLE, global_settings.treble); | ||
551 | } else | ||
552 | if (!strcasecmp(buf_set,"balance")) { | ||
553 | if (buf_val[0] == '-') | ||
554 | global_settings.balance = -(atoi(buf_val+1)/2); | ||
555 | else | ||
556 | global_settings.balance = ((atoi(buf_val)/2)); | ||
557 | if (global_settings.balance > mpeg_sound_max(SOUND_BALANCE) || | ||
558 | global_settings.balance < mpeg_sound_min(SOUND_BALANCE)) { | ||
559 | global_settings.balance = mpeg_sound_default(SOUND_BALANCE); | ||
560 | syntax_error = true; | ||
561 | } | ||
562 | mpeg_sound_set(SOUND_BALANCE, global_settings.balance); | ||
563 | } else | ||
564 | if (!strcasecmp(buf_set,"channels")) { | ||
565 | global_settings.channel_config = atoi(buf_val); | ||
566 | if (global_settings.channel_config > mpeg_sound_max(SOUND_CHANNELS) || | ||
567 | global_settings.channel_config < mpeg_sound_min(SOUND_CHANNELS)) { | ||
568 | global_settings.channel_config = mpeg_sound_default(SOUND_CHANNELS); | ||
569 | syntax_error = true; | ||
570 | } | ||
571 | mpeg_sound_set(SOUND_CHANNELS, global_settings.channel_config); | ||
572 | } else | ||
573 | if (!strcasecmp(buf_set,"loudness")) { | ||
574 | global_settings.loudness = atoi(buf_val); | ||
575 | if(global_settings.loudness > mpeg_sound_max(SOUND_LOUDNESS) || | ||
576 | global_settings.loudness < mpeg_sound_min(SOUND_LOUDNESS)) { | ||
577 | global_settings.loudness = mpeg_sound_default(SOUND_LOUDNESS); | ||
578 | syntax_error = true; | ||
579 | } | ||
580 | mpeg_sound_set(SOUND_LOUDNESS, global_settings.loudness); | ||
581 | } else | ||
582 | if (!strcasecmp(buf_set,"bass boost")) { | ||
583 | global_settings.bass_boost = (atoi(buf_val)/10); | ||
584 | if(global_settings.bass_boost > mpeg_sound_max(SOUND_SUPERBASS) || | ||
585 | global_settings.bass_boost < mpeg_sound_min(SOUND_SUPERBASS)) { | ||
586 | global_settings.bass_boost = mpeg_sound_default(SOUND_SUPERBASS); | ||
587 | syntax_error = true; | ||
588 | } | ||
589 | mpeg_sound_set(SOUND_SUPERBASS, global_settings.bass_boost); | ||
590 | } else if (!strcasecmp(buf_set,"auto volume")) { | ||
591 | global_settings.avc = atoi(buf_val); | ||
592 | if (global_settings.avc > mpeg_sound_max(SOUND_AVC) || | ||
593 | global_settings.avc < mpeg_sound_min(SOUND_AVC)) { | ||
594 | global_settings.avc = mpeg_sound_default(SOUND_AVC); | ||
595 | syntax_error = true; | ||
596 | } | ||
597 | mpeg_sound_set(SOUND_AVC, global_settings.avc); | ||
598 | } | ||
599 | if (syntax_error) { | ||
600 | lcd_clear_display(); | ||
601 | lcd_puts(0,1,"SyntaxError"); | ||
602 | lcd_puts(0,2,buf_set); | ||
603 | lcd_update(); | ||
604 | sleep(HZ); | ||
605 | syntax_error = false; | ||
606 | } | ||
607 | vtype = 0; | ||
608 | break; | ||
609 | } | ||
610 | break; | ||
611 | } | ||
612 | } | ||
613 | } | ||
614 | close(fd); | ||
615 | } | 574 | } |
616 | return(false); | 575 | |
576 | close(fd); | ||
577 | return true; | ||
617 | } | 578 | } |
618 | 579 | ||
619 | /* | 580 | /* |