+ GSM_Backup Backup;
+ GSM_PhonebookEntry pbk;
+
+ int confirm;
+ char ans[4];
+
+ int i,pos;
+
+ GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0};
+ GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0};
+
+ if (GSM_ReadBackupFile(argv[0], &Backup)!=GE_NONE) return 1;
+
+ fbusinit(NULL);
+
+ if (Backup.SIMPhonebookUsed!=0) {
+ confirm=-1;
+ while (confirm < 0) {
+ fprintf(stderr, _("Restore SIM phonebook ? "));
+ GetLine(stdin, ans, 99);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no" )) confirm = 0;
+ }
+ if (confirm==1) {
+ if (GSM->GetMemoryStatus(&SIMMemoryStatus) != GE_NONE) {
+ fprintf(stderr,_("Error getting memory status !\n"));
+ GSM->Terminate();
+ }
+ i=0;pos=1;
+
+ while ((pos-1)!=SIMMemoryStatus.Used+SIMMemoryStatus.Free) {
+ pbk.Location=pos;
+ pbk.MemoryType=GMT_SM;
+ pbk.Name[0]=0;
+ pbk.Number[0]=0;
+ pbk.SubEntriesCount = 0;
+ if (i<Backup.SIMPhonebookUsed) {
+ if (Backup.SIMPhonebook[i].Location==pbk.Location) {
+ pbk=Backup.SIMPhonebook[i];
+ i++;
+//#ifdef DEBUG
+// fprintf(stdout,_("Copying from backup\n"));
+//#endif
+ }
+ }
+//#ifdef DEBUG
+// fprintf(stdout,_("Setting location %i\n"),pbk.Location);
+//#endif
+ GSM->WritePhonebookLocation(&pbk);
+ fprintf(stderr,_("."));
+ pos++;
+ }
+ fprintf(stderr,_("\n"));
+ }
+ }
+ if (Backup.PhonePhonebookUsed!=0) {
+ confirm=-1;
+ while (confirm < 0) {
+ fprintf(stderr, _("Restore phone phonebook ? "));
+ GetLine(stdin, ans, 99);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no" )) confirm = 0;
+ }
+ if (confirm==1) {
+ if (GSM->GetMemoryStatus(&PhoneMemoryStatus) != GE_NONE) {
+ fprintf(stderr,_("Error getting memory status !\n"));
+ GSM->Terminate();
+ }
+
+ i=0;pos=1;
+
+ while ((pos-1)!=PhoneMemoryStatus.Used+PhoneMemoryStatus.Free) {
+ pbk.Location=pos;
+ pbk.MemoryType=GMT_ME;
+ pbk.Name[0]=0;
+ pbk.Number[0]=0;
+ pbk.SubEntriesCount = 0;
+ if (i<Backup.PhonePhonebookUsed) {
+ if (Backup.PhonePhonebook[i].Location==pbk.Location) {
+ pbk=Backup.PhonePhonebook[i];
+ i++;
+//#ifdef DEBUG
+// fprintf(stdout,_("Copying from backup\n"));
+//#endif
+ }
+ }
+//#ifdef DEBUG
+// fprintf(stdout,_("Setting location %i\n"),pbk.Location);
+//#endif
+ GSM->WritePhonebookLocation(&pbk);
+ fprintf(stderr,_("."));
+ pos++;
+ }
+ fprintf(stderr,_("\n"));
+ }
+ }
+ if (Backup.CallerAvailable==true) {
+ confirm=-1;
+ while (confirm < 0) {
+ fprintf(stderr, _("Restore caller groups ? "));
+ GetLine(stdin, ans, 99);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no" )) confirm = 0;
+ }
+ if (confirm==1) {
+ for (i=0;i<5;i++) GSM->SetBitmap(&Backup.CallerGroups[i]);
+ }
+ }
+ if (Backup.OperatorLogoAvailable==true) {
+ confirm=-1;
+ while (confirm < 0) {
+ fprintf(stderr, _("Restore operator logo ? "));
+ GetLine(stdin, ans, 99);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no" )) confirm = 0;
+ }
+ if (confirm==1) {
+ GSM->SetBitmap(&Backup.OperatorLogo);
+ }
+ }
+ if (Backup.StartupLogoAvailable==true) {
+ confirm=-1;
+ while (confirm < 0) {
+ fprintf(stderr, _("Restore startup logo ? "));
+ GetLine(stdin, ans, 99);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no" )) confirm = 0;
+ }
+ if (confirm==1) {
+ GSM->SetBitmap(&Backup.StartupLogo);
+ }
+ }
+
+ GSM->Terminate();
+