1 /*
2 
3   G N O K I I
4 
5   A Linux/Unix toolset and driver for the mobile phones.
6 
7   This file is part of gnokii.
8 
9   Gnokii is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 2 of the License, or
12   (at your option) any later version.
13 
14   Gnokii is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18 
19   You should have received a copy of the GNU General Public License
20   along with gnokii; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22 
23   Copyright (C) 1999-2000 Hugh Blemings & Pavel Janik ml.
24   Copyright (C) 2001-2004 Pawel Kot
25   Copyright (C) 2001      Chris Kemp, Pavel Machek
26   Copyright (C) 2002-2004 BORBELY Zoltan
27 
28 */
29 
30 #include "config.h"
31 
32 #include <string.h>
33 #include "compat.h"
34 #include "gnokii.h"
35 
unimplemented(void)36 gn_error unimplemented(void)
37 {
38 	return GN_ERR_NOTIMPLEMENTED;
39 }
40 
gn_str2memory_type(const char * s)41 GNOKII_API gn_memory_type gn_str2memory_type(const char *s)
42 {
43 	if (!s)
44 		return GN_MT_XX;
45 #define X(a) if (!strcmp(s, #a)) return GN_MT_##a;
46 	X(ME);
47 	X(SM);
48 	X(FD);
49 	X(ON);
50 	X(EN);
51 	X(DC);
52 	X(RC);
53 	X(MC);
54 	X(LD);
55 	X(BD);
56 	X(SD);
57 	X(MT);
58 	X(TA);
59 	X(CB);
60 	X(IN);
61 	X(OU);
62 	X(AR);
63 	X(TE);
64 	X(SR);
65 	X(DR);
66 	X(OUS);
67 	X(F1);
68 	X(F2);
69 	X(F3);
70 	X(F4);
71 	X(F5);
72 	X(F6);
73 	X(F7);
74 	X(F8);
75 	X(F9);
76 	X(F10);
77 	X(F11);
78 	X(F12);
79 	X(F13);
80 	X(F14);
81 	X(F15);
82 	X(F16);
83 	X(F17);
84 	X(F18);
85 	X(F19);
86 	X(F20);
87 	X(BM);
88 	return GN_MT_XX;
89 #undef X
90 }
91 
92 /* Set of handy functions to print out localized name of the enum value */
93 
gn_memory_type2str(gn_memory_type mt)94 GNOKII_API const char *gn_memory_type2str(gn_memory_type mt)
95 {
96 #define X(a) case GN_MT_##a: return #a;
97 	switch (mt) {
98 	X(ME);
99 	X(SM);
100 	X(FD);
101 	X(ON);
102 	X(EN);
103 	X(DC);
104 	X(RC);
105 	X(MC);
106 	X(LD);
107 	X(BD);
108 	X(SD);
109 	X(MT);
110 	X(TA);
111 	X(CB);
112 	X(IN);
113 	X(OU);
114 	X(AR);
115 	X(TE);
116 	X(SR);
117 	X(DR);
118 	X(OUS);
119 	X(F1);
120 	X(F2);
121 	X(F3);
122 	X(F4);
123 	X(F5);
124 	X(F6);
125 	X(F7);
126 	X(F8);
127 	X(F9);
128 	X(F10);
129 	X(F11);
130 	X(F12);
131 	X(F13);
132 	X(F14);
133 	X(F15);
134 	X(F16);
135 	X(F17);
136 	X(F18);
137 	X(F19);
138 	X(F20);
139 	X(BM);
140 	default: return NULL;
141 	}
142 #undef X
143 }
144 
gn_memory_type_print(gn_memory_type mt)145 GNOKII_API const char *gn_memory_type_print(gn_memory_type mt)
146 {
147 	switch (mt) {
148 	case GN_MT_ME: return _("Internal memory");
149 	case GN_MT_SM: return _("SIM card");
150 	case GN_MT_FD: return _("Fixed dial numbers");
151 	case GN_MT_ON: return _("Own numbers");
152 	case GN_MT_EN: return _("Emergency numbers");
153 	case GN_MT_DC: return _("Dialled numbers");
154 	case GN_MT_RC: return _("Received numbers");
155 	case GN_MT_MC: return _("Missed numbers");
156 	case GN_MT_LD: return _("Last dialled");
157 	case GN_MT_BD: return _("Barred dialling numbers");
158 	case GN_MT_SD: return _("Service dialling numbers");
159 	case GN_MT_MT: return _("Combined ME and SIM phonebook");
160 	case GN_MT_TA: return _("Computer memory");
161 	case GN_MT_CB: return _("Currently selected memory");
162 	case GN_MT_IN: return _("SMS Inbox");
163 	case GN_MT_OU: return _("SMS Outbox, sent items");
164 	case GN_MT_AR: return _("SMS Archive");
165 	case GN_MT_TE: return _("SMS Templates");
166 	case GN_MT_SR: return _("SMS Status Reports");
167 	case GN_MT_DR: return _("SMS Drafts");
168 	case GN_MT_OUS: return _("SMS Outbox, items to be sent");
169 	case GN_MT_F1: return _("SMS Folder 1");
170 	case GN_MT_F2: return _("SMS Folder 2");
171 	case GN_MT_F3: return _("SMS Folder 3");
172 	case GN_MT_F4: return _("SMS Folder 4");
173 	case GN_MT_F5: return _("SMS Folder 5");
174 	case GN_MT_F6: return _("SMS Folder 6");
175 	case GN_MT_F7: return _("SMS Folder 7");
176 	case GN_MT_F8: return _("SMS Folder 8");
177 	case GN_MT_F9: return _("SMS Folder 9");
178 	case GN_MT_F10: return _("SMS Folder 10");
179 	case GN_MT_F11: return _("SMS Folder 11");
180 	case GN_MT_F12: return _("SMS Folder 12");
181 	case GN_MT_F13: return _("SMS Folder 13");
182 	case GN_MT_F14: return _("SMS Folder 14");
183 	case GN_MT_F15: return _("SMS Folder 15");
184 	case GN_MT_F16: return _("SMS Folder 16");
185 	case GN_MT_F17: return _("SMS Folder 17");
186 	case GN_MT_F18: return _("SMS Folder 18");
187 	case GN_MT_F19: return _("SMS Folder 19");
188 	case GN_MT_F20: return _("SMS Folder 20");
189 	case GN_MT_BM: return _("Cell Broadcast");
190 	default: return _("Unknown");
191 	}
192 }
193 
gn_connection_type2str(gn_connection_type t)194 GNOKII_API const char *gn_connection_type2str(gn_connection_type t)
195 {
196 	switch (t) {
197 	case GN_CT_NONE:	return _("None");
198 	case GN_CT_Serial:	return _("Serial");
199 	case GN_CT_DAU9P:	return _("Serial DAU9P");
200 	case GN_CT_DLR3P:	return _("Serial DLR3P");
201 	case GN_CT_Infrared:	return _("Infrared (old Nokias)");
202 	case GN_CT_Irda:	return _("IrDA");
203 	case GN_CT_Bluetooth:	return _("Bluetooth");
204 	case GN_CT_Tekram:	return _("Tekram Ir-Dongle");
205 	case GN_CT_TCP:		return _("TCP");
206 	case GN_CT_M2BUS:	return _("M2BUS");
207 	case GN_CT_DKU2:	return _("DKU2 (kernel support)");
208 	case GN_CT_DKU2LIBUSB:	return _("DKU2 (libusb support)");
209 	case GN_CT_PCSC:	return _("Smart Card reader (libpcsclite support)");
210 	case GN_CT_SOCKETPHONET:	return _("Linux Phonet (kernel support)");
211 	default:		return _("Unknown");
212 	}
213 }
214 
gn_power_source2str(gn_power_source s)215 GNOKII_API const char *gn_power_source2str(gn_power_source s)
216 {
217 	switch (s) {
218 	case GN_PS_ACDC:	return _("AC-DC");
219 	case GN_PS_BATTERY:	return _("Battery");
220 	case GN_PS_NOBATTERY:	return _("No battery");
221 	case GN_PS_FAULT:	return _("Power fault");
222 	default:		return _("Unknown");
223 	}
224 }
225 
gn_security_code_type2str(gn_security_code_type t)226 GNOKII_API const char *gn_security_code_type2str(gn_security_code_type t)
227 {
228 	switch (t) {
229 	case GN_SCT_SecurityCode:	return _("Security code");
230 	case GN_SCT_Pin:		return _("PIN");
231 	case GN_SCT_Pin2:		return _("PIN2");
232 	case GN_SCT_Puk:		return _("PUK");
233 	case GN_SCT_Puk2:		return _("PUK2");
234 	case GN_SCT_None:		return _("None");
235 	default:			return _("Unknown");
236 	}
237 }
238 
239 /* Phonebook */
240 
gn_phonebook_number_type2str(gn_phonebook_number_type t)241 GNOKII_API const char *gn_phonebook_number_type2str(gn_phonebook_number_type t)
242 {
243 	switch (t) {
244 	case GN_PHONEBOOK_NUMBER_None:		return _("General number");
245 	case GN_PHONEBOOK_NUMBER_Common:	return _("General number");
246 	case GN_PHONEBOOK_NUMBER_Home:		return _("Home number");
247 	case GN_PHONEBOOK_NUMBER_Mobile:	return _("Mobile number");
248 	case GN_PHONEBOOK_NUMBER_Fax:		return _("Fax number");
249 	case GN_PHONEBOOK_NUMBER_Work:		return _("Work number");
250 	case GN_PHONEBOOK_NUMBER_General:	return _("General number");
251 	default:				return _("Unknown number");
252 	}
253 }
254 
gn_phonebook_entry_type2str(gn_phonebook_entry_type t)255 GNOKII_API const char *gn_phonebook_entry_type2str(gn_phonebook_entry_type t)
256 {
257 	switch (t) {
258 	case GN_PHONEBOOK_ENTRY_Name:			return _("Name");
259 	case GN_PHONEBOOK_ENTRY_Email:			return _("Email");
260 	case GN_PHONEBOOK_ENTRY_Postal:			return _("Postal address");
261 	case GN_PHONEBOOK_ENTRY_Note:			return _("Note");
262 	case GN_PHONEBOOK_ENTRY_Number:			return _("Number");
263 	case GN_PHONEBOOK_ENTRY_Ringtone:		return _("Ringtone");
264 	case GN_PHONEBOOK_ENTRY_Date:			return _("Date");
265 	case GN_PHONEBOOK_ENTRY_Pointer:		return _("Pointer");
266 	case GN_PHONEBOOK_ENTRY_Logo:			return _("Logo");
267 	case GN_PHONEBOOK_ENTRY_LogoSwitch:		return _("Logo switch");
268 	case GN_PHONEBOOK_ENTRY_Group:			return _("Group");
269 	case GN_PHONEBOOK_ENTRY_URL:			return _("URL");
270 	case GN_PHONEBOOK_ENTRY_Location:		return _("Location");
271 	case GN_PHONEBOOK_ENTRY_Image:			return _("Image");
272 	case GN_PHONEBOOK_ENTRY_RingtoneAdv:		return _("Ringtone");
273 	case GN_PHONEBOOK_ENTRY_UserID:			return _("User ID");
274 	case GN_PHONEBOOK_ENTRY_PTTAddress:		return _("Push-To-Talk address");
275 	case GN_PHONEBOOK_ENTRY_FirstName:		return _("First name");
276 	case GN_PHONEBOOK_ENTRY_LastName:		return _("Last name");
277 	case GN_PHONEBOOK_ENTRY_PostalAddress:		return _("Postal address");
278 	case GN_PHONEBOOK_ENTRY_ExtendedAddress:	return _("Extended address");
279 	case GN_PHONEBOOK_ENTRY_Street:			return _("Street");
280 	case GN_PHONEBOOK_ENTRY_City:			return _("City");
281 	case GN_PHONEBOOK_ENTRY_StateProvince:		return _("State or province");
282 	case GN_PHONEBOOK_ENTRY_ZipCode:		return _("Zip code");
283 	case GN_PHONEBOOK_ENTRY_Country:		return _("Country");
284 	case GN_PHONEBOOK_ENTRY_FormalName:		return _("Formal name");
285 	case GN_PHONEBOOK_ENTRY_JobTitle:		return _("Job title");
286 	case GN_PHONEBOOK_ENTRY_Company:		return _("Company");
287 	case GN_PHONEBOOK_ENTRY_Nickname:		return _("Nickname");
288 	case GN_PHONEBOOK_ENTRY_Birthday:		return _("Birthday");
289 	case GN_PHONEBOOK_ENTRY_ExtGroup:		return _("Caller group id");
290 	default:					return _("Unknown");
291 	}
292 }
293 
gn_subentrytype2string(gn_phonebook_entry_type entry_type,gn_phonebook_number_type number_type)294 GNOKII_API const char *gn_subentrytype2string(gn_phonebook_entry_type entry_type, gn_phonebook_number_type number_type)
295 {
296 	switch (entry_type) {
297 	case GN_PHONEBOOK_ENTRY_Name:
298 	case GN_PHONEBOOK_ENTRY_Email:
299 	case GN_PHONEBOOK_ENTRY_Postal:
300 	case GN_PHONEBOOK_ENTRY_Note:
301 	case GN_PHONEBOOK_ENTRY_Ringtone:
302 	case GN_PHONEBOOK_ENTRY_Date:
303 	case GN_PHONEBOOK_ENTRY_Pointer:
304 	case GN_PHONEBOOK_ENTRY_Logo:
305 	case GN_PHONEBOOK_ENTRY_LogoSwitch:
306 	case GN_PHONEBOOK_ENTRY_Group:
307 	case GN_PHONEBOOK_ENTRY_URL:
308 	case GN_PHONEBOOK_ENTRY_Location:
309 	case GN_PHONEBOOK_ENTRY_Image:
310 	case GN_PHONEBOOK_ENTRY_RingtoneAdv:
311 	case GN_PHONEBOOK_ENTRY_UserID:
312 	case GN_PHONEBOOK_ENTRY_PTTAddress:
313 	case GN_PHONEBOOK_ENTRY_FirstName:
314 	case GN_PHONEBOOK_ENTRY_LastName:
315 	case GN_PHONEBOOK_ENTRY_PostalAddress:
316 	case GN_PHONEBOOK_ENTRY_ExtendedAddress:
317 	case GN_PHONEBOOK_ENTRY_Street:
318 	case GN_PHONEBOOK_ENTRY_City:
319 	case GN_PHONEBOOK_ENTRY_StateProvince:
320 	case GN_PHONEBOOK_ENTRY_ZipCode:
321 	case GN_PHONEBOOK_ENTRY_Country:
322 	case GN_PHONEBOOK_ENTRY_FormalName:
323 	case GN_PHONEBOOK_ENTRY_JobTitle:
324 	case GN_PHONEBOOK_ENTRY_Company:
325 	case GN_PHONEBOOK_ENTRY_Nickname:
326 	case GN_PHONEBOOK_ENTRY_Birthday:
327 	case GN_PHONEBOOK_ENTRY_ExtGroup:
328 		return gn_phonebook_entry_type2str(entry_type);
329 	case GN_PHONEBOOK_ENTRY_Number:
330 		switch (number_type) {
331 		case GN_PHONEBOOK_NUMBER_Home:
332 		case GN_PHONEBOOK_NUMBER_Mobile:
333 		case GN_PHONEBOOK_NUMBER_Fax:
334 		case GN_PHONEBOOK_NUMBER_Work:
335 		case GN_PHONEBOOK_NUMBER_None:
336 		case GN_PHONEBOOK_NUMBER_Common:
337 		case GN_PHONEBOOK_NUMBER_General:
338 			return gn_phonebook_number_type2str(number_type);
339 		default:
340 			return _("Unknown number");
341 		}
342 	default:
343 		return _("Unknown");
344 	}
345 }
346 
gn_phonebook_group_type2str(gn_phonebook_group_type t)347 GNOKII_API const char *gn_phonebook_group_type2str(gn_phonebook_group_type t)
348 {
349 	switch (t) {
350 	case GN_PHONEBOOK_GROUP_Family:	return _("Family");
351 	case GN_PHONEBOOK_GROUP_Vips:	return _("VIPs");
352 	case GN_PHONEBOOK_GROUP_Friends:return _("Friends");
353 	case GN_PHONEBOOK_GROUP_Work:	return _("Work");
354 	case GN_PHONEBOOK_GROUP_Others:	return _("Others");
355 	case GN_PHONEBOOK_GROUP_None:	return _("None");
356 	default:			return _("Unknown");
357 	}
358 }
359 
360 /* SMS */
361 
gn_sms_udh_type2str(gn_sms_udh_type t)362 GNOKII_API const char *gn_sms_udh_type2str(gn_sms_udh_type t)
363 {
364 	switch (t) {
365 	case GN_SMS_UDH_None:			return _("Text");
366 	case GN_SMS_UDH_ConcatenatedMessages:	return _("Linked");
367 	case GN_SMS_UDH_Ringtone:		return _("Ringtone");
368 	case GN_SMS_UDH_OpLogo:			return _("GSM Operator Logo");
369 	case GN_SMS_UDH_CallerIDLogo:		return _("Logo");
370 	case GN_SMS_UDH_MultipartMessage:	return _("Multipart Message");
371 	case GN_SMS_UDH_WAPvCard:		return _("WAP vCard");
372 	case GN_SMS_UDH_WAPvCalendar:		return _("WAP vCalendar");
373 	case GN_SMS_UDH_WAPvCardSecure:		return _("WAP vCardSecure");
374 	case GN_SMS_UDH_WAPvCalendarSecure:	return _("WAP vCalendarSecure");
375 	case GN_SMS_UDH_VoiceMessage:		return _("Voice Message");
376 	case GN_SMS_UDH_FaxMessage:		return _("Fax Message");
377 	case GN_SMS_UDH_EmailMessage:		return _("Email Message");
378 	case GN_SMS_UDH_WAPPush:		return _("WAP Push");
379 	case GN_SMS_UDH_OtherMessage:		return _("Other Message");
380 	case GN_SMS_UDH_Unknown:		return _("Unknown");
381 	default:				return _("Unknown");
382 	}
383 }
384 
gn_sms_message_type2str(gn_sms_message_type t)385 GNOKII_API const char *gn_sms_message_type2str(gn_sms_message_type t)
386 {
387 	switch (t) {
388 	case GN_SMS_MT_Deliver:		return _("Inbox Message");
389 	case GN_SMS_MT_DeliveryReport:	return _("Delivery Report");
390 	case GN_SMS_MT_Submit:		return _("MO Message");
391 	case GN_SMS_MT_SubmitReport:	return _("Submit Report");
392 	case GN_SMS_MT_Command:		return _("Command");
393 	case GN_SMS_MT_StatusReport:	return _("Status Report");
394 	case GN_SMS_MT_Picture:		return _("Picture Message");
395 	case GN_SMS_MT_TextTemplate:	return _("Template");
396 	case GN_SMS_MT_PictureTemplate:	return _("Picture Message Template");
397 	case GN_SMS_MT_SubmitSent:	return _("MO Message");
398 	default:			return _("Unknown");
399 	}
400 }
401 
gn_sms_message_status2str(gn_sms_message_status t)402 GNOKII_API const char *gn_sms_message_status2str(gn_sms_message_status t)
403 {
404 	switch (t) {
405 	case GN_SMS_Read:	return _("Read");
406 	case GN_SMS_Unread:	return _("Unread");
407 	case GN_SMS_Sent:	return _("Sent");
408 	case GN_SMS_Unsent:	return _("Unsent");
409 	default:		return _("Unknown");
410 	}
411 }
412 
gn_sms_message_format2str(gn_sms_message_format t)413 GNOKII_API const char *gn_sms_message_format2str(gn_sms_message_format t)
414 {
415 	switch (t) {
416 	case GN_SMS_MF_Text:	return _("Text");
417 	case GN_SMS_MF_Fax:	return _("Fax");
418 	case GN_SMS_MF_Voice:	return _("VoiceMail");
419 	case GN_SMS_MF_ERMES:	return _("ERMES");
420 	case GN_SMS_MF_Paging:	return _("Paging");
421 	case GN_SMS_MF_UCI:	return _("Email message in 8110i");
422 	case GN_SMS_MF_Email:	return _("Email");
423 	case GN_SMS_MF_X400:	return _("X.400");
424 	default:		return _("Unknown");
425 	}
426 }
427 
gn_sms_vp_time2str(gn_sms_vp_time t)428 GNOKII_API const char *gn_sms_vp_time2str(gn_sms_vp_time t)
429 {
430 	switch (t) {
431 	case GN_SMS_VP_1H:	return _("1 hour");
432 	case GN_SMS_VP_6H:	return _("6 hours");
433 	case GN_SMS_VP_24H:	return _("24 hours");
434 	case GN_SMS_VP_72H:	return _("72 hours");
435 	case GN_SMS_VP_1W:	return _("1 week");
436 	case GN_SMS_VP_Max:	return _("Maximum time");
437 	default:		return _("Unknown");
438 	}
439 }
440 
441 /* Calendar and ToDo */
442 
gn_calnote_type2str(gn_calnote_type t)443 GNOKII_API const char *gn_calnote_type2str(gn_calnote_type t)
444 {
445 	switch (t) {
446 	case GN_CALNOTE_MEETING:	return _("Meeting");
447 	case GN_CALNOTE_CALL:		return _("Call");
448 	case GN_CALNOTE_BIRTHDAY:	return _("Birthday");
449 	case GN_CALNOTE_REMINDER:	return _("Reminder");
450 	case GN_CALNOTE_MEMO:		return _("Memo");
451 	default:			return _("Unknown");
452 	}
453 }
454 
gn_calnote_recurrence2str(gn_calnote_recurrence r)455 GNOKII_API const char *gn_calnote_recurrence2str(gn_calnote_recurrence r)
456 {
457 	switch (r) {
458 	case GN_CALNOTE_NEVER:	return _("Never");
459 	case GN_CALNOTE_DAILY:	return _("Daily");
460 	case GN_CALNOTE_WEEKLY:	return _("Weekly");
461 	case GN_CALNOTE_2WEEKLY:return _("Every 2 weeks");
462 	case GN_CALNOTE_MONTHLY:return _("Monthly");
463 	case GN_CALNOTE_YEARLY:	return _("Yearly");
464 	default:		return _("Unknown");
465 	}
466 }
467 
gn_todo_priority2str(gn_todo_priority p)468 GNOKII_API const char *gn_todo_priority2str(gn_todo_priority p)
469 {
470 	switch (p) {
471 	case GN_TODO_LOW:	return _("Low");
472 	case GN_TODO_MEDIUM:	return _("Medium");
473 	case GN_TODO_HIGH:	return _("High");
474 	default:		return _("Unknown");
475 	}
476 }
477 
478 /* WAP */
479 
gn_wap_session2str(gn_wap_session p)480 GNOKII_API const char *gn_wap_session2str(gn_wap_session p)
481 {
482 	switch (p) {
483 	case GN_WAP_SESSION_TEMPORARY:	return _("Temporary");
484 	case GN_WAP_SESSION_PERMANENT:	return _("Permanent");
485 	default:			return _("Unknown");
486 	}
487 }
488 
gn_wap_authentication2str(gn_wap_authentication p)489 GNOKII_API const char *gn_wap_authentication2str(gn_wap_authentication p)
490 {
491 	switch (p) {
492 	case GN_WAP_AUTH_NORMAL:	return _("Normal");
493 	case GN_WAP_AUTH_SECURE:	return _("Secure");
494 	default:			return _("Unknown");
495 	}
496 }
497 
gn_wap_bearer2str(gn_wap_bearer p)498 GNOKII_API const char *gn_wap_bearer2str(gn_wap_bearer p)
499 {
500 	switch (p) {
501 	case GN_WAP_BEARER_GSMDATA:	return _("GSM data");
502 	case GN_WAP_BEARER_GPRS:	return _("GPRS");
503 	case GN_WAP_BEARER_SMS:		return _("SMS");
504 	case GN_WAP_BEARER_USSD:	return _("USSD");
505 	default:			return _("Unknown");
506 	}
507 }
508 
gn_wap_call_type2str(gn_wap_call_type p)509 GNOKII_API const char *gn_wap_call_type2str(gn_wap_call_type p)
510 {
511 	switch (p) {
512 	case GN_WAP_CALL_ANALOGUE:	return _("Analogue");
513 	case GN_WAP_CALL_ISDN:		return _("ISDN");
514 	default:			return _("Unknown");
515 	}
516 }
517 
gn_wap_call_speed2str(gn_wap_call_speed p)518 GNOKII_API const char *gn_wap_call_speed2str(gn_wap_call_speed p)
519 {
520 	switch (p) {
521 	case GN_WAP_CALL_AUTOMATIC:	return _("Automatic");
522 	case GN_WAP_CALL_9600:		return _("9600");
523 	case GN_WAP_CALL_14400:		return _("14400");
524 	default:			return _("Unknown");
525 	}
526 }
527 
gn_wap_login2str(gn_wap_login p)528 GNOKII_API const char *gn_wap_login2str(gn_wap_login p)
529 {
530 	switch (p) {
531 	case GN_WAP_LOGIN_MANUAL:	return _("Manual");
532 	case GN_WAP_LOGIN_AUTOLOG:	return _("Automatic");
533 	default:			return _("Unknown");
534 	}
535 }
536 
gn_wap_gprs2str(gn_wap_gprs p)537 GNOKII_API const char *gn_wap_gprs2str(gn_wap_gprs p)
538 {
539 	switch (p) {
540 	case GN_WAP_GPRS_ALWAYS:	return _("Always");
541 	case GN_WAP_GPRS_WHENNEEDED:	return _("When needed");
542 	default:			return _("Unknown");
543 	}
544 }
545 
546 /* Profiles */
547 
gn_profile_message_type2str(gn_profile_message_type p)548 GNOKII_API const char *gn_profile_message_type2str(gn_profile_message_type p)
549 {
550 	switch (p) {
551 	case GN_PROFILE_MESSAGE_NoTone:		return _("No tone");
552 	case GN_PROFILE_MESSAGE_Standard:	return _("Standard");
553 	case GN_PROFILE_MESSAGE_Special:	return _("Special");
554 	case GN_PROFILE_MESSAGE_BeepOnce:	return _("Beep once");
555 	case GN_PROFILE_MESSAGE_Ascending:	return _("Ascending");
556 	default:				return _("Unknown");
557 	}
558 }
559 
gn_profile_warning_type2str(gn_profile_warning_type p)560 GNOKII_API const char *gn_profile_warning_type2str(gn_profile_warning_type p)
561 {
562 	switch (p) {
563 	case GN_PROFILE_WARNING_Off:		return _("Off");
564 	case GN_PROFILE_WARNING_On:		return _("On");
565 	default:				return _("Unknown");
566 	}
567 }
568 
gn_profile_vibration_type2str(gn_profile_vibration_type p)569 GNOKII_API const char *gn_profile_vibration_type2str(gn_profile_vibration_type p)
570 {
571 	switch (p) {
572 	case GN_PROFILE_VIBRATION_Off:		return _("Off");
573 	case GN_PROFILE_VIBRATION_On:		return _("On");
574 	default:				return _("Unknown");
575 	}
576 }
577 
gn_profile_callalert_type2str(gn_profile_callalert_type p)578 GNOKII_API const char *gn_profile_callalert_type2str(gn_profile_callalert_type p)
579 {
580 	switch (p) {
581 	case GN_PROFILE_CALLALERT_Ringing:	return _("Ringing");
582 	case GN_PROFILE_CALLALERT_BeepOnce:	return _("Beep once");
583 	case GN_PROFILE_CALLALERT_Off:		return _("Off");
584 	case GN_PROFILE_CALLALERT_RingOnce:	return _("Ring once");
585 	case GN_PROFILE_CALLALERT_Ascending:	return _("Ascending");
586 	case GN_PROFILE_CALLALERT_CallerGroups:	return _("Caller groups");
587 	default:				return _("Unknown");
588 	}
589 }
590 
gn_profile_keyvol_type2str(gn_profile_keyvol_type p)591 GNOKII_API const char *gn_profile_keyvol_type2str(gn_profile_keyvol_type p)
592 {
593 	switch (p) {
594 	case GN_PROFILE_KEYVOL_Off:	return _("Off");
595 	case GN_PROFILE_KEYVOL_Level1:	return _("Level 1");
596 	case GN_PROFILE_KEYVOL_Level2:	return _("Level 2");
597 	case GN_PROFILE_KEYVOL_Level3:	return _("Level 3");
598 	default:			return _("Unknown");
599 	}
600 }
601 
gn_profile_volume_type2str(gn_profile_volume_type p)602 GNOKII_API const char *gn_profile_volume_type2str(gn_profile_volume_type p)
603 {
604 	switch (p) {
605 	case GN_PROFILE_VOLUME_Level1:	return _("Level 1");
606 	case GN_PROFILE_VOLUME_Level2:	return _("Level 2");
607 	case GN_PROFILE_VOLUME_Level3:	return _("Level 3");
608 	case GN_PROFILE_VOLUME_Level4:	return _("Level 4");
609 	case GN_PROFILE_VOLUME_Level5:	return _("Level 5");
610 	default:			return _("Unknown");
611 	}
612 }
613 
614 /* Call divert */
615 
gn_call_divert_type2str(gn_call_divert_type p)616 GNOKII_API const char *gn_call_divert_type2str(gn_call_divert_type p)
617 {
618 	switch (p) {
619 	case GN_CDV_Busy:		return _("Busy");
620 	case GN_CDV_NoAnswer:		return _("No answer");
621 	case GN_CDV_OutOfReach:		return _("Out of reach");
622 	case GN_CDV_NotAvailable:	return _("Not available");
623 	case GN_CDV_AllTypes:		return _("All");
624 	default:			return _("Unknown");
625 	}
626 }
627 
gn_call_divert_call_type2str(gn_call_divert_call_type p)628 GNOKII_API const char *gn_call_divert_call_type2str(gn_call_divert_call_type p)
629 {
630 	switch (p) {
631 	case GN_CDV_VoiceCalls:	return _("Voice");
632 	case GN_CDV_FaxCalls:	return _("Fax");
633 	case GN_CDV_DataCalls:	return _("Data");
634 	case GN_CDV_AllCalls:	return _("All");
635 	default:		return _("Unknown");
636 	}
637 }
638 
gn_call_divert_operation2str(gn_call_divert_operation p)639 GNOKII_API const char *gn_call_divert_operation2str(gn_call_divert_operation p)
640 {
641 	switch (p) {
642 	case GN_CDV_Disable:	return _("Disable");
643 	case GN_CDV_Enable:	return _("Enable");
644 	case GN_CDV_Query:	return _("Query");
645 	case GN_CDV_Register:	return _("Register");
646 	case GN_CDV_Erasure:	return _("Erasure");
647 	default:		return _("Unknown");
648 	}
649 }
650 
651 
652 /**
653  * gn_number_sanitize - Remove all white charactes from the string
654  * @number: input/output number string
655  * @maxlen: maximal number length
656  *
657  * Use this function to sanitize GSM phone number format. It changes
658  * number argument.
659  */
gn_number_sanitize(char * number,int maxlen)660 GNOKII_API void gn_number_sanitize(char *number, int maxlen)
661 {
662 	char *iter, *e;
663 
664 	iter = e = number;
665 	while (*iter && *e && (e - number < maxlen)) {
666 		*iter = *e;
667 		if (isspace(*iter)) {
668 			while (*e && isspace(*e) && (e - number < maxlen)) {
669 				e++;
670 			}
671 		}
672 		*iter = *e;
673 		iter++;
674 		e++;
675 	}
676 	*iter = 0;
677 }
678 
679 /**
680  * gn_phonebook_entry_sanitize - Remove all white charactes from the string
681  * @entry: phonebook entry to sanitize
682  *
683  * Use this function before any attempt to write an entry to the phone.
684  */
gn_phonebook_entry_sanitize(gn_phonebook_entry * entry)685 GNOKII_API void gn_phonebook_entry_sanitize(gn_phonebook_entry *entry)
686 {
687 	int i;
688 
689 	gn_number_sanitize(entry->number, GN_PHONEBOOK_NUMBER_MAX_LENGTH + 1);
690 	for (i = 0; i < entry->subentries_count; i++) {
691 		if (entry->subentries[i].entry_type == GN_PHONEBOOK_ENTRY_Number)
692 			gn_number_sanitize(entry->subentries[i].data.number, GN_PHONEBOOK_NUMBER_MAX_LENGTH + 1);
693 	}
694 }
695 
696 /*
697  * This very small function is just to make it easier to clear
698  * the data struct every time one is created
699  */
gn_data_clear(gn_data * data)700 GNOKII_API void gn_data_clear(gn_data *data)
701 {
702 	memset(data, 0, sizeof(gn_data));
703 }
704