/* * * xtvrc2vdr.c: Converts 'xtvrc' files to 'vdr' channel format * * * * Copyright (C) 2000 Plamen Ganev * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * * as published by the Free Software Foundation; either version 2 * * of the License, or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Or, point your browser to http://www.gnu.org/copyleft/gpl.html * * * * The author can be reached at pganev@comm.it * * * */ #include #include #include #include #define MAX_LINE_LEN 1024 #define MAX_NAME 100 #define TOKS ": \n\r" #define NAMETOKS ":\n\r" typedef struct { char Name[MAX_NAME+1]; int freq; int color, hue, bright, saturation ; int nitv, input ; int pol, srate, fec, vpid, apid, lnbnum, type; } CHANNEL_DATA ; void strlwr( char *s ){ while ( s && *s ){ *s = tolower(*s); s++; } } int ReadChannel( FILE *f, CHANNEL_DATA *channel ) { static char s[MAX_LINE_LEN+1]; char *p; memset( channel, sizeof( CHANNEL_DATA ), 0 ) ; while ((p=fgets( s, MAX_LINE_LEN, f ))!=NULL){ // printf("%s", s ) ; if (s[0] == '*') break ; } if ( !p ) { /* EOF? */ // printf("EOF\n"); return 0 ; } while (fgets( s, MAX_LINE_LEN, f )){ if ( s[0] == '\n' ) return channel->freq ? 1 : 0; p = strtok( s, TOKS ) ; if ( !p ) { return 0; } strlwr( p ) ; if ( !strcmp( p, "channel" )){ p=strtok( NULL, NAMETOKS ); while ( p && *p==' ') p++; strcpy( channel->Name, p ); // printf("%d ", channel->freq ) ; } else if ( !strcmp( p, "frequency")) { channel->freq = atoi( p=strtok( NULL, TOKS )); // printf("%d ", channel->freq ) ; } else if ( !strcmp( p, "cbhc")) { channel->color = atoi(p=strtok(NULL,TOKS)); channel->hue = atoi(p=strtok(NULL,TOKS)); channel->bright = atoi(p=strtok(NULL,TOKS)); channel->saturation = atoi(p=strtok(NULL,TOKS)); } else if ( !strcmp( p, "ni")) { channel->nitv = atoi(p=strtok(NULL,TOKS)); channel->input = atoi(p=strtok(NULL,TOKS)); } else if ( !strcmp( p, "sat")) { channel->pol = atoi(p=strtok(NULL,TOKS)); channel->srate = atoi(p=strtok(NULL,TOKS)); channel->fec = atoi(p=strtok(NULL,TOKS)); channel->vpid = atoi(p=strtok(NULL,TOKS)); channel->apid = atoi(p=strtok(NULL,TOKS)); channel->lnbnum = atoi(p=strtok(NULL,TOKS)); channel->type = atoi(p=strtok(NULL,TOKS)); } else printf("Unknown token %s\n", p ) ; } return 1 ; } int main ( int argc, char *argv[] ){ FILE *f, *fo ; int cnt = 0; CHANNEL_DATA channel ; if ( argc != 3 ){ printf("USAGE: %s \n\n", argv[0] ) ; return 0; } if ( !(f=fopen(argv[1], "rt"))){ printf("Can't open %s for reading\n\n", argv[1]); return 0; } if ( !(fo=fopen(argv[2], "wt"))){ printf("Can't open %s for writing\n\n", argv[2]); return 0; } while ( ReadChannel( f, &channel ) ) { cnt++; fprintf(fo, "%s:%d:%c:%d:%d:%d:%d:%d:%d\n", channel.Name , channel.freq , channel.pol ? 'v' : 'h' , 1, //channel.lnbnum , channel.srate , channel.vpid , channel.apid , 0, //channel.type , 0 ); //channel.fec ) ; } printf( "%d channels read.\n\n", cnt ) ; fclose(f); fclose(fo); return 1; }