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
22 #include "misc_win32.h"
26 #include "gsm-coding.h"
28 char *GSM_GetVCARD(GSM_PhonebookEntry *entry, int version) {
30 static char Buffer[1000]="";
38 char memory_type_string[20];
40 GetMemoryTypeString(memory_type_string, &entry->MemoryType);
44 len+=sprintf(Buffer+len,_("BEGIN:VCARD%c%c"),13,10);
45 len+=sprintf(Buffer+len,_("N:%s%c%c"),entry->Name,13,10);
47 len+=sprintf(Buffer+len,_("TEL:%s%c%c"),entry->Number,13,10);
48 len+=sprintf(Buffer+len,_("END:VCARD%c%c"),13,10);
51 len+=sprintf(Buffer+len,_("BEGIN:VCARD%c%cVERSION:2.1%c%c"),13,10,13,10);
53 EncodeUTF8(buffer,entry->Name,strlen(entry->Name));
54 if (strlen(entry->Name)==strlen(buffer)) {
55 len+=sprintf(Buffer+len,_("N:%s%c%c"),entry->Name,13,10);
57 len+=sprintf(Buffer+len,_("N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
61 len+=sprintf(Buffer+len,_("TEL;PREF:%s%c%c"),entry->Number,13,10);
65 /* Rest of the subentries */
66 for (i = 0; i < entry->SubEntriesCount; i++) {
67 switch( entry->SubEntries[i].EntryType ) {
69 switch( entry->SubEntries[i].NumberType ) {
70 case GSM_General :len+=sprintf(Buffer+len,_("TEL"));break;
71 case GSM_Home :len+=sprintf(Buffer+len,_("TEL;HOME;VOICE"));break;
72 case GSM_Mobile :len+=sprintf(Buffer+len,_("TEL;CELL"));break;
73 case GSM_Work :len+=sprintf(Buffer+len,_("TEL;WORK;VOICE"));break;
74 case GSM_Fax :len+=sprintf(Buffer+len,_("TEL;FAX"));break;
78 len+=sprintf(Buffer+len,_(";PREF"));
82 case GSM_Note :len+=sprintf(Buffer+len,_("NOTE"));break;
84 len+=sprintf(Buffer+len,_("LABEL"));
85 EncodeUTF8(buffer,entry->SubEntries[i].data.Number,strlen(entry->SubEntries[i].data.Number));
86 if (strlen(entry->SubEntries[i].data.Number)==strlen(buffer)) {
87 len+=sprintf(Buffer+len,_(":%s%c%c"),entry->SubEntries[i].data.Number,13,10);
89 len+=sprintf(Buffer+len,_(";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
91 len+=sprintf(Buffer+len,_("ADR"));
93 case GSM_Email :len+=sprintf(Buffer+len,_("EMAIL"));break;
97 EncodeUTF8(buffer,entry->SubEntries[i].data.Number,strlen(entry->SubEntries[i].data.Number));
98 if (strlen(entry->SubEntries[i].data.Number)==strlen(buffer)) {
99 len+=sprintf(Buffer+len,_(":%s%c%c"),entry->SubEntries[i].data.Number,13,10);
101 len+=sprintf(Buffer+len,_(";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c"),buffer,13,10);
104 len+=sprintf(Buffer+len,_("END:VCARD%c%c"),13,10);
107 len+=sprintf(Buffer+len,_("BEGIN:VCARD\nVERSION:3.0\n"));
108 len+=sprintf(Buffer+len,_("FN:%s\n"),entry->Name);
109 len+=sprintf(Buffer+len,_("TEL;PREF:%s\n"),entry->Number);
110 len+=sprintf(Buffer+len,_("X_GSM_STORE_AT:%s%i\n"),memory_type_string,entry->Location);
111 len+=sprintf(Buffer+len,_("X_GSM_CALLERGROUP:%i\n"),entry->Group);
112 for( i = 0; i < entry->SubEntriesCount; i++ )
114 if( entry->SubEntries[i].EntryType == GSM_Number ) {
115 len+=sprintf(Buffer+len,_("TEL;UNKNOWN_%d:%s\n"),
116 entry->SubEntries[i].NumberType,
117 entry->SubEntries[i].data.Number );
120 len+=sprintf(Buffer+len,_("END:VCARD\n\n"));
127 int GSM_SavePhonebookEntryToSMS(GSM_MultiSMSMessage *SMS,
128 GSM_PhonebookEntry *entry, int version)
130 char Buffer[1000]="";
132 GSM_UDH UDH=GSM_NoUDH;
133 GSM_Coding_Type Coding=GSM_Coding_Default;
135 sprintf(Buffer,GSM_GetVCARD(entry,version));
140 if (strlen(Buffer)<=160-8) { //8==length of ..SCKE2.
141 sprintf(Buffer,"//SCKE2 ");
142 sprintf(Buffer,GSM_GetVCARD(entry,version));
144 UDH=GSM_PhonebookUDH; //FIXME:is this true ?
145 // Coding=GSM_Coding_8bit; //FIXME:is this true ?
150 if (strlen(Buffer)<=160-12) { //12==length of ..SCKL...
151 sprintf(Buffer,_("//SCKL23F4%c%c"),13,10);
152 sprintf(Buffer,GSM_GetVCARD(entry,version));
154 UDH=GSM_PhonebookUDH;
155 // Coding=GSM_Coding_8bit; //can be 8 bit, but no abligatory
160 length=strlen(Buffer);
161 GSM_MakeMultiPartSMS2(SMS,Buffer,length, UDH, Coding);