--- gnokii/gnokii/gnokii.c Sat Sep 14 00:40:00 2002 +++ gnokii.phonebook/gnokii/gnokii.c Sat Sep 21 19:09:19 2002 @@ -442,6 +442,8 @@ " -C n - message Class; values [0, 3]\n" " -v n - set validity period to n minutes\n" " --long n - read n bytes from the input; default is 160\n" + " --phonebook file - file is a file with a phonebook\n" + " --name name - name is the name to search on phonebook\n" "\n" )); exit(1); @@ -501,6 +503,8 @@ /* The maximum length of an uncompressed concatenated short message is 255 * 153 = 39015 default alphabet characters */ int input_len, i, curpos = 0; + char PhoneBook[1024]; + char Number[1024], Name[1024]; struct option options[] = { { "smsc", required_argument, NULL, '1'}, @@ -511,25 +515,22 @@ { "imelody", 0, NULL, 'i'}, { "animation",required_argument,NULL, 'a'}, { "concat", required_argument, NULL, 'o'}, + { "phonebook", required_argument, NULL, 'f'}, + { "name", required_argument, NULL, 'n'}, { NULL, 0, NULL, 0} }; + + PhoneBook[0]='\0'; input_len = GSM_MAX_SMS_LENGTH; /* The memory is zeroed here */ gn_sms_default_submit(&sms); - memset(&sms.Remote.Number, 0, sizeof(sms.Remote.Number)); - strncpy(sms.Remote.Number, argv[0], sizeof(sms.Remote.Number) - 1); - if (sms.Remote.Number[0] == '+') - sms.Remote.Type = SMS_International; - else - sms.Remote.Type = SMS_Unknown; - optarg = NULL; optind = 0; - while ((i = getopt_long(argc, argv, "r8co:C:v:ip:", options, NULL)) != -1) { + while ((i = getopt_long(argc, argv, "r8co:C:v:ip:p:n:", options, NULL)) != -1) { switch (i) { /* -c for compression. not yet implemented. */ case '1': /* SMSC number */ strncpy(sms.SMSC.Number, optarg, sizeof(sms.SMSC.Number) - 1); @@ -630,11 +631,43 @@ } curpos = -1; break; + + case 'f': /*Support for Phone Book*/ + /*Pinux*/ + strncpy(PhoneBook, optarg, sizeof(PhoneBook)-1); + + break; + + case 'n': + strncpy(Name, optarg, sizeof(Name)-1); + break; + default: sendsms_usage(); } } + + memset(&sms.Remote.Number, 0, sizeof(sms.Remote.Number)); + strncpy(sms.Remote.Number, argv[0], sizeof(sms.Remote.Number) - 1); + + + if (PhoneBook[0]) { + fprintf(stderr, _("Using PhoneBook: %s. Searching for name: %s\n"),PhoneBook,Name); + if (!search_phonebook (PhoneBook,Name,Number)) { + fprintf (stderr, _("Name not found\n")); + exit (6); + } + fprintf(stderr,_("Phone number is: %s\n"), Number); + strncpy(sms.Remote.Number,Number,sizeof(sms.Remote.Number)-1); + + } + if (sms.Remote.Number[0] == '+') + sms.Remote.Type = SMS_International; + else + sms.Remote.Type = SMS_Unknown; + + if (!sms.SMSC.Number[0]) { data.MessageCenter = calloc(1, sizeof(SMS_MessageCenter)); data.MessageCenter->No = 1; @@ -4780,3 +4813,57 @@ fprintf(stderr, _("Wrong number of arguments\n")); exit(1); } + +int nameis (char *line, char *Name) { + int ret=1; + int i,j; + + for (i=0;line[i]!=':';i++); + i+=2; + + /*Now "i" is in the first character of name*/ + j=0; + + while (ret==1 && line[i]!='\n' && Name[j]!='\0') { + if (line[i]!=Name[j]) + ret=0; + + i++; + j++; + } + + if (ret==1 && line[i]=='\n' && Name[j]=='\0') + return 1; + else + return 0; +} + +int search_phonebook (char *PhoneBook, char *Name, char *Number) { + FILE *f; + char line[1024]; + int found=0; + int i,j; + + f=fopen(PhoneBook, "r"); + if (f==NULL) { + fprintf(stderr, _("I cannot open PhoneBook file\n")); + exit (5); + } + + fgets (line,sizeof(line)-1,f); + while (found==0 && !feof(f)) { + if (nameis (line,Name)) { /*We can use strstr...*/ + fgets (line,sizeof(line)-1,f); + for (i=0,j=8;line[j]!='\n';Number[i]=line[j],i++,j++); + found=1; + } + else { + + fgets (line,sizeof(line)-1,f); + fgets (line,sizeof(line)-1,f); + fgets (line,sizeof(line)-1,f); + } + } + return (found); +} +