5 A Linux/Unix toolset and driver for Nokia mobile phones.
7 Released under the terms of the GNU GPL, see file COPYING for more details.
9 Functions for manipulating phonebook
20 #include "misc_win32.h"
24 #include "gsm-coding.h"
26 char *GSM_GetVCARD(GSM_PhonebookEntry *entry, int version) {
28 static char Buffer[1000]="";
36 char memory_type_string[20];
38 GetMemoryTypeString(memory_type_string, &entry->MemoryType);
42 len+=sprintf(Buffer+len,_("BEGIN:VCARD%c%c"),13,10);
43 len+=sprintf(Buffer+len,_("N:%s%c%c"),entry->Name,13,10);
45 len+=sprintf(Buffer+len,_("TEL:%s%c%c"),entry->Number,13,10);
46 len+=sprintf(Buffer+len,_("END:VCARD%c%c"),13,10);
49 len+=sprintf(Buffer+len,_("BEGIN:VCARD%c%cVERSION:2.1%c%c"),13,10,13,10);
51 EncodeUTF8(buffer,entry->Name,strlen(entry->Name));
52 if (strlen(entry->Name)==strlen(buffer)) {
53 len+=sprintf(Buffer+len,_("N:%s%c%c"),entry->Name,13,10);
55 len+=sprintf(Buffer+len,_("N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
59 len+=sprintf(Buffer+len,_("TEL;PREF:%s%c%c"),entry->Number,13,10);
63 /* Rest of the subentries */
64 for (i = 0; i < entry->SubEntriesCount; i++) {
65 switch( entry->SubEntries[i].EntryType ) {
67 switch( entry->SubEntries[i].NumberType ) {
68 case GSM_General :len+=sprintf(Buffer+len,_("TEL"));break;
69 case GSM_Home :len+=sprintf(Buffer+len,_("TEL;HOME;VOICE"));break;
70 case GSM_Mobile :len+=sprintf(Buffer+len,_("TEL;CELL"));break;
71 case GSM_Work :len+=sprintf(Buffer+len,_("TEL;WORK;VOICE"));break;
72 case GSM_Fax :len+=sprintf(Buffer+len,_("TEL;FAX"));break;
76 len+=sprintf(Buffer+len,_(";PREF"));
80 case GSM_Note :len+=sprintf(Buffer+len,_("NOTE"));break;
82 len+=sprintf(Buffer+len,_("LABEL"));
83 EncodeUTF8(buffer,entry->SubEntries[i].data.Number,strlen(entry->SubEntries[i].data.Number));
84 if (strlen(entry->SubEntries[i].data.Number)==strlen(buffer)) {
85 len+=sprintf(Buffer+len,_(":%s%c%c"),entry->SubEntries[i].data.Number,13,10);
87 len+=sprintf(Buffer+len,_(";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
89 len+=sprintf(Buffer+len,_("ADR"));
91 case GSM_Email :len+=sprintf(Buffer+len,_("EMAIL"));break;
95 EncodeUTF8(buffer,entry->SubEntries[i].data.Number,strlen(entry->SubEntries[i].data.Number));
96 if (strlen(entry->SubEntries[i].data.Number)==strlen(buffer)) {
97 len+=sprintf(Buffer+len,_(":%s%c%c"),entry->SubEntries[i].data.Number,13,10);
99 len+=sprintf(Buffer+len,_(";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
102 len+=sprintf(Buffer+len,_("END:VCARD%c%c"),13,10);
105 len+=sprintf(Buffer+len,_("BEGIN:VCARD\nVERSION:3.0\n"));
106 len+=sprintf(Buffer+len,_("FN:%s\n"),entry->Name);
107 len+=sprintf(Buffer+len,_("TEL;PREF:%s\n"),entry->Number);
108 len+=sprintf(Buffer+len,_("X_GSM_STORE_AT:%s%i\n"),memory_type_string,entry->Location);
109 len+=sprintf(Buffer+len,_("X_GSM_CALLERGROUP:%i\n"),entry->Group);
110 for( i = 0; i < entry->SubEntriesCount; i++ )
112 if( entry->SubEntries[i].EntryType == GSM_Number ) {
113 len+=sprintf(Buffer+len,_("TEL;UNKNOWN_%d:%s\n"),
114 entry->SubEntries[i].NumberType,
115 entry->SubEntries[i].data.Number );
118 len+=sprintf(Buffer+len,_("END:VCARD\n\n"));
125 int GSM_SavePhonebookEntryToSMS(GSM_MultiSMSMessage *SMS,
126 GSM_PhonebookEntry *entry, int version)
128 char Buffer[1000]="";
130 GSM_UDH UDH=GSM_NoUDH;
131 GSM_Coding_Type Coding=GSM_Coding_Default;
133 sprintf(Buffer,GSM_GetVCARD(entry,version));
138 if (strlen(Buffer)<=160-8) { //8==length of ..SCKE2.
139 sprintf(Buffer,"//SCKE2 ");
140 sprintf(Buffer,GSM_GetVCARD(entry,version));
142 UDH=GSM_PhonebookUDH; //FIXME:is this true ?
143 // Coding=GSM_Coding_8bit; //FIXME:is this true ?
148 if (strlen(Buffer)<=160-12) { //12==length of ..SCKL...
149 sprintf(Buffer,_("//SCKL23F4%c%c"),13,10);
150 sprintf(Buffer,GSM_GetVCARD(entry,version));
152 UDH=GSM_PhonebookUDH;
153 // Coding=GSM_Coding_8bit; //can be 8 bit, but no abligatory
158 length=strlen(Buffer);
159 GSM_MakeMultiPartSMS2(SMS,Buffer,length, UDH, Coding);