summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-08 22:22:02 (UTC)
committer zautrix <zautrix>2004-10-08 22:22:02 (UTC)
commit44169895703beb3e8b1551a313d2d341bf742905 (patch) (side-by-side diff)
tree4e337f9b55d544a939185dbcdbad558b1ed2504d
parent10a0e05cc4962d9412a7a5faf3d69a3caf6d1c34 (diff)
downloadkdepimpi-44169895703beb3e8b1551a313d2d341bf742905.zip
kdepimpi-44169895703beb3e8b1551a313d2d341bf742905.tar.gz
kdepimpi-44169895703beb3e8b1551a313d2d341bf742905.tar.bz2
gammu changes
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--Makefile7
-rw-r--r--Makefile.Embedded2
-rw-r--r--bin/kdepim/korganizer/howtoSYNC.txt2
-rw-r--r--gammu/emb/gammu/gammu.c2
-rw-r--r--phoneaccess.control (renamed from kammu.control)0
5 files changed, 7 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 1adfb2c..0b8997e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,329 +1,330 @@
export KDEPIMDIR = $(shell pwd)
export KDEPIM_VERSION=$(shell sed -e 's/.*\"\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/' < version)
ifeq ($(PLATFORM) , zaurus)
BUILD_NO_LDAP_PLUGIN=1
endif
ifneq ($(PLATFORM) , zaurus)
BUILD_NO_SHARP_PLUGIN=1
endif
SUBDIRS_MICROKDE = \
libical/src/libical \
libical/src/libicalss \
qtcompat \
microkde \
libkcal \
libkdepim \
kabc \
kabc/formats/binary \
kabc/plugins/file \
kabc/plugins/dir \
korganizer \
kalarmd \
kaddressbook
SUBDIRS_QTOPIA_PLUGIN = \
kabc/plugins/qtopia
SUBDIRS_OPIE_PLUGIN = \
kabc/plugins/opie
SUBDIRS_SHARP_PLUGIN = \
kabc/plugins/sharpdtm
SUBDIRS_LDAP_PLUGIN = \
kabc/plugins/ldap
SUBDIRS_MICROMAIL = \
kmicromail/libetpan \
kmicromail/libmailwrapper \
kmicromail
SUBDIRS_GAMMU = \
gammu/emb/common \
gammu/emb/gammu
SUBDIRS_PWMANAGER = \
pwmanager/pwmanager
SUBDIRS = \
$(SUBDIRS_MICROKDE) \
$(SUBDIRS_QTOPIA_PLUGIN) \
$(SUBDIRS_OPIE_PLUGIN) \
$(SUBDIRS_SHARP_PLUGIN) \
$(SUBDIRS_LDAP_PLUGIN) \
$(SUBDIRS_MICROMAIL) \
$(SUBDIRS_GAMMU) \
$(SUBDIRS_PWMANAGER)
+
all: build_microkde \
build_qtopia_plugin \
build_opie_plugin \
build_sharp_plugin \
build_ldap_plugin \
build_micromail \
build_gammu \
build_pwmanager
build_microkde: variable_test tmake
for i in $(SUBDIRS_MICROKDE); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
build_qtopia_plugin: build_microkde
for i in $(SUBDIRS_QTOPIA_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
build_opie_plugin: build_microkde
ifdef BUILD_NO_OPIE_PLUGIN
@echo == opie plugin not build.
else
for i in $(SUBDIRS_OPIE_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_sharp_plugin: build_microkde
ifdef BUILD_NO_SHARP_PLUGIN
@echo == ldap plugin not build.
else
for i in $(SUBDIRS_SHARP_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_ldap_plugin: build_microkde
ifdef BUILD_NO_LDAP_PLUGIN
@echo == ldap plugin not build.
else
for i in $(SUBDIRS_LDAP_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_micromail: build_microkde
ifdef BUILD_NO_MICROMAIL
@echo == kmicromail not build.
else
for i in $(SUBDIRS_MICROMAIL); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_gammu: variable_test tmake
ifdef BUILD_NO_GAMMU
@echo == gammu not build.
else
for i in $(SUBDIRS_GAMMU); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_pwmanager: build_microkde
ifdef BUILD_NO_PWMANAGER
@echo == pwmanager not build.
else
for i in $(SUBDIRS_PWMANAGER); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
variable_info:
@echo --------------------------------------
@echo KDEPIM buildsystem, variableinfo...
@echo KDEPIMDIR=$(KDEPIMDIR)
@echo QTDIR=$(QTDIR)
@echo QPEDIR=$(QPEDIR)
@echo OPIEDIR=$(OPIEDIR)
@echo PLATFORM=$(PLATFORM)
@echo RELEASE_DEBUG=$(RELEASE_DEBUG)
@echo BUILD_NO_MICROMAIL=$(BUILD_NO_MICROMAIL)
@echo BUILD_NO_LDAP_PLUGIN=$(BUILD_NO_LDAP_PLUGIN)
@echo BUILD_NO_OPIE_PLUGIN=$(BUILD_NO_OPIE_PLUGIN)
@echo BUILD_NO_SHARP_PLUGIN=$(BUILD_NO_SHARP_PLUGIN)
ifndef BUILD_NO_SHARP_PLUGIN
@echo SHARPDTMSDK=$(SHARPDTMSDK)
endif
@echo BUILD_NO_GAMMU=$(BUILD_NO_GAMMU)
@echo BUILD_NO_PWMANAGER=$(BUILD_NO_PWMANAGER)
@echo --------------------------------------
variable_test: variable_info
@echo KDEPIM buildsystem, variablecheck...
ifndef KDEPIMDIR
@echo KDEPIMDIR is not defined.
$(error KDEPIMDIR is not defined)
endif
ifndef PLATFORM
@echo PLATFORM is not defined.
$(error PLATFORM is not defined)
endif
ifdef BUILD_NO_LDAP_PLUGIN
@echo LDAP PLUGIN will not be build, because BUILD_NO_LDAP_PLUGIN is set to $(BUILD_NO_LDAP_PLUGIN)
endif
ifdef BUILD_NO_OPIE_PLUGIN
@echo OPIE PLUGIN will not be build, because BUILD_NO_OPIE_PLUGIN is set to $(BUILD_NO_OPIE_PLUGIN)
endif
ifdef BUILD_NO_MICROMAIL
@echo MICROMAIL will not be build, because BUILD_NO_MICROMAIL is set to $(BUILD_NO_MICROMAIL)
endif
ifdef BUILD_NO_SHARP_PLUGIN
@echo SHARP PLUGIN will not be build, because BUILD_NO_SHARP_PLUGIN is set to $(BUILD_NO_SHARP_PLUGIN)
else
ifndef SHARPDTMSDK
@echo SHARP PLUGIN can not be build, because SHARPDTMSDK is set to $(SHARPDTMSDK)
$(error SHARPDTMSDK is not defined)
endif
endif
ifdef BUILD_NO_GAMMU
@echo GAMMU will not be build, because BUILD_NO_GAMMU is set to $(BUILD_NO_GAMMU)
endif
ifdef BUILD_NO_PWMANAGER
@echo PWMANAGER will not be build, because BUILD_NO_PWMANAGER is set to $(BUILD_NO_PWMANAGER)
endif
@echo --------------------------------------
objects:
for i in $(SUBDIRS); do mkdir -p $$i/obj/$(PLATFORM); done
for i in $(SUBDIRS); do mkdir -p $$i/moc/$(PLATFORM); done
mkdir -p libical/lib/$(PLATFORM)
clean:
rm -rf libical/lib/$(PLATFORM)/*;
for i in $(SUBDIRS); do pushd $$i; make clean; rm -f *~;\
rm -f obj/$(PLATFORM)/*; rm -f moc/$(PLATFORM)/*; rm Makefile$(PLATFORM); popd; \
done
+
install:
cd bin/kdepim; make install
cp -r Pim $(QPEDIR)/apps
cp db2file/db2file $(QPEDIR)/bin/db2file
cp korganizer/korganizer.desktop $(QPEDIR)/apps/Pim/korganizer.desktop
cp kaddressbook/kaddressbook.desktop $(QPEDIR)/apps/Pim/kaddressbook.desktop
cp kmicromail/kmicromail.desktop $(QPEDIR)/apps/Pim/kopiemail.desktop
cp pwmanager/pwmanager/pwmanager.desktop $(QPEDIR)/apps/Pim/pwmanager.desktop
dist:
@echo Dont forget to do "make install" before "make dist"
rm -f *arm.ipk
rm -f *~
cd ..; tar czf kdepim.src.tar.gz --exclude=obj --exclude=moc --exclude=CVS --exclude=Makefilezaurus --exclude=Makefileqtopia kdepim
./mkipks kmicrokdelibs.control
./mkipks korganizer.control
./mkipks kaddressbook.control
ifndef BUILD_NO_MICROMAIL
./mkipks kopiemail.control
endif
./mkipks korganizer-alarm.control
ifndef BUILD_NO_GAMMU
- ./mkipks kammu.control
+ ./mkipks phoneaccess.control
endif
ifndef BUILD_NO_PWMANAGER
./mkipks pwmanager.control
endif
./mkipks pim_TAB_icon.control
tmake: objects \
qtcompat/Makefile$(PLATFORM) \
microkde/Makefile$(PLATFORM) \
libkcal/Makefile$(PLATFORM) \
libkdepim/Makefile$(PLATFORM) \
korganizer/Makefile$(PLATFORM) \
kalarmd/Makefile$(PLATFORM) \
libical/src/libical/Makefile$(PLATFORM) \
libical/src/libicalss/Makefile$(PLATFORM) \
kabc/Makefile$(PLATFORM) \
kabc/formats/binary/Makefile$(PLATFORM) \
kabc/plugins/file/Makefile$(PLATFORM) \
kabc/plugins/dir/Makefile$(PLATFORM) \
kabc/plugins/ldap/Makefile$(PLATFORM) \
kabc/plugins/opie/Makefile$(PLATFORM) \
kabc/plugins/qtopia/Makefile$(PLATFORM) \
kabc/plugins/sharpdtm/Makefile$(PLATFORM) \
kaddressbook/Makefile$(PLATFORM) \
kmicromail/Makefile$(PLATFORM) \
kmicromail/libetpan/Makefile$(PLATFORM) \
kmicromail/libmailwrapper/Makefile$(PLATFORM) \
gammu/emb/common/Makefile$(PLATFORM) \
gammu/emb/gammu/Makefile$(PLATFORM) \
pwmanager/pwmanager/Makefile$(PLATFORM) \
-
-
qtcompat/Makefile$(PLATFORM): qtcompat/qtcompat.pro
cd qtcompat; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" qtcompat.pro -o Makefile$(PLATFORM)
microkde/Makefile$(PLATFORM): microkde/microkdeE.pro
cd microkde; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" microkdeE.pro -o Makefile$(PLATFORM)
libkcal/Makefile$(PLATFORM): libkcal/libkcalE.pro
cd libkcal; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libkcalE.pro -o Makefile$(PLATFORM)
libkdepim/Makefile$(PLATFORM): libkdepim/libkdepimE.pro
cd libkdepim; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libkdepimE.pro -o Makefile$(PLATFORM)
kalarmd/Makefile$(PLATFORM): kalarmd/kalarmdE.pro
cd kalarmd; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kalarmdE.pro -o Makefile$(PLATFORM)
korganizer/Makefile$(PLATFORM): korganizer/korganizerE.pro
cd korganizer; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" korganizerE.pro -o Makefile$(PLATFORM)
libical/src/libical/Makefile$(PLATFORM): libical/src/libical/libicalE.pro
cd libical/src/libical; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libicalE.pro -o Makefile$(PLATFORM)
libical/src/libicalss/Makefile$(PLATFORM): libical/src/libicalss/libicalssE.pro
cd libical/src/libicalss; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libicalssE.pro -o Makefile$(PLATFORM)
kabc/Makefile$(PLATFORM): kabc/kabcE.pro
cd kabc; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kabcE.pro -o Makefile$(PLATFORM)
kabc/formats/binary/Makefile$(PLATFORM): kabc/formats/binary/kabcformat_binaryE.pro
cd kabc/formats/binary; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kabcformat_binaryE.pro -o Makefile$(PLATFORM)
kabc/plugins/file/Makefile$(PLATFORM): kabc/plugins/file/fileE.pro
cd kabc/plugins/file; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" fileE.pro -o Makefile$(PLATFORM)
kabc/plugins/dir/Makefile$(PLATFORM): kabc/plugins/dir/dirE.pro
cd kabc/plugins/dir; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" dirE.pro -o Makefile$(PLATFORM)
kabc/plugins/ldap/Makefile$(PLATFORM): kabc/plugins/ldap/ldapE.pro
cd kabc/plugins/ldap; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" ldapE.pro -o Makefile$(PLATFORM)
kabc/plugins/opie/Makefile$(PLATFORM): kabc/plugins/opie/opieE.pro
cd kabc/plugins/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" opieE.pro -o Makefile$(PLATFORM)
kabc/plugins/qtopia/Makefile$(PLATFORM): kabc/plugins/qtopia/qtopiaE.pro
cd kabc/plugins/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" qtopiaE.pro -o Makefile$(PLATFORM)
kabc/plugins/sharpdtm/Makefile$(PLATFORM): kabc/plugins/sharpdtm/sharpdtmE.pro
cd kabc/plugins/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" sharpdtmE.pro -o Makefile$(PLATFORM)
kaddressbook/Makefile$(PLATFORM): kaddressbook/kaddressbookE.pro
cd kaddressbook; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kaddressbookE.pro -o Makefile$(PLATFORM)
kmicromail/Makefile$(PLATFORM): kmicromail/kmicromailE.pro
cd kmicromail; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kmicromailE.pro -o Makefile$(PLATFORM)
kmicromail/libetpan/Makefile$(PLATFORM): kmicromail/libetpan/libetpanE.pro
cd kmicromail/libetpan; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libetpanE.pro -o Makefile$(PLATFORM)
kmicromail/libmailwrapper/Makefile$(PLATFORM): kmicromail/libmailwrapper/libmailwrapperE.pro
cd kmicromail/libmailwrapper; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libmailwrapperE.pro -o Makefile$(PLATFORM)
gammu/emb/common/Makefile$(PLATFORM): gammu/emb/common/commonE.pro
cd gammu/emb/common; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" commonE.pro -o Makefile$(PLATFORM)
gammu/emb/gammu/Makefile$(PLATFORM): gammu/emb/gammu/gammuE.pro
cd gammu/emb/gammu; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" gammuE.pro -o Makefile$(PLATFORM)
pwmanager/pwmanager/Makefile$(PLATFORM): pwmanager/pwmanager/pwmanagerE.pro
cd pwmanager/pwmanager; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" pwmanagerE.pro -o Makefile$(PLATFORM)
+
diff --git a/Makefile.Embedded b/Makefile.Embedded
index 2e1651c..0b8997e 100644
--- a/Makefile.Embedded
+++ b/Makefile.Embedded
@@ -1,330 +1,330 @@
export KDEPIMDIR = $(shell pwd)
export KDEPIM_VERSION=$(shell sed -e 's/.*\"\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/' < version)
ifeq ($(PLATFORM) , zaurus)
BUILD_NO_LDAP_PLUGIN=1
endif
ifneq ($(PLATFORM) , zaurus)
BUILD_NO_SHARP_PLUGIN=1
endif
SUBDIRS_MICROKDE = \
libical/src/libical \
libical/src/libicalss \
qtcompat \
microkde \
libkcal \
libkdepim \
kabc \
kabc/formats/binary \
kabc/plugins/file \
kabc/plugins/dir \
korganizer \
kalarmd \
kaddressbook
SUBDIRS_QTOPIA_PLUGIN = \
kabc/plugins/qtopia
SUBDIRS_OPIE_PLUGIN = \
kabc/plugins/opie
SUBDIRS_SHARP_PLUGIN = \
kabc/plugins/sharpdtm
SUBDIRS_LDAP_PLUGIN = \
kabc/plugins/ldap
SUBDIRS_MICROMAIL = \
kmicromail/libetpan \
kmicromail/libmailwrapper \
kmicromail
SUBDIRS_GAMMU = \
gammu/emb/common \
gammu/emb/gammu
SUBDIRS_PWMANAGER = \
pwmanager/pwmanager
SUBDIRS = \
$(SUBDIRS_MICROKDE) \
$(SUBDIRS_QTOPIA_PLUGIN) \
$(SUBDIRS_OPIE_PLUGIN) \
$(SUBDIRS_SHARP_PLUGIN) \
$(SUBDIRS_LDAP_PLUGIN) \
$(SUBDIRS_MICROMAIL) \
$(SUBDIRS_GAMMU) \
$(SUBDIRS_PWMANAGER)
all: build_microkde \
build_qtopia_plugin \
build_opie_plugin \
build_sharp_plugin \
build_ldap_plugin \
build_micromail \
build_gammu \
build_pwmanager
build_microkde: variable_test tmake
for i in $(SUBDIRS_MICROKDE); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
build_qtopia_plugin: build_microkde
for i in $(SUBDIRS_QTOPIA_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
build_opie_plugin: build_microkde
ifdef BUILD_NO_OPIE_PLUGIN
@echo == opie plugin not build.
else
for i in $(SUBDIRS_OPIE_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_sharp_plugin: build_microkde
ifdef BUILD_NO_SHARP_PLUGIN
@echo == ldap plugin not build.
else
for i in $(SUBDIRS_SHARP_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_ldap_plugin: build_microkde
ifdef BUILD_NO_LDAP_PLUGIN
@echo == ldap plugin not build.
else
for i in $(SUBDIRS_LDAP_PLUGIN); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_micromail: build_microkde
ifdef BUILD_NO_MICROMAIL
@echo == kmicromail not build.
else
for i in $(SUBDIRS_MICROMAIL); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_gammu: variable_test tmake
ifdef BUILD_NO_GAMMU
@echo == gammu not build.
else
for i in $(SUBDIRS_GAMMU); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
build_pwmanager: build_microkde
ifdef BUILD_NO_PWMANAGER
@echo == pwmanager not build.
else
for i in $(SUBDIRS_PWMANAGER); do pushd $$i; \
make -f Makefile$(PLATFORM) || exit 1; popd; \
done
endif
variable_info:
@echo --------------------------------------
@echo KDEPIM buildsystem, variableinfo...
@echo KDEPIMDIR=$(KDEPIMDIR)
@echo QTDIR=$(QTDIR)
@echo QPEDIR=$(QPEDIR)
@echo OPIEDIR=$(OPIEDIR)
@echo PLATFORM=$(PLATFORM)
@echo RELEASE_DEBUG=$(RELEASE_DEBUG)
@echo BUILD_NO_MICROMAIL=$(BUILD_NO_MICROMAIL)
@echo BUILD_NO_LDAP_PLUGIN=$(BUILD_NO_LDAP_PLUGIN)
@echo BUILD_NO_OPIE_PLUGIN=$(BUILD_NO_OPIE_PLUGIN)
@echo BUILD_NO_SHARP_PLUGIN=$(BUILD_NO_SHARP_PLUGIN)
ifndef BUILD_NO_SHARP_PLUGIN
@echo SHARPDTMSDK=$(SHARPDTMSDK)
endif
@echo BUILD_NO_GAMMU=$(BUILD_NO_GAMMU)
@echo BUILD_NO_PWMANAGER=$(BUILD_NO_PWMANAGER)
@echo --------------------------------------
variable_test: variable_info
@echo KDEPIM buildsystem, variablecheck...
ifndef KDEPIMDIR
@echo KDEPIMDIR is not defined.
$(error KDEPIMDIR is not defined)
endif
ifndef PLATFORM
@echo PLATFORM is not defined.
$(error PLATFORM is not defined)
endif
ifdef BUILD_NO_LDAP_PLUGIN
@echo LDAP PLUGIN will not be build, because BUILD_NO_LDAP_PLUGIN is set to $(BUILD_NO_LDAP_PLUGIN)
endif
ifdef BUILD_NO_OPIE_PLUGIN
@echo OPIE PLUGIN will not be build, because BUILD_NO_OPIE_PLUGIN is set to $(BUILD_NO_OPIE_PLUGIN)
endif
ifdef BUILD_NO_MICROMAIL
@echo MICROMAIL will not be build, because BUILD_NO_MICROMAIL is set to $(BUILD_NO_MICROMAIL)
endif
ifdef BUILD_NO_SHARP_PLUGIN
@echo SHARP PLUGIN will not be build, because BUILD_NO_SHARP_PLUGIN is set to $(BUILD_NO_SHARP_PLUGIN)
else
ifndef SHARPDTMSDK
@echo SHARP PLUGIN can not be build, because SHARPDTMSDK is set to $(SHARPDTMSDK)
$(error SHARPDTMSDK is not defined)
endif
endif
ifdef BUILD_NO_GAMMU
@echo GAMMU will not be build, because BUILD_NO_GAMMU is set to $(BUILD_NO_GAMMU)
endif
ifdef BUILD_NO_PWMANAGER
@echo PWMANAGER will not be build, because BUILD_NO_PWMANAGER is set to $(BUILD_NO_PWMANAGER)
endif
@echo --------------------------------------
objects:
for i in $(SUBDIRS); do mkdir -p $$i/obj/$(PLATFORM); done
for i in $(SUBDIRS); do mkdir -p $$i/moc/$(PLATFORM); done
mkdir -p libical/lib/$(PLATFORM)
clean:
rm -rf libical/lib/$(PLATFORM)/*;
for i in $(SUBDIRS); do pushd $$i; make clean; rm -f *~;\
rm -f obj/$(PLATFORM)/*; rm -f moc/$(PLATFORM)/*; rm Makefile$(PLATFORM); popd; \
done
install:
cd bin/kdepim; make install
cp -r Pim $(QPEDIR)/apps
cp db2file/db2file $(QPEDIR)/bin/db2file
cp korganizer/korganizer.desktop $(QPEDIR)/apps/Pim/korganizer.desktop
cp kaddressbook/kaddressbook.desktop $(QPEDIR)/apps/Pim/kaddressbook.desktop
cp kmicromail/kmicromail.desktop $(QPEDIR)/apps/Pim/kopiemail.desktop
cp pwmanager/pwmanager/pwmanager.desktop $(QPEDIR)/apps/Pim/pwmanager.desktop
dist:
@echo Dont forget to do "make install" before "make dist"
rm -f *arm.ipk
rm -f *~
cd ..; tar czf kdepim.src.tar.gz --exclude=obj --exclude=moc --exclude=CVS --exclude=Makefilezaurus --exclude=Makefileqtopia kdepim
./mkipks kmicrokdelibs.control
./mkipks korganizer.control
./mkipks kaddressbook.control
ifndef BUILD_NO_MICROMAIL
./mkipks kopiemail.control
endif
./mkipks korganizer-alarm.control
ifndef BUILD_NO_GAMMU
- ./mkipks kammu.control
+ ./mkipks phoneaccess.control
endif
ifndef BUILD_NO_PWMANAGER
./mkipks pwmanager.control
endif
./mkipks pim_TAB_icon.control
tmake: objects \
qtcompat/Makefile$(PLATFORM) \
microkde/Makefile$(PLATFORM) \
libkcal/Makefile$(PLATFORM) \
libkdepim/Makefile$(PLATFORM) \
korganizer/Makefile$(PLATFORM) \
kalarmd/Makefile$(PLATFORM) \
libical/src/libical/Makefile$(PLATFORM) \
libical/src/libicalss/Makefile$(PLATFORM) \
kabc/Makefile$(PLATFORM) \
kabc/formats/binary/Makefile$(PLATFORM) \
kabc/plugins/file/Makefile$(PLATFORM) \
kabc/plugins/dir/Makefile$(PLATFORM) \
kabc/plugins/ldap/Makefile$(PLATFORM) \
kabc/plugins/opie/Makefile$(PLATFORM) \
kabc/plugins/qtopia/Makefile$(PLATFORM) \
kabc/plugins/sharpdtm/Makefile$(PLATFORM) \
kaddressbook/Makefile$(PLATFORM) \
kmicromail/Makefile$(PLATFORM) \
kmicromail/libetpan/Makefile$(PLATFORM) \
kmicromail/libmailwrapper/Makefile$(PLATFORM) \
gammu/emb/common/Makefile$(PLATFORM) \
gammu/emb/gammu/Makefile$(PLATFORM) \
pwmanager/pwmanager/Makefile$(PLATFORM) \
qtcompat/Makefile$(PLATFORM): qtcompat/qtcompat.pro
cd qtcompat; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" qtcompat.pro -o Makefile$(PLATFORM)
microkde/Makefile$(PLATFORM): microkde/microkdeE.pro
cd microkde; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" microkdeE.pro -o Makefile$(PLATFORM)
libkcal/Makefile$(PLATFORM): libkcal/libkcalE.pro
cd libkcal; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libkcalE.pro -o Makefile$(PLATFORM)
libkdepim/Makefile$(PLATFORM): libkdepim/libkdepimE.pro
cd libkdepim; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libkdepimE.pro -o Makefile$(PLATFORM)
kalarmd/Makefile$(PLATFORM): kalarmd/kalarmdE.pro
cd kalarmd; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kalarmdE.pro -o Makefile$(PLATFORM)
korganizer/Makefile$(PLATFORM): korganizer/korganizerE.pro
cd korganizer; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" korganizerE.pro -o Makefile$(PLATFORM)
libical/src/libical/Makefile$(PLATFORM): libical/src/libical/libicalE.pro
cd libical/src/libical; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libicalE.pro -o Makefile$(PLATFORM)
libical/src/libicalss/Makefile$(PLATFORM): libical/src/libicalss/libicalssE.pro
cd libical/src/libicalss; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libicalssE.pro -o Makefile$(PLATFORM)
kabc/Makefile$(PLATFORM): kabc/kabcE.pro
cd kabc; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kabcE.pro -o Makefile$(PLATFORM)
kabc/formats/binary/Makefile$(PLATFORM): kabc/formats/binary/kabcformat_binaryE.pro
cd kabc/formats/binary; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kabcformat_binaryE.pro -o Makefile$(PLATFORM)
kabc/plugins/file/Makefile$(PLATFORM): kabc/plugins/file/fileE.pro
cd kabc/plugins/file; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" fileE.pro -o Makefile$(PLATFORM)
kabc/plugins/dir/Makefile$(PLATFORM): kabc/plugins/dir/dirE.pro
cd kabc/plugins/dir; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" dirE.pro -o Makefile$(PLATFORM)
kabc/plugins/ldap/Makefile$(PLATFORM): kabc/plugins/ldap/ldapE.pro
cd kabc/plugins/ldap; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" ldapE.pro -o Makefile$(PLATFORM)
kabc/plugins/opie/Makefile$(PLATFORM): kabc/plugins/opie/opieE.pro
cd kabc/plugins/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" opieE.pro -o Makefile$(PLATFORM)
kabc/plugins/qtopia/Makefile$(PLATFORM): kabc/plugins/qtopia/qtopiaE.pro
cd kabc/plugins/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" qtopiaE.pro -o Makefile$(PLATFORM)
kabc/plugins/sharpdtm/Makefile$(PLATFORM): kabc/plugins/sharpdtm/sharpdtmE.pro
cd kabc/plugins/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" sharpdtmE.pro -o Makefile$(PLATFORM)
kaddressbook/Makefile$(PLATFORM): kaddressbook/kaddressbookE.pro
cd kaddressbook; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kaddressbookE.pro -o Makefile$(PLATFORM)
kmicromail/Makefile$(PLATFORM): kmicromail/kmicromailE.pro
cd kmicromail; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" kmicromailE.pro -o Makefile$(PLATFORM)
kmicromail/libetpan/Makefile$(PLATFORM): kmicromail/libetpan/libetpanE.pro
cd kmicromail/libetpan; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libetpanE.pro -o Makefile$(PLATFORM)
kmicromail/libmailwrapper/Makefile$(PLATFORM): kmicromail/libmailwrapper/libmailwrapperE.pro
cd kmicromail/libmailwrapper; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" libmailwrapperE.pro -o Makefile$(PLATFORM)
gammu/emb/common/Makefile$(PLATFORM): gammu/emb/common/commonE.pro
cd gammu/emb/common; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" commonE.pro -o Makefile$(PLATFORM)
gammu/emb/gammu/Makefile$(PLATFORM): gammu/emb/gammu/gammuE.pro
cd gammu/emb/gammu; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" gammuE.pro -o Makefile$(PLATFORM)
pwmanager/pwmanager/Makefile$(PLATFORM): pwmanager/pwmanager/pwmanagerE.pro
cd pwmanager/pwmanager; tmake "CONFIG+=$(RELEASE_DEBUG)" "VERSION=$(KDEPIM_VERSION)" pwmanagerE.pro -o Makefile$(PLATFORM)
diff --git a/bin/kdepim/korganizer/howtoSYNC.txt b/bin/kdepim/korganizer/howtoSYNC.txt
index c4e80f5..3cab446 100644
--- a/bin/kdepim/korganizer/howtoSYNC.txt
+++ b/bin/kdepim/korganizer/howtoSYNC.txt
@@ -1,483 +1,483 @@
WARNING:
YOU MAY GET UNEXSPECTED (I.E. WRONG) SYNCHRONIZATION RESULTS,
IF YOU CHANGE AN EVENT ON THE FIRST DEVICE AND SYNC IMMEDIATELY FROM
THE OTHER DEVICE WITH THIS DEVICE, IF THE CLOCKS OF THE TWO DEVICES
HAVE TOO MUCH DIFFERENCE.
In other words: Please make shure, that the clocks of the devices
you want to sync have only a difference of some seconds!
CONTENT:
0) How syncing works
1) Qick overview of settings
2) Sync settings in sync dialog
3) Syncing background
4) Sync preferences
5) Details about sync profile kinds
*************************************************************************
0) How syncing works
*************************************************************************
Note:
The recommended and easiest way to syncronize two devices where
KO/Pi or KA/Pi is installed, is the profile kind "Pi-Sync".
Details about that in 5) b).
In KDE-Pim/Pi you can synchronize ( sync ) your calendar/addressbook
with another calendar/addressbook , by syncing your
(local) calendar/addressbook with a (remote) file.
This remote file may on your local filesystem
or on another (remote) device.
If you want to sync with another remote device,
you have two create a sync profile.
You have two choices for choosing the profil kind:
I) You have to choose profile kind "Remote file" and to specify a
command line download/upload command ( like scp, ftp, ...) to
a) download the remote file to your local machine to a temp file
b) sync with this temp file
c) upload the synced file to the remote device
II) If you want to sync with a device, where KO/Pi( or KA/Pi ) is
installed, you can easily get the remote file via network
with the build in file transfer feature:
Choose profile kind "Pi-Sync" and
a) Start KO/Pi or KA/Pi on remote device and
enable "Pi-Sync" on remote device with password and port.
b) Specify password, port and IP address in your profile.
You can sync with your mobile phone as well.
Everything is explained in more details below.
NOTE:
If you do not use profile kind "Pi-Sync",
it is recommended to close
a running KO/Pi ( or KA/Pi) on the remote device.
(Note: KO/Pi( or KA/Pi) running on Zaurus with
FastLoad enabled will never be closed!)
After syncing with a running KO/Pi on the remote device,
a "save" on the remote device will tell you that it needs to merge (sync).
After merging (just a syncing with the changed file)
you will get the new data showing in remote KO/Pi.
*************************************************************************
1) Qick overview of settings
*************************************************************************
a) Open sync settings dialog (Menu Synchronize - Configure...)
b) Give your device a unique name.
(unique in the set of all devices you want to sync with).
If you have already configured another devive and created
there a sync profile to sync with this device, give your device
the same name as this sync profile! The same name is important,
because it makes it possible to sync first A->B
(A local device, that performs the sync, B remote device)
and then B->A. Such that the B->A sync knows about the
already performed A->B sync.
That means: It is unimportant if you sync A->B or B->A,
the devices A and B will be synced properly.
c) Create a new sync profile and give it a unique name.
(unique in the set of all sync profiles on this device).
If you want to sync with a device, where KO/Pi is already installed
and which has a given unique device name, use this device name as
your profile name ( refer to b) ).
d) Coose the profile kind of your syncing method:
(i) Local file or
(ii) Pi-Sync or
(iii) Remote file or
(iiii) Mobile Phone.
Detailed explanation in 5)
e) Choose the other profile options.
Detailed explanation in 2)
f) Close sync dialog with OK.
g) Sync.
NOTE:
AFTER SYNCING THERE ARE "SYNC EVENTS" CREATED
(OR UPDATED, IF IT ALREADY EXITS) FOR EACH SYNC PROFILE.
YOU MAY NOT DELETE OR CHANGE THESE EVENTS.
*************************************************************************
2) Sync settings in sync dialog
*************************************************************************
a) Local device name:
-> 1) b)
b) Profile:
-> 1) c)
c) Include in multiple sync:
In the Synchronize menu, there is a multiple sync menu entry.
If you choose this menu entry, all user defined profiles with this
'Include in multiple sync' option enabled will be synced
one after another. And this twice. This will take some time.
After that sync, on all devices should be the same data.
d) Ask for preferences before sync:
Check this to be asked for sync preferences settings before each sync.
If the profile kind is "Pi-Sync" you will be asked to confirm
the "Pi-Sync" specific settings (Password,IP address, port number)
as well. That makes it possible to use that profile for a
device that is connected via DHCP to the network and gets different
IP addresses when connection to the network.
e) Sync preferences:
Choose here your sync preferences.
Details -> 4)
f) Show summary after sync:
Check this to get a small summary dialog after sync
about number of added/changed/deleted events on local/remote.
g) Write back synced data:
Uncheck this to update the local calendar only.
I.e. your local calendar is synced with the remote calendar
but nothing on the remote calendar is changed.
If you uncheck "Write back synced data", the settings
under h) and i) are ignored, of course.
h) --Write back (on remote) existing entries only:
Check this to update the remote data only.
I.e. no data from yor local calendar/addressbook is added to the
remote device. You may use this option to
sync against some kind of "public calendar/addressbook" without
writing back your personal data.
i) --Write back (calendar) entries in future only:
Check this to write back only calendar entries in future.
(Useful when syncing with mobile phones.)
You can specify the date range in weeks with
---- Max. weeks in future.
Note: The date range starts always 7 days before the actual date!
I.e. the calendar events of the last week are written back always.
j) Profile kind:
Details -> 5)
*************************************************************************
3) Syncing background
*************************************************************************
The same mentioned for calendars is valid for addressbooks as well.
Synchronizing calendars ( i.e. files ) means,
to merge two calendars in a useful way.
If the two calendars are completely different,
there is no problem, the resulting calendar contains
all data from the local and from the remote calendar.
Problems will occur, if you have edited items
from the local calendar on the remote machine.
Then it could be, that items are in conflict.
Two items are "in conflict", if they have the
same unique ID (which get an item at time of
creation and owns it until it is deleted )
and they both are modified after the last
synchronization.
At first sync of two calendars there is no item deleted.
If the calendars are synced before and there is an item,
which is not edited after the last sync and is only
available in one calendar, then this item is deleted
in this calendar.
But when was the last synchronization between two calendars?
To know that, KO/Pi creates at first syncing
of two files an unique event "<profile name> - sync Event"
on the remote and the local calendar.
After syncing, the start time of this event is set
to the time of syncing.
The event is read only and the user may not change it.
If two such files are synced, that both have an event
"<profile name> - sync Event" and the events have
the same start time, then deleted items on the one calendar
are deleted on the other as well.
*************************************************************************
4) Sync preferences
*************************************************************************
Two items are "in conflict", if they have the same unique ID
and they both are modified after the last synchronization.
(Details -> 3) ).
If an item is not modified after the last sync and
it is not found in the other calendar, it is deleted.
On the first sync, there is no item deleted.
SYNC PREFERENCES:
-Take local entry on conflict:
Takes the local entry on conflict.
If it is the first sync,
"Ask for every entry"
is chosen automatically,
if this is selected.
-Take remote entry on conflict:
Takes the remote entry on conflict.
If it is the first sync,
"Ask for every entry"
is chosen automatically,
if this is selected.
-Take newest entry on conflict:
This takes the newest entry on conflict.
May be the most useful syncing mode.
-Ask for every entry on conflict:
Pops up an event viewer dialog and
shows the two conflicting entries there.
The user can chose, which entry he would like to take.
The button for the newest entry
is automatically set as default button.
The color for the newest entry is green.
-Force: Take local entry always:
Even if the calendars are already synced
there is no item deleted on local.
-Force: Take remote entry always:
Analogous to
"Force: Take local entry always"
*************************************************************************
5) Details about sync profile kinds
*************************************************************************
a) Local file
Please specify a local file you want to sync with.
b) Pi-Sync (direct Kx/Pi to Kx/Pi sync)
We mention here only KO/Pi, but the same is valid for KA/Pi.
If you want to sync with a device, where KO/Pi is
installed, you can easily get the remote file via network
with the build in file transfer feature "Pi-Sync":
You have first to enable file transfer on the remote device:
- Start KO/Pi on the remote device.
- Choose Menu Synchronize-Enable Pi-Sync.
- Choose a port number, where KO/Pi should listen for
file sending requests. Valid port numbers are numbers
between 1 and 65565. Do not specify port numbers, that are
used by other applications. A port number between 9000 and 9999
is most likely not used by another application.
The default port number is 9197 for KO/Pi.
If you specify a port number, which is already in use,
you will get an error message when closing this dialog.
- Choose a password.
- Click OK.
Now KO/Pi will send the calendar data via the network,
if some other device is sending a "please send calendar"
request on the given port using the given password.
If you want to be sure, nobody can access your calendar
data, simply disable the file transfer feature on the
remote device after the syncing is done by choosing:
Menu Synchronize-Disable Pi-Sync.
Note: If you want to sync with a remote device that gets different
IPaddresses each time connected to the network
(this may be the case, if you use DHCP for connection
of the remote device to the network) simply enable
"Ask for preferences before sync".
Then you will be asked to confirm the
"Pi-Sync" specific settings
(Password,IP address, port number)
and you can easily change the IP address before each sync.
On your local device, create a new profile and choose
profile kind "Pi-Sync".
Fill in the needed values:
- Password for remote access:
The password you specified on the remote device.
- Remote IP address:
The IP address of the remote device.
- Remote port number:
The port number you specified on the remote device.
Now you can syncronize your local device easily with your
remote device. This works well for all platforms KO/Pi is
running on, e.g. syncing a KO/Pi on Zaurus with KO/Pi on Windows
is now very easy.
c) Remote file
Syncing with the profile kind "Remote file" is performed in three steps:
i) download the remote file to your local machine to a temp file
ii) sync with this temp file
iii) upload the synced file to the remote device
The down-/uploading if i) and iii) is done via a command line command.
Please specify the download/upload command ( like scp, ftp, ...) and the
file name of the temp file in the corresponding fields.
d) Mobile device (cell phone)
- Note: On the Zaurus you have to install the kammu_xxx_arm.ipk package
+ Note: On the Zaurus you have to install the phoneaccess_xxx_arm.ipk package
to be able to access mobile phones.
We mention here only KO/Pi, but the same is valid for KA/Pi.
Note:
It is only possible to sync a mobile phone with one particular device
running KO/Pi. If you want to be able to write data of more than one device
to the mobile phone (e.g. from your Zaurus and from your Windows Laptop)
do not sync with the mobile phone at all, but use the
"Export to phone" functionality from the different devices.
Using "Export to phone" makes it not possible to get back data from the
phone, if it was changed there, of course.
If you sync with the phone, do not use "Export to phone" from any device.
(And do not sync, as mentioned above, from any other device with that phone).
It would delete the needed information for syncing with that phone!
We are using Gammu (Version: 0.98.9) ( http://freshmeat.net/projects/gammu/ )
for accessing the phones.
Note: You cannot use the original Gammu for syncing KDE-Pim/Pi, because
we have modified the original version to make it useable for syncing!
Gammu allows access to many phones in many ways (Irda, Bluetooth, serial,...).
The recommended phone access using Gammu with KDE-Pim/Pi is Irda (infrared).
Bluetooth access is disabled on the Zaurus, but may work on Windows.
Please look at the Gammu homepage and documentation about more details
configuring Gammu how to access your phone.
If you have problems accessing your phone, start KO/Pi from the konsole
and you will get a more detailed output what went wrong.
About Gammu from the Gammu homepage:
Gammu (formerly known as MyGnokii2) is a cellular
manager for various mobile phones/modems.
It supports the Nokia 2100, 3100, 32xx, 33xx,
3410, 35xx, 51xx, 5210, 5510, 61xx, 62xx,
63xx, 6510, 6610, 6800, 71xx, 7210, 7250,
7250i, 82xx, 83xx, 8910, 9110, 9210
and compatible and AT devices (Siemens, Alcatel,
Falcom, WaveCom, IPAQ, Samsung, SE, and others)
over cables/infrared/BlueTooth.
Here is an example what to specify to access a Nokia 6310i via infrared:
On Linux (Zaurus):
I/O device: /dev/ircomm
Connection: irda
Model: <leave empty>
On Windows:
I/O device: <ignored - i.e. leave empty>
Connection: irda
Model: <leave empty>
Here is the overview from the Gammu documentation,
how to specify the connection settings for
I/O device:
Connection:
Model:
Note: The documentation uses the term "port",
where we use the term "I/O device".
Note: You do not have to create/change the gammurc configuration file.
That will do KO/Pi for you.
Note: For a known model, leave "Model:" always empty,
such that Gammu can auto detect the model.
# This is a sample ~/.gammurc file.
# In Unix/Linux copy it into your home directory and name it .gammurc
# or into /etc and name it gammurc
# In Win32 copy it into directory with Gammu.exe and name gammurc
# More about parameters later
# -----------------------------------------------------------------------------
[gammu]
port = com8:
#model = 6110
connection = fbusblue
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
[gammu1]
port = com8:
#model = 6110
connection = fbusblue
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
# -----------------------------------------------------------------------------
# Now info about "Connection" parameter and connected with it port type
# (more about port types later)
# -----------------------------------------------------------------------------
# "Connection" parameter | Port type | More details
# -----------------------|-----------|-----------------------------------------
# "fbus" | serial | Nokia FBUS2
# "fbusirda"/"infrared" | serial | Nokia FBUS2 over direct infrared device
# "fbusdlr3"/"dlr3" | serial | Nokia FBUS2 with DLR3 cable
# "fbusdku5" | dku5 | Nokia FBUS2 with DKU5 cable. WIN32 ONLY
# "fbuspl2303" | usb | Nokia FBUS2 with USB cable based on
# | | PL2303 chip.
# "fbusblue" | serial | Nokia FBUS2 over Bluetooth serial device
# "phonetblue" | serial | Nokia PHONET FBUS over Bluetooth serial
# | | device
# "mrouterblue" | serial |
# "mbus" | serial | Nokia MBUS2
# "at19200"/"at115200"/..| serial | AT commands.8 bits, None parity, 1 stop
# | | bit, no flow control
# -----------------------|-----------|-----------------------------------------
# "irdaphonet"/"irda" | irda | Nokia PHONET FBUS over socket infrared
# "irdaat" | irda | AT commands with socket infrared
# "irdaobex" | irda | OBEX over socket infrared. MODEL "obex"
# -----------------------|-----------|-----------------------------------------
# "bluephonet" | BT | Nokia PHONET FBUS with Bluetooth stack
# "bluefbus"/"dlr3blue" | BT | Nokia FBUS2 with Bluetooth stack
# "blueat"/"atblue" | BT | AT commands with Bluetooth stack
# "blueobex" | BT | OBEX with Bluetooth. MODEL "obex"
#
# Now more about port types and connected with it "Port" parameter
# -----------------------------------------------------------------------------
# Port type | "Port" parameter in Windows/DOS | "Port" parameter in Linux/Unix
# ----------|---------------------------------|--------------------------------
# serial | "com*:" | "/dev/ttyS*"
# | (example "com1:") | (example "/dev/ttyS1")
# | | or "/dev/tts/**" (with DevFS)
# ----------|---------------------------------|--------------------------------
# irda | ignored (can be empty) | "/dev/ircomm*"
# ----------|---------------------------------|--------------------------------
# BT | Bluetooth device address
# | (example "")
# ----------|---------------------------------|--------------------------------
# dku5 | ignored (can be empty) | connection with it not possible
# ----------|---------------------------------|--------------------------------
# usb | connection with it not possible | "/dev/ttyUSB*"
#
# Other config parameters
# -----------------------------------------------------------------------------
# Parameter name | Description
# ----------------|------------------------------------------------------------
# Model | use only, when Gammu doesn't recognize your phone model.
# | Put it here. Example values: "6110", "6150", "6210", "8210"
# SynchronizeTime | if you want to set time from computer to phone during
# | starting connection. Do not rather use this option when
# | when to reset phone during connection (in some phones need
# | to set time again after restart)
# GammuLoc | name of localisation file
# StartInfo | this option allow to set, that you want (setting "yes")
# | to see message on the phone screen or phone should enable
# | light for a moment during starting connection. Phone
# | WON'T beep during starting connection with this option.
# GammuCoding | forces using specified codepage (in win32 - for example
# | "1250" will force CP1250) or UTF8 (in Linux - "utf8")
# ----------------|------------------------------------------------------------
# Logfile | Use, when want to have logfile from communication.
# Logformat | What debug info and format should be used:
# | "nothing" - no debug level (default)
# | "text" - transmission dump in text format
# | "textall" - all possible info in text format
# | "errors" - errors in text format
# | "binary" - transmission dump in binary format
# ----------------|------------------------------------------------------------
# Use_Locking | under Unix/Linux use "yes", if want to lock used device
# | to prevent using it by other applications. In win32 ignored
\ No newline at end of file
diff --git a/gammu/emb/gammu/gammu.c b/gammu/emb/gammu/gammu.c
index c436b90..8db9afb 100644
--- a/gammu/emb/gammu/gammu.c
+++ b/gammu/emb/gammu/gammu.c
@@ -982,6145 +982,6145 @@ static void displaysinglesmsinfo(GSM_SMSMessage sms, bool displaytext, bool disp
}
printf("\n");
}
if (displaytext) {
printf("\n");
if (sms.Coding!=SMS_Coding_8bit) {
printmsg("%s\n",DecodeUnicodeConsole(sms.Text));
} else {
printmsg("8 bit SMS, cannot be displayed here\n");
}
}
break;
}
}
static void displaymultismsinfo (GSM_MultiSMSMessage sms, bool eachsms, bool ems)
{
GSM_MultiPartSMSInfo SMSInfo;
bool RetVal,udhinfo=true;
int j;
/* GSM_DecodeMultiPartSMS returns if decoded SMS contenst correctly */
RetVal = GSM_DecodeMultiPartSMS(&SMSInfo,&sms,ems);
if (eachsms) {
if (sms.SMS[0].UDH.Type != UDH_NoUDH && sms.SMS[0].UDH.AllParts == sms.Number) udhinfo = false;
if (RetVal && !udhinfo) {
displaysinglesmsinfo(sms.SMS[0],false,false);
printf("\n");
} else {
for (j=0;j<sms.Number;j++) {
displaysinglesmsinfo(sms.SMS[j],!RetVal,udhinfo);
printf("\n");
}
}
} else {
for (j=0;j<sms.Number;j++) {
displaysinglesmsinfo(sms.SMS[j],!RetVal,true);
printf("\n");
}
}
if (!RetVal) {
GSM_FreeMultiPartSMSInfo(&SMSInfo);
return;
}
if (SMSInfo.Unknown) printmsg("Some details were ignored (unknown or not implemented in decoding functions)\n\n");
for (i=0;i<SMSInfo.EntriesNum;i++) {
switch (SMSInfo.Entries[i].ID) {
case SMS_NokiaRingtone:
printmsg("Ringtone \"%s\"\n",DecodeUnicodeConsole(SMSInfo.Entries[i].Ringtone->Name));
saverttl(stdout,SMSInfo.Entries[i].Ringtone);
printf("\n");
if (s.Phone.Functions->PlayTone!=NOTSUPPORTED &&
s.Phone.Functions->PlayTone!=NOTIMPLEMENTED) {
if (answer_yes("Do you want to play it")) GSM_PlayRingtone(*SMSInfo.Entries[i].Ringtone);
}
break;
case SMS_NokiaCallerLogo:
printmsg("Caller logo\n\n");
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_NokiaOperatorLogo:
printmsg("Operator logo for %s network (%s, %s)\n\n",
SMSInfo.Entries[i].Bitmap->Bitmap[0].NetworkCode,
DecodeUnicodeConsole(GSM_GetNetworkName(SMSInfo.Entries[i].Bitmap->Bitmap[0].NetworkCode)),
DecodeUnicodeConsole(GSM_GetCountryName(SMSInfo.Entries[i].Bitmap->Bitmap[0].NetworkCode)));
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_NokiaScreenSaverLong:
printmsg("Screen saver\n");
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_NokiaPictureImageLong:
printmsg("Picture Image\n");
if (UnicodeLength(SMSInfo.Entries[i].Bitmap->Bitmap[0].Text)!=0) printmsg("Text: \"%s\"\n\n",DecodeUnicodeConsole(SMSInfo.Entries[i].Bitmap->Bitmap[0].Text));
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_NokiaProfileLong:
printmsg("Profile\n");
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_ConcatenatedTextLong:
case SMS_ConcatenatedAutoTextLong:
case SMS_ConcatenatedTextLong16bit:
case SMS_ConcatenatedAutoTextLong16bit:
printmsg("%s\n",DecodeUnicodeConsole(SMSInfo.Entries[i].Buffer));
break;
case SMS_EMSFixedBitmap:
case SMS_EMSVariableBitmap:
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_EMSAnimation:
/* Can't show animation, we show first frame */
GSM_PrintBitmap(stdout,&SMSInfo.Entries[i].Bitmap->Bitmap[0]);
break;
case SMS_EMSPredefinedSound:
printmsg("\nEMS sound ID: %i\n",SMSInfo.Entries[i].Number);
break;
case SMS_EMSPredefinedAnimation:
printmsg("\nEMS animation ID: %i\n",SMSInfo.Entries[i].Number);
break;
default:
printf("Error\n");
break;
}
}
printf("\n");
GSM_FreeMultiPartSMSInfo(&SMSInfo);
}
static void NetworkInfo(int argc, char *argv[])
{
GSM_NetworkInfo NetInfo;
GSM_Init(true);
if (Phone->GetNetworkInfo(&s,&NetInfo)==ERR_NONE) {
printmsg("Network state : ");
switch (NetInfo.State) {
case GSM_HomeNetwork : printmsg("home network\n"); break;
case GSM_RoamingNetwork : printmsg("roaming network\n"); break;
case GSM_RequestingNetwork : printmsg("requesting network\n"); break;
case GSM_NoNetwork : printmsg("not logged into network\n"); break;
case GSM_RegistrationDenied : printmsg("registration to network denied\n"); break;
case GSM_NetworkStatusUnknown : printmsg("unknown\n"); break;
default : printmsg("unknown\n");
}
if (NetInfo.State == GSM_HomeNetwork || NetInfo.State == GSM_RoamingNetwork) {
printmsg("Network : %s (%s", NetInfo.NetworkCode,DecodeUnicodeConsole(GSM_GetNetworkName(NetInfo.NetworkCode)));
printmsg(", %s)", DecodeUnicodeConsole(GSM_GetCountryName(NetInfo.NetworkCode)));
printmsg(", LAC %s, CellID %s\n", NetInfo.LAC,NetInfo.CID);
if (NetInfo.NetworkName[0] != 0x00 || NetInfo.NetworkName[1] != 0x00) {
printmsg("Name in phone : \"%s\"\n",DecodeUnicodeConsole(NetInfo.NetworkName));
}
}
}
GSM_Terminate();
}
static void IncomingSMS(char *Device, GSM_SMSMessage sms)
{
GSM_MultiSMSMessage SMS;
printmsg("SMS message received\n");
SMS.Number = 1;
memcpy(&SMS.SMS[0],&sms,sizeof(GSM_SMSMessage));
displaymultismsinfo(SMS,false,false);
}
static void IncomingCB(char *Device, GSM_CBMessage CB)
{
printmsg("CB message received\n");
printmsg("Channel %i, text \"%s\"\n",CB.Channel,DecodeUnicodeConsole(CB.Text));
}
static void IncomingCall(char *Device, GSM_Call call)
{
printmsg("Call info : ");
if (call.CallIDAvailable) printmsg("ID %i, ",call.CallID);
switch(call.Status) {
case GSM_CALL_IncomingCall : printmsg("incoming call from \"%s\"\n",DecodeUnicodeConsole(call.PhoneNumber)); break;
case GSM_CALL_OutgoingCall : printmsg("outgoing call to \"%s\"\n",DecodeUnicodeConsole(call.PhoneNumber)); break;
case GSM_CALL_CallStart : printmsg("call started\n"); break;
case GSM_CALL_CallEnd : printmsg("end of call (unknown side)\n"); break;
case GSM_CALL_CallLocalEnd : printmsg("call end from our side\n"); break;
case GSM_CALL_CallRemoteEnd : printmsg("call end from remote side (code %i)\n",call.StatusCode); break;
case GSM_CALL_CallEstablished : printmsg("call established. Waiting for answer\n"); break;
case GSM_CALL_CallHeld : printmsg("call held\n"); break;
case GSM_CALL_CallResumed : printmsg("call resumed\n"); break;
case GSM_CALL_CallSwitched : printmsg("call switched\n"); break;
}
}
static void IncomingUSSD(char *Device, char *Buffer)
{
printmsg("Service reply: \"%s\"\n",DecodeUnicodeConsole(Buffer));
}
#define CHECKMEMORYSTATUS(x, m, a1, b1) { \
x.MemoryType=m; \
if (Phone->GetMemoryStatus(&s, &x) == ERR_NONE) \
printmsg("%s %03d, %s %03d\n", a1, x.MemoryUsed, b1, x.MemoryFree); \
}
static void Monitor(int argc, char *argv[])
{
GSM_MemoryStatus MemStatus;
GSM_SMSMemoryStatus SMSStatus;
GSM_ToDoStatus ToDoStatus;
GSM_CalendarStatus CalendarStatus;
GSM_NetworkInfo NetInfo;
GSM_BatteryCharge BatteryCharge;
GSM_SignalQuality SignalQuality;
int count = -1;
if (argc >= 3) {
count = atoi(argv[2]);
if (count <= 0) count = -1;
}
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
printmsg("Entering monitor mode...\n\n");
GSM_Init(true);
s.User.IncomingSMS = IncomingSMS;
s.User.IncomingCB = IncomingCB;
s.User.IncomingCall = IncomingCall;
s.User.IncomingUSSD = IncomingUSSD;
error=Phone->SetIncomingSMS (&s,true);
printmsg("Enabling info about incoming SMS : %s\n",print_error(error,NULL,s.msg));
error=Phone->SetIncomingCB (&s,true);
printmsg("Enabling info about incoming CB : %s\n",print_error(error,NULL,s.msg));
error=Phone->SetIncomingCall (&s,true);
printmsg("Enabling info about calls : %s\n",print_error(error,NULL,s.msg));
error=Phone->SetIncomingUSSD (&s,true);
printmsg("Enabling info about USSD : %s\n\n",print_error(error,NULL,s.msg));
while (!gshutdown && count != 0) {
if (count > 0) count--;
CHECKMEMORYSTATUS(MemStatus,MEM_SM,"SIM phonebook : Used","Free");
if (gshutdown) break;
CHECKMEMORYSTATUS(MemStatus,MEM_DC,"Dialled numbers : Used","Free");
if (gshutdown) break;
CHECKMEMORYSTATUS(MemStatus,MEM_RC,"Received numbers : Used","Free");
if (gshutdown) break;
CHECKMEMORYSTATUS(MemStatus,MEM_MC,"Missed numbers : Used","Free");
if (gshutdown) break;
CHECKMEMORYSTATUS(MemStatus,MEM_ON,"Own numbers : Used","Free");
if (gshutdown) break;
CHECKMEMORYSTATUS(MemStatus,MEM_ME,"Phone phonebook : Used","Free");
if (gshutdown) break;
if (Phone->GetToDoStatus(&s, &ToDoStatus) == ERR_NONE) {
printmsg("ToDos : Used %d\n", ToDoStatus.Used);
}
if (gshutdown) break;
if (Phone->GetCalendarStatus(&s, &CalendarStatus) == ERR_NONE) {
printmsg("Calendar : Used %d\n", CalendarStatus.Used);
}
if (gshutdown) break;
if (Phone->GetBatteryCharge(&s,&BatteryCharge)==ERR_NONE) {
if (BatteryCharge.BatteryPercent != -1) printmsg("Battery level : %i percent\n", BatteryCharge.BatteryPercent);
if (BatteryCharge.ChargeState != 0) {
printmsg("Charge state : ");
switch (BatteryCharge.ChargeState) {
case GSM_BatteryPowered:
printmsg("powered from battery");
break;
case GSM_BatteryConnected:
printmsg("battery connected, but not powered from battery");
break;
case GSM_BatteryNotConnected:
printmsg("battery not connected");
break;
case GSM_PowerFault:
printmsg("detected power failure");
break;
default:
printmsg("unknown");
break;
}
printf("\n");
}
}
if (gshutdown) break;
if (Phone->GetSignalQuality(&s,&SignalQuality)==ERR_NONE) {
if (SignalQuality.SignalStrength != -1) printmsg("Signal strength : %i dBm\n", SignalQuality.SignalStrength);
if (SignalQuality.SignalPercent != -1) printmsg("Network level : %i percent\n", SignalQuality.SignalPercent);
if (SignalQuality.BitErrorRate != -1) printmsg("Bit error rate : %i percent\n", SignalQuality.BitErrorRate);
}
if (gshutdown) break;
if (Phone->GetSMSStatus(&s,&SMSStatus)==ERR_NONE) {
if (SMSStatus.SIMSize > 0) {
printmsg("SIM SMS status : %i used, %i unread, %i locations\n",
SMSStatus.SIMUsed,
SMSStatus.SIMUnRead,
SMSStatus.SIMSize);
}
if (SMSStatus.PhoneSize > 0) {
printmsg("Phone SMS status : %i used, %i unread, %i locations",
SMSStatus.PhoneUsed,
SMSStatus.PhoneUnRead,
SMSStatus.PhoneSize);
if (SMSStatus.TemplatesUsed!=0) printmsg(", %i templates", SMSStatus.TemplatesUsed);
printf("\n");
}
}
if (gshutdown) break;
if (Phone->GetNetworkInfo(&s,&NetInfo)==ERR_NONE) {
printmsg("Network state : ");
switch (NetInfo.State) {
case GSM_HomeNetwork : printmsg("home network\n"); break;
case GSM_RoamingNetwork : printmsg("roaming network\n"); break;
case GSM_RequestingNetwork : printmsg("requesting network\n"); break;
case GSM_NoNetwork : printmsg("not logged into network\n"); break;
case GSM_RegistrationDenied : printmsg("registration to network denied\n"); break;
case GSM_NetworkStatusUnknown : printmsg("unknown\n"); break;
default : printmsg("unknown\n");
}
if (NetInfo.State == GSM_HomeNetwork || NetInfo.State == GSM_RoamingNetwork) {
printmsg("Network : %s (%s", NetInfo.NetworkCode,DecodeUnicodeConsole(GSM_GetNetworkName(NetInfo.NetworkCode)));
printmsg(", %s)", DecodeUnicodeConsole(GSM_GetCountryName(NetInfo.NetworkCode)));
printmsg(", LAC %s, CID %s\n", NetInfo.LAC,NetInfo.CID);
if (NetInfo.NetworkName[0] != 0x00 || NetInfo.NetworkName[1] != 0x00) {
printmsg("Name in phone : \"%s\"\n",DecodeUnicodeConsole(NetInfo.NetworkName));
}
}
}
printf("\n");
}
printmsg("Leaving monitor mode...\n");
GSM_Terminate();
}
static void IncomingUSSD2(char *Device, char *Buffer)
{
printmsg("Service reply: \"%s\"\n",DecodeUnicodeConsole(Buffer));
gshutdown = true;
}
static void GetUSSD(int argc, char *argv[])
{
GSM_Init(true);
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
s.User.IncomingUSSD = IncomingUSSD2;
error=Phone->SetIncomingUSSD(&s,true);
Print_Error(error);
error=Phone->DialVoice(&s, argv[2], GSM_CALL_DefaultNumberPresence);
Print_Error(error);
while (!gshutdown) GSM_ReadDevice(&s,true);
GSM_Terminate();
}
static void GetSMSC(int argc, char *argv[])
{
GSM_SMSC smsc;
int start, stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
smsc.Location=i;
error=Phone->GetSMSC(&s, &smsc);
Print_Error(error);
if (!strcmp(DecodeUnicodeConsole(smsc.Name),"")) {
printmsg("%i. Set %i\n",smsc.Location, smsc.Location);
} else {
printmsg("%i. \"%s\"\n",smsc.Location, DecodeUnicodeConsole(smsc.Name));
}
printmsg("Number : \"%s\"\n",DecodeUnicodeConsole(smsc.Number));
printmsg("Default number : \"%s\"\n",DecodeUnicodeConsole(smsc.DefaultNumber));
printmsg("Format : ");
switch (smsc.Format) {
case SMS_FORMAT_Text : printmsg("Text"); break;
case SMS_FORMAT_Fax : printmsg("Fax"); break;
case SMS_FORMAT_Email : printmsg("Email"); break;
case SMS_FORMAT_Pager : printmsg("Pager"); break;
}
printf("\n");
printmsg("Validity : ");
switch (smsc.Validity.Relative) {
case SMS_VALID_1_Hour : printmsg("1 hour"); break;
case SMS_VALID_6_Hours : printmsg("6 hours"); break;
case SMS_VALID_1_Day : printmsg("24 hours"); break;
case SMS_VALID_3_Days : printmsg("72 hours"); break;
case SMS_VALID_1_Week : printmsg("1 week"); break;
case SMS_VALID_Max_Time : printmsg("Maximum time"); break;
default :
if (smsc.Validity.Relative >= 0 && smsc.Validity.Relative <= 143) {
printmsg("%i minutes",(smsc.Validity.Relative+1)*5);
} else if (smsc.Validity.Relative >= 144 && smsc.Validity.Relative <= 167) {
printmsg("%i minutes",12*60 + (smsc.Validity.Relative-143)*30);
} else if (smsc.Validity.Relative >= 168 && smsc.Validity.Relative <= 196) {
printmsg("%i days",smsc.Validity.Relative-166);
} else if (smsc.Validity.Relative >= 197 && smsc.Validity.Relative <= 255) {
printmsg("%i weeks",smsc.Validity.Relative-192);
}
}
printf("\n");
}
GSM_Terminate();
}
static void GetSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage sms;
GSM_SMSFolders folders;
int start, stop;
int j;
GetStartStop(&start, &stop, 3, argc, argv);
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
for (j = start; j <= stop; j++) {
sms.SMS[0].Folder = atoi(argv[2]);
sms.SMS[0].Location = j;
error=Phone->GetSMS(&s, &sms);
switch (error) {
case ERR_EMPTY:
printmsg("Location %i\n",sms.SMS[0].Location);
printmsg("Empty\n");
break;
default:
Print_Error(error);
printmsg("Location %i, folder \"%s\"",sms.SMS[0].Location,DecodeUnicodeConsole(folders.Folder[sms.SMS[0].Folder-1].Name));
switch(sms.SMS[0].Memory) {
case MEM_SM: printmsg(", SIM memory"); break;
case MEM_ME: printmsg(", phone memory"); break;
case MEM_MT: printmsg(", phone or SIM memory"); break;
default : break;
}
if (sms.SMS[0].InboxFolder) printmsg(", Inbox folder");
printf("\n");
displaymultismsinfo(sms,false,false);
}
}
GSM_Terminate();
}
static void DeleteSMS(int argc, char *argv[])
{
GSM_SMSMessage sms;
int start, stop;
sms.Folder=atoi(argv[2]);
GetStartStop(&start, &stop, 3, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
sms.Folder = 0;
sms.Location = i;
error=Phone->DeleteSMS(&s, &sms);
Print_Error(error);
}
#ifdef GSM_ENABLE_BEEP
GSM_PhoneBeep();
#endif
GSM_Terminate();
}
static void GetAllSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage sms;
GSM_SMSFolders folders;
bool start = true;
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
while (error == ERR_NONE) {
sms.SMS[0].Folder=0x00;
error=Phone->GetNextSMS(&s, &sms, start);
switch (error) {
case ERR_EMPTY:
break;
default:
Print_Error(error);
printmsg("Location %i, folder \"%s\"",sms.SMS[0].Location,DecodeUnicodeConsole(folders.Folder[sms.SMS[0].Folder-1].Name));
switch(sms.SMS[0].Memory) {
case MEM_SM: printmsg(", SIM memory"); break;
case MEM_ME: printmsg(", phone memory"); break;
case MEM_MT: printmsg(", phone or SIM memory"); break;
default : break;
}
if (sms.SMS[0].InboxFolder) printmsg(", Inbox folder");
printf("\n");
displaymultismsinfo(sms,false,false);
}
start=false;
}
fprintf(stderr,"\n");
#ifdef GSM_ENABLE_BEEP
GSM_PhoneBeep();
#endif
GSM_Terminate();
}
static void GetEachSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage *GetSMS[PHONE_MAXSMSINFOLDER],*SortedSMS[PHONE_MAXSMSINFOLDER],sms;
int GetSMSNumber = 0,i,j;
GSM_SMSFolders folders;
bool start = true, ems = true;
GetSMS[0] = NULL;
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
fprintf(stderr,"Reading: ");
while (error == ERR_NONE) {
sms.SMS[0].Folder=0x00;
error=Phone->GetNextSMS(&s, &sms, start);
switch (error) {
case ERR_EMPTY:
break;
default:
Print_Error(error);
GetSMS[GetSMSNumber] = malloc(sizeof(GSM_MultiSMSMessage));
if (GetSMS[GetSMSNumber] == NULL) Print_Error(ERR_MOREMEMORY);
GetSMS[GetSMSNumber+1] = NULL;
memcpy(GetSMS[GetSMSNumber],&sms,sizeof(GSM_MultiSMSMessage));
GetSMSNumber++;
if (GetSMSNumber==PHONE_MAXSMSINFOLDER) {
fprintf(stderr,"SMS counter overflow\n");
return;
}
}
fprintf(stderr,"*");
start=false;
}
fprintf(stderr,"\n");
#ifdef GSM_ENABLE_BEEP
GSM_PhoneBeep();
#endif
error = GSM_LinkSMS(GetSMS, SortedSMS, ems);
Print_Error(error);
i=0;
while(GetSMS[i] != NULL) {
free(GetSMS[i]);
GetSMS[i] = NULL;
i++;
}
i=0;
while(SortedSMS[i] != NULL) {
for (j=0;j<SortedSMS[i]->Number;j++) {
if ((j==0) || (j!=0 && SortedSMS[i]->SMS[j].Location != SortedSMS[i]->SMS[j-1].Location)) {
printmsg("Location %i, folder \"%s\"",SortedSMS[i]->SMS[j].Location,DecodeUnicodeConsole(folders.Folder[SortedSMS[i]->SMS[j].Folder-1].Name));
switch(SortedSMS[i]->SMS[j].Memory) {
case MEM_SM: printmsg(", SIM memory"); break;
case MEM_ME: printmsg(", phone memory"); break;
case MEM_MT: printmsg(", phone or SIM memory"); break;
default : break;
}
if (SortedSMS[i]->SMS[j].InboxFolder) printmsg(", Inbox folder");
printf("\n");
}
}
displaymultismsinfo(*SortedSMS[i],true,ems);
free(SortedSMS[i]);
SortedSMS[i] = NULL;
i++;
}
GSM_Terminate();
}
static void GetSMSFolders(int argc, char *argv[])
{
GSM_SMSFolders folders;
GSM_Init(true);
error=Phone->GetSMSFolders(&s,&folders);
Print_Error(error);
for (i=0;i<folders.Number;i++) {
printmsg("%i. \"%30s\"",i+1,DecodeUnicodeConsole(folders.Folder[i].Name));
switch(folders.Folder[i].Memory) {
case MEM_SM: printmsg(", SIM memory"); break;
case MEM_ME: printmsg(", phone memory"); break;
case MEM_MT: printmsg(", phone or SIM memory"); break;
default : break;
}
if (folders.Folder[i].InboxFolder) printmsg(", Inbox folder");
printf("\n");
}
GSM_Terminate();
}
static void GetRingtone(int argc, char *argv[])
{
GSM_Ringtone ringtone;
bool PhoneRingtone = false;
if (mystrncasecmp(argv[1],"--getphoneringtone",0)) PhoneRingtone = true;
GetStartStop(&ringtone.Location, NULL, 2, argc, argv);
GSM_Init(true);
ringtone.Format=0;
error=Phone->GetRingtone(&s,&ringtone,PhoneRingtone);
Print_Error(error);
switch (ringtone.Format) {
case RING_NOTETONE : printmsg("Smart Messaging"); break;
case RING_NOKIABINARY : printmsg("Nokia binary"); break;
case RING_MIDI : printmsg("MIDI"); break;
case RING_MMF : printmsg("SMAF (MMF)"); break;
}
printmsg(" format, ringtone \"%s\"\n",DecodeUnicodeConsole(ringtone.Name));
if (argc==4) {
error=GSM_SaveRingtoneFile(argv[3], &ringtone);
Print_Error(error);
}
GSM_Terminate();
}
static void GetRingtonesList(int argc, char *argv[])
{
GSM_AllRingtonesInfo Info;
int i;
GSM_Init(true);
error=Phone->GetRingtonesInfo(&s,&Info);
Print_Error(error);
GSM_Terminate();
for (i=0;i<Info.Number;i++) printmsg("%i. \"%s\"\n",i,DecodeUnicodeConsole(Info.Ringtone[i].Name));
}
static void DialVoice(int argc, char *argv[])
{
GSM_CallShowNumber ShowNumber = GSM_CALL_DefaultNumberPresence;
if (argc > 3) {
if (mystrncasecmp(argv[3],"show",0)) { ShowNumber = GSM_CALL_ShowNumber;
} else if (mystrncasecmp(argv[3],"hide",0)) { ShowNumber = GSM_CALL_HideNumber;
} else {
printmsg("Unknown parameter (\"%s\")\n",argv[3]);
exit(-1);
}
}
GSM_Init(true);
error=Phone->DialVoice(&s, argv[2], ShowNumber);
Print_Error(error);
GSM_Terminate();
}
static void CancelCall(int argc, char *argv[])
{
GSM_Init(true);
if (argc>2) {
error=Phone->CancelCall(&s,atoi(argv[2]),false);
} else {
error=Phone->CancelCall(&s,0,true);
}
Print_Error(error);
GSM_Terminate();
}
static void AnswerCall(int argc, char *argv[])
{
GSM_Init(true);
if (argc>2) {
error=Phone->AnswerCall(&s,atoi(argv[2]),false);
} else {
error=Phone->AnswerCall(&s,0,true);
}
Print_Error(error);
GSM_Terminate();
}
static void UnholdCall(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->UnholdCall(&s,atoi(argv[2]));
Print_Error(error);
GSM_Terminate();
}
static void HoldCall(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->HoldCall(&s,atoi(argv[2]));
Print_Error(error);
GSM_Terminate();
}
static void ConferenceCall(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->ConferenceCall(&s,atoi(argv[2]));
Print_Error(error);
GSM_Terminate();
}
static void SplitCall(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->SplitCall(&s,atoi(argv[2]));
Print_Error(error);
GSM_Terminate();
}
static void SwitchCall(int argc, char *argv[])
{
GSM_Init(true);
if (argc > 2) {
error=Phone->SwitchCall(&s,atoi(argv[2]),false);
} else {
error=Phone->SwitchCall(&s,0,true);
}
Print_Error(error);
GSM_Terminate();
}
static void TransferCall(int argc, char *argv[])
{
GSM_Init(true);
if (argc > 2) {
error=Phone->TransferCall(&s,atoi(argv[2]),false);
} else {
error=Phone->TransferCall(&s,0,true);
}
Print_Error(error);
GSM_Terminate();
}
static void AddSMSFolder(int argc, char *argv[])
{
unsigned char buffer[200];
GSM_Init(true);
EncodeUnicode(buffer,argv[2],strlen(argv[2]));
error=Phone->AddSMSFolder(&s,buffer);
Print_Error(error);
GSM_Terminate();
}
static void Reset(int argc, char *argv[])
{
bool hard;
if (mystrncasecmp(argv[2],"SOFT",0)) { hard=false;
} else if (mystrncasecmp(argv[2],"HARD",0)) { hard=true;
} else {
printmsg("What type of reset do you want (\"%s\") ?\n",argv[2]);
exit(-1);
}
GSM_Init(true);
error=Phone->Reset(&s, hard);
Print_Error(error);
GSM_Terminate();
}
static void PrintCalendar(GSM_CalendarEntry *Note)
{
int i_age = 0,i;
GSM_DateTime Alarm,DateTime;
GSM_MemoryEntry entry;
unsigned char *name;
bool repeating = false;
int repeat_dayofweek = -1;
int repeat_day = -1;
int repeat_weekofmonth = -1;
int repeat_month = -1;
int repeat_frequency = -1;
GSM_DateTime repeat_startdate = {0,0,0,0,0,0,0};
GSM_DateTime repeat_stopdate = {0,0,0,0,0,0,0};
printmsg("Location : %d\n", Note->Location);
printmsg("Note type : ");
switch (Note->Type) {
case GSM_CAL_REMINDER : printmsg("Reminder (Date)\n"); break;
case GSM_CAL_CALL : printmsg("Call\n"); break;
case GSM_CAL_MEETING : printmsg("Meeting\n"); break;
case GSM_CAL_BIRTHDAY : printmsg("Birthday (Anniversary)\n"); break;
case GSM_CAL_MEMO : printmsg("Memo (Miscellaneous)\n"); break;
case GSM_CAL_TRAVEL : printmsg("Travel\n"); break;
case GSM_CAL_VACATION : printmsg("Vacation\n"); break;
case GSM_CAL_ALARM : printmsg("Alarm\n"); break;
case GSM_CAL_DAILY_ALARM : printmsg("Daily alarm\n"); break;
case GSM_CAL_T_ATHL : printmsg("Training/Athletism\n"); break;
case GSM_CAL_T_BALL : printmsg("Training/Ball Games\n"); break;
case GSM_CAL_T_CYCL : printmsg("Training/Cycling\n"); break;
case GSM_CAL_T_BUDO : printmsg("Training/Budo\n"); break;
case GSM_CAL_T_DANC : printmsg("Training/Dance\n"); break;
case GSM_CAL_T_EXTR : printmsg("Training/Extreme Sports\n"); break;
case GSM_CAL_T_FOOT : printmsg("Training/Football\n"); break;
case GSM_CAL_T_GOLF : printmsg("Training/Golf\n"); break;
case GSM_CAL_T_GYM : printmsg("Training/Gym\n"); break;
case GSM_CAL_T_HORS : printmsg("Training/Horse Races\n"); break;
case GSM_CAL_T_HOCK : printmsg("Training/Hockey\n"); break;
case GSM_CAL_T_RACE : printmsg("Training/Races\n"); break;
case GSM_CAL_T_RUGB : printmsg("Training/Rugby\n"); break;
case GSM_CAL_T_SAIL : printmsg("Training/Sailing\n"); break;
case GSM_CAL_T_STRE : printmsg("Training/Street Games\n"); break;
case GSM_CAL_T_SWIM : printmsg("Training/Swimming\n"); break;
case GSM_CAL_T_TENN : printmsg("Training/Tennis\n"); break;
case GSM_CAL_T_TRAV : printmsg("Training/Travels\n"); break;
case GSM_CAL_T_WINT : printmsg("Training/Winter Games\n"); break;
default : printmsg("UNKNOWN\n");
}
Alarm.Year = 0;
repeating = false;
repeat_dayofweek = -1;
repeat_day = -1;
repeat_weekofmonth = -1;
repeat_month = -1;
repeat_frequency = -1;
repeat_startdate.Day = 0;
repeat_stopdate.Day = 0;
for (i=0;i<Note->EntriesNum;i++) {
switch (Note->Entries[i].EntryType) {
case CAL_START_DATETIME:
printmsg("Start : %s\n",OSDateTime(Note->Entries[i].Date,false));
memcpy(&DateTime,&Note->Entries[i].Date,sizeof(GSM_DateTime));
break;
case CAL_END_DATETIME:
printmsg("Stop : %s\n",OSDateTime(Note->Entries[i].Date,false));
memcpy(&DateTime,&Note->Entries[i].Date,sizeof(GSM_DateTime));
break;
case CAL_ALARM_DATETIME:
printmsg("Tone alarm : %s\n",OSDateTime(Note->Entries[i].Date,false));
memcpy(&Alarm,&Note->Entries[i].Date,sizeof(GSM_DateTime));
break;
case CAL_SILENT_ALARM_DATETIME:
printmsg("Silent alarm : %s\n",OSDateTime(Note->Entries[i].Date,false));
memcpy(&Alarm,&Note->Entries[i].Date,sizeof(GSM_DateTime));
break;
case CAL_RECURRANCE:
printmsg("Repeat : %d day%s\n",Note->Entries[i].Number/24,
((Note->Entries[i].Number/24)>1) ? "s":"" );
break;
case CAL_TEXT:
printmsg("Text : \"%s\"\n",DecodeUnicodeConsole(Note->Entries[i].Text));
break;
case CAL_LOCATION:
printmsg("Location : \"%s\"\n",DecodeUnicodeConsole(Note->Entries[i].Text));
break;
case CAL_PHONE:
printmsg("Phone : \"%s\"\n",DecodeUnicodeConsole(Note->Entries[i].Text));
break;
case CAL_PRIVATE:
printmsg("Private : %s\n",Note->Entries[i].Number == 1 ? "Yes" : "No");
break;
case CAL_CONTACTID:
entry.Location = Note->Entries[i].Number;
entry.MemoryType = MEM_ME;
error=Phone->GetMemory(&s, &entry);
if (error == ERR_NONE) {
name = GSM_PhonebookGetEntryName(&entry);
if (name != NULL) {
printmsg("Contact ID : \"%s\" (%d)\n", DecodeUnicodeConsole(name), Note->Entries[i].Number);
} else {
printmsg("Contact ID : %d\n",Note->Entries[i].Number);
}
} else {
printmsg("Contact ID : %d\n",Note->Entries[i].Number);
}
break;
case CAL_REPEAT_DAYOFWEEK:
repeat_dayofweek = Note->Entries[i].Number;
repeating = true;
break;
case CAL_REPEAT_DAY:
repeat_day = Note->Entries[i].Number;
repeating = true;
break;
case CAL_REPEAT_WEEKOFMONTH:
repeat_weekofmonth = Note->Entries[i].Number;
repeating = true;
break;
case CAL_REPEAT_MONTH:
repeat_month = Note->Entries[i].Number;
repeating = true;
break;
case CAL_REPEAT_FREQUENCY:
repeat_frequency = Note->Entries[i].Number;
repeating = true;
break;
case CAL_REPEAT_STARTDATE:
repeat_startdate = Note->Entries[i].Date;
repeating = true;
break;
case CAL_REPEAT_STOPDATE:
repeat_stopdate = Note->Entries[i].Date;
repeating = true;
break;
}
}
if (repeating) {
printmsg("Repeating : ");
if ((repeat_startdate.Day == 0) && (repeat_stopdate.Day == 0)) {
printmsg("Forever");
} else if (repeat_startdate.Day == 0) {
printmsg("Till %s", OSDate(repeat_stopdate));
} else if (repeat_stopdate.Day == 0) {
printmsg("Since %s", OSDate(repeat_startdate));
} else {
printmsg("Since %s till %s", OSDate(repeat_startdate), OSDate(repeat_stopdate));
}
if (repeat_frequency != -1) {
if (repeat_frequency == 1) {
printmsg (" on each ");
} else {
printmsg(" on each %d. ", repeat_frequency);
}
if (repeat_dayofweek > 0) {
switch (repeat_dayofweek) {
case 1 : printmsg("Monday"); break;
case 2 : printmsg("Tuesday"); break;
case 3 : printmsg("Wednesday"); break;
case 4 : printmsg("Thursday"); break;
case 5 : printmsg("Friday"); break;
case 6 : printmsg("Saturday"); break;
case 7 : printmsg("Sunday"); break;
default: printmsg("Bad day!"); break;
}
if (repeat_weekofmonth > 0) {
printmsg(" in %d. week of ", repeat_weekofmonth);
} else {
printmsg(" in ");
}
if (repeat_month > 0) {
switch(repeat_month) {
case 1 : printmsg("January"); break;
case 2 : printmsg("February"); break;
case 3 : printmsg("March"); break;
case 4 : printmsg("April"); break;
case 5 : printmsg("May"); break;
case 6 : printmsg("June"); break;
case 7 : printmsg("July"); break;
case 8 : printmsg("August"); break;
case 9 : printmsg("September"); break;
case 10: printmsg("October"); break;
case 11: printmsg("November"); break;
case 12: printmsg("December"); break;
default: printmsg("Bad month!"); break;
}
} else {
printmsg("each month");
}
} else if (repeat_day > 0) {
printmsg("%d. day of ", repeat_day);
if (repeat_month > 0) {
switch(repeat_month) {
case 1 : printmsg("January"); break;
case 2 : printmsg("February"); break;
case 3 : printmsg("March"); break;
case 4 : printmsg("April"); break;
case 5 : printmsg("May"); break;
case 6 : printmsg("June"); break;
case 7 : printmsg("July"); break;
case 8 : printmsg("August"); break;
case 9 : printmsg("September"); break;
case 10: printmsg("October"); break;
case 11: printmsg("November"); break;
case 12: printmsg("December"); break;
default: printmsg("Bad month!");break;
}
} else {
printmsg("each month");
}
} else {
printmsg("day");
}
}
printf("\n");
}
if (Note->Type == GSM_CAL_BIRTHDAY) {
if (Alarm.Year == 0x00) GSM_GetCurrentDateTime (&Alarm);
if (DateTime.Year != 0) {
i_age = Alarm.Year - DateTime.Year;
if (DateTime.Month < Alarm.Month) i_age++;
if (DateTime.Month == Alarm.Month &&
DateTime.Day < Alarm.Day) {
i_age++;
}
printmsg("Age : %d %s\n",i_age, (i_age==1)?"year":"years");
}
}
printf("\n");
}
static void GetCalendar(int argc, char *argv[])
{
GSM_CalendarEntry Note;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
Note.Location=i;
error = Phone->GetCalendar(&s, &Note);
if (error == ERR_EMPTY) continue;
Print_Error(error);
PrintCalendar(&Note);
}
GSM_Terminate();
}
static void DeleteCalendar(int argc, char *argv[])
{
GSM_CalendarEntry Note;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
Note.Location=i;
error = Phone->DeleteCalendar(&s, &Note);
if (error == ERR_EMPTY) continue;
Print_Error(error);
PrintCalendar(&Note);
}
GSM_Terminate();
}
static void GetAllCalendar(int argc, char *argv[])
{
GSM_CalendarEntry Note;
bool refresh = true;
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
GSM_Init(true);
while (!gshutdown) {
error=Phone->GetNextCalendar(&s,&Note,refresh);
if (error == ERR_EMPTY) break;
Print_Error(error);
PrintCalendar(&Note);
refresh=false;
}
GSM_Terminate();
}
static void GetCalendarSettings(int argc, char *argv[])
{
GSM_CalendarSettings settings;
GSM_Init(true);
error=Phone->GetCalendarSettings(&s,&settings);
Print_Error(error);
if (settings.AutoDelete == 0) {
printmsg("Auto deleting disabled");
} else {
printmsg("Auto deleting notes after %i day(s)",settings.AutoDelete);
}
printmsg("\nWeek start on ");
switch(settings.StartDay) {
case 1: printmsg("Monday"); break;
case 6: printmsg("Saturday"); break;
case 7: printmsg("Sunday"); break;
}
printf("\n");
GSM_Terminate();
}
static void GetWAPBookmark(int argc, char *argv[])
{
GSM_WAPBookmark bookmark;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
bookmark.Location=i;
error=Phone->GetWAPBookmark(&s,&bookmark);
Print_Error(error);
printmsg("Name : \"%s\"\n",DecodeUnicodeConsole(bookmark.Title));
printmsg("Address : \"%s\"\n",DecodeUnicodeConsole(bookmark.Address));
}
GSM_Terminate();
}
static void DeleteWAPBookmark(int argc, char *argv[])
{
GSM_WAPBookmark bookmark;
int start, stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
bookmark.Location=i;
error=Phone->DeleteWAPBookmark(&s, &bookmark);
Print_Error(error);
}
GSM_Terminate();
}
static void GetGPRSPoint(int argc, char *argv[])
{
GSM_GPRSAccessPoint point;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
point.Location=i;
error=Phone->GetGPRSAccessPoint(&s,&point);
if (error != ERR_EMPTY) {
Print_Error(error);
printmsg("%i. \"%s\"",point.Location,DecodeUnicodeConsole(point.Name));
} else {
printmsg("%i. Access point %i",point.Location,point.Location);
}
if (point.Active) printmsg(" (active)");
if (error != ERR_EMPTY) {
printmsg("\nAddress : \"%s\"\n\n",DecodeUnicodeConsole(point.URL));
} else {
printmsg("\n\n");
}
}
GSM_Terminate();
}
static void GetBitmap(int argc, char *argv[])
{
GSM_File File;
GSM_MultiBitmap MultiBitmap;
int location=0;
GSM_AllRingtonesInfo Info;
if (mystrncasecmp(argv[2],"STARTUP",0)) {
MultiBitmap.Bitmap[0].Type=GSM_StartupLogo;
} else if (mystrncasecmp(argv[2],"CALLER",0)) {
MultiBitmap.Bitmap[0].Type=GSM_CallerGroupLogo;
GetStartStop(&location, NULL, 3, argc, argv);
if (location>5) {
printmsg("Maximal location for caller logo can be 5\n");
exit (-1);
}
} else if (mystrncasecmp(argv[2],"PICTURE",0)) {
MultiBitmap.Bitmap[0].Type=GSM_PictureImage;
GetStartStop(&location, NULL, 3, argc, argv);
} else if (mystrncasecmp(argv[2],"TEXT",0)) {
MultiBitmap.Bitmap[0].Type=GSM_WelcomeNote_Text;
} else if (mystrncasecmp(argv[2],"DEALER",0)) {
MultiBitmap.Bitmap[0].Type=GSM_DealerNote_Text;
} else if (mystrncasecmp(argv[2],"OPERATOR",0)) {
MultiBitmap.Bitmap[0].Type=GSM_OperatorLogo;
} else {
printmsg("What type of logo do you want to get (\"%s\") ?\n",argv[2]);
exit(-1);
}
MultiBitmap.Bitmap[0].Location=location;
GSM_Init(true);
error=Phone->GetBitmap(&s,&MultiBitmap.Bitmap[0]);
Print_Error(error);
MultiBitmap.Number = 1;
error=ERR_NONE;
switch (MultiBitmap.Bitmap[0].Type) {
case GSM_CallerGroupLogo:
if (!MultiBitmap.Bitmap[0].DefaultBitmap) GSM_PrintBitmap(stdout,&MultiBitmap.Bitmap[0]);
printmsg("Group name : \"%s\"",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Text));
if (MultiBitmap.Bitmap[0].DefaultName) printmsg(" (default)");
printf("\n");
if (MultiBitmap.Bitmap[0].DefaultRingtone) {
printmsg("Ringtone : default\n");
} else if (MultiBitmap.Bitmap[0].FileSystemRingtone) {
sprintf(File.ID_FullName,"%i",MultiBitmap.Bitmap[0].RingtoneID);
File.Buffer = NULL;
File.Used = 0;
error = ERR_NONE;
// while (error == ERR_NONE) {
error = Phone->GetFilePart(&s,&File);
// }
if (error != ERR_EMPTY && error != ERR_WRONGCRC) Print_Error(error);
error = ERR_NONE;
printmsg("Ringtone : \"%s\" (file with ID %i)\n",
DecodeUnicodeString(File.Name),
MultiBitmap.Bitmap[0].RingtoneID);
} else {
error = Phone->GetRingtonesInfo(&s,&Info);
if (error != ERR_NONE) Info.Number = 0;
error = ERR_NONE;
printmsg("Ringtone : ");
if (UnicodeLength(GSM_GetRingtoneName(&Info,MultiBitmap.Bitmap[0].RingtoneID))!=0) {
printmsg("\"%s\" (ID %i)\n",
DecodeUnicodeConsole(GSM_GetRingtoneName(&Info,MultiBitmap.Bitmap[0].RingtoneID)),
MultiBitmap.Bitmap[0].RingtoneID);
} else {
printmsg("ID %i\n",MultiBitmap.Bitmap[0].RingtoneID);
}
}
if (MultiBitmap.Bitmap[0].BitmapEnabled) {
printmsg("Bitmap : enabled\n");
} else {
printmsg("Bitmap : disabled\n");
}
if (argc>4 && !MultiBitmap.Bitmap[0].DefaultBitmap) error=GSM_SaveBitmapFile(argv[4],&MultiBitmap);
break;
case GSM_StartupLogo:
GSM_PrintBitmap(stdout,&MultiBitmap.Bitmap[0]);
if (argc>3) error=GSM_SaveBitmapFile(argv[3],&MultiBitmap);
break;
case GSM_OperatorLogo:
if (strcmp(MultiBitmap.Bitmap[0].NetworkCode,"000 00")!=0) {
GSM_PrintBitmap(stdout,&MultiBitmap.Bitmap[0]);
if (argc>3) error=GSM_SaveBitmapFile(argv[3],&MultiBitmap);
} else {
printmsg("No operator logo in phone\n");
}
break;
case GSM_PictureImage:
GSM_PrintBitmap(stdout,&MultiBitmap.Bitmap[0]);
printmsg("Text : \"%s\"\n",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Text));
printmsg("Sender : \"%s\"\n",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Sender));
if (MultiBitmap.Bitmap[0].Name)
printmsg("Name : \"%s\"\n",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Name));
if (argc>4) error=GSM_SaveBitmapFile(argv[4],&MultiBitmap);
break;
case GSM_WelcomeNote_Text:
printmsg("Welcome note text is \"%s\"\n",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Text));
break;
case GSM_DealerNote_Text:
printmsg("Dealer note text is \"%s\"\n",DecodeUnicodeConsole(MultiBitmap.Bitmap[0].Text));
break;
default:
break;
}
Print_Error(error);
GSM_Terminate();
}
static void SetBitmap(int argc, char *argv[])
{
GSM_Bitmap Bitmap, NewBitmap;
GSM_MultiBitmap MultiBitmap;
GSM_NetworkInfo NetInfo;
bool init = true;
if (mystrncasecmp(argv[2],"STARTUP",0)) {
if (argc<4) {
printmsg("More arguments required\n");
exit(-1);
}
MultiBitmap.Bitmap[0].Type=GSM_StartupLogo;
MultiBitmap.Bitmap[0].Location=1;
if (!strcmp(argv[3],"1")) MultiBitmap.Bitmap[0].Location = 2;
if (!strcmp(argv[3],"2")) MultiBitmap.Bitmap[0].Location = 3;
if (!strcmp(argv[3],"3")) MultiBitmap.Bitmap[0].Location = 4;
if (MultiBitmap.Bitmap[0].Location == 1) {
error=GSM_ReadBitmapFile(argv[3],&MultiBitmap);
Print_Error(error);
}
memcpy(&Bitmap,&MultiBitmap.Bitmap[0],sizeof(GSM_Bitmap));
} else if (mystrncasecmp(argv[2],"TEXT",0)) {
if (argc<4) {
printmsg("More arguments required\n");
exit(-1);
}
Bitmap.Type=GSM_WelcomeNote_Text;
EncodeUnicode(Bitmap.Text,argv[3],strlen(argv[3]));
} else if (mystrncasecmp(argv[2],"DEALER",0)) {
if (argc<4) {
printmsg("More arguments required\n");
exit(-1);
}
Bitmap.Type=GSM_DealerNote_Text;
EncodeUnicode(Bitmap.Text,argv[3],strlen(argv[3]));
} else if (mystrncasecmp(argv[2],"CALLER",0)) {
if (argc<4) {
printmsg("More arguments required\n");
exit(-1);
}
GetStartStop(&i, NULL, 3, argc, argv);
if (i>5 && i!=255) {
printmsg("Maximal location for caller logo can be 5\n");
exit (-1);
}
MultiBitmap.Bitmap[0].Type = GSM_CallerGroupLogo;
MultiBitmap.Bitmap[0].Location = i;
if (argc>4) {
error=GSM_ReadBitmapFile(argv[4],&MultiBitmap);
Print_Error(error);
}
memcpy(&Bitmap,&MultiBitmap.Bitmap[0],sizeof(GSM_Bitmap));
if (i!=255) {
GSM_Init(true);
init = false;
NewBitmap.Type = GSM_CallerGroupLogo;
NewBitmap.Location = i;
error=Phone->GetBitmap(&s,&NewBitmap);
Print_Error(error);
Bitmap.RingtoneID = NewBitmap.RingtoneID;
Bitmap.DefaultRingtone = NewBitmap.DefaultRingtone;
Bitmap.FileSystemRingtone = false;
CopyUnicodeString(Bitmap.Text, NewBitmap.Text);
Bitmap.DefaultName = NewBitmap.DefaultName;
}
} else if (mystrncasecmp(argv[2],"PICTURE",0)) {
if (argc<5) {
printmsg("More arguments required\n");
exit(-1);
}
MultiBitmap.Bitmap[0].Type = GSM_PictureImage;
MultiBitmap.Bitmap[0].Location = atoi(argv[4]);
error=GSM_ReadBitmapFile(argv[3],&MultiBitmap);
Print_Error(error);
memcpy(&Bitmap,&MultiBitmap.Bitmap[0],sizeof(GSM_Bitmap));
Bitmap.Text[0]=0;
Bitmap.Text[1]=0;
if (argc == 6) EncodeUnicode(Bitmap.Text,argv[5],strlen(argv[5]));
Bitmap.Sender[0]=0;
Bitmap.Sender[1]=0;
} else if (mystrncasecmp(argv[2],"COLOUROPERATOR",0)) {
Bitmap.Type = GSM_ColourOperatorLogo_ID;
strcpy(Bitmap.NetworkCode,"000 00");
if (argc > 3) {
Bitmap.ID = atoi(argv[3]);
if (argc>4) {
strncpy(Bitmap.NetworkCode,argv[4],6);
} else {
GSM_Init(true);
init = false;
error=Phone->GetNetworkInfo(&s,&NetInfo);
Print_Error(error);
strcpy(Bitmap.NetworkCode,NetInfo.NetworkCode);
}
}
} else if (mystrncasecmp(argv[2],"COLOURSTARTUP",0)) {
Bitmap.Type = GSM_ColourStartupLogo_ID;
Bitmap.Location = 0;
if (argc > 3) {
Bitmap.Location = 1;
Bitmap.ID = atoi(argv[3]);
}
} else if (mystrncasecmp(argv[2],"WALLPAPER",0)) {
Bitmap.Type = GSM_ColourWallPaper_ID;
Bitmap.ID = 0;
if (argc > 3) Bitmap.ID = atoi(argv[3]);
} else if (mystrncasecmp(argv[2],"OPERATOR",0)) {
MultiBitmap.Bitmap[0].Type = GSM_OperatorLogo;
MultiBitmap.Bitmap[0].Location = 1;
strcpy(MultiBitmap.Bitmap[0].NetworkCode,"000 00");
if (argc>3) {
error=GSM_ReadBitmapFile(argv[3],&MultiBitmap);
Print_Error(error);
if (argc>4) {
strncpy(MultiBitmap.Bitmap[0].NetworkCode,argv[4],6);
} else {
GSM_Init(true);
init = false;
error=Phone->GetNetworkInfo(&s,&NetInfo);
Print_Error(error);
strcpy(MultiBitmap.Bitmap[0].NetworkCode,NetInfo.NetworkCode);
}
}
memcpy(&Bitmap,&MultiBitmap.Bitmap[0],sizeof(GSM_Bitmap));
} else {
printmsg("What type of logo do you want to set (\"%s\") ?\n",argv[2]);
exit(-1);
}
if (init) GSM_Init(true);
error=Phone->SetBitmap(&s,&Bitmap);
Print_Error(error);
#ifdef GSM_ENABLE_BEEP
GSM_PhoneBeep();
#endif
GSM_Terminate();
}
static void SetRingtone(int argc, char *argv[])
{
GSM_Ringtone ringtone;
int i,nextlong=0;
ringtone.Format = 0;
error=GSM_ReadRingtoneFile(argv[2],&ringtone);
Print_Error(error);
ringtone.Location = 255;
for (i=3;i<argc;i++) {
switch (nextlong) {
case 0:
if (mystrncasecmp(argv[i],"-scale",0)) {
ringtone.NoteTone.AllNotesScale = true;
break;
}
if (mystrncasecmp(argv[i],"-location",0)) {
nextlong = 1;
break;
}
if (mystrncasecmp(argv[i],"-name",0)) {
nextlong = 2;
break;
}
printmsg("Unknown parameter \"%s\"",argv[i]);
exit(-1);
case 1:
ringtone.Location=atoi(argv[i]);
nextlong = 0;
break;
case 2:
EncodeUnicode(ringtone.Name,argv[i],strlen(argv[i]));
nextlong = 0;
break;
}
}
if (nextlong!=0) {
printmsg("Parameter missed...\n");
exit(-1);
}
if (ringtone.Location==0) {
printmsg("ERROR: enumerate locations from 1\n");
exit (-1);
}
GSM_Init(true);
error=Phone->SetRingtone(&s, &ringtone, &i);
Print_Error(error);
#ifdef GSM_ENABLE_BEEP
GSM_PhoneBeep();
#endif
GSM_Terminate();
}
static void DisplaySMSFrame(GSM_SMSMessage *SMS)
{
GSM_Error error;
int i, length, current = 0;
unsigned char req[1000], buffer[1000], hexreq[1000];
#ifdef OSCAR
unsigned char hexmsg[1000], hexudh[1000];
#endif
error=PHONE_EncodeSMSFrame(&s,SMS,buffer,PHONE_SMSSubmit,&length,true);
if (error != ERR_NONE) {
printmsg("Error\n");
exit(-1);
}
length = length - PHONE_SMSSubmit.Text;
#ifdef OSCAR
for(i=SMS->UDH.Length;i<length;i++) {
req[i-SMS->UDH.Length]=buffer[PHONE_SMSSubmit.Text+i];
}
EncodeHexBin(hexmsg, req, length-SMS->UDH.Length);
for(i=0;i<SMS->UDH.Length;i++) {
req[i]=buffer[PHONE_SMSSubmit.Text+i];
}
EncodeHexBin(hexudh, req, SMS->UDH.Length);
printf("msg:%s nb:%i udh:%s\n",
hexmsg,
(buffer[PHONE_SMSSubmit.TPUDL]-SMS->UDH.Length)*8,
hexudh);
#else
for (i=0;i<buffer[PHONE_SMSSubmit.SMSCNumber]+1;i++) {
req[current++]=buffer[PHONE_SMSSubmit.SMSCNumber+i];
}
req[current++]=buffer[PHONE_SMSSubmit.firstbyte];
req[current++]=buffer[PHONE_SMSSubmit.TPMR];
for (i=0;i<((buffer[PHONE_SMSSubmit.Number]+1)/2+1)+1;i++) {
req[current++]=buffer[PHONE_SMSSubmit.Number+i];
}
req[current++]=buffer[PHONE_SMSSubmit.TPPID];
req[current++]=buffer[PHONE_SMSSubmit.TPDCS];
req[current++]=buffer[PHONE_SMSSubmit.TPVP];
req[current++]=buffer[PHONE_SMSSubmit.TPUDL];
for(i=0;i<length;i++) req[current++]=buffer[PHONE_SMSSubmit.Text+i];
EncodeHexBin(hexreq, req, current);
printmsg("%s\n\n",hexreq);
#endif
}
#define SEND_SAVE_SMS_BUFFER_SIZE 10000
static GSM_Error SMSStatus;
static void SendSMSStatus (char *Device, int status, int MessageReference)
{
dbgprintf("Sent SMS on device: \"%s\"\n",Device);
if (status==0) {
printmsg("..OK");
SMSStatus = ERR_NONE;
} else {
printmsg("..error %i",status);
SMSStatus = ERR_UNKNOWN;
}
printmsg(", message reference=%d\n",MessageReference);
}
static void SendSaveDisplaySMS(int argc, char *argv[])
{
#ifdef GSM_ENABLE_BACKUP
GSM_Backup Backup;
#endif
int i,j,z,FramesNum = 0;
int Protected = 0;
GSM_SMSFolders folders;
GSM_MultiSMSMessage sms;
GSM_Ringtone ringtone[MAX_MULTI_SMS];
GSM_MultiBitmap bitmap[MAX_MULTI_SMS],bitmap2;
GSM_MultiPartSMSInfo SMSInfo;
GSM_NetworkInfo NetInfo;
GSM_MMSIndicator MMSInfo;
FILE *ReplaceFile,*f;
char ReplaceBuffer2 [200],ReplaceBuffer[200];
char InputBuffer [SEND_SAVE_SMS_BUFFER_SIZE/2+1];
char Buffer [MAX_MULTI_SMS][SEND_SAVE_SMS_BUFFER_SIZE];
char Sender [(GSM_MAX_NUMBER_LENGTH+1)*2];
char Name [(GSM_MAX_NUMBER_LENGTH+1)*2];
char SMSC [(GSM_MAX_NUMBER_LENGTH+1)*2];
int startarg = 0;
int chars_read = 0;
int nextlong = 0;
bool ReplyViaSameSMSC = false;
int SMSCSet = 1;
int MaxSMS = -1;
bool EMS16Bit = false;
bool SendSaved = false;
/* Parameters required only during saving */
int Folder = 1; /*Inbox by default */
GSM_SMS_State State = SMS_Sent;
/* Required only during sending */
GSM_SMSValidity Validity;
GSM_SMSC PhoneSMSC;
bool DeliveryReport = false;
ReplaceBuffer[0] = 0;
ReplaceBuffer[1] = 0;
GSM_ClearMultiPartSMSInfo(&SMSInfo);
SMSInfo.ReplaceMessage = 0;
SMSInfo.EntriesNum = 1;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender,"Gammu",5);
Name[0] = 0;
Name[1] = 0;
startarg = 0;
} else {
EncodeUnicode(Sender,argv[3],strlen(argv[3]));
startarg = 1;
Validity.Format = 0;
}
if (mystrncasecmp(argv[1],"--sendsmsdsms",0)) {
startarg=startarg+2;
EncodeUnicode(SMSC,"1234",4);
SMSCSet = 0;
}
if (mystrncasecmp(argv[2],"TEXT",0)) {
chars_read = fread(InputBuffer, 1, SEND_SAVE_SMS_BUFFER_SIZE/2, stdin);
if (chars_read == 0) printmsg("Warning: 0 chars read !\n");
InputBuffer[chars_read] = 0x00;
InputBuffer[chars_read+1] = 0x00;
EncodeUnicode(Buffer[0],InputBuffer,strlen(InputBuffer));
SMSInfo.Entries[0].Buffer = Buffer[0];
SMSInfo.Entries[0].ID = SMS_Text;
SMSInfo.UnicodeCoding = false;
startarg += 3;
} else if (mystrncasecmp(argv[2],"SMSTEMPLATE",0)) {
SMSInfo.UnicodeCoding = false;
SMSInfo.EntriesNum = 1;
Buffer[0][0] = 0x00;
Buffer[0][1] = 0x00;
SMSInfo.Entries[0].Buffer = Buffer[0];
SMSInfo.Entries[0].ID = SMS_AlcatelSMSTemplateName;
startarg += 3;
} else if (mystrncasecmp(argv[2],"EMS",0)) {
SMSInfo.UnicodeCoding = false;
SMSInfo.EntriesNum = 0;
startarg += 3;
} else if (mystrncasecmp(argv[2],"MMSINDICATOR",0)) {
if (argc<6+startarg) {
printmsg("Where are parameters ?\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_MMSIndicatorLong;
SMSInfo.Entries[0].MMSIndicator = &MMSInfo;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender,"MMS Info",8);
}
strcpy(MMSInfo.Address, argv[3+startarg]);
strcpy(MMSInfo.Title, argv[4+startarg]);
strcpy(MMSInfo.Sender, argv[5+startarg]);
startarg += 6;
} else if (mystrncasecmp(argv[2],"WAPINDICATOR",0)) {
if (argc<5+startarg) {
printmsg("Where are parameters ?\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_WAPIndicatorLong;
SMSInfo.Entries[0].MMSIndicator = &MMSInfo;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender,"WAP Info",8);
}
strcpy(MMSInfo.Address, argv[3+startarg]);
strcpy(MMSInfo.Title, argv[4+startarg]);
startarg += 5;
} else if (mystrncasecmp(argv[2],"RINGTONE",0)) {
if (argc<4+startarg) {
printmsg("Where is ringtone filename ?\n");
exit(-1);
}
ringtone[0].Format=RING_NOTETONE;
error=GSM_ReadRingtoneFile(argv[3+startarg],&ringtone[0]);
Print_Error(error);
SMSInfo.Entries[0].ID = SMS_NokiaRingtone;
SMSInfo.Entries[0].Ringtone = &ringtone[0];
if (mystrncasecmp(argv[1],"--savesms",0)) {
CopyUnicodeString(Sender, ringtone[0].Name);
EncodeUnicode(Name,"Ringtone ",9);
CopyUnicodeString(Name+9*2, ringtone[0].Name);
}
startarg += 4;
} else if (mystrncasecmp(argv[2],"OPERATOR",0)) {
if (argc<4+startarg) {
printmsg("Where is logo filename ?\n");
exit(-1);
}
bitmap[0].Bitmap[0].Type=GSM_OperatorLogo;
error=GSM_ReadBitmapFile(argv[3+startarg],&bitmap[0]);
Print_Error(error);
strcpy(bitmap[0].Bitmap[0].NetworkCode,"000 00");
SMSInfo.Entries[0].ID = SMS_NokiaOperatorLogo;
SMSInfo.Entries[0].Bitmap = &bitmap[0];
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "OpLogo",6);
EncodeUnicode(Name,"OpLogo ",7);
}
startarg += 4;
} else if (mystrncasecmp(argv[2],"CALLER",0)) {
if (argc<4+startarg) {
printmsg("Where is logo filename ?\n");
exit(-1);
}
bitmap[0].Bitmap[0].Type=GSM_CallerGroupLogo;
error=GSM_ReadBitmapFile(argv[3+startarg],&bitmap[0]);
Print_Error(error);
SMSInfo.Entries[0].ID = SMS_NokiaCallerLogo;
SMSInfo.Entries[0].Bitmap = &bitmap[0];
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Caller",6);
}
startarg += 4;
} else if (mystrncasecmp(argv[2],"ANIMATION",0)) {
SMSInfo.UnicodeCoding = false;
SMSInfo.EntriesNum = 1;
if (argc<4+startarg) {
printmsg("Where is number of frames ?\n");
exit(-1);
}
bitmap[0].Number = 0;
i = 1;
while (1) {
bitmap2.Bitmap[0].Type=GSM_StartupLogo;
error=GSM_ReadBitmapFile(argv[3+startarg+i],&bitmap2);
Print_Error(error);
for (j=0;j<bitmap2.Number;j++) {
if (bitmap[0].Number == atoi(argv[3+startarg])) break;
memcpy(&bitmap[0].Bitmap[bitmap[0].Number],&bitmap2.Bitmap[j],sizeof(GSM_Bitmap));
bitmap[0].Number++;
}
if (bitmap[0].Number == atoi(argv[3+startarg])) break;
i++;
}
SMSInfo.Entries[0].ID = SMS_AlcatelMonoAnimationLong;
SMSInfo.Entries[0].Bitmap = &bitmap[0];
bitmap[0].Bitmap[0].Text[0] = 0;
bitmap[0].Bitmap[0].Text[1] = 0;
startarg += 4 + atoi(argv[3+startarg]);
} else if (mystrncasecmp(argv[2],"PICTURE",0)) {
if (argc<4+startarg) {
printmsg("Where is logo filename ?\n");
exit(-1);
}
bitmap[0].Bitmap[0].Type=GSM_PictureImage;
error=GSM_ReadBitmapFile(argv[3+startarg],&bitmap[0]);
printmsg("File \"%s\"\n",argv[3+startarg]);
Print_Error(error);
SMSInfo.Entries[0].ID = SMS_NokiaPictureImageLong;
SMSInfo.Entries[0].Bitmap = &bitmap[0];
SMSInfo.UnicodeCoding = false;
bitmap[0].Bitmap[0].Text[0] = 0;
bitmap[0].Bitmap[0].Text[1] = 0;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Picture",7);
EncodeUnicode(Name,"Picture Image",13);
}
startarg += 4;
#ifdef GSM_ENABLE_BACKUP
} else if (mystrncasecmp(argv[2],"BOOKMARK",0)) {
if (argc<5+startarg) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.WAPBookmark[i]!=NULL) {
if (i == atoi(argv[4+startarg])-1) break;
i++;
}
if (i != atoi(argv[4+startarg])-1) {
printmsg("Bookmark not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_NokiaWAPBookmarkLong;
SMSInfo.Entries[0].Bookmark = Backup.WAPBookmark[i];
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Bookmark",8);
EncodeUnicode(Name,"WAP Bookmark",12);
}
startarg += 5;
} else if (mystrncasecmp(argv[2],"WAPSETTINGS",0)) {
if (argc<6+startarg) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.WAPSettings[i]!=NULL) {
if (i == atoi(argv[4+startarg])-1) break;
i++;
}
if (i != atoi(argv[4+startarg])-1) {
printmsg("WAP settings not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].Settings = NULL;
for (j=0;j<Backup.WAPSettings[i]->Number;j++) {
switch (Backup.WAPSettings[i]->Settings[j].Bearer) {
case WAPSETTINGS_BEARER_GPRS:
if (mystrncasecmp(argv[5+startarg],"GPRS",0)) {
SMSInfo.Entries[0].Settings = &Backup.WAPSettings[i]->Settings[j];
break;
}
case WAPSETTINGS_BEARER_DATA:
if (mystrncasecmp(argv[5+startarg],"DATA",0)) {
SMSInfo.Entries[0].Settings = &Backup.WAPSettings[i]->Settings[j];
break;
}
default:
break;
}
}
if (SMSInfo.Entries[0].Settings == NULL) {
printmsg("Sorry. For now there is only support for GPRS or DATA bearers end\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_NokiaWAPSettingsLong;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Settings",8);
EncodeUnicode(Name,"WAP Settings",12);
}
startarg += 6;
} else if (mystrncasecmp(argv[2],"MMSSETTINGS",0)) {
if (argc<5+startarg) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.MMSSettings[i]!=NULL) {
if (i == atoi(argv[4+startarg])-1) break;
i++;
}
if (i != atoi(argv[4+startarg])-1) {
printmsg("MMS settings not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].Settings = NULL;
for (j=0;j<Backup.MMSSettings[i]->Number;j++) {
switch (Backup.MMSSettings[i]->Settings[j].Bearer) {
case WAPSETTINGS_BEARER_GPRS:
SMSInfo.Entries[0].Settings = &Backup.MMSSettings[i]->Settings[j];
break;
default:
break;
}
}
if (SMSInfo.Entries[0].Settings == NULL) {
printmsg("Sorry. No GPRS bearer found in MMS settings\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_NokiaMMSSettingsLong;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Settings",8);
EncodeUnicode(Name,"MMS Settings",12);
}
startarg += 5;
} else if (mystrncasecmp(argv[2],"CALENDAR",0)) {
if (argc<5+startarg) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.Calendar[i]!=NULL) {
if (i == atoi(argv[4+startarg])-1) break;
i++;
}
if (i != atoi(argv[4+startarg])-1) {
printmsg("Calendar note not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_NokiaVCALENDAR10Long;
SMSInfo.Entries[0].Calendar = Backup.Calendar[i];
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Calendar",8);
}
startarg += 5;
} else if (mystrncasecmp(argv[2],"TODO",0)) {
if (argc<5+startarg) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.ToDo[i]!=NULL) {
if (i == atoi(argv[4+startarg])-1) break;
i++;
}
if (i != atoi(argv[4+startarg])-1) {
printmsg("ToDo note not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].ID = SMS_NokiaVTODOLong;
SMSInfo.Entries[0].ToDo = Backup.ToDo[i];
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "ToDo",8);
}
startarg += 5;
} else if (mystrncasecmp(argv[2],"VCARD10",0) || mystrncasecmp(argv[2],"VCARD21",0)) {
if (argc<6+startarg) {
printmsg("Where is backup filename and location and memory type ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[3+startarg],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
if (mystrncasecmp(argv[4+startarg],"SM",0)) {
while (Backup.SIMPhonebook[i]!=NULL) {
if (i == atoi(argv[5+startarg])-1) break;
i++;
}
if (i != atoi(argv[5+startarg])-1) {
printmsg("Phonebook entry not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].Phonebook = Backup.SIMPhonebook[i];
} else if (mystrncasecmp(argv[4+startarg],"ME",0)) {
while (Backup.PhonePhonebook[i]!=NULL) {
if (i == atoi(argv[5+startarg])-1) break;
i++;
}
if (i != atoi(argv[5+startarg])-1) {
printmsg("Phonebook entry not found in file\n");
exit(-1);
}
SMSInfo.Entries[0].Phonebook = Backup.PhonePhonebook[i];
} else {
printmsg("Unknown memory type: \"%s\"\n",argv[4+startarg]);
exit(-1);
}
if (mystrncasecmp(argv[2],"VCARD10",0)) {
SMSInfo.Entries[0].ID = SMS_VCARD10Long;
} else {
SMSInfo.Entries[0].ID = SMS_VCARD21Long;
}
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "VCARD",5);
EncodeUnicode(Name, "Phonebook entry",15);
}
startarg += 6;
#endif
} else if (mystrncasecmp(argv[2],"PROFILE",0)) {
SMSInfo.Entries[0].ID = SMS_NokiaProfileLong;
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "Profile",7);
}
startarg += 3;
} else {
printmsg("What format of sms (\"%s\") ?\n",argv[2]);
exit(-1);
}
for (i=startarg;i<argc;i++) {
switch (nextlong) {
case 0:
if (mystrncasecmp(argv[1],"--savesms",0) || SendSaved) {
if (mystrncasecmp(argv[i],"-folder",0)) {
nextlong=1;
continue;
}
}
if (mystrncasecmp(argv[1],"--savesms",0)) {
if (mystrncasecmp(argv[i],"-unread",0)) {
State = SMS_UnRead;
continue;
}
if (mystrncasecmp(argv[i],"-read",0)) {
State = SMS_Read;
continue;
}
if (mystrncasecmp(argv[i],"-unsent",0)) {
State = SMS_UnSent;
continue;
}
if (mystrncasecmp(argv[i],"-sent",0)) {
State = SMS_Sent;
continue;
}
if (mystrncasecmp(argv[i],"-sender",0)) {
nextlong=2;
continue;
}
} else {
if (mystrncasecmp(argv[i],"-save",0)) {
SendSaved=true;
continue;
}
if (mystrncasecmp(argv[i],"-report",0)) {
DeliveryReport=true;
continue;
}
if (mystrncasecmp(argv[i],"-validity",0)) {
nextlong=10;
continue;
}
}
if (mystrncasecmp(argv[i],"-smscset",0)) {
nextlong=3;
continue;
}
if (mystrncasecmp(argv[i],"-smscnumber",0)) {
nextlong=4;
continue;
}
if (mystrncasecmp(argv[i],"-protected",0)) {
nextlong=19;
continue;
}
if (mystrncasecmp(argv[i],"-reply",0)) {
ReplyViaSameSMSC=true;
continue;
}
if (mystrncasecmp(argv[i],"-maxsms",0)) {
nextlong=21;
continue;
}
if (mystrncasecmp(argv[2],"RINGTONE",0)) {
if (mystrncasecmp(argv[i],"-long",0)) {
SMSInfo.Entries[0].ID = SMS_NokiaRingtoneLong;
break;
}
if (mystrncasecmp(argv[i],"-scale",0)) {
ringtone[0].NoteTone.AllNotesScale=true;
break;
}
}
if (mystrncasecmp(argv[2],"TEXT",0)) {
if (mystrncasecmp(argv[i],"-inputunicode",0)) {
ReadUnicodeFile(Buffer[0],InputBuffer);
break;
}
if (mystrncasecmp(argv[i],"-16bit",0)) {
if (SMSInfo.Entries[0].ID == SMS_ConcatenatedTextLong) SMSInfo.Entries[0].ID = SMS_ConcatenatedTextLong16bit;
if (SMSInfo.Entries[0].ID == SMS_ConcatenatedAutoTextLong) SMSInfo.Entries[0].ID = SMS_ConcatenatedAutoTextLong16bit;
break;
}
if (mystrncasecmp(argv[i],"-flash",0)) {
SMSInfo.Class = 0;
break;
}
if (mystrncasecmp(argv[i],"-len",0)) {
nextlong = 5;
break;
}
if (mystrncasecmp(argv[i],"-autolen",0)) {
nextlong = 5;
break;
}
if (mystrncasecmp(argv[i],"-unicode",0)) {
SMSInfo.UnicodeCoding = true;
break;
}
if (mystrncasecmp(argv[i],"-enablevoice",0)) {
SMSInfo.Entries[0].ID = SMS_EnableVoice;
break;
}
if (mystrncasecmp(argv[i],"-disablevoice",0)) {
SMSInfo.Entries[0].ID = SMS_DisableVoice;
break;
}
if (mystrncasecmp(argv[i],"-enablefax",0)) {
SMSInfo.Entries[0].ID = SMS_EnableFax;
break;
}
if (mystrncasecmp(argv[i],"-disablefax",0)) {
SMSInfo.Entries[0].ID = SMS_DisableFax;
break;
}
if (mystrncasecmp(argv[i],"-enableemail",0)) {
SMSInfo.Entries[0].ID = SMS_EnableEmail;
break;
}
if (mystrncasecmp(argv[i],"-disableemail",0)) {
SMSInfo.Entries[0].ID = SMS_DisableEmail;
break;
}
if (mystrncasecmp(argv[i],"-voidsms",0)) {
SMSInfo.Entries[0].ID = SMS_VoidSMS;
break;
}
if (mystrncasecmp(argv[i],"-replacemessages",0) &&
SMSInfo.Entries[0].ID != SMS_ConcatenatedTextLong) {
nextlong = 8;
break;
}
if (mystrncasecmp(argv[i],"-replacefile",0)) {
nextlong = 9;
continue;
}
}
if (mystrncasecmp(argv[2],"PICTURE",0)) {
if (mystrncasecmp(argv[i],"-text",0)) {
nextlong = 6;
break;
}
if (mystrncasecmp(argv[i],"-unicode",0)) {
SMSInfo.UnicodeCoding = true;
break;
}
if (mystrncasecmp(argv[i],"-alcatelbmmi",0)) {
bitmap[0].Bitmap[0].Type=GSM_StartupLogo;
error=GSM_ReadBitmapFile(argv[startarg-1],&bitmap[0]);
Print_Error(error);
SMSInfo.UnicodeCoding = true;
SMSInfo.Entries[0].ID = SMS_AlcatelMonoBitmapLong;
break;
}
break;
}
if (mystrncasecmp(argv[2],"VCARD10",0)) {
if (mystrncasecmp(argv[i],"-nokia",0)) {
SMSInfo.Entries[0].ID = SMS_NokiaVCARD10Long;
break;
}
break;
}
if (mystrncasecmp(argv[2],"VCARD21",0)) {
if (mystrncasecmp(argv[i],"-nokia",0)) {
SMSInfo.Entries[0].ID = SMS_NokiaVCARD21Long;
break;
}
break;
}
if (mystrncasecmp(argv[2],"PROFILE",0)) {
if (mystrncasecmp(argv[i],"-name",0)) {
nextlong = 22;
break;
}
if (mystrncasecmp(argv[i],"-ringtone",0)) {
nextlong = 23;
break;
}
if (mystrncasecmp(argv[i],"-bitmap",0)) {
nextlong = 24;
break;
}
}
if (mystrncasecmp(argv[2],"SMSTEMPLATE",0)) {
if (mystrncasecmp(argv[i],"-unicode",0)) {
SMSInfo.UnicodeCoding = true;
break;
}
if (mystrncasecmp(argv[i],"-text",0)) {
nextlong = 11;
break;
}
if (mystrncasecmp(argv[i],"-unicodefiletext",0)) {
nextlong = 18;
break;
}
if (mystrncasecmp(argv[i],"-defsound",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSPredefinedSound;
nextlong = 12;
break;
}
if (mystrncasecmp(argv[i],"-defanimation",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSPredefinedAnimation;
nextlong = 12;
break;
}
if (mystrncasecmp(argv[i],"-tone10",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound10;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone10long",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound10Long;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone12",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound12;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone12long",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound12Long;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-toneSE",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSonyEricssonSound;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-toneSElong",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSonyEricssonSoundLong;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-variablebitmap",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSVariableBitmap;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 15;
break;
}
if (mystrncasecmp(argv[i],"-variablebitmaplong",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSVariableBitmapLong;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 15;
break;
}
if (mystrncasecmp(argv[i],"-animation",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSAnimation;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
bitmap[SMSInfo.EntriesNum].Number = 0;
nextlong = 16;
break;
}
}
if (mystrncasecmp(argv[2],"EMS",0)) {
if (mystrncasecmp(argv[i],"-unicode",0)) {
SMSInfo.UnicodeCoding = true;
break;
}
if (mystrncasecmp(argv[i],"-16bit",0)) {
EMS16Bit = true;
break;
}
if (mystrncasecmp(argv[i],"-format",0)) {
nextlong = 20;
break;
}
if (mystrncasecmp(argv[i],"-text",0)) {
nextlong = 11;
break;
}
if (mystrncasecmp(argv[i],"-unicodefiletext",0)) {
nextlong = 18;
break;
}
if (mystrncasecmp(argv[i],"-defsound",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSPredefinedSound;
nextlong = 12;
break;
}
if (mystrncasecmp(argv[i],"-defanimation",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSPredefinedAnimation;
nextlong = 12;
break;
}
if (mystrncasecmp(argv[i],"-tone10",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound10;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone10long",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound10Long;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone12",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound12;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-tone12long",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSound12Long;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-toneSE",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSonyEricssonSound;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-toneSElong",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSSonyEricssonSoundLong;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 14;
break;
}
if (mystrncasecmp(argv[i],"-fixedbitmap",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSFixedBitmap;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 15;
break;
}
if (mystrncasecmp(argv[i],"-variablebitmap",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSVariableBitmap;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 15;
break;
}
if (mystrncasecmp(argv[i],"-variablebitmaplong",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSVariableBitmapLong;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
nextlong = 15;
break;
}
if (mystrncasecmp(argv[i],"-animation",0)) {
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_EMSAnimation;
if (Protected != 0) {
SMSInfo.Entries[SMSInfo.EntriesNum].Protected = true;
Protected --;
}
bitmap[SMSInfo.EntriesNum].Number = 0;
nextlong = 16;
break;
}
}
if (mystrncasecmp(argv[2],"OPERATOR",0)) {
if (mystrncasecmp(argv[i],"-netcode",0)) {
nextlong = 7;
break;
}
if (mystrncasecmp(argv[i],"-biglogo",0)) {
SMSInfo.Entries[0].ID = SMS_NokiaOperatorLogoLong;
break;
}
break;
}
printmsg("Unknown parameter (\"%s\")\n",argv[i]);
exit(-1);
break;
case 1: /* SMS folder - only during saving SMS */
Folder = atoi(argv[i]);
nextlong = 0;
break;
case 2: /* Sender number - only during saving SMS */
EncodeUnicode(Sender,argv[i],strlen(argv[i]));
nextlong = 0;
break;
case 3: /* SMSC set number */
SMSCSet = atoi(argv[i]);
nextlong = 0;
break;
case 4: /* Number of SMSC */
EncodeUnicode(SMSC,argv[i],strlen(argv[i]));
SMSCSet = 0;
nextlong = 0;
break;
case 5: /* Length of text SMS */
if (atoi(argv[i])<chars_read)
{
Buffer[0][atoi(argv[i])*2] = 0x00;
Buffer[0][atoi(argv[i])*2+1] = 0x00;
}
SMSInfo.Entries[0].ID = SMS_ConcatenatedTextLong;
if (mystrncasecmp(argv[i-1],"-autolen",0)) SMSInfo.Entries[0].ID = SMS_ConcatenatedAutoTextLong;
nextlong = 0;
break;
case 6: /* Picture Images - text */
EncodeUnicode(bitmap[0].Bitmap[0].Text,argv[i],strlen(argv[i]));
nextlong = 0;
break;
case 7: /* Operator Logo - network code */
strncpy(bitmap[0].Bitmap[0].NetworkCode,argv[i],7);
if (!strcmp(DecodeUnicodeConsole(GSM_GetNetworkName(bitmap[0].Bitmap[0].NetworkCode)),"unknown")) {
printmsg("Unknown GSM network code (\"%s\")\n",argv[i]);
exit(-1);
}
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "OpLogo",6);
EncodeUnicode(Sender+6*2,bitmap[0].Bitmap[0].NetworkCode,3);
EncodeUnicode(Sender+6*2+3*2,bitmap[0].Bitmap[0].NetworkCode+4,2);
if (UnicodeLength(GSM_GetNetworkName(bitmap[0].Bitmap[0].NetworkCode))<GSM_MAX_SMS_NAME_LENGTH-7) {
EncodeUnicode(Name,"OpLogo ",7);
CopyUnicodeString(Name+7*2,GSM_GetNetworkName(bitmap[0].Bitmap[0].NetworkCode));
} else {
CopyUnicodeString(Name,Sender);
}
}
nextlong = 0;
break;
case 8:/* Reject duplicates ID */
SMSInfo.ReplaceMessage = atoi(argv[i]);
if (SMSInfo.ReplaceMessage < 1 || SMSInfo.ReplaceMessage > 7) {
printmsg("You have to give number between 1 and 7 (\"%s\")\n",argv[i]);
exit(-1);
}
nextlong = 0;
break;
case 9:/* Replace file for text SMS */
ReplaceFile = fopen(argv[i], "rb");
if (ReplaceFile == NULL) Print_Error(ERR_CANTOPENFILE);
memset(ReplaceBuffer,0,sizeof(ReplaceBuffer));
fread(ReplaceBuffer,1,sizeof(ReplaceBuffer),ReplaceFile);
fclose(ReplaceFile);
ReadUnicodeFile(ReplaceBuffer2,ReplaceBuffer);
for(j=0;j<(int)(UnicodeLength(Buffer[0]));j++) {
for (z=0;z<(int)(UnicodeLength(ReplaceBuffer2)/2);z++) {
if (ReplaceBuffer2[z*4] == Buffer[0][j] &&
ReplaceBuffer2[z*4+1] == Buffer[0][j+1]) {
Buffer[0][j] = ReplaceBuffer2[z*4+2];
Buffer[0][j+1] = ReplaceBuffer2[z*4+3];
break;
}
}
}
nextlong = 0;
break;
case 10:
Validity.Format = SMS_Validity_RelativeFormat;
if (mystrncasecmp(argv[i],"HOUR",0)) Validity.Relative = SMS_VALID_1_Hour;
else if (mystrncasecmp(argv[i],"6HOURS",0)) Validity.Relative = SMS_VALID_6_Hours;
else if (mystrncasecmp(argv[i],"DAY",0)) Validity.Relative = SMS_VALID_1_Day;
else if (mystrncasecmp(argv[i],"3DAYS",0)) Validity.Relative = SMS_VALID_3_Days;
else if (mystrncasecmp(argv[i],"WEEK",0)) Validity.Relative = SMS_VALID_1_Week;
else if (mystrncasecmp(argv[i],"MAX",0)) Validity.Relative = SMS_VALID_Max_Time;
else {
printmsg("Unknown validity string (\"%s\")\n",argv[i]);
exit(-1);
}
nextlong = 0;
break;
case 11:/* EMS text from parameter */
EncodeUnicode(Buffer[SMSInfo.EntriesNum],argv[i],strlen(argv[i]));
dbgprintf("buffer is \"%s\"\n",DecodeUnicodeConsole(Buffer[SMSInfo.EntriesNum]));
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_ConcatenatedTextLong;
SMSInfo.Entries[SMSInfo.EntriesNum].Buffer = Buffer[SMSInfo.EntriesNum];
SMSInfo.EntriesNum++;
nextlong = 0;
break;
case 12:/* EMS predefined sound/animation number */
SMSInfo.Entries[SMSInfo.EntriesNum].Number = atoi(argv[i]);
SMSInfo.EntriesNum++;
nextlong = 0;
break;
case 14: /* EMS ringtone - IMelody */
ringtone[SMSInfo.EntriesNum].Format=RING_NOTETONE;
error=GSM_ReadRingtoneFile(argv[i],&ringtone[SMSInfo.EntriesNum]);
Print_Error(error);
SMSInfo.Entries[SMSInfo.EntriesNum].Ringtone = &ringtone[SMSInfo.EntriesNum];
SMSInfo.EntriesNum++;
nextlong = 0;
break;
case 15:/* EMS bitmap file */
bitmap[SMSInfo.EntriesNum].Bitmap[0].Type=GSM_StartupLogo;
error=GSM_ReadBitmapFile(argv[i],&bitmap[SMSInfo.EntriesNum]);
Print_Error(error);
SMSInfo.Entries[SMSInfo.EntriesNum].Bitmap = &bitmap[SMSInfo.EntriesNum];
SMSInfo.EntriesNum++;
nextlong = 0;
break;
case 16:/* Number of frames for EMS animation */
FramesNum = atoi(argv[i]);
if (FramesNum < 1 || FramesNum > 4) {
printmsg("You have to give number of EMS frames between 1 and 4 (\"%s\")\n",argv[i]);
exit(-1);
}
bitmap[SMSInfo.EntriesNum].Number = 0;
nextlong = 17;
break;
case 17:/*File for EMS animation */
bitmap2.Bitmap[0].Type=GSM_StartupLogo;
error=GSM_ReadBitmapFile(argv[i],&bitmap2);
for (j=0;j<bitmap2.Number;j++) {
if (bitmap[SMSInfo.EntriesNum].Number == FramesNum) break;
memcpy(&bitmap[SMSInfo.EntriesNum].Bitmap[bitmap[SMSInfo.EntriesNum].Number],&bitmap2.Bitmap[j],sizeof(GSM_Bitmap));
bitmap[SMSInfo.EntriesNum].Number++;
}
if (bitmap[SMSInfo.EntriesNum].Number == FramesNum) {
SMSInfo.Entries[SMSInfo.EntriesNum].Bitmap = &bitmap[SMSInfo.EntriesNum];
SMSInfo.EntriesNum++;
nextlong = 0;
}
break;
case 18:/* EMS text from Unicode file */
f = fopen(argv[i],"rb");
if (f == NULL) {
printmsg("Can't open file \"%s\"\n",argv[i]);
exit(-1);
}
z=fread(InputBuffer,1,2000,f);
InputBuffer[z] = 0;
InputBuffer[z+1] = 0;
fclose(f);
ReadUnicodeFile(Buffer[SMSInfo.EntriesNum],InputBuffer);
dbgprintf("buffer is \"%s\"\n",DecodeUnicodeConsole(Buffer[SMSInfo.EntriesNum]));
SMSInfo.Entries[SMSInfo.EntriesNum].ID = SMS_ConcatenatedTextLong;
SMSInfo.Entries[SMSInfo.EntriesNum].Buffer = Buffer[SMSInfo.EntriesNum];
SMSInfo.EntriesNum++;
nextlong = 0;
break;
case 19:/* Number of protected items */
Protected = atoi(argv[i]);
nextlong = 0;
break;
case 20:/* Formatting text for EMS */
if (SMSInfo.Entries[SMSInfo.EntriesNum-1].ID == SMS_ConcatenatedTextLong) {
for(j=0;j<(int)strlen(argv[i]);j++) {
switch(argv[i][j]) {
case 'l': case 'L':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Left = true;
break;
case 'c': case 'C':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Center = true;
break;
case 'r': case 'R':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Right = true;
break;
case 'a': case 'A':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Large = true;
break;
case 's': case 'S':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Small = true;
break;
case 'b': case 'B':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Bold = true;
break;
case 'i': case 'I':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Italic = true;
break;
case 'u': case 'U':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Underlined = true;
break;
case 't': case 'T':
SMSInfo.Entries[SMSInfo.EntriesNum-1].Strikethrough = true;
break;
default:
printmsg("Unknown parameter \"%c\"\n",argv[i][j]);
exit(-1);
}
}
} else {
printmsg("Last parameter wasn't text\n");
exit(-1);
}
nextlong = 0;
break;
case 21:/*MaxSMS*/
MaxSMS = atoi(argv[i]);
nextlong = 0;
break;
case 22:/* profile name */
EncodeUnicode(Buffer[0],argv[i],strlen(argv[i]));
SMSInfo.Entries[0].Buffer = Buffer[0];
nextlong = 0;
break;
case 23:/* profile ringtone */
ringtone[0].Format = RING_NOTETONE;
error=GSM_ReadRingtoneFile(argv[i],&ringtone[0]);
Print_Error(error);
SMSInfo.Entries[0].Ringtone = &ringtone[0];
nextlong = 0;
break;
case 24:/* profile bitmap */
bitmap[0].Bitmap[0].Type = GSM_PictureImage;
error=GSM_ReadBitmapFile(argv[i],&bitmap[0]);
Print_Error(error);
bitmap[0].Bitmap[0].Text[0] = 0;
bitmap[0].Bitmap[0].Text[1] = 0;
SMSInfo.Entries[0].Bitmap = &bitmap[0];
nextlong = 0;
break;
}
}
if (nextlong!=0) {
printmsg("Parameter missed...\n");
exit(-1);
}
if (mystrncasecmp(argv[2],"EMS",0) && EMS16Bit) {
for (i=0;i<SMSInfo.EntriesNum;i++) {
switch (SMSInfo.Entries[i].ID) {
case SMS_ConcatenatedTextLong:
SMSInfo.Entries[i].ID = SMS_ConcatenatedTextLong16bit;
default:
break;
}
}
}
if (mystrncasecmp(argv[2],"TEXT",0)) {
chars_read = UnicodeLength(Buffer[0]);
if (chars_read != 0) {
/* Trim \n at the end of string */
if (Buffer[0][chars_read*2-1] == '\n' && Buffer[0][chars_read*2-2] == 0)
{
Buffer[0][chars_read*2-1] = 0;
}
}
}
if (mystrncasecmp(argv[1],"--displaysms",0) || mystrncasecmp(argv[1],"--sendsmsdsms",0)) {
if (mystrncasecmp(argv[2],"OPERATOR",0)) {
if (bitmap[0].Bitmap[0].Type==GSM_OperatorLogo && strcmp(bitmap[0].Bitmap[0].NetworkCode,"000 00")==0) {
printmsg("No network code\n");
exit(-1);
}
}
} else {
GSM_Init(true);
if (mystrncasecmp(argv[2],"OPERATOR",0)) {
if (bitmap[0].Bitmap[0].Type==GSM_OperatorLogo && strcmp(bitmap[0].Bitmap[0].NetworkCode,"000 00")==0) {
error=Phone->GetNetworkInfo(&s,&NetInfo);
Print_Error(error);
strcpy(bitmap[0].Bitmap[0].NetworkCode,NetInfo.NetworkCode);
if (mystrncasecmp(argv[1],"--savesms",0)) {
EncodeUnicode(Sender, "OpLogo",6);
EncodeUnicode(Sender+6*2,bitmap[0].Bitmap[0].NetworkCode,3);
EncodeUnicode(Sender+6*2+3*2,bitmap[0].Bitmap[0].NetworkCode+4,2);
if (UnicodeLength(GSM_GetNetworkName(bitmap[0].Bitmap[0].NetworkCode))<GSM_MAX_SMS_NAME_LENGTH-7) {
EncodeUnicode(Name,"OpLogo ",7);
CopyUnicodeString(Name+7*2,GSM_GetNetworkName(bitmap[0].Bitmap[0].NetworkCode));
} else {
CopyUnicodeString(Name,Sender);
}
}
}
}
}
error=GSM_EncodeMultiPartSMS(&SMSInfo,&sms);
Print_Error(error);
for (i=0;i<SMSInfo.EntriesNum;i++) {
switch (SMSInfo.Entries[i].ID) {
case SMS_NokiaRingtone:
case SMS_NokiaRingtoneLong:
case SMS_NokiaProfileLong:
case SMS_EMSSound10:
case SMS_EMSSound12:
case SMS_EMSSonyEricssonSound:
case SMS_EMSSound10Long:
case SMS_EMSSound12Long:
case SMS_EMSSonyEricssonSoundLong:
if (SMSInfo.Entries[i].RingtoneNotes!=SMSInfo.Entries[i].Ringtone->NoteTone.NrCommands) {
printmsg("Warning: ringtone too long. %i percent part cut\n",
(SMSInfo.Entries[i].Ringtone->NoteTone.NrCommands-SMSInfo.Entries[i].RingtoneNotes)*100/SMSInfo.Entries[i].Ringtone->NoteTone.NrCommands);
}
default:
break;
}
}
if (MaxSMS != -1 && sms.Number > MaxSMS) {
printmsg("There is %i SMS packed and %i limit. Exiting\n",sms.Number,MaxSMS);
if (!mystrncasecmp(argv[1],"--displaysms",0) && !mystrncasecmp(argv[1],"--sendsmsdsms",0)) GSM_Terminate();
exit(-1);
}
if (mystrncasecmp(argv[1],"--displaysms",0)) {
if (SMSCSet != 0) {
printmsg("Use -smscnumber option to give SMSC number\n");
exit(-1);
}
for (i=0;i<sms.Number;i++) {
sms.SMS[i].Location = 0;
sms.SMS[i].ReplyViaSameSMSC = ReplyViaSameSMSC;
sms.SMS[i].SMSC.Location = 0;
sms.SMS[i].PDU = SMS_Submit;
if (DeliveryReport) sms.SMS[i].PDU = SMS_Status_Report;
CopyUnicodeString(sms.SMS[i].Number, Sender);
CopyUnicodeString(sms.SMS[i].SMSC.Number, SMSC);
if (Validity.Format != 0) memcpy(&sms.SMS[i].SMSC.Validity,&Validity,sizeof(GSM_SMSValidity));
DisplaySMSFrame(&sms.SMS[i]);
}
printmsg("\nNumber of SMS: %i\n",sms.Number);
exit(sms.Number);
}
if (mystrncasecmp(argv[1],"--sendsmsdsms",0)) {
if (SMSCSet != 0) {
printmsg("Use -smscnumber option to give SMSC number\n");
exit(-1);
}
for (i=0;i<sms.Number;i++) {
sms.SMS[i].Location = 0;
sms.SMS[i].ReplyViaSameSMSC = ReplyViaSameSMSC;
sms.SMS[i].SMSC.Location = 0;
sms.SMS[i].PDU = SMS_Submit;
if (DeliveryReport) sms.SMS[i].PDU = SMS_Status_Report;
CopyUnicodeString(sms.SMS[i].Number, Sender);
CopyUnicodeString(sms.SMS[i].SMSC.Number, SMSC);
if (Validity.Format != 0) memcpy(&sms.SMS[i].SMSC.Validity,&Validity,sizeof(GSM_SMSValidity));
}
SMSDaemonSendSMS(argv[4],argv[5],&sms);
exit(0);
}
if (mystrncasecmp(argv[1],"--savesms",0) || SendSaved) {
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
if (SendSaved) {
if (Validity.Format != 0 && SMSCSet != 0) {
PhoneSMSC.Location = SMSCSet;
error=Phone->GetSMSC(&s,&PhoneSMSC);
Print_Error(error);
CopyUnicodeString(SMSC,PhoneSMSC.Number);
SMSCSet = 0;
}
s.User.SendSMSStatus = SendSMSStatus;
signal(SIGINT, interrupt);
printmsgerr("If you want break, press Ctrl+C...\n");
}
for (i=0;i<sms.Number;i++) {
printmsg("Saving SMS %i/%i\n",i+1,sms.Number);
// sms.SMS[i].Location = 0;
sms.SMS[i].Folder = Folder;
sms.SMS[i].State = State;
sms.SMS[i].ReplyViaSameSMSC = ReplyViaSameSMSC;
sms.SMS[i].SMSC.Location = SMSCSet;
if (SendSaved) {
sms.SMS[i].PDU = SMS_Submit;
if (DeliveryReport) sms.SMS[i].PDU = SMS_Status_Report;
if (Validity.Format != 0) sms.SMS[i].SMSC.Validity = Validity;
} else {
sms.SMS[i].PDU = SMS_Deliver;
}
CopyUnicodeString(sms.SMS[i].Number, Sender);
CopyUnicodeString(sms.SMS[i].Name, Name);
if (SMSCSet==0) CopyUnicodeString(sms.SMS[i].SMSC.Number, SMSC);
error=Phone->AddSMS(&s, &sms.SMS[i]);
Print_Error(error);
printmsg("Saved in folder \"%s\", location %i\n",
DecodeUnicodeConsole(folders.Folder[sms.SMS[i].Folder-1].Name),sms.SMS[i].Location);
if (SendSaved) {
printmsg("Sending sms from folder \"%s\", location %i\n",
DecodeUnicodeString(folders.Folder[sms.SMS[i].Folder-1].Name),sms.SMS[i].Location);
SMSStatus = ERR_TIMEOUT;
error=Phone->SendSavedSMS(&s, 0, sms.SMS[i].Location);
Print_Error(error);
printmsg("....waiting for network answer");
while (!gshutdown) {
GSM_ReadDevice(&s,true);
if (SMSStatus == ERR_UNKNOWN) {
GSM_Terminate();
exit(-1);
}
if (SMSStatus == ERR_NONE) break;
}
}
}
} else {
if (Validity.Format != 0 && SMSCSet != 0) {
PhoneSMSC.Location = SMSCSet;
error=Phone->GetSMSC(&s,&PhoneSMSC);
Print_Error(error);
CopyUnicodeString(SMSC,PhoneSMSC.Number);
SMSCSet = 0;
}
signal(SIGINT, interrupt);
printmsgerr("If you want break, press Ctrl+C...\n");
s.User.SendSMSStatus = SendSMSStatus;
for (i=0;i<sms.Number;i++) {
printmsg("Sending SMS %i/%i",i+1,sms.Number);
sms.SMS[i].Location = 0;
sms.SMS[i].ReplyViaSameSMSC = ReplyViaSameSMSC;
sms.SMS[i].SMSC.Location = SMSCSet;
sms.SMS[i].PDU = SMS_Submit;
if (DeliveryReport) sms.SMS[i].PDU = SMS_Status_Report;
CopyUnicodeString(sms.SMS[i].Number, Sender);
if (SMSCSet==0) CopyUnicodeString(sms.SMS[i].SMSC.Number, SMSC);
if (Validity.Format != 0) memcpy(&sms.SMS[i].SMSC.Validity,&Validity,sizeof(GSM_SMSValidity));
SMSStatus = ERR_TIMEOUT;
error=Phone->SendSMS(&s, &sms.SMS[i]);
Print_Error(error);
printmsg("....waiting for network answer");
while (!gshutdown) {
GSM_ReadDevice(&s,true);
if (SMSStatus == ERR_UNKNOWN) {
GSM_Terminate();
exit(-1);
}
if (SMSStatus == ERR_NONE) break;
}
}
}
GSM_Terminate();
}
#ifdef GSM_ENABLE_BACKUP
static void SaveFile(int argc, char *argv[])
{
GSM_Backup Backup;
int i,j;
FILE *file;
unsigned char Buffer[10000];
GSM_MemoryEntry *pbk;
if (mystrncasecmp(argv[2],"CALENDAR",0)) {
if (argc<5) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[4],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.Calendar[i]!=NULL) {
if (i == atoi(argv[5])-1) break;
i++;
}
if (i != atoi(argv[5])-1) {
printmsg("Calendar note not found in file\n");
exit(-1);
}
j = 0;
GSM_EncodeVCALENDAR(Buffer, &j, Backup.Calendar[i],true,Nokia_VCalendar);
} else if (mystrncasecmp(argv[2],"BOOKMARK",0)) {
if (argc<5) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[4],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.WAPBookmark[i]!=NULL) {
if (i == atoi(argv[5])-1) break;
i++;
}
if (i != atoi(argv[5])-1) {
printmsg("WAP bookmark not found in file\n");
exit(-1);
}
j = 0;
GSM_EncodeURLFile(Buffer, &j, Backup.WAPBookmark[i]);
} else if (mystrncasecmp(argv[2],"NOTE",0)) {
if (argc<5) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[4],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.Note[i]!=NULL) {
if (i == atoi(argv[5])-1) break;
i++;
}
if (i != atoi(argv[5])-1) {
printmsg("Note not found in file\n");
exit(-1);
}
j = 0;
GSM_EncodeVNTFile(Buffer, &j, Backup.Note[i]);
} else if (mystrncasecmp(argv[2],"TODO",0)) {
if (argc<5) {
printmsg("Where is backup filename and location ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[4],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
while (Backup.ToDo[i]!=NULL) {
if (i == atoi(argv[5])-1) break;
i++;
}
if (i != atoi(argv[5])-1) {
printmsg("ToDo note not found in file\n");
exit(-1);
}
j = 0;
GSM_EncodeVTODO(Buffer, &j, Backup.ToDo[i], true, Nokia_VToDo);
} else if (mystrncasecmp(argv[2],"VCARD10",0) || mystrncasecmp(argv[2],"VCARD21",0)) {
if (argc<6) {
printmsg("Where is backup filename and location and memory type ?\n");
exit(-1);
}
error=GSM_ReadBackupFile(argv[4],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
i = 0;
if (mystrncasecmp(argv[5],"SM",0)) {
while (Backup.SIMPhonebook[i]!=NULL) {
if (i == atoi(argv[6])-1) break;
i++;
}
if (i != atoi(argv[6])-1) {
printmsg("Phonebook entry not found in file\n");
exit(-1);
}
pbk = Backup.SIMPhonebook[i];
} else if (mystrncasecmp(argv[5],"ME",0)) {
while (Backup.PhonePhonebook[i]!=NULL) {
if (i == atoi(argv[6])-1) break;
i++;
}
if (i != atoi(argv[6])-1) {
printmsg("Phonebook entry not found in file\n");
exit(-1);
}
pbk = Backup.PhonePhonebook[i];
} else {
printmsg("Unknown memory type: \"%s\"\n",argv[5]);
exit(-1);
}
j = 0;
if (mystrncasecmp(argv[2],"VCARD10",0)) {
GSM_EncodeVCARD(Buffer,&j,pbk,true,Nokia_VCard10);
} else {
GSM_EncodeVCARD(Buffer,&j,pbk,true,Nokia_VCard21);
}
} else {
printmsg("What format of file (\"%s\") ?\n",argv[2]);
exit(-1);
}
file = fopen(argv[3],"wb");
fwrite(Buffer,1,j,file);
fclose(file);
}
static void Backup(int argc, char *argv[])
{
int i, used;
GSM_MemoryStatus MemStatus;
GSM_ToDoEntry ToDo;
GSM_ToDoStatus ToDoStatus;
GSM_MemoryEntry Pbk;
GSM_CalendarEntry Calendar;
GSM_Bitmap Bitmap;
GSM_WAPBookmark Bookmark;
GSM_Profile Profile;
GSM_MultiWAPSettings Settings;
GSM_SyncMLSettings SyncML;
GSM_ChatSettings Chat;
GSM_Ringtone Ringtone;
GSM_SMSC SMSC;
GSM_Backup Backup;
GSM_NoteEntry Note;
GSM_Backup_Info Info;
GSM_FMStation FMStation;
GSM_GPRSAccessPoint GPRSPoint;
bool DoBackup;
if (argc == 4 && mystrncasecmp(argv[3],"-yes",0)) always_answer_yes = true;
GSM_ClearBackup(&Backup);
GSM_GetBackupFormatFeatures(argv[2],&Info);
sprintf(Backup.Creator,"Gammu %s",VERSION);
if (strlen(GetOS()) != 0) {
strcat(Backup.Creator+strlen(Backup.Creator),", ");
strcat(Backup.Creator+strlen(Backup.Creator),GetOS());
}
if (strlen(GetCompiler()) != 0) {
strcat(Backup.Creator+strlen(Backup.Creator),", ");
strcat(Backup.Creator+strlen(Backup.Creator),GetCompiler());
}
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
GSM_Init(true);
if (Info.UseUnicode) {
Info.UseUnicode=answer_yes("Use Unicode subformat of backup file");
}
if (Info.DateTime) {
GSM_GetCurrentDateTime (&Backup.DateTime);
Backup.DateTimeAvailable=true;
}
if (Info.Model) {
error=Phone->GetManufacturer(&s);
Print_Error(error);
sprintf(Backup.Model,"%s ",s.Phone.Data.Manufacturer);
if (s.Phone.Data.ModelInfo->model[0]!=0) {
strcat(Backup.Model,s.Phone.Data.ModelInfo->model);
} else {
strcat(Backup.Model,s.Phone.Data.Model);
}
strcat(Backup.Model," ");
strcat(Backup.Model,s.Phone.Data.Version);
}
if (Info.IMEI) {
error=Phone->GetIMEI(&s);
if (error != ERR_NOTSUPPORTED) {
strcpy(Backup.IMEI, s.Phone.Data.IMEI);
Print_Error(error);
} else {
Backup.IMEI[0] = 0;
}
}
printf("\n");
DoBackup = false;
if (Info.PhonePhonebook) {
printmsg("Checking phone phonebook\n");
MemStatus.MemoryType = MEM_ME;
error=Phone->GetMemoryStatus(&s, &MemStatus);
if (error==ERR_NONE && MemStatus.MemoryUsed != 0) {
- if (answer_yes(" Backup phone phonebook")) DoBackup = true;
+ /*LRif (answer_yes(" Backup phone phonebook")) */DoBackup = true;
}
}
if (DoBackup) {
Pbk.MemoryType = MEM_ME;
i = 1;
used = 0;
while (used != MemStatus.MemoryUsed) {
Pbk.Location = i;
error=Phone->GetMemory(&s, &Pbk);
if (error != ERR_EMPTY) {
Print_Error(error);
if (used < GSM_BACKUP_MAX_PHONEPHONEBOOK) {
Backup.PhonePhonebook[used] = malloc(sizeof(GSM_MemoryEntry));
if (Backup.PhonePhonebook[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.PhonePhonebook[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_PHONEPHONEBOOK");
GSM_Terminate();
exit(-1);
}
*Backup.PhonePhonebook[used]=Pbk;
used++;
}
printmsgerr("%c Reading: %i percent",13,used*100/MemStatus.MemoryUsed);
i++;
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.SIMPhonebook) {
printmsg("Checking SIM phonebook\n");
MemStatus.MemoryType = MEM_SM;
error=Phone->GetMemoryStatus(&s, &MemStatus);
if (error==ERR_NONE && MemStatus.MemoryUsed != 0) {
if (answer_yes(" Backup SIM phonebook")) DoBackup=true;
}
}
if (DoBackup) {
Pbk.MemoryType = MEM_SM;
i = 1;
used = 0;
while (used != MemStatus.MemoryUsed) {
Pbk.Location = i;
error=Phone->GetMemory(&s, &Pbk);
if (error != ERR_EMPTY) {
Print_Error(error);
if (used < GSM_BACKUP_MAX_SIMPHONEBOOK) {
Backup.SIMPhonebook[used] = malloc(sizeof(GSM_MemoryEntry));
if (Backup.SIMPhonebook[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.SIMPhonebook[used + 1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_SIMPHONEBOOK");
GSM_Terminate();
exit(-1);
}
*Backup.SIMPhonebook[used]=Pbk;
used++;
}
printmsgerr("%c Reading: %i percent",13,used*100/MemStatus.MemoryUsed);
i++;
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.Calendar) {
printmsg("Checking calendar\n");
error=Phone->GetNextCalendar(&s,&Calendar,true);
if (error==ERR_NONE) {
if (answer_yes(" Backup calendar notes")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_MAXCALENDARTODONOTES) {
Backup.Calendar[used] = malloc(sizeof(GSM_CalendarEntry));
if (Backup.Calendar[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.Calendar[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_MAXCALENDARTODONOTES");
GSM_Terminate();
exit(-1);
}
*Backup.Calendar[used]=Calendar;
used ++;
error=Phone->GetNextCalendar(&s,&Calendar,false);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.ToDo) {
printmsg("Checking ToDo\n");
error=Phone->GetToDoStatus(&s,&ToDoStatus);
if (error == ERR_NONE && ToDoStatus.Used != 0) {
if (answer_yes(" Backup ToDo")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
error=Phone->GetNextToDo(&s,&ToDo,true);
while (error == ERR_NONE) {
if (used < GSM_MAXCALENDARTODONOTES) {
Backup.ToDo[used] = malloc(sizeof(GSM_ToDoEntry));
if (Backup.ToDo[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.ToDo[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_MAXCALENDARTODONOTES");
GSM_Terminate();
exit(-1);
}
*Backup.ToDo[used]=ToDo;
used ++;
error=Phone->GetNextToDo(&s,&ToDo,false);
printmsgerr("%c Reading: %i percent",13,used*100/ToDoStatus.Used);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.Note) {
printmsg("Checking notes\n");
error=Phone->GetNextNote(&s,&Note,true);
if (error==ERR_NONE) {
if (answer_yes(" Backup notes")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_NOTE) {
Backup.Note[used] = malloc(sizeof(GSM_NoteEntry));
if (Backup.Note[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.Note[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_NOTE");
GSM_Terminate();
exit(-1);
}
*Backup.Note[used]=Note;
used ++;
error=Phone->GetNextNote(&s,&Note,false);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.CallerLogos) {
printmsg("Checking caller logos\n");
Bitmap.Type = GSM_CallerGroupLogo;
Bitmap.Location = 1;
error=Phone->GetBitmap(&s,&Bitmap);
if (error == ERR_NONE) {
if (answer_yes(" Backup caller groups and logos")) DoBackup = true;
}
}
if (DoBackup) {
printmsgerr(" Reading : ");
error = ERR_NONE;
used = 0;
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_CALLER) {
Backup.CallerLogos[used] = malloc(sizeof(GSM_Bitmap));
if (Backup.CallerLogos[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.CallerLogos[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_CALLER");
GSM_Terminate();
exit(-1);
}
*Backup.CallerLogos[used] = Bitmap;
used ++;
Bitmap.Location = used + 1;
error=Phone->GetBitmap(&s,&Bitmap);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.SMSC) {
printmsg("Checking SMS profiles\n");
if (answer_yes(" Backup SMS profiles")) DoBackup = true;
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading: ");
while (true) {
SMSC.Location = used + 1;
error = Phone->GetSMSC(&s,&SMSC);
if (error != ERR_NONE) break;
if (used < GSM_BACKUP_MAX_SMSC) {
Backup.SMSC[used] = malloc(sizeof(GSM_SMSC));
if (Backup.SMSC[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.SMSC[used + 1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_SMSC");
GSM_Terminate();
exit(-1);
}
*Backup.SMSC[used]=SMSC;
used++;
printmsgerr("*");
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.StartupLogo) {
printmsg("Checking startup text\n");
Bitmap.Type = GSM_WelcomeNote_Text;
error = Phone->GetBitmap(&s,&Bitmap);
if (error == ERR_NONE) {
if (answer_yes(" Backup startup logo/text")) DoBackup = true;
}
}
if (DoBackup) {
Backup.StartupLogo = malloc(sizeof(GSM_Bitmap));
if (Backup.StartupLogo == NULL) Print_Error(ERR_MOREMEMORY);
*Backup.StartupLogo = Bitmap;
if (Bitmap.Text[0]==0 && Bitmap.Text[1]==0) {
Bitmap.Type = GSM_StartupLogo;
error = Phone->GetBitmap(&s,&Bitmap);
if (error == ERR_NONE) *Backup.StartupLogo = Bitmap;
}
}
DoBackup = false;
if (Info.OperatorLogo) {
printmsg("Checking operator logo\n");
Bitmap.Type = GSM_OperatorLogo;
error=Phone->GetBitmap(&s,&Bitmap);
if (error == ERR_NONE) {
if (strcmp(Bitmap.NetworkCode,"000 00")!=0) {
if (answer_yes(" Backup operator logo")) DoBackup = true;
}
}
}
if (DoBackup) {
Backup.OperatorLogo = malloc(sizeof(GSM_Bitmap));
if (Backup.OperatorLogo == NULL) Print_Error(ERR_MOREMEMORY);
*Backup.OperatorLogo = Bitmap;
}
DoBackup = false;
if (Info.WAPBookmark) {
printmsg("Checking WAP bookmarks\n");
Bookmark.Location = 1;
error=Phone->GetWAPBookmark(&s,&Bookmark);
if (error==ERR_NONE) {
if (answer_yes(" Backup WAP bookmarks")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_WAPBOOKMARK) {
Backup.WAPBookmark[used] = malloc(sizeof(GSM_WAPBookmark));
if (Backup.WAPBookmark[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.WAPBookmark[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_WAPBOOKMARK");
GSM_Terminate();
exit(-1);
}
*Backup.WAPBookmark[used]=Bookmark;
used ++;
Bookmark.Location = used+1;
error=Phone->GetWAPBookmark(&s,&Bookmark);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.WAPSettings) {
printmsg("Checking WAP settings\n");
Settings.Location = 1;
error=Phone->GetWAPSettings(&s,&Settings);
if (error==ERR_NONE) {
if (answer_yes(" Backup WAP settings")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_WAPSETTINGS) {
Backup.WAPSettings[used] = malloc(sizeof(GSM_MultiWAPSettings));
if (Backup.WAPSettings[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.WAPSettings[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_WAPSETTINGS");
GSM_Terminate();
exit(-1);
}
*Backup.WAPSettings[used]=Settings;
used ++;
Settings.Location = used+1;
error=Phone->GetWAPSettings(&s,&Settings);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.MMSSettings) {
printmsg("Checking MMS settings\n");
Settings.Location = 1;
error=Phone->GetMMSSettings(&s,&Settings);
if (error==ERR_NONE) {
if (answer_yes(" Backup MMS settings")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_MMSSETTINGS) {
Backup.MMSSettings[used] = malloc(sizeof(GSM_MultiWAPSettings));
if (Backup.MMSSettings[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.MMSSettings[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_MMSSETTINGS");
GSM_Terminate();
exit(-1);
}
*Backup.MMSSettings[used]=Settings;
used ++;
Settings.Location = used+1;
error=Phone->GetMMSSettings(&s,&Settings);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.ChatSettings) {
printmsg("Checking Chat settings\n");
Chat.Location = 1;
error=Phone->GetChatSettings(&s,&Chat);
if (error==ERR_NONE) {
if (answer_yes(" Backup Chat settings")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_CHATSETTINGS) {
Backup.ChatSettings[used] = malloc(sizeof(GSM_ChatSettings));
if (Backup.ChatSettings[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.ChatSettings[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_CHATSETTINGS");
GSM_Terminate();
exit(-1);
}
*Backup.ChatSettings[used]=Chat;
used ++;
Chat.Location = used+1;
error=Phone->GetChatSettings(&s,&Chat);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.SyncMLSettings) {
printmsg("Checking SyncML settings\n");
SyncML.Location = 1;
error=Phone->GetSyncMLSettings(&s,&SyncML);
if (error==ERR_NONE) {
if (answer_yes(" Backup SyncML settings")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading : ");
while (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_SYNCMLSETTINGS) {
Backup.SyncMLSettings[used] = malloc(sizeof(GSM_SyncMLSettings));
if (Backup.SyncMLSettings[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.SyncMLSettings[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_SYNCMLSETTINGS");
GSM_Terminate();
exit(-1);
}
*Backup.SyncMLSettings[used]=SyncML;
used ++;
SyncML.Location = used+1;
error=Phone->GetSyncMLSettings(&s,&SyncML);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.Ringtone) {
printmsg("Checking user ringtones\n");
Ringtone.Location = 1;
Ringtone.Format = 0;
error=Phone->GetRingtone(&s,&Ringtone,false);
if (error==ERR_EMPTY || error == ERR_NONE) {
if (answer_yes(" Backup user ringtones")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
i = 1;
printmsgerr(" Reading : ");
while (error == ERR_NONE || error == ERR_EMPTY) {
if (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_RINGTONES) {
Backup.Ringtone[used] = malloc(sizeof(GSM_Ringtone));
if (Backup.Ringtone[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.Ringtone[used+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_RINGTONES");
GSM_Terminate();
exit(-1);
}
*Backup.Ringtone[used]=Ringtone;
used ++;
}
i++;
Ringtone.Location = i;
Ringtone.Format = 0;
error=Phone->GetRingtone(&s,&Ringtone,false);
printmsgerr("*");
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.Profiles) {
printmsg("Checking phone profiles\n");
Profile.Location = 1;
error = Phone->GetProfile(&s,&Profile);
if (error == ERR_NONE) {
if (answer_yes(" Backup phone profiles")) DoBackup = true;
}
}
if (DoBackup) {
used = 0;
printmsgerr(" Reading: ");
while (true) {
Profile.Location = used + 1;
error = Phone->GetProfile(&s,&Profile);
if (error != ERR_NONE) break;
if (used < GSM_BACKUP_MAX_PROFILES) {
Backup.Profiles[used] = malloc(sizeof(GSM_Profile));
if (Backup.Profiles[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.Profiles[used + 1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_PROFILES");
GSM_Terminate();
exit(-1);
}
*Backup.Profiles[used]=Profile;
used++;
printmsgerr("*");
}
printmsgerr("\n");
}
DoBackup = false;
if (Info.FMStation) {
printmsg("Checking FM stations\n");
FMStation.Location = 1;
error = Phone->GetFMStation(&s,&FMStation);
if (error == ERR_NONE || error == ERR_EMPTY) {
if (answer_yes(" Backup phone FM stations")) DoBackup=true;
}
}
if (DoBackup) {
used = 0;
i = 1;
printmsgerr(" Reading: ");
while (error == ERR_NONE || error == ERR_EMPTY) {
error = Phone->GetFMStation(&s,&FMStation);
if (error == ERR_NONE) {
if (used < GSM_BACKUP_MAX_FMSTATIONS) {
Backup.FMStation[used] = malloc(sizeof(GSM_FMStation));
if (Backup.FMStation[used] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.FMStation[used + 1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_FMSTATIONS");
GSM_Terminate();
exit(-1);
}
*Backup.FMStation[used]=FMStation;
used++;
}
i++;
FMStation.Location = i;
printmsgerr("*");
}
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;
}
}
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;
if (Backup.Calendar[0] != NULL) {
/* N6110 doesn't support getting calendar status */
error = Phone->GetNextCalendar(&s,&Calendar,true);
if (error == ERR_NONE || error == ERR_INVALIDLOCATION || error == ERR_EMPTY) {
max = 0;
while (Backup.Calendar[max] != NULL) max++;
printmsgerr("%i entries in backup file\n",max);
// LR
//if (answer_yes("Restore calendar notes")) {
//Past = answer_yes("Restore notes from the past");
DoRestore = true;
//}
}
}
if (DoRestore) {
printmsgerr("Deleting old notes: ");
error = Phone->DeleteAllCalendar(&s);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
while (1) {
error = Phone->GetNextCalendar(&s,&Calendar,true);
if (error != ERR_NONE) break;
error = Phone->DeleteCalendar(&s,&Calendar);
Print_Error(error);
printmsgerr("*");
}
printmsgerr("\n");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
for (i=0;i<max;i++) {
if (!Past && IsCalendarNoteFromThePast(Backup.Calendar[i])) continue;
Calendar = *Backup.Calendar[i];
error=Phone->AddCalendar(&s,&Calendar);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.ToDo[0] != NULL) {
error = Phone->GetToDoStatus(&s,&ToDoStatus);
if (error == ERR_NONE) {
max = 0;
while (Backup.ToDo[max]!=NULL) max++;
printmsgerr("%i entries in backup file\n",max);
//LR if (answer_yes("Restore ToDo"))
DoRestore = true;
}
}
if (DoRestore) {
ToDo = *Backup.ToDo[0];
error = Phone->SetToDo(&s,&ToDo);
}
if (DoRestore && (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED)) {
printmsgerr("Deleting old ToDo: ");
error=Phone->DeleteAllToDo(&s);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
while (1) {
error = Phone->GetNextToDo(&s,&ToDo,true);
if (error != ERR_NONE) break;
error = Phone->DeleteToDo(&s,&ToDo);
Print_Error(error);
printmsgerr("*");
}
printmsgerr("\n");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
for (i=0;i<max;i++) {
ToDo = *Backup.ToDo[i];
ToDo.Location = 0;
error=Phone->AddToDo(&s,&ToDo);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
} else if (DoRestore) {
/* At first delete entries, that were deleted */
used = 0;
error = Phone->GetNextToDo(&s,&ToDo,true);
while (error == ERR_NONE) {
used++;
Found = false;
for (i=0;i<max;i++) {
if (Backup.ToDo[i]->Location == ToDo.Location) {
Found = true;
break;
}
}
if (!Found) {
error=Phone->DeleteToDo(&s,&ToDo);
Print_Error(error);
}
error = Phone->GetNextToDo(&s,&ToDo,false);
printmsgerr("%cCleaning: %i percent",13,used*100/ToDoStatus.Used);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
/* Now write modified/new entries */
for (i=0;i<max;i++) {
ToDo = *Backup.ToDo[i];
error = Phone->SetToDo(&s,&ToDo);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
if (Backup.SMSC[0] != NULL && answer_yes("Restore SMSC profiles")) {
max = 0;
while (Backup.SMSC[max]!=NULL) max++;
for (i=0;i<max;i++) {
error=Phone->SetSMSC(&s,Backup.SMSC[i]);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
if (Backup.StartupLogo != NULL && answer_yes("Restore startup logo/text")) {
error=Phone->SetBitmap(&s,Backup.StartupLogo);
Print_Error(error);
}
if (Backup.OperatorLogo != NULL && answer_yes("Restore operator logo")) {
error=Phone->SetBitmap(&s,Backup.OperatorLogo);
Print_Error(error);
}
DoRestore = false;
if (Backup.WAPBookmark[0] != NULL) {
Bookmark.Location = 1;
error = Phone->GetWAPBookmark(&s,&Bookmark);
if (error == ERR_NONE || error == ERR_INVALIDLOCATION) {
if (answer_yes("Restore WAP bookmarks")) DoRestore = true;
}
}
if (DoRestore) {
printmsgerr("Deleting old bookmarks: ");
/* One thing to explain: DCT4 phones seems to have bug here.
* When delete for example first bookmark, phone change
* numeration for getting frame, not for deleting. So, we try to
* get 1'st bookmark. Inside frame is "correct" location. We use
* it later
*/
while (error==ERR_NONE) {
error = Phone->DeleteWAPBookmark(&s,&Bookmark);
Bookmark.Location = 1;
error = Phone->GetWAPBookmark(&s,&Bookmark);
printmsgerr("*");
}
printmsgerr("\n");
max = 0;
while (Backup.WAPBookmark[max]!=NULL) max++;
for (i=0;i<max;i++) {
Bookmark = *Backup.WAPBookmark[i];
Bookmark.Location = 0;
error=Phone->SetWAPBookmark(&s,&Bookmark);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.WAPSettings[0] != NULL) {
Settings.Location = 1;
error = Phone->GetWAPSettings(&s,&Settings);
if (error == ERR_NONE) {
if (answer_yes("Restore WAP settings")) DoRestore = true;
}
}
if (DoRestore) {
max = 0;
while (Backup.WAPSettings[max]!=NULL) max++;
for (i=0;i<max;i++) {
error=Phone->SetWAPSettings(&s,Backup.WAPSettings[i]);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.MMSSettings[0] != NULL) {
Settings.Location = 1;
error = Phone->GetMMSSettings(&s,&Settings);
if (error == ERR_NONE) {
if (answer_yes("Restore MMS settings")) DoRestore = true;
}
}
if (DoRestore) {
max = 0;
while (Backup.MMSSettings[max]!=NULL) max++;
for (i=0;i<max;i++) {
error=Phone->SetMMSSettings(&s,Backup.MMSSettings[i]);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.Ringtone[0] != NULL) {
Ringtone.Location = 1;
Ringtone.Format = 0;
error = Phone->GetRingtone(&s,&Ringtone,false);
if (error == ERR_NONE || error ==ERR_EMPTY) {
if (Phone->DeleteUserRingtones != NOTSUPPORTED) {
if (answer_yes("Delete all user ringtones")) DoRestore = true;
}
}
}
if (DoRestore) {
printmsgerr("Deleting: ");
error=Phone->DeleteUserRingtones(&s);
Print_Error(error);
printmsgerr("Done\n");
DoRestore = false;
if (answer_yes("Restore user ringtones")) DoRestore = true;
}
if (DoRestore) {
max = 0;
while (Backup.Ringtone[max]!=NULL) max++;
for (i=0;i<max;i++) {
error=GSM_RingtoneConvert(&Ringtone, Backup.Ringtone[i], Ringtone.Format);
Print_Error(error);
error=Phone->SetRingtone(&s,&Ringtone,&i);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.Profiles[0] != NULL) {
Profile.Location = 1;
error = Phone->GetProfile(&s,&Profile);
if (error == ERR_NONE) {
if (answer_yes("Restore profiles")) DoRestore = true;
}
}
if (DoRestore) {
Profile.Location= 0;
max = 0;
while (Backup.Profiles[max]!=NULL) max++;
for (i=0;i<max;i++) {
Profile = *Backup.Profiles[i];
error=Phone->SetProfile(&s,&Profile);
Print_Error(error);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.FMStation[0] != NULL) {
FMStation.Location = 1;
error = Phone->GetFMStation(&s,&FMStation);
if (error == ERR_NONE || error == ERR_EMPTY) {
if (answer_yes("Restore FM stations")) DoRestore = true;
}
}
if (DoRestore) {
printmsgerr("Deleting old FM stations: ");
error=Phone->ClearFMStations(&s);
Print_Error(error);
printmsgerr("Done\n");
max = 0;
while (Backup.FMStation[max]!=NULL) max++;
for (i=0;i<max;i++) {
FMStation = *Backup.FMStation[i];
error=Phone->SetFMStation(&s,&FMStation);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
DoRestore = false;
if (Backup.GPRSPoint[0] != NULL) {
GPRSPoint.Location = 1;
error = Phone->GetGPRSAccessPoint(&s,&GPRSPoint);
if (error == ERR_NONE || error == ERR_EMPTY) {
if (answer_yes("Restore GPRS Points")) DoRestore = true;
}
}
if (DoRestore) {
max = 0;
while (Backup.GPRSPoint[max]!=NULL) max++;
for (i=0;i<max;i++) {
error=Phone->SetGPRSAccessPoint(&s,Backup.GPRSPoint[i]);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
GSM_Terminate();
}
static void AddNew(int argc, char *argv[])
{
GSM_Backup Backup;
GSM_DateTime date_time;
GSM_MemoryEntry Pbk;
GSM_MemoryStatus MemStatus;
GSM_ToDoEntry ToDo;
GSM_ToDoStatus ToDoStatus;
GSM_CalendarEntry Calendar;
GSM_WAPBookmark Bookmark;
int i, max, j;
error=GSM_ReadBackupFile(argv[2],&Backup);
if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
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);
GSM_Init(true);
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 (MemStatus.MemoryFree < max) {
printmsgerr("Memory has only %i free locations.Exiting\n",MemStatus.MemoryFree);
} else if (answer_yes("Add phone phonebook entries")) {
for (i=0;i<max;i++) {
Pbk = *Backup.PhonePhonebook[i];
Pbk.MemoryType = MEM_ME;
error=Phone->AddMemory(&s, &Pbk);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
}
}
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 (MemStatus.MemoryFree < max) {
printmsgerr("Memory has only %i free locations.Exiting\n",MemStatus.MemoryFree);
} else if (answer_yes("Add SIM phonebook entries")) {
j = 1;
for (i=0;i<max;i++) {
Pbk = *Backup.SIMPhonebook[i];
Pbk.MemoryType = MEM_SM;
error=Phone->AddMemory(&s, &Pbk);
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);
}
}
if (Backup.Calendar[0] != NULL) {
error = Phone->GetNextCalendar(&s,&Calendar,true);
if (error == ERR_NONE || error == ERR_INVALIDLOCATION || error == ERR_EMPTY) {
if (answer_yes("Add calendar notes")) {
max = 0;
while (Backup.Calendar[max]!=NULL) max++;
for (i=0;i<max;i++) {
Calendar = *Backup.Calendar[i];
error=Phone->AddCalendar(&s,&Calendar);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
}
}
if (Backup.ToDo[0] != NULL) {
ToDo.Location = 1;
error=Phone->GetToDoStatus(&s,&ToDoStatus);
if (error == ERR_NONE) {
if (answer_yes("Add ToDo")) {
max = 0;
while (Backup.ToDo[max]!=NULL) max++;
for (i=0;i<max;i++) {
ToDo = *Backup.ToDo[i];
error = Phone->AddToDo(&s,&ToDo);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
}
}
if (Backup.WAPBookmark[0] != NULL) {
Bookmark.Location = 1;
error = Phone->GetWAPBookmark(&s,&Bookmark);
if (error == ERR_NONE || error == ERR_INVALIDLOCATION) {
if (answer_yes("Add WAP bookmarks")) {
max = 0;
while (Backup.WAPBookmark[max]!=NULL) max++;
for (i=0;i<max;i++) {
Bookmark = *Backup.WAPBookmark[i];
Bookmark.Location = 0;
error=Phone->SetWAPBookmark(&s,&Bookmark);
Print_Error(error);
printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
if (gshutdown) {
GSM_Terminate();
exit(0);
}
}
printmsgerr("\n");
}
}
}
GSM_Terminate();
}
#endif
static void ClearAll(int argc, char *argv[])
{
GSM_MemoryStatus MemStatus;
GSM_ToDoStatus ToDoStatus;
GSM_CalendarEntry Calendar;
GSM_ToDoEntry ToDo;
GSM_WAPBookmark Bookmark;
GSM_FMStation Station;
GSM_MemoryEntry Pbk;
bool DoClear;
GSM_Init(true);
DoClear = false;
MemStatus.MemoryType = MEM_ME;
error=Phone->GetMemoryStatus(&s, &MemStatus);
if (error==ERR_NONE && MemStatus.MemoryUsed !=0) {
if (answer_yes("Delete phone phonebook")) DoClear = true;
}
if (DoClear) {
error = Phone->DeleteAllMemory(&s,MEM_ME);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) {
Pbk.MemoryType = MEM_ME;
Pbk.Location = i + 1;
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");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
}
DoClear = false;
MemStatus.MemoryType = MEM_SM;
error=Phone->GetMemoryStatus(&s, &MemStatus);
if (error==ERR_NONE && MemStatus.MemoryUsed !=0) {
if (answer_yes("Delete SIM phonebook")) DoClear = true;
}
if (DoClear) {
error = Phone->DeleteAllMemory(&s,MEM_SM);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) {
Pbk.MemoryType = MEM_SM;
Pbk.Location = i + 1;
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");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
}
DoClear = false;
error = Phone->GetNextCalendar(&s,&Calendar,true);
if (error == ERR_NONE) {
if (answer_yes("Delete calendar notes")) DoClear = true;
}
if (DoClear) {
printmsgerr("Deleting: ");
error=Phone->DeleteAllCalendar(&s);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
while (1) {
error = Phone->GetNextCalendar(&s,&Calendar,true);
if (error != ERR_NONE) break;
error = Phone->DeleteCalendar(&s,&Calendar);
Print_Error(error);
printmsgerr("*");
}
printmsgerr("\n");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
}
DoClear = false;
error = Phone->GetToDoStatus(&s,&ToDoStatus);
if (error == ERR_NONE && ToDoStatus.Used != 0) {
if (answer_yes("Delete ToDo")) DoClear = true;
}
if (DoClear) {
printmsgerr("Deleting: ");
error=Phone->DeleteAllToDo(&s);
if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
while (1) {
error = Phone->GetNextToDo(&s,&ToDo,true);
if (error != ERR_NONE) break;
error = Phone->DeleteToDo(&s,&ToDo);
Print_Error(error);
printmsgerr("*");
}
printmsgerr("\n");
} else {
printmsgerr("Done\n");
Print_Error(error);
}
}
Bookmark.Location = 1;
error = Phone->GetWAPBookmark(&s,&Bookmark);
if (error == ERR_NONE || error == ERR_INVALIDLOCATION) {
if (answer_yes("Delete WAP bookmarks")) {
printmsgerr("Deleting: ");
/* One thing to explain: DCT4 phones seems to have bug here.
* When delete for example first bookmark, phone change
* numeration for getting frame, not for deleting. So, we try to
* get 1'st bookmark. Inside frame is "correct" location. We use
* it later
*/
while (error==ERR_NONE) {
error = Phone->DeleteWAPBookmark(&s,&Bookmark);
Bookmark.Location = 1;
error = Phone->GetWAPBookmark(&s,&Bookmark);
printmsgerr("*");
}
printmsgerr("\n");
}
}
if (Phone->DeleteUserRingtones != NOTSUPPORTED) {
if (answer_yes("Delete all user ringtones")) {
printmsgerr("Deleting: ");
error=Phone->DeleteUserRingtones(&s);
Print_Error(error);
printmsgerr("Done\n");
}
}
Station.Location=i;
error=Phone->GetFMStation(&s,&Station);
if (error == ERR_NONE || error == ERR_EMPTY) {
if (answer_yes("Delete all FM station")) {
error=Phone->ClearFMStations(&s);
Print_Error(error);
}
}
GSM_Terminate();
}
static void DisplayConnectionSettings(GSM_MultiWAPSettings *settings,int j)
{
if (settings->Settings[j].IsContinuous) {
printmsg("Connection type : Continuous\n");
} else {
printmsg("Connection type : Temporary\n");
}
if (settings->Settings[j].IsSecurity) {
printmsg("Connection security : On\n");
} else {
printmsg("Connection security : Off\n");
}
printmsg("Proxy : address \"%s\", port %i\n",DecodeUnicodeConsole(settings->Proxy),settings->ProxyPort);
printmsg("2'nd proxy : address \"%s\", port %i\n",DecodeUnicodeConsole(settings->Proxy2),settings->Proxy2Port);
switch (settings->Settings[j].Bearer) {
case WAPSETTINGS_BEARER_SMS:
printmsg("Bearer : SMS");
if (settings->ActiveBearer == WAPSETTINGS_BEARER_SMS) printf(" (active)");
printmsg("\nServer number : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Server));
printmsg("Service number : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Service));
break;
case WAPSETTINGS_BEARER_DATA:
printmsg("Bearer : Data (CSD)");
if (settings->ActiveBearer == WAPSETTINGS_BEARER_DATA) printf(" (active)");
printmsg("\nDial-up number : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].DialUp));
printmsg("IP address : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].IPAddress));
if (settings->Settings[j].ManualLogin) {
printmsg("Login Type : Manual\n");
} else {
printmsg("Login Type : Automatic\n");
}
if (settings->Settings[j].IsNormalAuthentication) {
printmsg("Authentication type : Normal\n");
} else {
printmsg("Authentication type : Secure\n");
}
if (settings->Settings[j].IsISDNCall) {
printmsg("Data call type : ISDN\n");
} else {
printmsg("Data call type : Analogue\n");
}
switch (settings->Settings[j].Speed) {
case WAPSETTINGS_SPEED_9600 : printmsg("Data call speed : 9600\n"); break;
case WAPSETTINGS_SPEED_14400 : printmsg("Data call speed : 14400\n"); break;
case WAPSETTINGS_SPEED_AUTO : printmsg("Data call speed : Auto\n"); break;
}
printmsg("User name : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].User));
printmsg("Password : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Password));
break;
case WAPSETTINGS_BEARER_USSD:
printmsg("Bearer : USSD");
if (settings->ActiveBearer == WAPSETTINGS_BEARER_USSD) printf(" (active)");
printmsg("\nService code : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Code));
if (settings->Settings[j].IsIP) {
printmsg("Address type : IP address\nIPaddress : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Service));
} else {
printmsg("Address type : Service number\nService number : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Service));
}
break;
case WAPSETTINGS_BEARER_GPRS:
printmsg("Bearer : GPRS");
if (settings->ActiveBearer == WAPSETTINGS_BEARER_GPRS) printf(" (active)");
if (settings->Settings[j].ManualLogin) {
printmsg("\nLogin Type : Manual\n");
} else {
printmsg("\nLogin Type : Automatic\n");
}
if (settings->Settings[j].IsNormalAuthentication) {
printmsg("Authentication type : Normal\n");
} else {
printmsg("Authentication type : Secure\n");
}
printmsg("Access point : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].DialUp));
printmsg("IP address : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].IPAddress));
printmsg("User name : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].User));
printmsg("Password : \"%s\"\n",DecodeUnicodeConsole(settings->Settings[j].Password));
}
}
static void GetSyncMLSettings(int argc, char *argv[])
{
GSM_SyncMLSettings settings;
int start,stop,j;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
settings.Location=i;
error=Phone->GetSyncMLSettings(&s,&settings);
Print_Error(error);
printmsg("%i. ",i);
if (settings.Name[0]==0 && settings.Name[1]==0) {
printmsg("Set %i",i);
} else {
printmsg("%s",DecodeUnicodeConsole(settings.Name));
}
if (settings.Active) printmsg(" (active)");
// if (settings.ReadOnly) printmsg("\nRead only : yes");
printmsg("\n");
printmsg("User : \"%s\"\n",DecodeUnicodeConsole(settings.User));
printmsg("Password : \"%s\"\n",DecodeUnicodeConsole(settings.Password));
printmsg("Phonebook database : \"%s\"\n",DecodeUnicodeConsole(settings.PhonebookDataBase));
printmsg("Calendar database : \"%s\"\n",DecodeUnicodeConsole(settings.CalendarDataBase));
printmsg("Server : \"%s\"\n",DecodeUnicodeConsole(settings.Server));
printmsg("Sync. phonebook : ");
if (settings.SyncPhonebook) printmsg("yes\n");
if (!settings.SyncPhonebook) printmsg("no\n");
printmsg("Sync. calendar : ");
if (settings.SyncCalendar) printmsg("yes\n");
if (!settings.SyncCalendar) printmsg("no\n");
printmsg("\n");
for (j=0;j<settings.Connection.Number;j++) {
if (settings.Connection.Settings[j].Title[0]==0 && settings.Connection.Settings[j].Title[1]==0) {
printmsg("Connection set name : Set %i\n",i);
} else {
printmsg("Connection set name : %s\n",DecodeUnicodeConsole(settings.Connection.Settings[j].Title));
}
DisplayConnectionSettings(&settings.Connection,j);
printf("\n");
}
}
GSM_Terminate();
}
static void GetChatSettings(int argc, char *argv[])
{
GSM_ChatSettings settings;
int start,stop,j;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
settings.Location=i;
error=Phone->GetChatSettings(&s,&settings);
Print_Error(error);
printmsg("%i. ",i);
if (settings.Name[0]==0 && settings.Name[1]==0) {
printmsg("Set %i",i);
} else {
printmsg("%s",DecodeUnicodeConsole(settings.Name));
}
if (settings.Active) printmsg(" (active)");
// if (settings.ReadOnly) printmsg("\nRead only : yes");
printmsg("\n");
printmsg("Homepage : \"%s\"\n",DecodeUnicodeConsole(settings.HomePage));
printmsg("User : \"%s\"\n",DecodeUnicodeConsole(settings.User));
printmsg("Password : \"%s\"\n",DecodeUnicodeConsole(settings.Password));
printmsg("\n");
for (j=0;j<settings.Connection.Number;j++) {
if (settings.Connection.Settings[j].Title[0]==0 && settings.Connection.Settings[j].Title[1]==0) {
printmsg("Connection set name : Set %i\n",i);
} else {
printmsg("Connection set name : %s\n",DecodeUnicodeConsole(settings.Connection.Settings[j].Title));
}
DisplayConnectionSettings(&settings.Connection,j);
printf("\n");
}
}
GSM_Terminate();
}
static void GetWAPMMSSettings(int argc, char *argv[])
{
GSM_MultiWAPSettings settings;
int start,stop,j;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
settings.Location=i;
if (mystrncasecmp(argv[1],"--getwapsettings",0)) {
error=Phone->GetWAPSettings(&s,&settings);
} else {
error=Phone->GetMMSSettings(&s,&settings);
}
Print_Error(error);
for (j=0;j<settings.Number;j++) {
printmsg("%i. ",i);
if (settings.Settings[j].Title[0]==0 && settings.Settings[j].Title[1]==0) {
printmsg("Set %i",i);
} else {
printmsg("%s",DecodeUnicodeConsole(settings.Settings[j].Title));
}
if (settings.Active) printmsg(" (active)");
if (settings.ReadOnly) printmsg("\nRead only : yes");
printmsg("\nHomepage : \"%s\"\n",DecodeUnicodeConsole(settings.Settings[j].HomePage));
DisplayConnectionSettings(&settings,j);
printf("\n");
}
}
GSM_Terminate();
}
#ifdef GSM_ENABLE_BACKUP
static void BackupSMS(int argc, char *argv[])
{
GSM_SMS_Backup Backup;
GSM_MultiSMSMessage sms;
GSM_SMSFolders folders;
bool BackupFromFolder[GSM_MAX_SMS_FOLDERS];
bool start = true;
bool DeleteAfter;
int j, smsnum;
char buffer[200];
/* We ignore return code, because (when file doesn't exist) we
* will create new later
*/
GSM_ReadSMSBackupFile(argv[2], &Backup);
smsnum = 0;
while (Backup.SMS[smsnum]!=NULL) smsnum++;
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
DeleteAfter=answer_yes("Delete each sms after backup");
for (j=0;j<folders.Number;j++) {
BackupFromFolder[j] = false;
sprintf(buffer,"Backup sms from folder \"%s\"",DecodeUnicodeConsole(folders.Folder[j].Name));
if (answer_yes(buffer)) BackupFromFolder[j] = true;
}
while (error == ERR_NONE) {
sms.SMS[0].Folder=0x00;
error=Phone->GetNextSMS(&s, &sms, start);
switch (error) {
case ERR_EMPTY:
break;
default:
Print_Error(error);
for (j=0;j<sms.Number;j++) {
if (BackupFromFolder[sms.SMS[j].Folder-1]) {
switch (sms.SMS[j].PDU) {
case SMS_Status_Report:
break;
case SMS_Submit:
case SMS_Deliver:
if (sms.SMS[j].Length == 0) break;
if (smsnum < GSM_BACKUP_MAX_SMS) {
Backup.SMS[smsnum] = malloc(sizeof(GSM_SMSMessage));
if (Backup.SMS[smsnum] == NULL) Print_Error(ERR_MOREMEMORY);
Backup.SMS[smsnum+1] = NULL;
} else {
printmsg(" Increase %s\n" , "GSM_BACKUP_MAX_SMS");
GSM_Terminate();
exit(-1);
}
*Backup.SMS[smsnum] = sms.SMS[j];
smsnum++;
break;
}
}
}
}
start=false;
}
error = GSM_SaveSMSBackupFile(argv[2],&Backup);
Print_Error(error);
if (DeleteAfter) {
for (j=0;j<smsnum;j++) {
Backup.SMS[j]->Folder = 0;
error=Phone->DeleteSMS(&s, Backup.SMS[j]);
Print_Error(error);
printmsgerr("%cDeleting: %i percent",13,(j+1)*100/smsnum);
}
}
GSM_Terminate();
}
static void AddSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage SMS;
GSM_SMS_Backup Backup;
int smsnum = 0;
int folder;
folder = atoi(argv[2]);
error = GSM_ReadSMSBackupFile(argv[3], &Backup);
Print_Error(error);
GSM_Init(true);
while (Backup.SMS[smsnum] != NULL) {
Backup.SMS[smsnum]->Folder = folder;
Backup.SMS[smsnum]->SMSC.Location = 1;
SMS.Number = 1;
SMS.SMS[0] = *Backup.SMS[smsnum];
displaymultismsinfo(SMS,false,false);
if (answer_yes("Restore sms")) {
error=Phone->AddSMS(&s, Backup.SMS[smsnum]);
Print_Error(error);
}
smsnum++;
}
GSM_Terminate();
}
static void RestoreSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage SMS;
GSM_SMS_Backup Backup;
GSM_SMSFolders folders;
int smsnum = 0;
char buffer[200];
error=GSM_ReadSMSBackupFile(argv[2], &Backup);
Print_Error(error);
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
while (Backup.SMS[smsnum] != NULL) {
SMS.Number = 1;
memcpy(&SMS.SMS[0],Backup.SMS[smsnum],sizeof(GSM_SMSMessage));
displaymultismsinfo(SMS,false,false);
sprintf(buffer,"Restore sms to folder \"%s\"",DecodeUnicodeConsole(folders.Folder[Backup.SMS[smsnum]->Folder-1].Name));
if (answer_yes(buffer)) {
error=Phone->AddSMS(&s, Backup.SMS[smsnum]);
Print_Error(error);
}
smsnum++;
}
GSM_Terminate();
}
#endif
static void CopyBitmap(int argc, char *argv[])
{
GSM_MultiBitmap Bitmap;
int i;
Bitmap.Bitmap[0].Type = GSM_None;
error=GSM_ReadBitmapFile(argv[2],&Bitmap);
Print_Error(error);
if (argc==3) {
for (i=0;i<Bitmap.Number;i++) {
switch (Bitmap.Bitmap[i].Type) {
case GSM_StartupLogo : printmsg("Startup logo"); break;
case GSM_OperatorLogo: printmsg("Operator logo"); break;
case GSM_PictureImage: printmsg("Picture Image"); break;
case GSM_CallerGroupLogo : printmsg("Caller group logo"); break;
default : break;
}
printmsg(", width %i, height %i\n",Bitmap.Bitmap[i].BitmapWidth,Bitmap.Bitmap[i].BitmapHeight);
GSM_PrintBitmap(stdout,&Bitmap.Bitmap[i]);
}
} else {
if (argc == 5) {
for (i=0;i<Bitmap.Number;i++) {
if (mystrncasecmp(argv[4],"PICTURE",0)) {
Bitmap.Bitmap[i].Type = GSM_PictureImage;
} else if (mystrncasecmp(argv[4],"STARTUP",0)) {
Bitmap.Bitmap[i].Type = GSM_StartupLogo;
} else if (mystrncasecmp(argv[4],"CALLER",0)) {
Bitmap.Bitmap[i].Type = GSM_CallerGroupLogo;
} else if (mystrncasecmp(argv[4],"OPERATOR",0)) {
Bitmap.Bitmap[i].Type = GSM_OperatorLogo;
} else {
printmsg("What format of output file logo (\"%s\") ?\n",argv[4]);
exit(-1);
}
}
}
error=GSM_SaveBitmapFile(argv[3],&Bitmap);
Print_Error(error);
}
}
static void NokiaComposer(int argc, char *argv[])
{
GSM_Ringtone ringtone;
bool started;
int i,j;
GSM_RingNote *Note;
GSM_RingNoteDuration Duration;
GSM_RingNoteDuration DefNoteDuration = 32; /* 32 = Duration_1_4 */
unsigned int DefNoteScale = Scale_880;
ringtone.Format = 0;
error=GSM_ReadRingtoneFile(argv[2],&ringtone);
if (ringtone.Format != RING_NOTETONE) {
printmsg("It can be RTTL ringtone only used with this option\n");
exit(-1);
}
started = false;
j = 0;
for (i=0;i<ringtone.NoteTone.NrCommands;i++) {
if (ringtone.NoteTone.Commands[i].Type == RING_Note) {
Note = &ringtone.NoteTone.Commands[i].Note;
if (!started) {
if (Note->Note != Note_Pause) {
printmsg("Ringtone \"%s\" (tempo = %i Beats Per Minute)\n\n",DecodeUnicodeConsole(ringtone.Name),GSM_RTTLGetTempo(Note->Tempo));
started = true;
}
}
if (started) j++;
}
}
if (j>50) printmsg("WARNING: LENGTH=%i NOTES, BUT YOU WILL ENTER ONLY FIRST 50 TONES.",j);
printmsg("\n\nThis ringtone in Nokia Composer in phone should look: ");
started = false;
for (i=0;i<ringtone.NoteTone.NrCommands;i++) {
if (ringtone.NoteTone.Commands[i].Type == RING_Note) {
Note = &ringtone.NoteTone.Commands[i].Note;
if (!started) {
if (Note->Note != Note_Pause) started = true;
}
if (started) {
switch (Note->Duration) {
case Duration_Full: printmsg("1"); break;
case Duration_1_2 : printmsg("2"); break;
case Duration_1_4 : printmsg("4"); break;
case Duration_1_8 : printmsg("8"); break;
case Duration_1_16: printmsg("16");break;
case Duration_1_32: printmsg("32");break;
}
if (Note->DurationSpec == DottedNote) printmsg(".");
switch (Note->Note) {
case Note_C : printmsg("c"); break;
case Note_Cis : printmsg("#c"); break;
case Note_D :printmsg("d"); break;
case Note_Dis : printmsg("#d"); break;
case Note_E : printmsg("e"); break;
case Note_F : printmsg("f"); break;
case Note_Fis : printmsg("#f"); break;
case Note_G : printmsg("g"); break;
case Note_Gis : printmsg("#g"); break;
case Note_A : printmsg("a"); break;
case Note_Ais : printmsg("#a"); break;
case Note_H : printmsg("h"); break;
case Note_Pause : printmsg("-"); break;
}
if (Note->Note != Note_Pause) printmsg("%i",Note->Scale - 4);
printmsg(" ");
}
}
}
printmsg("\n\nTo enter it please press: ");
started = false;
for (i=0;i<ringtone.NoteTone.NrCommands;i++) {
if (ringtone.NoteTone.Commands[i].Type == RING_Note) {
Note = &ringtone.NoteTone.Commands[i].Note;
if (!started) {
if (Note->Note != Note_Pause) started = true;
}
if (started) {
switch (Note->Note) {
case Note_C : case Note_Cis: printmsg("1");break;
case Note_D : case Note_Dis: printmsg("2");break;
case Note_E : printmsg("3");break;
case Note_F : case Note_Fis: printmsg("4");break;
case Note_G : case Note_Gis: printmsg("5");break;
case Note_A : case Note_Ais: printmsg("6");break;
case Note_H : printmsg("7");break;
default : printmsg("0");break;
}
if (Note->DurationSpec == DottedNote) printmsg("(longer)");
switch (Note->Note) {
case Note_Cis: case Note_Dis:
case Note_Fis: case Note_Gis:
case Note_Ais:
printmsg("#");
break;
default :
break;
}
if (Note->Note != Note_Pause) {
if ((unsigned int)Note->Scale != DefNoteScale) {
while (DefNoteScale != (unsigned int)Note->Scale) {
printmsg("*");
DefNoteScale++;
if (DefNoteScale==Scale_7040) DefNoteScale = Scale_880;
}
}
}
Duration = 0;
switch (Note->Duration) {
case Duration_Full : Duration = 128; break;
case Duration_1_2 : Duration = 64; break;
case Duration_1_4 : Duration = 32; break;
case Duration_1_8 : Duration = 16; break;
case Duration_1_16 : Duration = 8; break;
case Duration_1_32 : Duration = 4; break;
default : dbgprintf("error\n");break;
}
if (Duration > DefNoteDuration) {
while (DefNoteDuration != Duration) {
printmsg("9");
DefNoteDuration = DefNoteDuration * 2;
}
}
if (Duration < DefNoteDuration) {
while (DefNoteDuration != Duration) {
printmsg("8");
DefNoteDuration = DefNoteDuration / 2;
}
}
printmsg(" ");
}
}
}
printf("\n");
}
static void CopyRingtone(int argc, char *argv[])
{
GSM_Ringtone ringtone, ringtone2;
GSM_RingtoneFormat Format;
ringtone.Format = 0;
error=GSM_ReadRingtoneFile(argv[2],&ringtone);
Print_Error(error);
Format = ringtone.Format;
if (argc == 5) {
if (mystrncasecmp(argv[4],"RTTL",0)) { Format = RING_NOTETONE;
} else if (mystrncasecmp(argv[4],"BINARY",0)) { Format = RING_NOKIABINARY;
} else {
printmsg("What format of output ringtone file (\"%s\") ?\n",argv[4]);
exit(-1);
}
}
error=GSM_RingtoneConvert(&ringtone2,&ringtone,Format);
Print_Error(error);
error=GSM_SaveRingtoneFile(argv[3],&ringtone2);
Print_Error(error);
}
static void PressKeySequence(int argc, char *argv[])
{
int i,Length;
GSM_KeyCode KeyCode[500];
error = MakeKeySequence(argv[2], KeyCode, &Length);
if (error == ERR_NOTSUPPORTED) {
printmsg("Unknown key/function name: \"%c\"\n",argv[2][Length]);
exit(-1);
}
GSM_Init(true);
for (i=0;i<Length;i++) {
error=Phone->PressKey(&s, KeyCode[i], true);
Print_Error(error);
error=Phone->PressKey(&s, KeyCode[i], false);
Print_Error(error);
}
GSM_Terminate();
}
static void GetAllCategories(int argc, char *argv[])
{
GSM_Category Category;
GSM_CategoryStatus Status;
int j, count;
if (mystrncasecmp(argv[2],"TODO",0)) {
Category.Type = Category_ToDo;
Status.Type = Category_ToDo;
} else if (mystrncasecmp(argv[2],"PHONEBOOK",0)) {
Category.Type = Category_Phonebook;
Status.Type = Category_Phonebook;
} else {
printmsg("What type of categories do you want to get (\"%s\") ?\n",argv[2]);
exit(-1);
}
GSM_Init(true);
error=Phone->GetCategoryStatus(&s, &Status);
Print_Error(error);
for (count=0,j=1;count<Status.Used;j++)
{
Category.Location=j;
error=Phone->GetCategory(&s, &Category);
if (error != ERR_EMPTY) {
printmsg("Location: %i\n",j);
Print_Error(error);
printmsg("Name : \"%s\"\n\n",DecodeUnicodeConsole(Category.Name));
count++;
}
}
GSM_Terminate();
}
static void GetCategory(int argc, char *argv[])
{
GSM_Category Category;
int start,stop,j;
if (mystrncasecmp(argv[2],"TODO",0)) {
Category.Type = Category_ToDo;
} else if (mystrncasecmp(argv[2],"PHONEBOOK",0)) {
Category.Type = Category_Phonebook;
} else {
printmsg("What type of categories do you want to get (\"%s\") ?\n",argv[2]);
exit(-1);
}
GetStartStop(&start, &stop, 2, argc - 1, argv + 1);
GSM_Init(true);
for (j=start;j<=stop;j++)
{
printmsg("Location: %i\n",j);
Category.Location=j;
error=Phone->GetCategory(&s, &Category);
if (error != ERR_EMPTY) Print_Error(error);
if (error == ERR_EMPTY) {
printmsg("Entry is empty\n\n");
} else {
printmsg("Name : \"%s\"\n\n",DecodeUnicodeConsole(Category.Name));
}
}
GSM_Terminate();
}
static void DeleteToDo(int argc, char *argv[])
{
GSM_ToDoEntry ToDo;
int i;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
ToDo.Location=i;
printmsg("Location : %i\n",i);
error=Phone->DeleteToDo(&s,&ToDo);
if (error != ERR_EMPTY) Print_Error(error);
if (error == ERR_EMPTY) {
printmsg("Entry was empty\n");
} else {
printmsg("Entry was deleted\n");
}
printf("\n");
}
GSM_Terminate();
}
static void PrintToDo(GSM_ToDoEntry *ToDo)
{
int j;
GSM_MemoryEntry entry;
unsigned char *name;
GSM_Category Category;
printmsg("Location : %i\n",ToDo->Location);
printmsg("Priority : ");
switch (ToDo->Priority) {
case GSM_Priority_Low : printmsg("Low\n"); break;
case GSM_Priority_Medium : printmsg("Medium\n"); break;
case GSM_Priority_High : printmsg("High\n"); break;
default : printmsg("Unknown\n"); break;
}
for (j=0;j<ToDo->EntriesNum;j++) {
switch (ToDo->Entries[j].EntryType) {
case TODO_END_DATETIME:
printmsg("DueTime : %s\n",OSDateTime(ToDo->Entries[j].Date,false));
break;
case TODO_COMPLETED:
printmsg("Completed : %s\n",ToDo->Entries[j].Number == 1 ? "Yes" : "No");
break;
case TODO_ALARM_DATETIME:
printmsg("Alarm : %s\n",OSDateTime(ToDo->Entries[j].Date,false));
break;
case TODO_SILENT_ALARM_DATETIME:
printmsg("Silent alarm : %s\n",OSDateTime(ToDo->Entries[j].Date,false));
break;
case TODO_TEXT:
printmsg("Text : \"%s\"\n",DecodeUnicodeConsole(ToDo->Entries[j].Text));
break;
case TODO_PRIVATE:
printmsg("Private : %s\n",ToDo->Entries[j].Number == 1 ? "Yes" : "No");
break;
case TODO_CATEGORY:
Category.Location = ToDo->Entries[j].Number;
Category.Type = Category_ToDo;
error=Phone->GetCategory(&s, &Category);
if (error == ERR_NONE) {
printmsg("Category : \"%s\" (%i)\n", DecodeUnicodeConsole(Category.Name), ToDo->Entries[j].Number);
} else {
printmsg("Category : %i\n", ToDo->Entries[j].Number);
}
break;
case TODO_CONTACTID:
entry.Location = ToDo->Entries[j].Number;
entry.MemoryType = MEM_ME;
error=Phone->GetMemory(&s, &entry);
if (error == ERR_NONE) {
name = GSM_PhonebookGetEntryName(&entry);
if (name != NULL) {
printmsg("Contact ID : \"%s\" (%d)\n", DecodeUnicodeConsole(name), ToDo->Entries[j].Number);
} else {
printmsg("Contact ID : %d\n",ToDo->Entries[j].Number);
}
} else {
printmsg("Contact : %d\n",ToDo->Entries[j].Number);
}
break;
case TODO_PHONE:
printmsg("Phone : \"%s\"\n",DecodeUnicodeConsole(ToDo->Entries[j].Text));
break;
}
}
printf("\n");
}
static void ListToDoCategoryEntries(int Category)
{
GSM_ToDoEntry Entry;
bool start = true;
int j;
while (!gshutdown) {
error = Phone->GetNextToDo(&s, &Entry, start);
if (error == ERR_EMPTY) break;
Print_Error(error);
for (j=0;j<Entry.EntriesNum;j++) {
if (Entry.Entries[j].EntryType == TODO_CATEGORY && Entry.Entries[j].Number == (unsigned int)Category)
PrintToDo(&Entry);
}
start = false;
}
}
static void ListToDoCategory(int argc, char *argv[])
{
GSM_Category Category;
GSM_CategoryStatus Status;
int j, count;
unsigned char Text[(GSM_MAX_CATEGORY_NAME_LENGTH+1)*2];
int Length;
bool Number = true;;
GSM_Init(true);
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
Length = strlen(argv[2]);
for (j = 0; j < Length; j++) {
if (!isdigit(argv[2][j])) {
Number = false;
break;
}
}
if (Number) {
j = atoi(argv[2]);
if (j > 0) {
ListToDoCategoryEntries(j);
}
} else {
if (Length > GSM_MAX_CATEGORY_NAME_LENGTH) {
printmsg("Search text too long, truncating to %d chars!\n", GSM_MAX_CATEGORY_NAME_LENGTH);
Length = GSM_MAX_CATEGORY_NAME_LENGTH;
}
EncodeUnicode(Text, argv[2], Length);
Category.Type = Category_ToDo;
Status.Type = Category_ToDo;
if (Phone->GetCategoryStatus(&s, &Status) == ERR_NONE) {
for (count=0,j=1;count<Status.Used;j++) {
Category.Location=j;
error=Phone->GetCategory(&s, &Category);
if (error != ERR_EMPTY) {
count++;
if (mywstrstr(Category.Name, Text) != NULL) {
ListToDoCategoryEntries(j);
}
}
}
}
}
GSM_Terminate();
}
static void GetToDo(int argc, char *argv[])
{
GSM_ToDoEntry ToDo;
int i;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
ToDo.Location=i;
error = Phone->GetToDo(&s,&ToDo);
if (error == ERR_EMPTY) continue;
Print_Error(error);
PrintToDo(&ToDo);
}
GSM_Terminate();
}
static void GetAllToDo(int argc, char *argv[])
{
GSM_ToDoEntry ToDo;
bool start = true;
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
GSM_Init(true);
while (!gshutdown) {
error = Phone->GetNextToDo(&s, &ToDo, start);
if (error == ERR_EMPTY) break;
Print_Error(error);
PrintToDo(&ToDo);
start = false;
}
GSM_Terminate();
}
static void GetAllNotes(int argc, char *argv[])
{
GSM_NoteEntry Note;
bool start = true;
signal(SIGINT, interrupt);
printmsgerr("Press Ctrl+C to break...\n");
GSM_Init(true);
while (!gshutdown) {
error = Phone->GetNextNote(&s, &Note, start);
if (error == ERR_EMPTY) break;
Print_Error(error);
printmsg("Text : \"%s\"\n",DecodeUnicodeConsole(Note.Text));
printf("\n");
start = false;
}
GSM_Terminate();
}
static void GetSecurityStatus(int argc, char *argv[])
{
GSM_Init(true);
PrintSecurityStatus();
GSM_Terminate();
}
static void EnterSecurityCode(int argc, char *argv[])
{
GSM_SecurityCode Code;
if (mystrncasecmp(argv[2],"PIN",0)) { Code.Type = SEC_Pin;
} else if (mystrncasecmp(argv[2],"PUK",0)) { Code.Type = SEC_Puk;
} else if (mystrncasecmp(argv[2],"PIN2",0)) { Code.Type = SEC_Pin2;
} else if (mystrncasecmp(argv[2],"PUK2",0)) { Code.Type = SEC_Puk2;
} else {
printmsg("What security code (\"%s\") ?\n",argv[2]);
exit(-1);
}
strcpy(Code.Code,argv[3]);
GSM_Init(true);
error=Phone->EnterSecurityCode(&s,Code);
Print_Error(error);
GSM_Terminate();
}
static void GetProfile(int argc, char *argv[])
{
GSM_Profile Profile;
int start,stop,j,k;
GSM_Bitmap caller[5];
bool callerinit[5],special;
GSM_AllRingtonesInfo Info;
GetStartStop(&start, &stop, 2, argc, argv);
for (i=0;i<5;i++) callerinit[i] = false;
GSM_Init(true);
error=Phone->GetRingtonesInfo(&s,&Info);
if (error != ERR_NONE) Info.Number = 0;
for (i=start;i<=stop;i++) {
Profile.Location=i;
error=Phone->GetProfile(&s,&Profile);
Print_Error(error);
printmsg("%i. \"%s\"",i,DecodeUnicodeConsole(Profile.Name));
if (Profile.Active) printmsg(" (active)");
if (Profile.DefaultName) printmsg(" (default name)");
if (Profile.HeadSetProfile) printmsg(" (HeadSet profile)");
if (Profile.CarKitProfile) printmsg(" (CarKit profile)");
printf("\n");
for (j=0;j<Profile.FeaturesNumber;j++) {
special = false;
switch (Profile.FeatureID[j]) {
case Profile_MessageToneID:
case Profile_RingtoneID:
special = true;
if (Profile.FeatureID[j] == Profile_RingtoneID) {
printmsg("Ringtone ID : ");
} else {
printmsg("Message alert tone ID : ");
}
if (UnicodeLength(GSM_GetRingtoneName(&Info,Profile.FeatureValue[j]))!=0) {
printmsg("\"%s\"\n",DecodeUnicodeConsole(GSM_GetRingtoneName(&Info,Profile.FeatureValue[j])));
} else {
printmsg("%i\n",Profile.FeatureValue[j]);
}
break;
case Profile_CallerGroups:
special = true;
printmsg("Call alert for :");
for (k=0;k<5;k++) {
if (Profile.CallerGroups[k]) {
if (!callerinit[k]) {
caller[k].Type = GSM_CallerGroupLogo;
caller[k].Location = k + 1;
error=Phone->GetBitmap(&s,&caller[k]);
if (error == ERR_SECURITYERROR) {
NOKIA_GetDefaultCallerGroupName(&s,&caller[k]);
} else {
Print_Error(error);
}
callerinit[k] = true;
}
printmsg(" \"%s\"",DecodeUnicodeConsole(caller[k].Text));
}
}
printf("\n");
break;
case Profile_ScreenSaverNumber:
special = true;
printmsg("Screen saver number : ");
printmsg("%i\n",Profile.FeatureValue[j]);
break;
case Profile_CallAlert : printmsg("Incoming call alert : "); break;
case Profile_RingtoneVolume : printmsg("Ringtone volume : "); break;
case Profile_Vibration : printmsg("Vibrating alert : "); break;
case Profile_MessageTone : printmsg("Message alert tone : "); break;
case Profile_KeypadTone : printmsg("Keypad tones : "); break;
case Profile_WarningTone : printmsg("Warning (games) tones : "); break;
case Profile_ScreenSaver : printmsg("Screen saver : "); break;
case Profile_ScreenSaverTime : printmsg("Screen saver timeout : "); break;
case Profile_AutoAnswer : printmsg("Automatic answer : "); break;
case Profile_Lights : printmsg("Lights : "); break;
default:
printmsg("Unknown\n");
special = true;
}
if (!special) {
switch (Profile.FeatureValue[j]) {
case PROFILE_VOLUME_LEVEL1 :
case PROFILE_KEYPAD_LEVEL1 : printmsg("Level 1\n"); break;
case PROFILE_VOLUME_LEVEL2 :
case PROFILE_KEYPAD_LEVEL2 : printmsg("Level 2\n"); break;
case PROFILE_VOLUME_LEVEL3 :
case PROFILE_KEYPAD_LEVEL3 : printmsg("Level 3\n"); break;
case PROFILE_VOLUME_LEVEL4 : printmsg("Level 4\n"); break;
case PROFILE_VOLUME_LEVEL5 : printmsg("Level 5\n"); break;
case PROFILE_MESSAGE_NOTONE :
case PROFILE_AUTOANSWER_OFF :
case PROFILE_LIGHTS_OFF :
case PROFILE_SAVER_OFF :
case PROFILE_WARNING_OFF :
case PROFILE_CALLALERT_OFF :
case PROFILE_VIBRATION_OFF :
case PROFILE_KEYPAD_OFF : printmsg("Off\n"); break;
case PROFILE_CALLALERT_RINGING : printmsg("Ringing\n"); break;
case PROFILE_CALLALERT_BEEPONCE :
case PROFILE_MESSAGE_BEEPONCE : printmsg("Beep once\n"); break;
case PROFILE_CALLALERT_RINGONCE : printmsg("Ring once\n"); break;
case PROFILE_CALLALERT_ASCENDING : printmsg("Ascending\n"); break;
case PROFILE_CALLALERT_CALLERGROUPS : printmsg("Caller groups\n"); break;
case PROFILE_MESSAGE_STANDARD : printmsg("Standard\n"); break;
case PROFILE_MESSAGE_SPECIAL : printmsg("Special\n"); break;
case PROFILE_MESSAGE_ASCENDING : printmsg("Ascending\n"); break;
case PROFILE_MESSAGE_PERSONAL : printmsg("Personal\n"); break;
case PROFILE_AUTOANSWER_ON :
case PROFILE_WARNING_ON :
case PROFILE_SAVER_ON :
case PROFILE_VIBRATION_ON : printmsg("On\n"); break;
case PROFILE_VIBRATION_FIRST : printmsg("Vibrate first\n"); break;
case PROFILE_LIGHTS_AUTO : printmsg("Auto\n"); break;
case PROFILE_SAVER_TIMEOUT_5SEC : printmsg("5 seconds\n"); break;
case PROFILE_SAVER_TIMEOUT_20SEC : printmsg("20 seconds\n"); break;
case PROFILE_SAVER_TIMEOUT_1MIN : printmsg("1 minute\n"); break;
case PROFILE_SAVER_TIMEOUT_2MIN : printmsg("2 minutes\n"); break;
case PROFILE_SAVER_TIMEOUT_5MIN : printmsg("5 minutes\n"); break;
case PROFILE_SAVER_TIMEOUT_10MIN : printmsg("10 minutes\n"); break;
default : printmsg("UNKNOWN\n");
}
}
}
printf("\n");
}
GSM_Terminate();
}
static void GetSpeedDial(int argc, char *argv[])
{
GSM_SpeedDial SpeedDial;
GSM_MemoryEntry Phonebook;
int start,stop,Name,Number,Group;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
SpeedDial.Location=i;
error=Phone->GetSpeedDial(&s,&SpeedDial);
printmsg("%i.",i);
switch (error) {
case ERR_EMPTY:
printmsg(" speed dial not assigned\n");
break;
default:
Print_Error(error);
Phonebook.Location = SpeedDial.MemoryLocation;
Phonebook.MemoryType = SpeedDial.MemoryType;
error=Phone->GetMemory(&s,&Phonebook);
GSM_PhonebookFindDefaultNameNumberGroup(&Phonebook, &Name, &Number, &Group);
if (Name != -1) printmsg(" Name \"%s\",",DecodeUnicodeConsole(Phonebook.Entries[Name].Text));
printmsg(" Number \"%s\"",DecodeUnicodeConsole(Phonebook.Entries[SpeedDial.MemoryNumberID-1].Text));
}
printf("\n");
}
GSM_Terminate();
}
static void ResetPhoneSettings(int argc, char *argv[])
{
GSM_ResetSettingsType Type;
if (mystrncasecmp(argv[2],"PHONE",0)) { Type = GSM_RESET_PHONESETTINGS;
} else if (mystrncasecmp(argv[2],"UIF",0)) { Type = GSM_RESET_USERINTERFACE;
} else if (mystrncasecmp(argv[2],"ALL",0)) { Type = GSM_RESET_USERINTERFACE_PHONESETTINGS;
} else if (mystrncasecmp(argv[2],"DEV",0)) { Type = GSM_RESET_DEVICE;
} else if (mystrncasecmp(argv[2],"FACTORY",0)) { Type = GSM_RESET_FULLFACTORY;
} else {
printmsg("What type of reset phone settings (\"%s\") ?\n",argv[2]);
exit(-1);
}
GSM_Init(true);
error=Phone->ResetPhoneSettings(&s,Type);
Print_Error(error);
GSM_Terminate();
}
#if defined(GSM_ENABLE_NOKIA_DCT3) || defined(GSM_ENABLE_NOKIA_DCT4)
static void NokiaSecurityCode(int argc, char *argv[])
{
GSM_Init(true);
#ifdef GSM_ENABLE_NOKIA_DCT3
DCT3GetSecurityCode(argc,argv);
#endif
#ifdef GSM_ENABLE_NOKIA_DCT4
// DCT4ResetSecurityCode(argc, argv);
DCT4GetSecurityCode(argc,argv);
#endif
GSM_Terminate();
}
static void NokiaSetPhoneMenus(int argc, char *argv[])
{
GSM_Init(true);
#ifdef GSM_ENABLE_NOKIA_DCT3
DCT3SetPhoneMenus (argc, argv);
#endif
#ifdef GSM_ENABLE_NOKIA_DCT4
DCT4SetPhoneMenus (argc, argv);
#endif
GSM_Terminate();
}
static void NokiaSelfTests(int argc, char *argv[])
{
GSM_Init(true);
#ifdef GSM_ENABLE_NOKIA_DCT3
DCT3SelfTests(argc, argv);
#endif
#ifdef GSM_ENABLE_NOKIA_DCT4
DCT4SelfTests(argc, argv);
#endif
GSM_Terminate();
}
#endif
static void DeleteAllSMS(int argc, char *argv[])
{
GSM_MultiSMSMessage sms;
GSM_SMSFolders folders;
int foldernum;
bool start = true;
GSM_Init(true);
error=Phone->GetSMSFolders(&s, &folders);
Print_Error(error);
GetStartStop(&foldernum, NULL, 2, argc, argv);
if (foldernum > folders.Number) {
printmsg("Too high folder number (max. %i)\n",folders.Number);
GSM_Terminate();
exit(-1);
}
printmsg("Deleting SMS from \"%s\" folder: ",DecodeUnicodeConsole(folders.Folder[foldernum-1].Name));
while (error == ERR_NONE) {
sms.SMS[0].Folder=0x00;
error=Phone->GetNextSMS(&s, &sms, start);
switch (error) {
case ERR_EMPTY:
break;
default:
Print_Error(error);
if (sms.SMS[0].Folder == foldernum) {
sms.SMS[0].Folder=0x00;
error=Phone->DeleteSMS(&s, &sms.SMS[0]);
Print_Error(error);
printmsg("*");
}
}
start=false;
}
printf("\n");
GSM_Terminate();
}
static void SendDTMF(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->SendDTMF(&s,argv[2]);
Print_Error(error);
GSM_Terminate();
}
static void GetDisplayStatus(int argc, char *argv[])
{
GSM_DisplayFeatures Features;
int i;
GSM_Init(true);
error=Phone->GetDisplayStatus(&s,&Features);
Print_Error(error);
printmsg("Current display features :\n");
for (i=0;i<Features.Number;i++) {
switch(Features.Feature[i]) {
case GSM_CallActive : printmsg("Call active\n"); break;
case GSM_UnreadSMS : printmsg("Unread SMS\n"); break;
case GSM_VoiceCall : printmsg("Voice call\n"); break;
case GSM_FaxCall : printmsg("Fax call\n"); break;
case GSM_DataCall : printmsg("Data call\n"); break;
case GSM_KeypadLocked : printmsg("Keypad locked\n"); break;
case GSM_SMSMemoryFull : printmsg("SMS memory full\n");
}
}
GSM_Terminate();
}
static void SetAutoNetworkLogin(int argc, char *argv[])
{
GSM_Init(true);
error=Phone->SetAutoNetworkLogin(&s);
Print_Error(error);
GSM_Terminate();
}
#ifdef DEBUG
static void MakeConvertTable(int argc, char *argv[])
{
unsigned char InputBuffer[10000], Buffer[10000];
FILE *file;
int size,i,j=0;
file = fopen(argv[2], "rb");
if (file == NULL) Print_Error(ERR_CANTOPENFILE);
size=fread(InputBuffer, 1, 10000-1, file);
fclose(file);
InputBuffer[size] = 0;
InputBuffer[size+1] = 0;
ReadUnicodeFile(Buffer,InputBuffer);
for(i=0;i<((int)UnicodeLength(Buffer));i++) {
j++;
if (j==100) {
printf("\"\\\n\"");
j=0;
}
printf("\\x%02x\\x%02x",Buffer[i*2],Buffer[i*2+1]);
}
printf("\\x00\\x00");
}
#endif
static void ListNetworks(int argc, char *argv[])
{
extern unsigned char *GSM_Networks[];
extern unsigned char *GSM_Countries[];
int i=0;
char country[4]="";
if (argc>2) {
while (GSM_Countries[i*2]!=NULL) {
if (!strncmp(GSM_Countries[i*2+1],argv[2],strlen(argv[2]))) {
strcpy(country,GSM_Countries[i*2]);
printmsg("Networks for %s:\n\n",GSM_Countries[i*2+1]);
break;
}
i++;
}
if (!*country) {
printmsg("Unknown country name.");
exit(-1);
}
}
printmsg("Network Name\n");
i=0;
while (GSM_Networks[i*2]!=NULL) {
if (argc>2) {
if (!strncmp(GSM_Networks[i*2],country,strlen(country))) {
printmsg("%s %s\n", GSM_Networks[i*2], GSM_Networks[i*2+1]);
}
} else {
printmsg("%s %s\n", GSM_Networks[i*2], GSM_Networks[i*2+1]);
}
i++;
}
}
static void Version(int argc, char *argv[])
{
// unsigned char buff[10];
// int len;
printmsg("[Gammu version %s built %s %s",VERSION,__TIME__,__DATE__);
if (strlen(GetCompiler()) != 0) printmsg(" in %s",GetCompiler());
printmsg("]\n\n");
#ifdef DEBUG
printf("GSM_SMSMessage - %i\n",sizeof(GSM_SMSMessage));
printf("GSM_SMSC - %i\n",sizeof(GSM_SMSC));
printf("GSM_SMS_State - %i\n",sizeof(GSM_SMS_State));
printf("GSM_UDHHeader - %i\n",sizeof(GSM_UDHHeader));
printf("bool - %i\n",sizeof(bool));
printf("GSM_DateTime - %i\n",sizeof(GSM_DateTime));
printf("int - %i\n",sizeof(int));
printf("GSM_NetworkInfo - %i\n",sizeof(GSM_NetworkInfo));
#endif
// len=DecodeBASE64("AXw", buff, 3);
// DumpMessage(stdout, buff, len);
}
static void GetFMStation(int argc, char *argv[])
{
GSM_FMStation Station;
int start,stop;
GetStartStop(&start, &stop, 2, argc, argv);
GSM_Init(true);
for (i=start;i<=stop;i++) {
Station.Location=i;
error=Phone->GetFMStation(&s,&Station);
switch (error) {
case ERR_EMPTY:
printmsg("Entry number %i is empty\n",i);
break;
case ERR_NONE:
printmsg("Entry number %i\nStation name : \"%s\"\nFrequency : %.1f MHz\n",
i,DecodeUnicodeConsole(Station.StationName),
Station.Frequency);
break;
default:
Print_Error(error);
}
}
GSM_Terminate();
}
static void GetFileSystemStatus(int argc, char *argv[])
{
GSM_FileSystemStatus Status;
GSM_Init(true);
error = Phone->GetFileSystemStatus(&s,&Status);
if (error != ERR_NOTSUPPORTED && error != ERR_NOTIMPLEMENTED) {
Print_Error(error);
printmsg("\nFree memory: %i, total memory: %i\n",Status.Free,Status.Free+Status.Used);
}
GSM_Terminate();
}
static void GetFileSystem(int argc, char *argv[])
{
bool Start = true;
GSM_File Files;
int j;
GSM_FileSystemStatus Status;
char FolderName[256];
GSM_Init(true);
while (1) {
error = Phone->GetNextFileFolder(&s,&Files,Start);
if (error == ERR_EMPTY) break;
Print_Error(error);
if (argc <= 2 || !mystrncasecmp(argv[2],"-flatall",0)) {
if (strlen(Files.ID_FullName) < 5 && strlen(Files.ID_FullName) != 0) {
printf("%5s.",Files.ID_FullName);
}
if (Files.Protected) {
printf("P");
} else {
printf(" ");
}
if (Files.ReadOnly) {
printf("R");
} else {
printf(" ");
}
if (Files.Hidden) {
printf("H");
} else {
printf(" ");
}
if (Files.System) {
printf("S");
} else {
printf(" ");
}
if (argc > 2 && mystrncasecmp(argv[2],"-flat",0)) {
if (!Files.Folder) {
if (mystrncasecmp(argv[2],"-flatall",0)) {
if (!Files.ModifiedEmpty) {
printf(" %30s",OSDateTime(Files.Modified,false));
} else printf(" %30c",0x20);
printf(" %9i",Files.Used);
printf(" ");
} else printf("|-- ");
} else printf("Folder ");
} else {
if (Files.Level != 1) {
for (j=0;j<Files.Level-2;j++) printf(" | ");
printf(" |-- ");
}
if (Files.Folder) printf("Folder ");
}
printf("\"%s\"",DecodeUnicodeConsole(Files.Name));
} else if (argc > 2 && mystrncasecmp(argv[2],"-flatall",0)) {
/* format for a folder ID;Folder;FOLDER_NAME;[FOLDER_PARAMETERS]
* format for a file ID;File;FOLDER_NAME;FILE_NAME;DATESTAMP;FILE_SIZE;[FILE_PARAMETERS] */
if (!Files.Folder) {
printf("%s;File;",Files.ID_FullName);
printf("\"%s\";",FolderName);
printf("\"%s\";",DecodeUnicodeConsole(Files.Name));
if (!Files.ModifiedEmpty) {
printf("\"%s\";",OSDateTime(Files.Modified,false));
} else printf("\"%c\";",0x20);
printf("%i;",Files.Used);
} else {
printf("%s;Folder;",Files.ID_FullName);
printf("\"%s\";",DecodeUnicodeConsole(Files.Name));
strcpy(FolderName,DecodeUnicodeConsole(Files.Name));
}
if (Files.Protected) printf("P");
if (Files.ReadOnly) printf("R");
if (Files.Hidden) printf("H");
if (Files.System) printf("S");
}
Start = false;
}
error = Phone->GetFileSystemStatus(&s,&Status);
if (error != ERR_NOTSUPPORTED && error != ERR_NOTIMPLEMENTED) {
Print_Error(error);
printmsg("\nFree memory: %i, total memory: %i\n",Status.Free,Status.Free+Status.Used);
}
GSM_Terminate();
}
static void GetOneFile(GSM_File *File, bool newtime, int i)
{
FILE *file;
bool start;
unsigned char buffer[5000];
struct utimbuf filedate;
if (File->Buffer != NULL) {
free(File->Buffer);
File->Buffer = NULL;
}
File->Used = 0;
start = true;
error = ERR_NONE;
while (error == ERR_NONE) {
error = Phone->GetFilePart(&s,File);
if (error == ERR_NONE || error == ERR_EMPTY || error == ERR_WRONGCRC) {
if (start) {
printmsg("Getting \"%s\": ", DecodeUnicodeConsole(File->Name));
start = false;
}
if (File->Folder) {
free(File->Buffer);
GSM_Terminate();
printmsg("it's folder. Please give only file names\n");
exit(-1);
}
printmsg("*");
if (error == ERR_EMPTY) break;
if (error == ERR_WRONGCRC) {
printmsg("WARNING: File checksum calculated by phone doesn't match with value calculated by Gammu. File damaged or error in Gammu\n");
break;
}
}
Print_Error(error);
}
printf("\n");
if (File->Used != 0) {
sprintf(buffer,"%s",DecodeUnicodeConsole(File->Name));
file = fopen(buffer,"wb");
if (file == NULL) {
sprintf(buffer,"file%s",File->ID_FullName);
file = fopen(buffer,"wb");
}
if (file == NULL) {
sprintf(buffer,"file%i",i);
file = fopen(buffer,"wb");
}
printmsg(" Saving to %s\n",buffer);
if (!file) Print_Error(ERR_CANTOPENFILE);
fwrite(File->Buffer,1,File->Used,file);
fclose(file);
if (!newtime && !File->ModifiedEmpty) {
/* access time */
filedate.actime = Fill_Time_T(File->Modified, 8);
/* modification time */
filedate.modtime = Fill_Time_T(File->Modified, 8);
dbgprintf("Setting date of %s\n",buffer);
utime(buffer,&filedate);
}
}
}
static void GetFiles(int argc, char *argv[])
{
GSM_File File;
int i;
bool newtime = false;
File.Buffer = NULL;
GSM_Init(true);
for (i=2;i<argc;i++) {
if (mystrncasecmp(argv[i],"-newtime",0)) {
newtime = true;
continue;
}
strcpy(File.ID_FullName,argv[i]);
GetOneFile(&File, newtime, i);
}
free(File.Buffer);
GSM_Terminate();
}
static void GetFileFolder(int argc, char *argv[])
{
bool Start = true;
GSM_File File;
int level=0,allnum=0,num=0,filelevel=0;
bool newtime = false, found;
File.Buffer = NULL;
GSM_Init(true);
for (i=2;i<argc;i++) {
if (mystrncasecmp(argv[i],"-newtime",0)) {
newtime = true;
continue;
}
allnum++;
}
while (allnum != num) {
error = Phone->GetNextFileFolder(&s,&File,Start);
if (error == ERR_EMPTY) break;
Print_Error(error);
if (level == 0) {
/* We search for file or folder */
found = false;
for (i=2;i<argc;i++) {
if (mystrncasecmp(argv[i],"-newtime",0)) {
continue;
}
if (!strcmp(File.ID_FullName,argv[i])) {
found = true;
if (File.Folder) {
level = 1;
filelevel = File.Level + 1;
Start = false;
} else {
level = 2;
}
break;
}
}
if (found && File.Folder) continue;
}
if (level == 1) {
/* We have folder */
dbgprintf("%i %i\n",File.Level,filelevel);
if (File.Level != filelevel) {
level = 0;
num++;
}
}
if (level != 0 && !File.Folder) GetOneFile(&File, newtime,num);
if (level == 2) {
level = 0;
num++;
}
Start = false;
}
free(File.Buffer);
GSM_Terminate();
}
static void AddFile(int argc, char *argv[])
{
GSM_File File;
int Pos = 0,i,nextlong;
File.Buffer = NULL;
strcpy(File.ID_FullName,argv[2]);
error = GSM_ReadFile(argv[3], &File);
Print_Error(error);
EncodeUnicode(File.Name,argv[3],strlen(argv[3]));
GSM_IdentifyFileFormat(&File);
File.Protected = false;
File.ReadOnly = false;
File.Hidden = false;
File.System = false;
if (argc > 4) {
nextlong = 0;
for (i=4;i<argc;i++) {
switch(nextlong) {
case 0:
if (mystrncasecmp(argv[i],"-type",0)) {
nextlong = 1;
continue;
}
if (mystrncasecmp(argv[i],"-protected",0)) {
File.Protected = true;
continue;
}
if (mystrncasecmp(argv[i],"-readonly",0)) {
File.ReadOnly = true;
continue;
}
if (mystrncasecmp(argv[i],"-hidden",0)) {
File.Hidden = true;
continue;
}
if (mystrncasecmp(argv[i],"-system",0)) {
File.System = true;
continue;
}
if (mystrncasecmp(argv[i],"-newtime",0)) {
File.ModifiedEmpty = true;
continue;
}
printmsg("Parameter \"%s\" unknown\n",argv[i]);
exit(-1);
case 1:
if (mystrncasecmp(argv[i],"JAR",0)) {
File.Type = GSM_File_Java_JAR;
} else if (mystrncasecmp(argv[i],"JPG",0)) {
File.Type = GSM_File_Image_JPG;
} else if (mystrncasecmp(argv[i],"BMP",0)) {
File.Type = GSM_File_Image_BMP;
} else if (mystrncasecmp(argv[i],"WBMP",0)) {
File.Type = GSM_File_Image_WBMP;
} else if (mystrncasecmp(argv[i],"GIF",0)) {
File.Type = GSM_File_Image_GIF;
} else if (mystrncasecmp(argv[i],"PNG",0)) {
File.Type = GSM_File_Image_PNG;
} else if (mystrncasecmp(argv[i],"MIDI",0)) {
File.Type = GSM_File_Sound_MIDI;
} else if (mystrncasecmp(argv[i],"AMR",0)) {
diff --git a/kammu.control b/phoneaccess.control
index 07559e7..07559e7 100644
--- a/kammu.control
+++ b/phoneaccess.control