author | zautrix <zautrix> | 2004-10-10 16:00:04 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-10 16:00:04 (UTC) |
commit | ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a (patch) (side-by-side diff) | |
tree | 1d908bfc23b8a49d43a58bbeadd82c4e08faeff6 /gammu/emb | |
parent | 213a9d993e5a4751b64e18320cfbebb000681d13 (diff) | |
download | kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.zip kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.tar.gz kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.tar.bz2 |
many phone AB sync fixes
-rw-r--r-- | gammu/emb/common/service/gsmmisc.c | 4 | ||||
-rw-r--r-- | gammu/emb/common/service/gsmpbk.c | 17 | ||||
-rw-r--r-- | gammu/emb/gammu/gammu.c | 2 |
3 files changed, 12 insertions, 11 deletions
diff --git a/gammu/emb/common/service/gsmmisc.c b/gammu/emb/common/service/gsmmisc.c index 6959a22..1c6ec8b 100644 --- a/gammu/emb/common/service/gsmmisc.c +++ b/gammu/emb/common/service/gsmmisc.c @@ -109,154 +109,154 @@ static void GSM_JADFindLine(GSM_File File, char *Name, char *Value) while (Line[Pos] == 0x20) Pos++; strcpy(Value,Line+Pos); return; } } } GSM_Error GSM_JADFindData(GSM_File File, char *Vendor, char *Name, char *JAR, char *Version, int *Size) { char Size2[200]; GSM_JADFindLine(File, "MIDlet-Vendor:", Vendor); if (Vendor[0] == 0x00) return ERR_FILENOTSUPPORTED; dbgprintf("Vendor: \"%s\"\n",Vendor); GSM_JADFindLine(File, "MIDlet-Name:", Name); if (Name[0] == 0x00) return ERR_FILENOTSUPPORTED; dbgprintf("Name: \"%s\"\n",Name); GSM_JADFindLine(File, "MIDlet-Jar-URL:", JAR); if (JAR[0] == 0x00) return ERR_FILENOTSUPPORTED; dbgprintf("JAR file URL: \"%s\"\n",JAR); GSM_JADFindLine(File, "MIDlet-Jar-Size:", Size2); *Size = -1; if (Size2[0] == 0x00) return ERR_FILENOTSUPPORTED; dbgprintf("JAR size: \"%s\"\n",Size2); (*Size) = atoi(Size2); GSM_JADFindLine(File, "MIDlet-Version:", Version); dbgprintf("Version: \"%s\"\n",Version); return ERR_NONE; } void GSM_IdentifyFileFormat(GSM_File *File) { File->Type = GSM_File_Other; if (File->Used > 2) { if (memcmp(File->Buffer, "BM",2)==0) { File->Type = GSM_File_Image_BMP; } else if (memcmp(File->Buffer, "GIF",3)==0) { File->Type = GSM_File_Image_GIF; } else if (File->Buffer[0] == 0x00 && File->Buffer[1] == 0x00) { File->Type = GSM_File_Image_WBMP; } else if (memcmp(File->Buffer+1, "PNG",3)==0) { File->Type = GSM_File_Image_PNG; } else if (File->Buffer[0] == 0xFF && File->Buffer[1] == 0xD8) { File->Type = GSM_File_Image_JPG; } else if (memcmp(File->Buffer, "MThd",4)==0) { File->Type = GSM_File_Sound_MIDI; } else if (File->Buffer[0] == 0x00 && File->Buffer[1] == 0x02) { File->Type = GSM_File_Sound_NRT; } } } void SaveVCALDateTime(char *Buffer, int *Length, GSM_DateTime *Date, char *Start) { if (Start != NULL) { *Length+=sprintf(Buffer+(*Length), "%s:",Start); } *Length+=sprintf(Buffer+(*Length), "%04d%02d%02dT%02d%02d%02d%c%c", Date->Year, Date->Month, Date->Day, Date->Hour, Date->Minute, Date->Second,13,10); } void ReadVCALDateTime(char *Buffer, GSM_DateTime *dt) { char year[5]="", month[3]="", day[3]="", hour[3]="", minute[3]="", second[3]=""; memset(dt,0,sizeof(dt)); strncpy(year, Buffer, 4); strncpy(month, Buffer+4, 2); strncpy(day, Buffer+6, 2); strncpy(hour, Buffer+9, 2); strncpy(minute, Buffer+11, 2); strncpy(second, Buffer+13, 2); /* FIXME: Should check ranges... */ dt->Year = atoi(year); dt->Month = atoi(month); dt->Day = atoi(day); dt->Hour = atoi(hour); dt->Minute = atoi(minute); dt->Second = atoi(second); /* FIXME */ dt->Timezone = 0; } void SaveVCALText(char *Buffer, int *Length, char *Text, char *Start) { char buffer[1000]; if (UnicodeLength(Text) != 0) { - EncodeUTF8QuotedPrintable(buffer,Text); + EncodeUTF8(buffer,Text); if (UnicodeLength(Text)==strlen(buffer)) { *Length+=sprintf(Buffer+(*Length), "%s:%s%c%c",Start,DecodeUnicodeString(Text),13,10); } else { - *Length+=sprintf(Buffer+(*Length), "%s;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c",Start,buffer,13,10); + *Length+=sprintf(Buffer+(*Length), "%s:%s%c%c",Start,buffer,13,10); } } } bool ReadVCALText(char *Buffer, char *Start, char *Value) { unsigned char buff[200]; Value[0] = 0x00; Value[1] = 0x00; strcpy(buff,Start); strcat(buff,":"); if (!strncmp(Buffer,buff,strlen(buff))) { EncodeUnicode(Value,Buffer+strlen(Start)+1,strlen(Buffer)-(strlen(Start)+1)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } /* SE T68i */ strcpy(buff,Start); strcat(buff,";ENCODING=QUOTED-PRINTABLE:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8QuotedPrintable(Value,Buffer+strlen(Start)+27,strlen(Buffer)-(strlen(Start)+27)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8QuotedPrintable(Value,Buffer+strlen(Start)+41,strlen(Buffer)-(strlen(Start)+41)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-8:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8(Value,Buffer+strlen(Start)+15,strlen(Buffer)-(strlen(Start)+15)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-7:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF7(Value,Buffer+strlen(Start)+15,strlen(Buffer)-(strlen(Start)+15)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } return false; } /* How should editor hadle tabs in this file? Add editor commands here. * vim: noexpandtab sw=8 ts=8 sts=8: */ diff --git a/gammu/emb/common/service/gsmpbk.c b/gammu/emb/common/service/gsmpbk.c index 05e5cb9..f7cf7d7 100644 --- a/gammu/emb/common/service/gsmpbk.c +++ b/gammu/emb/common/service/gsmpbk.c @@ -38,240 +38,241 @@ unsigned char *GSM_PhonebookGetEntryName (GSM_MemoryEntry *entry) len = UnicodeLength(entry->Entries[last].Text); CopyUnicodeString(dest, entry->Entries[last].Text); CopyUnicodeString(dest + 2*len, split); CopyUnicodeString(dest + 2*len + 4, entry->Entries[first].Text); } else if (last != -1) { CopyUnicodeString(dest, entry->Entries[last].Text); } else if (first != -1) { CopyUnicodeString(dest, entry->Entries[first].Text); } else { return NULL; } } return dest; } void GSM_PhonebookFindDefaultNameNumberGroup(GSM_MemoryEntry *entry, int *Name, int *Number, int *Group) { int i; *Name = -1; *Number = -1; *Group = -1; for (i = 0; i < entry->EntriesNum; i++) { switch (entry->Entries[i].EntryType) { case PBK_Number_General : if (*Number == -1) *Number = i; break; case PBK_Text_Name : if (*Name == -1) *Name = i; break; case PBK_Caller_Group : if (*Group == -1) *Group = i; break; default : break; } } if ((*Number) == -1) { for (i = 0; i < entry->EntriesNum; i++) { switch (entry->Entries[i].EntryType) { case PBK_Number_Mobile: case PBK_Number_Work: case PBK_Number_Fax: case PBK_Number_Home: case PBK_Number_Pager: case PBK_Number_Other: *Number = i; break; default: break; } if (*Number != -1) break; } } if ((*Name) == -1) { for (i = 0; i < entry->EntriesNum; i++) { if (entry->Entries[i].EntryType != PBK_Text_LastName) continue; *Name = i; break; } } if ((*Name) == -1) { for (i = 0; i < entry->EntriesNum; i++) { if (entry->Entries[i].EntryType != PBK_Text_FirstName) continue; *Name = i; break; } } } void GSM_EncodeVCARD(char *Buffer, int *Length, GSM_MemoryEntry *pbk, bool header, GSM_VCardVersion Version) { int Name, Number, Group, i; bool ignore; GSM_PhonebookFindDefaultNameNumberGroup(pbk, &Name, &Number, &Group); if (Version == Nokia_VCard10) { if (header) *Length+=sprintf(Buffer+(*Length),"BEGIN:VCARD%c%c",13,10); if (Name != -1) { *Length+=sprintf(Buffer+(*Length),"N:%s%c%c",DecodeUnicodeString(pbk->Entries[Name].Text),13,10); } if (Number != -1) { *Length +=sprintf(Buffer+(*Length),"TEL:%s%c%c",DecodeUnicodeString(pbk->Entries[Number].Text),13,10); } if (header) *Length+=sprintf(Buffer+(*Length),"END:VCARD%c%c",13,10); } else if (Version == Nokia_VCard21) { if (header) *Length+=sprintf(Buffer+(*Length),"BEGIN:VCARD%c%cVERSION:2.1%c%c",13,10,13,10); if (Name != -1) { SaveVCALText(Buffer, Length, pbk->Entries[Name].Text, "N"); } for (i=0; i < pbk->EntriesNum; i++) { if (i != Name) { ignore = false; switch(pbk->Entries[i].EntryType) { case PBK_Text_Name : case PBK_Date : case PBK_Caller_Group : ignore = true; break; case PBK_Number_General : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + (*Length)+=sprintf(Buffer+(*Length),";PREF"); break; case PBK_Number_Mobile : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); *Length+=sprintf(Buffer+(*Length),";CELL"); break; case PBK_Number_Work : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); - *Length+=sprintf(Buffer+(*Length),";WORK;VOICE"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + *Length+=sprintf(Buffer+(*Length),";WORK"); break; case PBK_Number_Fax : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); *Length+=sprintf(Buffer+(*Length),";FAX"); break; case PBK_Number_Home : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); - *Length+=sprintf(Buffer+(*Length),";HOME;VOICE"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + *Length+=sprintf(Buffer+(*Length),";HOME"); break; case PBK_Text_Note : *Length+=sprintf(Buffer+(*Length),"NOTE"); break; case PBK_Text_Postal : /* Don't ask why. Nokia phones save postal address * double - once like LABEL, second like ADR */ - SaveVCALText(Buffer, Length, pbk->Entries[i].Text, "LABEL"); + //SaveVCALText(Buffer, Length, pbk->Entries[i].Text, "LABEL"); *Length+=sprintf(Buffer+(*Length),"ADR"); break; case PBK_Text_Email : case PBK_Text_Email2 : *Length+=sprintf(Buffer+(*Length),"EMAIL"); break; case PBK_Text_URL : *Length+=sprintf(Buffer+(*Length),"URL"); break; default : ignore = true; break; } if (!ignore) { SaveVCALText(Buffer, Length, pbk->Entries[i].Text, ""); } } } + *Length+=sprintf(Buffer+(*Length), "X-KADDRESSBOOK-X-ExternalID:%d%c%c",pbk->Location,13,10); if (header) *Length+=sprintf(Buffer+(*Length),"END:VCARD%c%c",13,10); } } GSM_Error GSM_DecodeVCARD(unsigned char *Buffer, int *Pos, GSM_MemoryEntry *Pbk, GSM_VCardVersion Version) { unsigned char Line[2000],Buff[2000]; int Level = 0; Buff[0] = 0; Pbk->EntriesNum = 0; while (1) { MyGetLine(Buffer, Pos, Line, strlen(Buffer)); if (strlen(Line) == 0) break; switch (Level) { case 0: if (strstr(Line,"BEGIN:VCARD")) Level = 1; break; case 1: if (strstr(Line,"END:VCARD")) { if (Pbk->EntriesNum == 0) return ERR_EMPTY; return ERR_NONE; } if (ReadVCALText(Line, "N", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_Name; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL", Buff) || ReadVCALText(Line, "TEL;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF", Buff) || ReadVCALText(Line, "TEL;PREF;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_General; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;CELL", Buff) || ReadVCALText(Line, "TEL;CELL;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF;CELL", Buff) || ReadVCALText(Line, "TEL;PREF;CELL;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Mobile; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;WORK", Buff) || ReadVCALText(Line, "TEL;PREF;WORK", Buff) || ReadVCALText(Line, "TEL;WORK;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF;WORK;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Work; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;FAX", Buff) || ReadVCALText(Line, "TEL;PREF;FAX", Buff) || ReadVCALText(Line, "TEL;FAX;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF;FAX;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Fax; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;HOME", Buff) || ReadVCALText(Line, "TEL;PREF;HOME", Buff) || ReadVCALText(Line, "TEL;HOME;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF;HOME;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Home; Pbk->EntriesNum++; } if (ReadVCALText(Line, "NOTE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_Note; Pbk->EntriesNum++; } if (ReadVCALText(Line, "ADR", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_Postal; Pbk->EntriesNum++; } if (ReadVCALText(Line, "EMAIL", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_Email; Pbk->EntriesNum++; } if (ReadVCALText(Line, "URL", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_URL; Pbk->EntriesNum++; } break; } } if (Pbk->EntriesNum == 0) return ERR_EMPTY; return ERR_NONE; } diff --git a/gammu/emb/gammu/gammu.c b/gammu/emb/gammu/gammu.c index 8db9afb..684e67c 100644 --- a/gammu/emb/gammu/gammu.c +++ b/gammu/emb/gammu/gammu.c @@ -4593,193 +4593,193 @@ static void Backup(int argc, char *argv[]) printmsgerr("\n"); } DoBackup = false; if (Info.GPRSPoint) { printmsg("Checking GPRS access points\n"); GPRSPoint.Location = 1; error = Phone->GetGPRSAccessPoint(&s,&GPRSPoint); if (error == ERR_NONE || error == ERR_EMPTY) { if (answer_yes(" Backup GPRS access points")) DoBackup = true; } } if (DoBackup) { used = 0; i = 1; printmsgerr(" Reading: "); while (error == ERR_NONE || error == ERR_EMPTY) { error = Phone->GetGPRSAccessPoint(&s,&GPRSPoint); if (error == ERR_NONE) { if (used < GSM_BACKUP_MAX_GPRSPOINT) { Backup.GPRSPoint[used] = malloc(sizeof(GSM_GPRSAccessPoint)); if (Backup.GPRSPoint[used] == NULL) Print_Error(ERR_MOREMEMORY); Backup.GPRSPoint[used + 1] = NULL; } else { printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_GPRSPOINT"); GSM_Terminate(); exit(-1); } *Backup.GPRSPoint[used]=GPRSPoint; used++; } i++; GPRSPoint.Location = i; printmsgerr("*"); } printmsgerr("\n"); } GSM_Terminate(); GSM_SaveBackupFile(argv[2],&Backup, Info.UseUnicode); GSM_FreeBackup(&Backup); } static void Restore(int argc, char *argv[]) { GSM_Backup Backup; GSM_FMStation FMStation; GSM_DateTime date_time; GSM_CalendarEntry Calendar; GSM_Bitmap Bitmap; GSM_Ringtone Ringtone; GSM_MemoryEntry Pbk; GSM_MemoryStatus MemStatus; GSM_ToDoEntry ToDo; GSM_ToDoStatus ToDoStatus; GSM_Profile Profile; GSM_MultiWAPSettings Settings; GSM_GPRSAccessPoint GPRSPoint; GSM_WAPBookmark Bookmark; int i, used, max = 0; bool Past = true; bool Found, DoRestore; error=GSM_ReadBackupFile(argv[2],&Backup); if (error!=ERR_NOTIMPLEMENTED) { Print_Error(error); } else { printmsgerr("WARNING: Some data not read from file. It can be damaged or restoring some settings from this file format not implemented (maybe higher Gammu required ?)\n"); } signal(SIGINT, interrupt); printmsgerr("Press Ctrl+C to break...\n"); if (Backup.DateTimeAvailable) printmsgerr("Time of backup : %s\n",OSDateTime(Backup.DateTime,false)); if (Backup.Model[0]!=0) printmsgerr("Phone : %s\n",Backup.Model); if (Backup.IMEI[0]!=0) printmsgerr("IMEI : %s\n",Backup.IMEI); if (Backup.Creator[0]!=0) printmsgerr("File created by : %s\n",Backup.Creator); if (Backup.MD5Calculated[0]!=0) { dbgprintf("\"%s\"\n",Backup.MD5Original); dbgprintf("\"%s\"\n",Backup.MD5Calculated); if (strcmp(Backup.MD5Original,Backup.MD5Calculated)) { if (!answer_yes("Checksum in backup file do not match. Continue")) return; } } GSM_Init(true); DoRestore = false; if (Backup.PhonePhonebook[0] != NULL) { MemStatus.MemoryType = MEM_ME; error=Phone->GetMemoryStatus(&s, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.PhonePhonebook[max]!=NULL) max++; printmsgerr("%i entries in backup file\n",max); - if (answer_yes("Restore phone phonebook")) DoRestore = true; + /* LR if (answer_yes("Restore phone phonebook")) */DoRestore = true; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_ME; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max) { if (Backup.PhonePhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.PhonePhonebook[used]; used++; dbgprintf("Location %i\n",Pbk.Location); if (Pbk.EntriesNum != 0) error=Phone->SetMemory(&s, &Pbk); } } if (Pbk.EntriesNum == 0) error=Phone->DeleteMemory(&s, &Pbk); Print_Error(error); printmsgerr("%cWriting: %i percent",13,(i+1)*100/(MemStatus.MemoryUsed+MemStatus.MemoryFree)); if (gshutdown) { GSM_Terminate(); exit(0); } } printmsgerr("\n"); } DoRestore = false; if (Backup.SIMPhonebook[0] != NULL) { MemStatus.MemoryType = MEM_SM; error=Phone->GetMemoryStatus(&s, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.SIMPhonebook[max]!=NULL) max++; printmsgerr("%i entries in backup file\n",max); if (answer_yes("Restore SIM phonebook")) DoRestore = true; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_SM; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max) { if (Backup.SIMPhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.SIMPhonebook[used]; used++; dbgprintf("Location %i\n",Pbk.Location); if (Pbk.EntriesNum != 0) error=Phone->SetMemory(&s, &Pbk); } } if (Pbk.EntriesNum == 0) error=Phone->DeleteMemory(&s, &Pbk); Print_Error(error); printmsgerr("%cWriting: %i percent",13,(i+1)*100/(MemStatus.MemoryUsed+MemStatus.MemoryFree)); if (gshutdown) { GSM_Terminate(); exit(0); } } printmsgerr("\n"); } DoRestore = false; if (Backup.CallerLogos[0] != NULL) { Bitmap.Type = GSM_CallerGroupLogo; Bitmap.Location = 1; error=Phone->GetBitmap(&s,&Bitmap); if (error == ERR_NONE) { if (answer_yes("Restore caller groups and logos")) DoRestore = true; } } if (DoRestore) { max = 0; while (Backup.CallerLogos[max]!=NULL) max++; for (i=0;i<max;i++) { error=Phone->SetBitmap(&s,Backup.CallerLogos[i]); Print_Error(error); printmsgerr("%cWriting: %i percent",13,(i+1)*100/max); if (gshutdown) { GSM_Terminate(); exit(0); } } printmsgerr("\n"); } if (!mystrncasecmp(s.CurrentConfig->SyncTime,"yes",0)) { if ( true /*LRanswer_yes("Do you want to set date/time in phone (NOTE: in some phones it's required to correctly restore calendar notes and other items)")*/) { GSM_GetCurrentDateTime(&date_time); error=Phone->SetDateTime(&s, &date_time); Print_Error(error); } } DoRestore = false; |