This commit was manufactured by cvs2svn to create branch 'uc'. mygnokii2002_02_18_02_53
authorjankratochvil <>
Mon, 18 Feb 2002 02:07:04 +0000 (02:07 +0000)
committerjankratochvil <>
Mon, 18 Feb 2002 02:07:04 +0000 (02:07 +0000)
Sprout from mygnokii 2002-02-18 02:07:03 UTC short 'http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz'
Cherrypick from ats 2002-02-18 02:06:50 UTC short 'http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz':
    COPYING
    Docs/CREDITS
    Docs/Makefile
    Docs/man/gnokii.1
    Docs/man/gnokiid.8
    Docs/man/mgnokiidev.8
    Docs/man/todologo.1
    Docs/man/xgnokii.1x
    INSTALL
    Makefile
    Makefile.global.in
    VERSION
    common/Makefile
    common/data/at-emulator.c
    common/data/datapump.c
    common/data/rlp-common.c
    common/data/rlp-crc24.c
    common/data/virtmodem.c
    common/devices/tekram.c
    common/devices/unixirda.c
    common/devices/unixserial.c
    common/gsm-api.c
    common/gsm-bitmaps.c
    common/gsm-networks.c
    common/gsm-ringtones.c
    common/gsm-sms.c
    common/misc.c
    config/config.guess
    config/config.sub
    config/install-sh
    configure.in
    getopt/Makefile
    getopt/getopt.c
    getopt/getopt.h
    getopt/getopt1.c
    gnokii/Makefile
    gnokii/gnokii.c
    gnokiid/Makefile
    gnokiid/gnokiid.c
    include/config.h.in.in
    include/data/at-emulator.h
    include/data/datapump.h
    include/data/rlp-common.h
    include/data/rlp-crc24.h
    include/data/virtmodem.h
    include/devices/tekram.h
    include/devices/unixirda.h
    include/devices/unixserial.h
    include/gsm-api.h
    include/gsm-bitmaps.h
    include/gsm-common.h
    include/gsm-networks.h
    include/gsm-ringtones.h
    include/gsm-sms.h
    include/misc.h
    mkinstalldirs
    packaging/Debian/README.debian
    packaging/Debian/conffiles
    packaging/Debian/control
    packaging/Debian/copyright
    packaging/Debian/docs
    packaging/Debian/menu
    packaging/Debian/postinst
    packaging/Debian/preinst
    packaging/Debian/rules
    packaging/RedHat/gnokii.spec.in
    packaging/Slackware/SlackBuild.in
    packaging/Slackware/disk
    packaging/make_dist
    po/Makefile.in.in
    po/POTFILES.in
    po/cs.po
    po/de.po
    po/et.po
    po/fi.po
    po/it.po
    po/nl.po
    po/pl.po
    po/sk.po
    utils/Makefile
    utils/mgnokiidev.c
    utils/todologo
    xgnokii/Makefile
    xgnokii/VERSION
    xgnokii/xgnokii.c
    xgnokii/xgnokii.h
    xgnokii/xgnokii_calendar.c
    xgnokii/xgnokii_calendar.h
    xgnokii/xgnokii_cfg.c
    xgnokii/xgnokii_cfg.h
    xgnokii/xgnokii_common.c
    xgnokii/xgnokii_common.h
    xgnokii/xgnokii_contacts.c
    xgnokii/xgnokii_contacts.h
    xgnokii/xgnokii_data.c
    xgnokii/xgnokii_data.h
    xgnokii/xgnokii_dtmf.c
    xgnokii/xgnokii_dtmf.h
    xgnokii/xgnokii_logos.c
    xgnokii/xgnokii_logos.h
    xgnokii/xgnokii_lowlevel.c
    xgnokii/xgnokii_lowlevel.h
    xgnokii/xgnokii_netmon.c
    xgnokii/xgnokii_netmon.h
    xgnokii/xgnokii_sms.c
    xgnokii/xgnokii_sms.h
    xgnokii/xgnokii_speed.c
    xgnokii/xgnokii_speed.h
    xgnokii/xgnokii_xkeyb.c
    xgnokii/xgnokii_xkeyb.h
    xgnokii/xpm/6110mini.xpm
    xgnokii/xpm/BCard.xpm
    xgnokii/xpm/Black_point.xpm
    xgnokii/xpm/Caller.xpm
    xgnokii/xpm/Caller_logo.xpm
    xgnokii/xpm/Check.xpm
    xgnokii/xpm/Delete.xpm
    xgnokii/xpm/Dial.xpm
    xgnokii/xpm/Display.xpm
    xgnokii/xpm/Duplicate.xpm
    xgnokii/xpm/Edit.xpm
    xgnokii/xpm/Edit_flip_horizontal.xpm
    xgnokii/xpm/Edit_flip_vertical.xpm
    xgnokii/xpm/Edit_invert.xpm
    xgnokii/xpm/Flip.xpm
    xgnokii/xpm/Forward.xpm
    xgnokii/xpm/Green_pixel.xpm
    xgnokii/xpm/Green_point.xpm
    xgnokii/xpm/Invert.xpm
    xgnokii/xpm/Names.xpm
    xgnokii/xpm/New.xpm
    xgnokii/xpm/NewBD.xpm
    xgnokii/xpm/NewCall.xpm
    xgnokii/xpm/NewMeet.xpm
    xgnokii/xpm/NewRem.xpm
    xgnokii/xpm/Op.xpm
    xgnokii/xpm/Open.xpm
    xgnokii/xpm/Operator_logo.xpm
    xgnokii/xpm/Read.xpm
    xgnokii/xpm/Reply.xpm
    xgnokii/xpm/Save.xpm
    xgnokii/xpm/Send.xpm
    xgnokii/xpm/SendSMS.xpm
    xgnokii/xpm/Startup.xpm
    xgnokii/xpm/Startup_logo.xpm
    xgnokii/xpm/Tool_brush.xpm
    xgnokii/xpm/Tool_filled_rectangle.xpm
    xgnokii/xpm/Tool_line.xpm
    xgnokii/xpm/Tool_rectangle.xpm
    xgnokii/xpm/alarm.xpm
    xgnokii/xpm/background.xpm
    xgnokii/xpm/info.xpm
    xgnokii/xpm/logo.xpm
    xgnokii/xpm/phone.xpm
    xgnokii/xpm/quest.xpm
    xgnokii/xpm/sim.xpm
    xgnokii/xpm/sms.xpm
    xgnokii/xpm/stop.xpm

158 files changed:
COPYING [new file with mode: 0644]
Docs/CREDITS [new file with mode: 0644]
Docs/Makefile [new file with mode: 0644]
Docs/man/gnokii.1 [new file with mode: 0644]
Docs/man/gnokiid.8 [new file with mode: 0644]
Docs/man/mgnokiidev.8 [new file with mode: 0644]
Docs/man/todologo.1 [new file with mode: 0644]
Docs/man/xgnokii.1x [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile [new file with mode: 0644]
Makefile.global.in [new file with mode: 0644]
VERSION [new file with mode: 0644]
common/Makefile [new file with mode: 0644]
common/data/at-emulator.c [new file with mode: 0644]
common/data/datapump.c [new file with mode: 0644]
common/data/rlp-common.c [new file with mode: 0644]
common/data/rlp-crc24.c [new file with mode: 0644]
common/data/virtmodem.c [new file with mode: 0644]
common/devices/tekram.c [new file with mode: 0644]
common/devices/unixirda.c [new file with mode: 0644]
common/devices/unixserial.c [new file with mode: 0644]
common/gsm-api.c [new file with mode: 0644]
common/gsm-bitmaps.c [new file with mode: 0644]
common/gsm-networks.c [new file with mode: 0644]
common/gsm-ringtones.c [new file with mode: 0644]
common/gsm-sms.c [new file with mode: 0644]
common/misc.c [new file with mode: 0644]
config/config.guess [new file with mode: 0755]
config/config.sub [new file with mode: 0755]
config/install-sh [new file with mode: 0755]
configure.in [new file with mode: 0644]
getopt/Makefile [new file with mode: 0644]
getopt/getopt.c [new file with mode: 0644]
getopt/getopt.h [new file with mode: 0644]
getopt/getopt1.c [new file with mode: 0644]
gnokii/Makefile [new file with mode: 0644]
gnokii/gnokii.c [new file with mode: 0644]
gnokiid/Makefile [new file with mode: 0644]
gnokiid/gnokiid.c [new file with mode: 0644]
include/config.h.in.in [new file with mode: 0644]
include/data/at-emulator.h [new file with mode: 0644]
include/data/datapump.h [new file with mode: 0644]
include/data/rlp-common.h [new file with mode: 0644]
include/data/rlp-crc24.h [new file with mode: 0644]
include/data/virtmodem.h [new file with mode: 0644]
include/devices/tekram.h [new file with mode: 0644]
include/devices/unixirda.h [new file with mode: 0644]
include/devices/unixserial.h [new file with mode: 0644]
include/gsm-api.h [new file with mode: 0644]
include/gsm-bitmaps.h [new file with mode: 0644]
include/gsm-common.h [new file with mode: 0644]
include/gsm-networks.h [new file with mode: 0644]
include/gsm-ringtones.h [new file with mode: 0644]
include/gsm-sms.h [new file with mode: 0644]
include/misc.h [new file with mode: 0644]
mkinstalldirs [new file with mode: 0644]
packaging/Debian/README.debian [new file with mode: 0644]
packaging/Debian/conffiles [new file with mode: 0644]
packaging/Debian/control [new file with mode: 0644]
packaging/Debian/copyright [new file with mode: 0644]
packaging/Debian/docs [new file with mode: 0644]
packaging/Debian/menu [new file with mode: 0644]
packaging/Debian/postinst [new file with mode: 0644]
packaging/Debian/preinst [new file with mode: 0644]
packaging/Debian/rules [new file with mode: 0755]
packaging/RedHat/gnokii.spec.in [new file with mode: 0644]
packaging/Slackware/SlackBuild.in [new file with mode: 0644]
packaging/Slackware/disk [new file with mode: 0644]
packaging/make_dist [new file with mode: 0755]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/et.po [new file with mode: 0644]
po/fi.po [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/sk.po [new file with mode: 0644]
utils/Makefile [new file with mode: 0644]
utils/mgnokiidev.c [new file with mode: 0644]
utils/todologo [new file with mode: 0644]
xgnokii/Makefile [new file with mode: 0644]
xgnokii/VERSION [new file with mode: 0644]
xgnokii/xgnokii.c [new file with mode: 0644]
xgnokii/xgnokii.h [new file with mode: 0644]
xgnokii/xgnokii_calendar.c [new file with mode: 0644]
xgnokii/xgnokii_calendar.h [new file with mode: 0644]
xgnokii/xgnokii_cfg.c [new file with mode: 0644]
xgnokii/xgnokii_cfg.h [new file with mode: 0644]
xgnokii/xgnokii_common.c [new file with mode: 0644]
xgnokii/xgnokii_common.h [new file with mode: 0644]
xgnokii/xgnokii_contacts.c [new file with mode: 0644]
xgnokii/xgnokii_contacts.h [new file with mode: 0644]
xgnokii/xgnokii_data.c [new file with mode: 0644]
xgnokii/xgnokii_data.h [new file with mode: 0644]
xgnokii/xgnokii_dtmf.c [new file with mode: 0644]
xgnokii/xgnokii_dtmf.h [new file with mode: 0644]
xgnokii/xgnokii_logos.c [new file with mode: 0644]
xgnokii/xgnokii_logos.h [new file with mode: 0644]
xgnokii/xgnokii_lowlevel.c [new file with mode: 0644]
xgnokii/xgnokii_lowlevel.h [new file with mode: 0644]
xgnokii/xgnokii_netmon.c [new file with mode: 0644]
xgnokii/xgnokii_netmon.h [new file with mode: 0644]
xgnokii/xgnokii_sms.c [new file with mode: 0644]
xgnokii/xgnokii_sms.h [new file with mode: 0644]
xgnokii/xgnokii_speed.c [new file with mode: 0644]
xgnokii/xgnokii_speed.h [new file with mode: 0644]
xgnokii/xgnokii_xkeyb.c [new file with mode: 0644]
xgnokii/xgnokii_xkeyb.h [new file with mode: 0644]
xgnokii/xpm/6110mini.xpm [new file with mode: 0644]
xgnokii/xpm/BCard.xpm [new file with mode: 0644]
xgnokii/xpm/Black_point.xpm [new file with mode: 0644]
xgnokii/xpm/Caller.xpm [new file with mode: 0644]
xgnokii/xpm/Caller_logo.xpm [new file with mode: 0644]
xgnokii/xpm/Check.xpm [new file with mode: 0644]
xgnokii/xpm/Delete.xpm [new file with mode: 0644]
xgnokii/xpm/Dial.xpm [new file with mode: 0644]
xgnokii/xpm/Display.xpm [new file with mode: 0644]
xgnokii/xpm/Duplicate.xpm [new file with mode: 0644]
xgnokii/xpm/Edit.xpm [new file with mode: 0644]
xgnokii/xpm/Edit_flip_horizontal.xpm [new file with mode: 0644]
xgnokii/xpm/Edit_flip_vertical.xpm [new file with mode: 0644]
xgnokii/xpm/Edit_invert.xpm [new file with mode: 0644]
xgnokii/xpm/Flip.xpm [new file with mode: 0644]
xgnokii/xpm/Forward.xpm [new file with mode: 0644]
xgnokii/xpm/Green_pixel.xpm [new file with mode: 0644]
xgnokii/xpm/Green_point.xpm [new file with mode: 0644]
xgnokii/xpm/Invert.xpm [new file with mode: 0644]
xgnokii/xpm/Names.xpm [new file with mode: 0644]
xgnokii/xpm/New.xpm [new file with mode: 0644]
xgnokii/xpm/NewBD.xpm [new file with mode: 0644]
xgnokii/xpm/NewCall.xpm [new file with mode: 0644]
xgnokii/xpm/NewMeet.xpm [new file with mode: 0644]
xgnokii/xpm/NewRem.xpm [new file with mode: 0644]
xgnokii/xpm/Op.xpm [new file with mode: 0644]
xgnokii/xpm/Open.xpm [new file with mode: 0644]
xgnokii/xpm/Operator_logo.xpm [new file with mode: 0644]
xgnokii/xpm/Read.xpm [new file with mode: 0644]
xgnokii/xpm/Reply.xpm [new file with mode: 0644]
xgnokii/xpm/Save.xpm [new file with mode: 0644]
xgnokii/xpm/Send.xpm [new file with mode: 0644]
xgnokii/xpm/SendSMS.xpm [new file with mode: 0644]
xgnokii/xpm/Startup.xpm [new file with mode: 0644]
xgnokii/xpm/Startup_logo.xpm [new file with mode: 0644]
xgnokii/xpm/Tool_brush.xpm [new file with mode: 0644]
xgnokii/xpm/Tool_filled_rectangle.xpm [new file with mode: 0644]
xgnokii/xpm/Tool_line.xpm [new file with mode: 0644]
xgnokii/xpm/Tool_rectangle.xpm [new file with mode: 0644]
xgnokii/xpm/alarm.xpm [new file with mode: 0644]
xgnokii/xpm/background.xpm [new file with mode: 0644]
xgnokii/xpm/info.xpm [new file with mode: 0644]
xgnokii/xpm/logo.xpm [new file with mode: 0644]
xgnokii/xpm/phone.xpm [new file with mode: 0644]
xgnokii/xpm/quest.xpm [new file with mode: 0644]
xgnokii/xpm/sim.xpm [new file with mode: 0644]
xgnokii/xpm/sms.xpm [new file with mode: 0644]
xgnokii/xpm/stop.xpm [new file with mode: 0644]

diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..049061c
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,30 @@
+GNOKII - A Linux/Unix toolset and driver for the Nokia 3x10/8110/51x0/61x0
+         Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA.
+
+You can contact authors by mail at
+
+hugh@linuxcare.com                    Pavel.Janik@suse.cz
+Hugh Blemings                         Mgr. Pavel Janík, SuSE CR, s.r.o.
+PO Box 234                            Pod Pekárnami 338/12
+Belconnen ACT 2616                    190 00 Praha 9
+Australia                             Czech Republic
+
+We would be delighted to receive a postcard from you if you use gnokii but
+this is not a requirement of these licence terms! :)
+
+Any trademarks in this or other gnokii documents/files are the property of
+their respective owners.
diff --git a/Docs/CREDITS b/Docs/CREDITS
new file mode 100644 (file)
index 0000000..8232bd3
--- /dev/null
@@ -0,0 +1,111 @@
+- Credits -
+
+Thank you to, in no particular order...
+
+*  Everyone on the gnokii mailing list for their interest
+   and input into the project.
+
+*  Pavel Janík ml. for the majority of work on gnokii 6110 series
+   support, spelling corrections and miscellaneous code cleanups.
+
+*  Serge Odinokov for 6110 series authentication protocol and
+   example Delphi RLP code. Many thanks...
+
+*  Nick Lamb for operator logos, CLI uploading and AT*C command support.
+
+*  Francois Dessart, Brendan O'Dea, Tony Lindstrom, Steffan Henke
+   and Cobus Van Eeden for dumps (and in some cases interpretation!)
+   of unknown messages, bug reports and prompt feedback of being
+   able to build new releases.
+
+*  Staffan Ulfberg for taking care of the website and for instigating
+   the 6110 project which has now been merged with the gnokii effort.
+
+*  Martin Hamilton for looking after the mailing list.
+
+*  Tim Potter for some of the ideas that are now incorporated in gnokii
+   to provide multiple model support and config file code.
+
+*  Paul Mackerras and Andrew Tridgell for discussions about pseudo
+   ttys, setuid programs and such.  Tridge kindly reviewed the
+   mgnokiidev.c code.
+
+*  Richard Kalton for his excellent page about Nokia 6110 protocol.
+
+*  Colin Paton for his mail with subject "Dumps of phone<>PC traffic".
+   It helped a lot.
+
+*  Juan Altmayer Pizzorno for his help with MBUS/FBUS and other
+   debugging.
+
+*  Gary Reuter for his help when looking for a bug in phone numbers,
+   for the set-time function debugging.
+
+*  Jiri Meloun for voice calling.
+
+*  Emilio Brambilla for SMS notification fixes, setdatetime implementation
+   and typing GSM_Default_Alphabet.
+
+*  Pawe³ Kot for EnterPIN on 6110 Series changes and other things.
+
+*  Konstantinos Agouros for gnokii-perl module.
+
+*  Czech Linux Users' group for it's CVS server which hosted our
+   development repository.
+
+*  Goran Dokic, Samuli Sorvakko and anonymous for gettext files for
+   Dutch, Finnish and German translations.
+   
+*  Marcel Holtmann for RLP FCS code and misc stuff.
+
+*  Chris Kemp for logo stuff and a big part of the RLP code.
+  
+*  Andrew Kozin for the model 640 support (NMT 450 network).
+*  Karel Zak for his enthusiasm (and patches) for the autoconf stuff.
+  
+*  Harri Yli-Torkko for investigative work & code on the 3810/8110. 
+
+*  Stano Meduna for misc code and build process work.
+  
+*  Alfred Nurnberger for some information on the 5160/6160 MBUS
+   protocol.  
+   
+*  Alessandro Zummo for reset and getopts code.
+
+*  Mark Looi for Cell Broadcast code - based on protocol decoded by
+   Colin Paton
+
+*  Sebastian Zagrodzki and Jacek Fiok for Polish .po file
+
+*  Lucy for making pizza and putting up with Hugh disappearing to
+   work on this.  Rachael for new parent induced insomnia...
+
+*  Last not least: Mirka for allowing Pavel to work on gnokii
+   and for _great_ gnokii operator logos...
+
+*  Hendrik Spohr for getting 7110 functions and DLR-3 to work (one small step
+   for Hendrik, big step for (my)gnokii :-))
+   
+*  Balazs Nagy for frames list and long hacker's work...
+
+*  Ladislav Michl & Manfred Jonsson\r for support for various AT phones...
+
+*  Manfred Jonsson for idea of programming, which looks for me good
+
+*  Michael Hund for many improvements and progress in 7110/6210 source...
+
+*  Ralf Thelen for very required by many, many people patch and getting
+   infrared sockets to work -> small changes, few days of hard searching :-).
+   Also sms stuff is OK now
+
+*  Gabriele Zappi for many 6210 improvements and big calendar source
+
+*  Andrea Scopece for 61xx source for netmonitor and other improvements
+
+*  ....and other people, who reported me bugs or want(ed) to use mygnokii
+   and help me in making it the best !
+
+We tried to mentioned everyone who contributed to gnokii project but we
+might to forgot someone. If anyone does feel that we missed him and his
+name should be mentioned here do not hesitate to contact us :-)
diff --git a/Docs/Makefile b/Docs/Makefile
new file mode 100644 (file)
index 0000000..8dd1724
--- /dev/null
@@ -0,0 +1,70 @@
+#
+# Makefile for the xGNOKII tool suite.
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+HELP1_DIR = en_US
+HELP11_DIR = pl_PL
+HELP2_DIR = examples
+HELP3_DIR = default
+
+GNOKII1_MAN1 = "man/gnokii.1"
+GNOKII1_MAN2 = "man/todologo.1"
+GNOKII8_MAN1 = "man/gnokiid.8"
+GNOKII8_MAN2 = "man/mgnokiidev.8"
+XGNOKII_MAN = "man/xgnokii.1x"
+
+all: 
+       @echo
+
+makelib:
+       @echo
+       
+install:
+       $(INSTALL) -d $(docdir)
+
+       ( cd $(HELP1_DIR); \
+         $(FIND) . -type d \! -path "*CVS*" \
+              -exec $(INSTALL) -d $(docdir)/en_US/{} \; ; \
+         $(FIND) . -type f \! -path "*CVS*" \
+              -exec $(INSTALL) -m 0444 {} $(docdir)/en_US/{} \; \
+       )
+       ( cd $(HELP11_DIR); \
+         $(FIND) . -type d \! -path "*CVS*" \
+              -exec $(INSTALL) -d $(docdir)/pl_PL/{} \; ; \
+         $(FIND) . -type f \! -path "*CVS*" \
+              -exec $(INSTALL) -m 0444 {} $(docdir)/pl_PL/{} \; \
+       )
+
+       ( cd $(HELP2_DIR); \
+         $(FIND) . -type d \! -path "*CVS*" \
+              -exec $(INSTALL) -d $(docdir)/examples/{} \; ; \
+         $(FIND) . -type f \! -path "*CVS*" \
+              -exec $(INSTALL) -m 0444 {} $(docdir)/examples/{} \; \
+       )
+       ( cd $(HELP3_DIR); \
+         $(FIND) . -type d \! -path "*CVS*" \
+              -exec $(INSTALL) -d $(docdir)/default/{} \; ; \
+         $(FIND) . -type f \! -path "*CVS*" \
+              -exec $(INSTALL) -m 0444 {} $(docdir)/default/{} \; \
+       )
+       $(INSTALL) -m 0444 CREDITS $(docdir)
+       $(INSTALL) -m 0444 ../COPYING $(docdir)
+       $(INSTALL) $(GNOKII1_MAN1) $(man1dir)
+       $(INSTALL) $(GNOKII1_MAN2) $(man1dir)
+       $(INSTALL) $(GNOKII8_MAN1) $(man8dir)
+       $(INSTALL) $(GNOKII8_MAN2) $(man8dir)
+       if [ "x$(HAVE_XGNOKII)" = xyes ]; then \
+               ($(INSTALL) $(XGNOKII_MAN) $(xmandir)) \
+       fi
+       @echo "done"
+
+clean:
+       $(RM) *~
+
+depend dep:
+       @echo
+
+.PHONY: all install clean dep depend
diff --git a/Docs/man/gnokii.1 b/Docs/man/gnokii.1
new file mode 100644 (file)
index 0000000..214d696
--- /dev/null
@@ -0,0 +1,196 @@
+.TH "gnokii" "1" "July 15, 2000" "" "Gnokii"
+.SH "NAME"
+gnokii \- modem/fax driver for Nokia mobile phones
+.SH "SYNOPSIS"
+.B gnokii
+\fIOPTION\fR [\fIARGUMENT\fR]...
+.SH "DESCRIPTION"
+.PP 
+.B gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP 
+.B gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.  
+
+.SH "OPTIONS"
+The options that are recognized by
+.B gnokii
+can be divided into several different groups.
+
+.SS GENERAL
+.TP 
+.BR "\-\-help"
+display usage information.
+.TP 
+.BR "\-\-version"
+displays version and copyright information.
+.TP 
+.BR "\-\-monitor"
+continually updates phone status to stderr.
+
+.SS DIALING
+.TP 
+.BR "\-\-getspeeddial \fIn\fP"
+reads speed dial from the specified location.
+.TP 
+.BR "\-\-setspeeddial \fInumber\fP \fImemory_type\fP \fIlocation\fP"
+specify speed dial.
+.TP 
+.BR "\-\-dialvoice \fInumber\fP"
+initiate voice call.
+.TP 
+.BR "\-\-senddtmf \fIstring\fP"
+send DTMF sequence.
+
+.SS PHONE SETTINGS
+.TP 
+.BR "\-\-getdisplaystatus"
+shows what icons are displayed.
+.TP 
+.BR "\-\-displayoutput"
+show texts displayed in phone's screen.
+.TP 
+.BR "\-\-getprofile [\fInumber\fP]"
+show settings for selected(all) profile(s).
+.TP 
+.BR "\-\-netmonitor {\fIreset\fP|\fIoff\fP|\fIfield\fP|\fIdevel\fP|\fInext\fP|\fInr\fP}"
+setting/querying netmonitor mode.
+.TP 
+.BR "\-\-reset [\fIsoft\fP|\fIhard\fP]"
+resets the phone.
+
+.SS CALENDAR
+.TP 
+.BR "\-\-getcalendarnote \fIindex\fP [\-v]"
+get the note with number \fIindex\fR from calendar.
+.PP 
+[\-v] \- output in vCalendar 1.0 format
+.TP 
+.BR "\-\-writecalendarnote"
+write the note to calendar.
+.TP 
+.BR "\-\-deletecalendarnote \fIindex\fP"
+delete the note with number [\fIindex\fR] from calendar.
+
+.SS SMS
+.TP 
+.BR "\-\-getsms \fImemory_type\fR \fIstart\fP [\fIend\fP] [\-f \fIfile\fP] [\-d]"
+gets SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR].
+If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read.
+If [\-f \fIfile\fR] is used entries are saved in \fIfile\fR.
+Otherwise they are dumped to stdout.
+If [\-d] switch is used, a message is deleted after reading.
+.TP 
+.BR "\-\-deletesms \fImemory_type\fP \fIstart\fP [\fIend\fP]"
+deletes SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR].
+If [\fIend\fI] is not specified only one location \- [\fIstart\fR] is read.
+.TP 
+.BR "\-\-sendsms \fIdestination\fP [\-\-smsc \fImessage_center_number\fP | \-\-smscno \fImessage_center_index\fP] [\-r] [\-C \fIn\fP] [\-v \fIn\fP] [\-\-long \fIn\fP]"
+sends an SMS message to \fIdestination\fR via \fImessage_center_number\fR or SMSC number taken from phone memory from address \fImessage_center_index\fR.
+If this argument is ommited SMSC number is taken from phone memory from location 1.
+Message text is taken from STDIN.
+This function has had limited testing and may not work at all on your network.
+Meaning of other optional parameters:
+.PP 
+[\-r] \- request for delivery report
+.PP 
+[\-C \fIn\fR] \- Class Message \fIn\fR, where \fIn\fR can be 0..3
+.PP 
+[\-v \fIn\fR] \- validity in minutes
+.PP 
+[\-\-long \fIn\fR] \- send no more then \fIn\fR characters, default is 160
+.TP 
+.BR "\-\-savesms [\-m] [\-l \fIn\fP] [\-i]"
+saves SMS messages to the Outbox. Messages are read from STDIN. You can specify the following optional arguments:
+.PP 
+[\-m] \- mark the message as sent
+[\-l \fIn\fR] \- save the message at location \fIn\fR on the SIM card
+[\-i] \- ask before overwriting specified location
+.TP 
+.BR "\-\-getsmsc \fInumber\fP"
+show the SMSC number from location \fInumber\fR.
+
+.SS LOGOS
+.TP 
+.BR "\-\-sendlogo {\fIcaller\fP|\fIop\fP} \fIdestination\fP \fIlogofile\fP [\fInetwork_code\fP]"
+send the \fIlogofile\fR to \fIdestination\fR as operator or CLI logo.
+.TP 
+.BR "\-\-setlogo \fIlogofile\fP [\fInetwork_code\fP]"
+.TP 
+.BR "\-\-setlogo \fIlogofile\fP [\fIcaller_group_number\fP] [\fIgroup_name\fP]"
+.TP 
+.BR "\-\-setlogo \fItext\fP [\fIstartup_text\fP]"
+.TP 
+.BR "\-\-setlogo \fIdealer\fP [\fIdealer_startup_text\fP]"
+set caller, startup or operator logo.
+.TP 
+.BR "\-\-getlogo \fIlogofile\fP {\fIcaller\fP|\fIop\fP|\fIstartup\fP} [\fIcaller_group_number\fP]"
+get caller, startup or operator logo.
+
+.SS RINGTONES
+.TP 
+.BR "\-\-sendringtone \fIdestination\fI \fIrtttlfile\fP"
+send the \fIrtttlfile\fR to \fIdestination\fR as ringtone.
+.TP 
+.BR "\-\-setringtone \fIrtttlfile\fP"
+set the \fIrtttlfile\fR as ringtone (on 6110).
+
+.SS PHONEBOOK
+.TP 
+.BR "\-\-getmemory \fImemory_type\fP \fIstart\fP [\fIend\fP]"
+reads specificed memory location from phone.
+If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read.
+Valid \fImemory types\fR are: ME, SM, FD, ON, EN, DC, RC, MC, LD.
+.TP 
+.BR "\-\-writephonebook [\-i]"
+reads data from stdin and writes to phonebook
+When \-i option is used, refuses to overwrite existing entries.
+Uses the same format as provided by the output of the getphonebook command.
+
+.SS DATE, TIME AND ALARM
+.TP 
+.BR "\-\-setdatetime [\fIYYY\fP [\fIMM\fP [\fIDD\fP [\fIHH\fP [\fIMM\fP]]]]]"
+set the date and the time of the phone.
+.TP 
+.BR "\-\-getdatetime"
+shows current date and time in the phone.
+.TP 
+.BR "\-\-setalarm \fIHH\fP \fIMM\fP"
+set the alarm of the phone.
+.TP 
+.BR "\-\-getalarm"
+shows current alarm.
+
+.SS SECURITY
+.TP 
+.BR "\-\-identify"
+get IMEI, model and revision.
+.TP 
+.BR "\-\-entersecuritycode {\fIPIN\fP|\fIPIN2\fP|\fIPUK\fP|\fIPUK2\fP}"
+asks for the code and sends it to the phone.
+.TP 
+.BR "\-\-getsecuritycodestatus"
+show if a security code is needed.
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to standard error.  The exit code
+is 0 for correct functioning.  Errors which appear to be caused by
+invalid or abused command line parameters cause an exit code of 2, and
+other errors cause an exit code of 1.
+
+.SH "BUGS"
+.PP 
+We write quality software here ;)
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz>
+
+Manual page written by Dag Wieers <dag@mind.be> and Pawel Kot <pkot@linuxnews.pl>
+
+See also Docs/CREDITS from Gnokii sources.
+
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokiid, xgnokii, xlogos
diff --git a/Docs/man/gnokiid.8 b/Docs/man/gnokiid.8
new file mode 100644 (file)
index 0000000..99c2b90
--- /dev/null
@@ -0,0 +1,63 @@
+.TH "gnokiid" "8" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+gnokiid \- create a virtual modem for Nokia portable phones
+.SH "SYNOPSIS"
+.B gnokiid
+
+.B gnokiid
+[\fB\-\-help\fR|\fB\-\-version\fR|\fB\-\-debug\fR]
+
+.SH "DESCRIPTION"
+.PP 
+.B gnokiid
+is a tool from the Gnokii tool suite used to create a virtual modem device with a Nokia portable telephone.  The virtual modem device is usually accessed via a symbolic link called /dev/gnokii (created automatically by \fBmgnokiidev\fR(8)).
+
+.PP 
+After 
+.B gnokiid
+has created the virtual modem, it can be accessed like any other Hayes\-compatible modem by such programs as the terminal program \fBminicom\fR(1) or the PPP daemon \fBpppd\fR(8) to make standard data connections to remote computers.
+
+.PP 
+The full range of portable telephone functions (SMS messaging, phone book, operator logos, etc.) are accessed using the command\-line program \fBgnokii\fR(1) or the graphical interface program \fBxgnokii\fR(1x).
+
+
+.PP 
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP 
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.  
+
+.SH "OPTIONS"
+.PP 
+If called without any options, \fBgnokiid\fR will set up a virtual modem device using the settings in /etc/gnokiirc or in the user's ~/.gnokiirc (if it exists).  Otherwise,
+
+.TP 
+\fB\-\-help\fR
+print out a short usage message
+.TP 
+\fB\-\-version\fR
+print out version, copyright, phone, and serial device info
+.TP 
+\fB\-\-debug\fR
+uses STDIN/STDOUT for a virtual modem
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP 
+Hmmm...
+
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii
+tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokii, xgnokii, mgnokiidev
diff --git a/Docs/man/mgnokiidev.8 b/Docs/man/mgnokiidev.8
new file mode 100644 (file)
index 0000000..03db0aa
--- /dev/null
@@ -0,0 +1,49 @@
+.TH "mgnokiidev" "8" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+mgnokiidev \- links /dev/gnokii to a virtual modem
+.SH "SYNOPSIS"
+.B mgnokiidev \fI/dev/pts/?\fR
+
+.SH "DESCRIPTION"
+.PP 
+.B mgnokiidev
+is a tool from the Gnokii tool suite used to create the link /dev/gnokii that points to a pseudo\-tty (/dev/pts/?).
+
+.PP 
+It is called after 
+.B gnokiid
+has created a virtual modem that is attached to the pty.  It's operation is transparent under normal usage as gnokiid takes care of calling it when required.
+
+.PP 
+Since
+.B mgnokiidev
+must modifiy files in /dev, it must be either run as root or SUID root.  The latter is the preferred method.  Normally the 
+.B mgnokiidev
+binary is chmod 4750 and owned by root.gnokii.
+
+.PP 
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP 
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.  
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP 
+None reported.
+
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokiid, gnokii
diff --git a/Docs/man/todologo.1 b/Docs/man/todologo.1
new file mode 100644 (file)
index 0000000..c66955b
--- /dev/null
@@ -0,0 +1,57 @@
+.TH todologo 8 "January 3, 2001" "GNOKII Tools" "GNOKII Tools"
+
+.SH NAME
+todologo \- Create operator logo that contains 3 lines of text
+
+.SH SYNOPSIS
+.B todologo
+\fI<text of line> - <text of line 2> - <text of line 3>\fR
+
+.SH DESCRIPTION
+The 
+.B todologo
+program is used to create three lines of text 
+that fits to the standard Nokia operator logo space (i.e. 72x14 
+pixel space). This is achieved by using a proportional tiny font 
+which most elements have size of 3x4 pixels (some are thinner). 
+
+The name comes from an original intention that this program is
+used to create todo entries to one's mobile phone screen so that
+those are always visible and thus in user's memory. But the tool
+can just be used to print arbitrary text to the space provided
+by an operator logo.
+
+The hand-crafted font currently supports the following characters:
+abcdefghijklmnopqrstuvwxyz and 0123456789
+
+.SH OUTPUT
+The standard `.nol' formatted operator logo is printed to 
+standard output. The header information of that output is taken 
+from \fIgnokii.nol\fR that is distributed with
+.B GNOKII
+-- so you most probably need to give your operator code when uploading it to your
+mobile phone. Use 
+.B gnokii
+or
+.B xlogos
+to do the uploading.
+
+.SH EXAMPLES
+First example writes some todo entries to todo.nol:
+.IP
+\fCtodologo pick up kids - call wife - order chinese >todo.nol\fP
+.LP
+This last example writes some wisdom to the stdout:
+.IP
+\fCtodologo Never underestimate - the power of the dark - side of the force\fP
+.LP
+.SH AUTHOR
+Tomi Ollila <Tomi.Ollila@iki.fi>
+
+.SH COPYING
+This program is distributed under the GNU Public License.
+
+.SH SEE ALSO
+.BR gnokii(1),
+xlogos
+
diff --git a/Docs/man/xgnokii.1x b/Docs/man/xgnokii.1x
new file mode 100644 (file)
index 0000000..5fad541
--- /dev/null
@@ -0,0 +1,39 @@
+.TH "xgnokii" "1x" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+xgnokii \- graphical interface of the Gnokii telephone toolkit
+.SH "SYNOPSIS"
+.B xgnokii
+
+.SH "DESCRIPTION"
+.PP 
+.B xgnokii
+is a fancy graphical interface for Gnokii.  It has on\-line help and plenty of doo\-dads.
+.PP 
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP 
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.  
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP 
+This man page is too short.  The only excuse is that the online help in xgnokii is extensive.  Click and see for yourself.
+
+.SH "AUTHOR"
+Jan Derfinak is the author of the
+.B xgnokii
+.
+
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokii, gnokiid, xlogos
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..3551ce2
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,54 @@
+
+ TODO: write me!
+
+ For package building see the 'Docs/packaging-howto' file.
+
+0/     If you got an CVS version
+
+       autoconf
+
+1/
+       ./configure [ option ]
+
+       where basic options:
+
+               --prefix=DIR
+                       Install path prefix. Default /usr/local/
+
+               --without-x
+                       Compile without GTK (Xwin) programs
+               
+               --disable-nls
+                       Set if you don't have/want GNU gettext support
+               
+               --enable-security
+                       Set if you want to enable all security features
+
+               --enable-debug
+                       Set if you want debug code in gnokii
+
+               --help          
+                       show all options
+
+
+       Good default (example):
+
+               ./configure --prefix=/usr \
+                           --enable-gettext
+
+2/
+       compilation:
+       
+               make 
+               groupadd gnokii  - it is really needed
+               (make dep - if you want/need) 
+               make install
+               make install-docs
+
+       clean source:
+       
+               make clean       - standard clean
+               make distclean   - clean all ./configure outputs
+                                  (after this command you must run
+                                   ./configure again if you need use
+                                    any Makefile)
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..1feaf9c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,208 @@
+
+#
+# $Id$
+#
+# Makefile for the GNOKII tool suite.
+#
+# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+#               2000 Karel Zak
+#
+
+TOPDIR=.
+
+#
+# Makefile.global contains gnokii global settings
+#
+include ${TOPDIR}/Makefile.global
+
+BIN_DIRS = gnokii
+
+ifndef WIN32
+BIN_DIRS += gnokiid
+BIN_DIRS += mgnetd
+BIN_DIRS += mgnetd/mg_demo_client
+endif
+
+DIRS =  common \
+        Docs \
+       $(BIN_DIRS)
+
+#
+# For now gnokiid and utils only make sense on Unix like systems.
+# Some other stuff that makes only sense on Win32 platform.
+#
+
+ifndef WIN32
+DIRS +=        utils
+endif
+
+GTK_DIRS =  xgnokii \
+            xlogos
+
+PO_DIR   =     po
+DOCS_DIR =     Docs
+
+all: $(DIRS)
+       @if [ "x$(USE_NLS)" = xyes ]; then \
+               $(MAKE) -C $(PO_DIR); \
+       fi
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                   if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir; \
+                   fi; \
+               done \
+       fi
+       @echo "done"
+
+makelib:
+       @for dir in $(DIRS); do \
+           if [ -e $$dir/Makefile ]; then \
+               $(MAKE) -C $$dir makelib; \
+           fi; \
+       done
+       @if [ "x$(USE_NLS)" = xyes ]; then \
+               $(MAKE) -C $(PO_DIR) makelib; \
+       fi
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                   if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir makelib; \
+                   fi; \
+               done \
+       fi
+       @echo "done"
+
+dummy:
+
+$(DIRS): dummy
+       $(MAKE) -C $@
+
+clean:
+       $(RM) *~ *.orig *.rej include/*~ include/*.orig include/*.rej
+       @for dir in $(DIRS); do \
+           if [ -e $$dir/Makefile ]; then \
+               $(MAKE) -C $$dir clean; \
+           fi; \
+       done
+       @if [ "x$(USE_NLS)" = xyes ]; then \
+               $(MAKE) -C $(PO_DIR) clean; \
+       fi
+
+ifdef OWN_GETOPT
+               $(MAKE) -C getopt clean
+endif
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                   if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir clean; \
+                   fi; \
+               done \
+       fi
+
+       $(MAKE) -C Docs clean
+
+       @echo "done"
+
+distclean:     clean
+       @if [ -e $(PO_DIR)/Makefile ]; then \
+               $(MAKE) -C $(PO_DIR) distclean; \
+       fi
+       $(RM) Makefile.global config.cache config.log config.status \
+               include/config.h \
+               include/config.h.in \
+               packaging/RedHat/gnokii.spec \
+               packaging/Slackware/SlackBuild \
+               po/Makefile.in \
+               debian
+
+dep:
+       @for dir in $(DIRS); do \
+           if [ -e $$dir/Makefile ]; then \
+               $(MAKE) -C $$dir dep; \
+           fi; \
+       done
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                   if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir dep; \
+                   fi; \
+               done \
+       fi
+       @echo "done"
+
+install:
+       @for dir in $(DIRS); do \
+           if [ -e $$dir/Makefile ]; then \
+               $(MAKE) -C $$dir install; \
+           fi; \
+       done
+       @if [ "x$(USE_NLS)" = xyes ]; then \
+               $(MAKE) -C $(PO_DIR) install; \
+       fi
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                   if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir install; \
+                   fi; \
+               done \
+       fi
+       @echo "done"
+
+install-docs:
+       $(MAKE) -C $(DOCS_DIR) install
+       @echo "done"
+
+install-strip:
+       @for dir in $(BIN_DIRS); do \
+               if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir install-strip; \
+               fi; \
+       done
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               @for dir in $(GTK_DIRS); do \
+                       if [ -e $$dir/Makefile ]; then \
+                               $(MAKE) -C $$dir install-strip; \
+                       fi; \
+               done \
+       fi
+       @echo "done"
+
+install-suid:
+       @for dir in $(BIN_DIRS); do \
+               if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir install-suid; \
+               fi; \
+       done
+       @if [ "$(GTK_LIBS)" ]; then \
+               @for dir in $(GTK_DIRS); do \
+                       if [ -e $$dir/Makefile ]; then \
+                               $(MAKE) -C $$dir install-suid; \
+                       fi; \
+               done \
+       fi
+       @echo "done"
+
+install-ss:
+       @for dir in $(BIN_DIRS); do \
+               if [ -e $$dir/Makefile ]; then \
+                       $(MAKE) -C $$dir install-ss; \
+               fi; \
+       done
+
+       @if [ "$(GTK_LIBS)" ]; then \
+               for dir in $(GTK_DIRS); do \
+                       if [ -e $$dir/Makefile ]; then \
+                               $(MAKE) -C $$dir install-ss; \
+                       fi; \
+               done \
+       fi
+       @echo "done"
+
+.PHONY: all install clean distclean dep depend install-docs
diff --git a/Makefile.global.in b/Makefile.global.in
new file mode 100644 (file)
index 0000000..23fa672
--- /dev/null
@@ -0,0 +1,77 @@
+
+#
+# $Id$
+#
+# Global Makefiles configuration for the GNOKII.
+#
+# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+#               2000 Karel Zak
+#
+
+
+
+SHELL          = @SHELL@
+
+LD             = @CC@ -Xlinker -r -nostdlib -nodefaultlibs -o
+
+PACKAGE        = gnokii
+
+srcdir         = @srcdir@
+prefix         = @prefix@
+exec_prefix    = @exec_prefix@
+
+bindir         = @bindir@
+sbindir        = @sbindir@
+xbindir        = ${prefix}/X11R6/bin/
+libdir         = @libdir@
+xgnokii_libdir = @XGNOKIIDIR@/@XPACKAGE@
+man1dir        = @mandir@/man1/
+man8dir        = @mandir@/man8/
+xmandir        = @mandir@/man1/
+docdir         = ${prefix}/doc/${PACKAGE}
+locdir         = @datadir@/locale
+
+BIN_MODE       = 0755
+TEXT_MODE      = 0444
+
+INSTALL        = @INSTALL@
+RM             = @RM@ -f
+FIND           = @FIND@
+MAKE           = @MAKE@
+XGETTEXT       = @XGETTEXT@
+MSGFMT         = @MSGFMT@
+
+CC             = @CC@
+CFLAGS         = @CFLAGS@
+CPPFLAGS       = @CPPFLAGS@
+LIBS           = @LIBS@
+LEX            = @LEX@
+
+GTK_CFLAGS     = @GTK_CFLAGS@
+GTK_LIBS       = @GTK_LIBS@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS   = @PTHREAD_LIBS@
+XPM_LIBS       = @XPM_LIBS@
+XPM_CFLAGS     = @XPM_CFLAGS@
+OWN_GETOPT     = @OWN_GETOPT@
+
+USE_NLS        = @USE_NLS@
+HAVE_XGNOKII   = @HAVE_XGNOKII@
+
+#
+# Global include directory
+#      ($TOPDIR is defined in Makefile)
+#
+GNOKII_INCLUDE = $(TOPDIR)/include
+
+#
+# Win32 option
+#
+ifdef WIN32
+       WIN32 += -I$(TOPDIR)/win32
+endif
+
+
+CFLAGS += -I$(GNOKII_INCLUDE)
+LDFLAGS = $(LIBS) -Wl,--rpath -Wl,$(libdir)
+
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..4735d92
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.3.3_pre8-gold_2002_02_16
diff --git a/common/Makefile b/common/Makefile
new file mode 100644 (file)
index 0000000..e396803
--- /dev/null
@@ -0,0 +1,92 @@
+
+#
+# Makefile for the GNOKII tool suite.
+#
+
+#
+# For this common directory is used "subsystem.o" .o files concept.
+#   (the list of object files to be linked together (to COMMON.o),
+#   and other dirs is used this _one_ file (instead of all OBJS)
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+CFLAGS += $(PTHREAD_CFLAGS)
+
+DIRS =         protocol \
+               oldmodules \
+               newmodules
+
+OBJS = devices/device.o \
+       data/rlp-common.o \
+       data/rlp-crc24.o \
+       files/midifile.o \
+       gsm-ringtones.o \
+       gsm-coding.o \
+       gsm-datetime.o \
+       gsm-wap.o \
+       gsm-api.o \
+       gsm-phonebook.o \
+       gsm-calendar.o \
+       gsm-networks.o \
+       gsm-bitmaps.o \
+       gsm-sms.o \
+       files/cfgreader.o \
+       misc.o \
+       protocol/fbus.o \
+       protocol/fbusirda.o \
+       protocol/mbus.o \
+       protocol/at.o \
+       newmodules/sniff/sniff.o \
+       newmodules/newat.o \
+       newmodules/n6110.o \
+       newmodules/n7110.o
+
+DATA_OBJS = data/virtmodem.o \
+       data/at-emulator.o \
+       data/datapump.o
+
+ifdef WIN32
+       OBJS += $(TOPDIR)/win32/winserial.o
+else
+       OBJS += devices/unixserial.o \
+               devices/unixirda.o \
+               devices/tekram.o
+endif
+
+ifdef XPM_CFLAGS
+    CFLAGS += $(XPM_CFLAGS)
+endif
+
+all: COMMON.o DATA.o gsm-filetypes.o
+
+COMMON.o: $(OBJS)
+       $(LD) $(LDREL) $(LDOUT) COMMON.o $(OBJS)
+
+DATA.o: $(DATA_OBJS)
+       $(LD) $(LDREL) $(LDOUT) DATA.o $(DATA_OBJS)
+
+gsm-filetypes.o: files/gsm-filetypes.c 
+       $(CC) $(CFLAGS) -c files/gsm-filetypes.c
+
+makelib: $(OBJS) DATA.o gsm-filetypes.o
+       $(CC) -shared -o libmygnokii.so $(OBJS) DATA.o gsm-filetypes.o
+
+clean:
+       $(RM) $(OBJS) $(DATA_OBJS) *~ depend libmygnokii.so COMMON.o gsm-filetypes.o DATA.o
+       
+install:
+       $(INSTALL) -d $(libdir)
+       $(INSTALL) libmygnokii.so $(libdir)
+       @echo
+
+depend dep:
+       $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+
+.PHONY: all install clean dep depend
diff --git a/common/data/at-emulator.c b/common/data/at-emulator.c
new file mode 100644 (file)
index 0000000..41445c8
--- /dev/null
@@ -0,0 +1,729 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This file provides a virtual modem or "AT" interface to the GSM phone by
+  calling code in gsm-api.c. Inspired by and in places copied from the Linux
+  kernel AT Emulator IDSN code by Fritz Elfert and others.
+  
+*/
+
+#define                __data_at_emulator_c
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#ifndef WIN32
+
+  #include <termios.h>
+
+#endif
+
+#include "config.h"
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/at-emulator.h"
+#include "data/virtmodem.h"
+#include "data/datapump.h"
+
+#define MAX_LINE_LENGTH 256
+
+       /* Global variables */
+bool ATEM_Initialised = false; /* Set to true once initialised */
+extern bool    CommandMode;
+extern int ConnectCount;
+
+char ModelName[80]; /* This seems to be needed to avoid seg-faults */
+char PortName[80];
+
+
+       /* Local variables */
+int    PtyRDFD;        /* File descriptor for reading and writing to/from */
+int    PtyWRFD;        /* pty interface - only different in debug mode. */ 
+
+u8     ModemRegisters[MAX_MODEM_REGISTERS];
+char   CmdBuffer[MAX_CMD_BUFFERS][CMD_BUFFER_LENGTH];
+int    CurrentCmdBuffer;
+int    CurrentCmdBufferIndex;
+bool   VerboseResponse;        /* Switch betweek numeric (4) and text responses (ERROR) */
+char    IncomingCallNo;
+int     MessageFormat;          /* Message Format (text or pdu) */
+
+       /* Current command parser */
+void   (*Parser)(char *);
+//void         (*Parser)(char *) = ATEM_ParseAT; /* Current command parser */
+
+GSM_MemoryType         SMSType;
+int    SMSNumber;
+
+       /* If initialised in debug mode, stdin/out is used instead
+          of ptys for interface. */
+bool   ATEM_Initialise(int read_fd, int write_fd, char *model, char *port)
+{
+       PtyRDFD = read_fd;
+       PtyWRFD = write_fd;
+
+       strncpy(ModelName,model,80);
+       strncpy(PortName,port,80);
+
+               /* Initialise command buffer variables */
+       CurrentCmdBuffer = 0;
+       CurrentCmdBufferIndex = 0;
+       
+               /* Default to verbose reponses */
+       VerboseResponse = true;
+
+               /* Initialise registers */
+       ATEM_InitRegisters();
+       
+               /* Initial parser is AT routine */
+       Parser = ATEM_ParseAT;
+       
+               /* Setup defaults for AT*C interpreter. */
+       SMSNumber = 1;
+       SMSType = GMT_ME;
+
+               /* Default message format is PDU */
+       MessageFormat = PDU_MODE;
+
+       /* Set the call passup so that we get notified of incoming calls */
+        GSM->DialData(NULL,-1,&ATEM_CallPassup);
+
+               /* We're ready to roll... */
+       ATEM_Initialised = true;
+       return (true);
+}
+
+       /* Initialise the "registers" used by the virtual modem. */
+void   ATEM_InitRegisters(void) 
+{
+
+       ModemRegisters[REG_RINGATA] = 0;
+       ModemRegisters[REG_RINGCNT] = 2;
+       ModemRegisters[REG_ESC] = '+';
+       ModemRegisters[REG_CR] = 10;
+       ModemRegisters[REG_LF] = 13;
+       ModemRegisters[REG_BS] = 8;
+       ModemRegisters[S35]=7;
+       ModemRegisters[REG_ECHO] = BIT_ECHO;
+
+}
+
+
+/* This gets called to indicate an incoming call */
+
+void ATEM_CallPassup(char c)
+{
+       if ((c >= 0) && (c < 9)) {
+               ATEM_ModemResult(MR_RING);              
+               IncomingCallNo = c;
+       }
+}
+
+
+    /* Handler called when characters received from serial port.
+       calls state machine code to process it. */
+
+void   ATEM_HandleIncomingData(char *buffer, int length)
+{
+       int count;
+       unsigned char out_buf[3];       
+
+       for (count = 0; count < length ; count++) {
+                       /* Echo character if appropriate. */
+               if (ModemRegisters[REG_ECHO] & BIT_ECHO) {
+                       out_buf[0] = buffer[count];
+                       out_buf[1] = 0;
+                       ATEM_StringOut(out_buf);
+               }
+
+                       /* If it's a command terminator character, parse what
+                          we have so far then go to next buffer. */
+               if (buffer[count] == ModemRegisters[REG_CR] ||
+                   buffer[count] == ModemRegisters[REG_LF]) {
+
+                       CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = 0x00;
+                       Parser(CmdBuffer[CurrentCmdBuffer]);
+
+                       CurrentCmdBuffer++;
+                       if (CurrentCmdBuffer >= MAX_CMD_BUFFERS) {
+                               CurrentCmdBuffer = 0;
+                       }
+                       CurrentCmdBufferIndex = 0;
+               } else {
+                       CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = buffer[count];
+                       CurrentCmdBufferIndex++;
+                       if (CurrentCmdBufferIndex >= CMD_BUFFER_LENGTH) {
+                               CurrentCmdBufferIndex = CMD_BUFFER_LENGTH;
+                       }
+               }
+       }
+}     
+
+
+       /* Parser for standard AT commands.  cmd_buffer must be null terminated. */
+void   ATEM_ParseAT(char *cmd_buffer)
+{
+       char *buf;
+       char number[30];
+
+       if (strncasecmp (cmd_buffer, "AT", 2) != 0) {
+               ATEM_ModemResult(MR_ERROR);
+               return;
+       }
+
+       for (buf = &cmd_buffer[2]; *buf;) {
+               switch (toupper(*buf)) {
+
+               case 'Z':
+                       buf++;
+                       break;
+               case 'A':
+                       buf++;
+                       /* For now we'll also initialise the datapump + rlp code again */
+                       DP_Initialise(PtyRDFD, PtyWRFD);
+                       GSM->DialData(NULL, -1, &DP_CallPassup);
+                       GSM->AnswerCall(IncomingCallNo);
+                       CommandMode = false;
+                       return;
+                       break;
+               case 'D':
+                       /* Dial Data :-) */
+                       /* FIXME - should parse this better */
+                       /* For now we'll also initialise the datapump + rlp code again */
+                       DP_Initialise(PtyRDFD, PtyWRFD);
+                       buf++;
+                       if (toupper(*buf) == 'T') buf++;
+                       if (*buf == ' ') buf++;
+                       strncpy(number, buf, 30);
+                       if (ModemRegisters[S35] == 0) GSM->DialData(number, 1, &DP_CallPassup);
+                       else GSM->DialData(number, 0, &DP_CallPassup);
+                       ATEM_StringOut("\n\r");
+                       CommandMode = false;
+                       return;
+                       break;
+               case 'H':
+                       /* Hang Up */
+                       buf++;
+                       RLP_SetUserRequest(Disc_Req, true);
+                       GSM->CancelCall();
+                       break;
+               case 'S':
+                       /* Change registers - only no. 35 for now */
+                       buf++;
+                       if (memcmp(buf, "35=", 3) == 0) {
+                               buf += 3;
+                               ModemRegisters[S35] = *buf - '0';
+                               buf++;
+                       }
+                       break;
+                 /* E - Turn Echo on/off */
+               case 'E':
+                       buf++;
+                       switch (ATEM_GetNum(&buf)) {
+                       case 0:
+                               ModemRegisters[REG_ECHO] &= ~BIT_ECHO;
+                               break;
+                       case 1:
+                               ModemRegisters[REG_ECHO] |= BIT_ECHO;
+                               break;
+                       default:
+                               ATEM_ModemResult(MR_ERROR);
+                               return;
+                       }
+                       break;
+                       
+                 /* Handle AT* commands (Nokia proprietary I think) */
+               case '*':
+                       buf++;
+                       if (!strcasecmp(buf, "NOKIATEST")) {
+                               ATEM_ModemResult(MR_OK); /* FIXME? */
+                               return;
+                       } else {
+                               if (!strcasecmp(buf, "C")) {
+                                       ATEM_ModemResult(MR_OK);
+                                       Parser = ATEM_ParseSMS;
+                                       return;
+                               }
+                       }
+                       break;
+                       
+                               /* + is the precursor to another set of commands +CSQ, +FCLASS etc. */
+               case '+':
+                       buf++;
+                       switch (toupper(*buf)) {
+                       case 'C':
+                               buf++;
+                               /* Returns true if error occured */
+                               if (ATEM_CommandPlusC(&buf) == true) {
+                                       return; 
+                               }
+                               break;
+                               
+                       case 'G':
+                               buf++;
+                               /* Returns true if error occured */
+                               if (ATEM_CommandPlusG(&buf) == true) {
+                                       return; 
+                               }
+                               break;
+                               
+                       default:
+                               ATEM_ModemResult(MR_ERROR);
+                               return;
+                       }
+                       break;
+                       
+               default: 
+                       ATEM_ModemResult(MR_ERROR);
+                       return;
+               }
+       }
+       
+       ATEM_ModemResult(MR_OK);
+}
+
+static GSM_Error ATEM_ReadSMS(int number, GSM_MemoryType type, GSM_SMSMessage *message)
+{
+       GSM_Error error;
+
+       message->MemoryType = type;
+       message->Location = number;
+       error = GSM->GetSMSMessage(message);
+
+       return error;
+}
+
+static void ATEM_PrintSMS(char *line, GSM_SMSMessage *message, int mode)
+{
+       switch (mode) {
+       case INTERACT_MODE:
+               gsprintf(line, MAX_LINE_LENGTH, _("\n\rDate/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n\rText: %s\n\r"), message->Time.Day, message->Time.Month, message->Time.Year, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Sender, message->MessageCenter.Number, message->MessageText);
+               break;
+       case TEXT_MODE:
+               if (message->Coding==GSM_Coding_8bit)
+                       gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->Sender, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, _("<Not implemented>"));
+               else
+                       gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->Sender, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, message->MessageText);
+               break;
+       case PDU_MODE:
+               gsprintf(line, MAX_LINE_LENGTH, _("<Not implemented>"));
+               break;
+       default:
+               gsprintf(line, MAX_LINE_LENGTH, _("<Unknown mode>"));
+               break;
+       }
+}
+
+static void ATEM_EraseSMS(int number, GSM_MemoryType type)
+{
+       GSM_SMSMessage message;
+       message.MemoryType = type;
+       message.Location = number;
+       if (GSM->DeleteSMSMessage(&message) == GE_NONE) {
+               ATEM_ModemResult(MR_OK);
+       } else {
+               ATEM_ModemResult(MR_ERROR);
+       }
+}
+
+
+static void ATEM_HandleSMS()
+{
+       GSM_SMSMessage  message;
+       GSM_Error       error;
+       char            buffer[MAX_LINE_LENGTH];
+
+       error = ATEM_ReadSMS(SMSNumber, SMSType, &message);
+       switch (error) {
+       case GE_NONE:
+               ATEM_PrintSMS(buffer, &message, INTERACT_MODE);
+               ATEM_StringOut(buffer);
+               break;
+       default:
+               gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rNo message under number %d\n\r"), SMSNumber);
+               ATEM_StringOut(buffer);
+               break;
+       }
+       return;
+}
+
+       /* Parser for SMS interactive mode */
+void   ATEM_ParseSMS(char *buff)
+{
+       if (!strcasecmp(buff, "HELP")) {
+               ATEM_StringOut(_("\n\rThe following commands work...\n\r"));
+               ATEM_StringOut("DIR\n\r");
+               ATEM_StringOut("EXIT\n\r");
+               ATEM_StringOut("HELP\n\r");
+               return;
+       }
+
+       if (!strcasecmp(buff, "DIR")) {
+               SMSNumber = 1;
+               ATEM_HandleSMS();
+               Parser = ATEM_ParseDIR;
+               return;
+       }
+       if (!strcasecmp(buff, "EXIT")) {
+               Parser = ATEM_ParseAT;
+               ATEM_ModemResult(MR_OK);
+               return;
+       } 
+       ATEM_ModemResult(MR_ERROR);
+}
+
+       /* Parser for DIR sub mode of SMS interactive mode. */
+void   ATEM_ParseDIR(char *buff)
+{
+       switch (toupper(*buff)) {
+               case 'P':
+                       SMSNumber--;
+                       ATEM_HandleSMS();
+                       return;
+               case 'N':
+                       SMSNumber++;
+                       ATEM_HandleSMS();
+                       return;
+               case 'D':
+                       ATEM_EraseSMS(SMSNumber, SMSType);
+                       return;
+               case 'Q':
+                       Parser= ATEM_ParseSMS;
+                       ATEM_ModemResult(MR_OK);
+                       return;
+       }
+       ATEM_ModemResult(MR_ERROR);
+}
+       /* Handle AT+C commands, this is a quick hack together at this
+          stage. */
+bool   ATEM_CommandPlusC(char **buf)
+{
+       float           rflevel;
+       GSM_RFUnits     rfunits = GRF_CSQ;
+       char            buffer[MAX_LINE_LENGTH], buffer2[MAX_LINE_LENGTH];
+       int             status, index;
+       GSM_Error       error;
+       GSM_SMSMessage  message;
+
+       if (strncasecmp(*buf, "SQ", 2) == 0) {
+               buf[0] += 2;
+
+               if (GSM->GetRFLevel(&rfunits, &rflevel) == GE_NONE) {
+                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CSQ: %0.0f, 99", rflevel);
+                       ATEM_StringOut(buffer);
+                       return (false);
+               } else {
+                       return (true);
+               }
+       }
+               /* AT+CGMI is Manufacturer information for the ME (phone) so
+                  it should be Nokia rather than gnokii... */
+       if (strncasecmp(*buf, "GMI", 3) == 0) {
+               buf[0] += 3;
+               ATEM_StringOut(_("\n\rNokia Mobile Phones"));
+               return (false);
+       }
+
+               /* AT+CGSN is IMEI */
+       if (strncasecmp(*buf, "GSN", 3) == 0) {
+               buf[0] += 3;
+               if (GSM->GetIMEI(buffer2) == GE_NONE) {
+                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+                       ATEM_StringOut(buffer);
+                       return (false);
+               } else {
+                       return (true);
+               }
+       }
+
+               /* AT+CGMR is Revision (hardware) */
+       if (strncasecmp(*buf, "GMR", 3) == 0) {
+               buf[0] += 3;
+               if (GSM->GetRevision(buffer2) == GE_NONE) {
+                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+                       ATEM_StringOut(buffer);
+                       return (false);
+               } else {
+                       return (true);
+               }
+       }
+
+               /* AT+CGMM is Model code  */
+       if (strncasecmp(*buf, "GMM", 3) == 0) {
+               buf[0] += 3;
+               if (GSM->GetModel(buffer2) == GE_NONE) {
+                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+                       ATEM_StringOut(buffer);
+                       return (false);
+               } else {
+                       return (true);
+               }
+       }
+
+               /* AT+CMGF is mode selection for message format  */
+       if (strncasecmp(*buf, "MGF", 3) == 0) {
+               buf[0] += 3;
+               switch (**buf) {
+               case '=':
+                       buf[0]++;
+                       switch (**buf) {
+                       case '0':
+                               buf[0]++;
+                               MessageFormat = PDU_MODE;
+                               break;
+                       case '1':
+                               buf[0]++;
+                               MessageFormat = TEXT_MODE;
+                               break;
+                       default:
+                               return (true);
+                       }
+                       break;
+               case '?':
+                       buf[0]++;
+                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGF: %d", MessageFormat);
+                       ATEM_StringOut(buffer);
+                       break;
+               default:
+                       return (true);
+               }
+               return (false);
+       }
+
+               /* AT+CMGR is reading a message */
+       if (strncasecmp(*buf, "MGR", 3) == 0) {
+               buf[0] += 3;
+               switch (**buf) {
+               case '=':
+                       buf[0]++;
+                       sscanf(*buf, "%d", &index);
+                       buf[0] += strlen(*buf);
+
+                       error = ATEM_ReadSMS(index, SMSType, &message);
+                       switch (error) {
+                       case GE_NONE:
+                               ATEM_PrintSMS(buffer2, &message, MessageFormat);
+                               gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGR: %s", buffer2);
+                               ATEM_StringOut(buffer);
+                               break;
+                       default:
+                               gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error);
+                               ATEM_StringOut(buffer);
+                               return (true);
+                       }
+                       break;
+               default:
+                       return (true);
+               }
+               return (false);
+       }
+
+               /* AT+CMGL is listing messages */
+       if (strncasecmp(*buf, "MGL", 3) == 0) {
+               buf[0]+=3;
+               status = -1;
+
+               switch (**buf) {
+               case 0:
+               case '=':
+                       buf[0]++;
+                       /* process <stat> parameter */
+                       if (*(*buf-1) == 0 || /* i.e. no parameter given */
+                               strcasecmp(*buf, "1") == 0 ||
+                               strcasecmp(*buf, "3") == 0 ||
+                               strcasecmp(*buf, "\"REC READ\"") == 0 ||
+                               strcasecmp(*buf, "\"STO SENT\"") == 0) {
+                               status = GSS_SENTREAD;
+                       } else if (strcasecmp(*buf, "0") == 0 ||
+                               strcasecmp(*buf, "2") == 0 ||
+                               strcasecmp(*buf, "\"REC UNREAD\"") == 0 ||
+                               strcasecmp(*buf, "\"STO UNSENT\"") == 0) {
+                               status = GSS_NOTSENTREAD;
+                       } else if (strcasecmp(*buf, "4") == 0 ||
+                               strcasecmp(*buf, "\"ALL\"") == 0) {
+                               status = 4; /* ALL */
+                       } else {
+                               return true;
+                       }
+                       buf[0] += strlen(*buf);
+
+                       /* check all message storages */
+                       for (index = 1; index <= 20; index++) {
+                               error = ATEM_ReadSMS(index, SMSType, &message);
+                               switch (error) {
+                               case GE_NONE:
+                                       /* print messsage if it has the required status */
+                                       if (message.Status == status || status == 4 /* ALL */) {
+                                               ATEM_PrintSMS(buffer2, &message, MessageFormat);
+                                               gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGL: %d,%s", index, buffer2);
+                                               ATEM_StringOut(buffer);
+                                       }
+                                       break;
+                               case GE_EMPTYSMSLOCATION:
+                                       /* don't care if this storage is empty */
+                                       break;
+                               default:
+                                       /* print other error codes and quit */
+                                       gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error);
+                                       ATEM_StringOut(buffer);
+                                       return (true);
+                               }
+                       }
+                       break;
+               default:
+                       return (true);
+               }
+               return (false);
+       }
+
+       return (true);
+}
+
+       /* AT+G commands.  Some of these responses are a bit tongue in cheek... */
+bool   ATEM_CommandPlusG(char **buf)
+{
+       char            buffer[MAX_LINE_LENGTH];
+
+               /* AT+GMI is Manufacturer information for the TA (Terminal Adaptor) */
+       if (strncasecmp(*buf, "MI", 3) == 0) {
+               buf[0] += 2;
+
+               ATEM_StringOut(_("\n\rHugh Blemings, Pavel Janík ml. and others..."));
+               return (false);
+       }
+
+               /* AT+GMR is Revision information for the TA (Terminal Adaptor) */
+       if (strncasecmp(*buf, "MR", 3) == 0) {
+               buf[0] += 2;
+               gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s %s %s", VERSION, __TIME__, __DATE__);
+
+               ATEM_StringOut(buffer);
+               return (false);
+       }
+
+               /* AT+GMM is Model information for the TA (Terminal Adaptor) */
+       if (strncasecmp(*buf, "MM", 3) == 0) {
+               buf[0] += 2;
+
+               gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rgnokii configured for %s on %s"), ModelName, PortName);
+               ATEM_StringOut(buffer);
+               return (false);
+       }
+
+               /* AT+GSN is Serial number for the TA (Terminal Adaptor) */
+       if (strncasecmp(*buf, "SN", 3) == 0) {
+               buf[0] += 2;
+
+               gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rnone built in, choose your own"));
+               ATEM_StringOut(buffer);
+               return (false);
+       }
+
+       return (true);
+}
+
+       /* Send a result string back.  There is much work to do here, see
+          the code in the isdn driver for an idea of where it's heading... */
+void   ATEM_ModemResult(int code) 
+{
+       char    buffer[16];
+
+       if (VerboseResponse == false) {
+               sprintf(buffer, "\n\r%d\n\r", code);
+               ATEM_StringOut(buffer);
+       } else {
+               switch (code) {
+                       case MR_OK:     
+                                       ATEM_StringOut("\n\rOK\n\r");
+                                       break;
+
+                       case MR_ERROR:
+                                       ATEM_StringOut("\n\rERROR\n\r");
+                                       break;
+
+                       case MR_CARRIER:
+                                       ATEM_StringOut("\n\rCARRIER\n\r");
+                                       break;
+
+                       case MR_CONNECT:
+                                       ATEM_StringOut("\n\rCONNECT\n\r");
+                                       break;
+
+                       case MR_NOCARRIER:
+                                       ATEM_StringOut("\n\rNO CARRIER\n\r");
+                                       break;
+                       case MR_RING:
+                                       ATEM_StringOut("RING\n\r");
+                                       break;
+                       default:
+                                       ATEM_StringOut(_("\n\rUnknown Result Code!\n\r"));
+                                       break;
+               }
+       }
+
+}
+
+
+       /* Get integer from char-pointer, set pointer to end of number
+          stolen basically verbatim from ISDN code.  */
+int ATEM_GetNum(char **p)
+{
+       int v = -1;
+
+       while (*p[0] >= '0' && *p[0] <= '9') {
+               v = ((v < 0) ? 0 : (v * 10)) + (int) ((*p[0]++) - '0');
+       }
+
+       return v;
+}
+
+       /* Write string to virtual modem port, either pty or
+          STDOUT as appropriate.  This function is only used during
+          command mode - data pump is used when connected.  */
+void   ATEM_StringOut(char *buffer)
+{
+       int             count = 0;
+       char    out_char;
+
+       while (count < strlen(buffer)) {
+
+                       /* Translate CR/LF/BS as appropriate */
+               switch (buffer[count]) {
+                       case '\r':
+                               out_char = ModemRegisters[REG_CR];
+                               break;
+                       case '\n':
+                               out_char = ModemRegisters[REG_LF];
+                               break;
+                       case '\b':
+                               out_char = ModemRegisters[REG_BS];
+                               break;
+                       default:
+                               out_char = buffer[count];
+                               break;
+               }
+
+               write(PtyWRFD, &out_char, 1);
+               count ++;
+       }
+
+}
diff --git a/common/data/datapump.c b/common/data/datapump.c
new file mode 100644 (file)
index 0000000..4eede53
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This file provides routines to handle processing of data when connected in
+  fax or data mode. Converts data from/to GSM phone to virtual modem
+  interface.
+
+*/
+
+#define                __data_datapump_c
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/poll.h>
+#include <unistd.h>
+
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/at-emulator.h"
+#include "data/virtmodem.h"
+#include "data/datapump.h"
+#include "data/rlp-common.h"
+
+/* Global variables */
+extern bool CommandMode;
+
+/* Local variables */
+int            PtyRDFD;        /* File descriptor for reading and writing to/from */
+int            PtyWRFD;        /* pty interface - only different in debug mode. */ 
+struct pollfd ufds;
+u8 pluscount;
+bool connected;
+
+bool DP_Initialise(int read_fd, int write_fd)
+{
+       PtyRDFD = read_fd;
+       PtyWRFD = write_fd;
+       ufds.fd=PtyRDFD;
+       ufds.events=POLLIN;
+       RLP_Initialise(GSM->SendRLPFrame, DP_CallBack);
+       RLP_SetUserRequest(Attach_Req,true);
+       pluscount=0;
+       connected=false;
+       return true;
+}
+
+
+int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length)
+{
+       int temp;
+
+       switch(ind) {
+       case Data:
+               if (CommandMode==false) write(PtyWRFD, buffer, length);
+               break;
+       case Conn_Ind:
+               if (CommandMode==false) ATEM_ModemResult(MR_CARRIER);
+               RLP_SetUserRequest(Conn_Req,true);
+               break;
+       case StatusChange:
+               if (buffer[0]==0) {
+                       connected=true;
+                       if (CommandMode==false) ATEM_ModemResult(MR_CONNECT);
+               }
+               break;
+       case Disc_Ind:
+               if (CommandMode==false) ATEM_ModemResult(MR_NOCARRIER);
+               connected=false;
+               /* Set the call passup back to the at emulator */
+               GSM->DialData(NULL,-1,&ATEM_CallPassup);
+               CommandMode=true;
+               break;
+       case Reset_Ind:
+               RLP_SetUserRequest(Reset_Resp,true);
+               break;
+       case GetData:
+               if (poll(&ufds,1,0)) {
+
+                       /* Check if the program has closed */
+                       /* Return to command mode */
+                       /* Note that the call will still be in progress, */
+                       /* as with a normal modem (I think) */
+
+                       if (ufds.revents!=POLLIN) { 
+                               CommandMode=true;
+                               /* Set the call passup back to the at emulator */
+                               GSM->DialData(NULL,-1,&ATEM_CallPassup);
+                               return 0;
+                       }
+
+                       temp = read(PtyRDFD, buffer, length);
+
+                       if (temp<0) return 0; /* FIXME - what do we do now? */
+
+                       /* This will only check +++ and the beginning of a read */
+                       /* But there should be a pause before it anyway */
+      
+                       if (buffer[0]=='+') {
+                               pluscount++;
+                               if (temp>1) {
+                                       if (buffer[1]=='+') pluscount++;
+                                       else pluscount=0;
+                                       if (temp>2) {
+                                               if (buffer[2]=='+') pluscount++;
+                                               else pluscount=0;
+                                               if (temp>3) pluscount=0;
+                                       }
+                               }
+                       } else pluscount=0;
+      
+                       if (pluscount==3) {
+                               CommandMode=true;
+                               /* Set the call passup back to the at emulator */
+                               GSM->DialData(NULL,-1,&ATEM_CallPassup);
+                               ATEM_ModemResult(MR_OK);
+                               break;
+                       }
+      
+                       return temp;
+               }
+               return 0;
+               break;
+
+       default:
+
+       }
+       return 0;
+}
+
+void DP_CallPassup(char c)
+{
+       switch (c) {
+       case 'D':
+               if (CommandMode==false) ATEM_ModemResult(MR_CARRIER);
+               RLP_SetUserRequest(Conn_Req,true);
+               connected=true;
+               break;
+       case ' ':
+               CommandMode=true;
+               /* Set the call passup back to the at emulator */
+               GSM->DialData(NULL,-1,&ATEM_CallPassup);
+               ATEM_ModemResult(MR_NOCARRIER);
+               RLP_SetUserRequest(Disc_Req, true);
+               connected=false;
+               break;
+       default:
+               break;
+       }
+}
diff --git a/common/data/rlp-common.c b/common/data/rlp-common.c
new file mode 100644 (file)
index 0000000..9c46e0d
--- /dev/null
@@ -0,0 +1,2069 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  The development of RLP protocol is sponsored by SuSE CR, s.r.o. (Pavel use
+  the SIM card from SuSE for testing purposes).
+
+  Actual implementation of RLP protocol. Based on GSM 04.22 version 7.1.0,
+  downloadable from www.etsi.org (if you register with them)
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "data/rlp-common.h"
+#include "data/rlp-crc24.h"
+#include "gsm-common.h" /* For GSM error and RLP send function. */
+#include "misc.h" /* For u8, u32 etc. */
+
+#ifdef WIN32
+#define INLINE __inline
+#else
+#define INLINE inline
+#endif
+
+/* Our state machine which handles all of nine possible states of RLP
+   machine. */
+void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header);
+
+/* This is the type we are just handling. */
+RLP_FrameTypes CurrentFrameType;
+
+/* Current state of RLP state machine. */
+RLP_State      CurrentState=RLP_S0; /* We start at ADM and Detached */
+
+/* Next state of RLP state machine. */
+RLP_State      NextState;
+
+/* Pointer to Send function that sends frame to phone. */
+bool      (*RLPSendFunction)(RLP_F96Frame *frame, bool out_dtx);
+
+/* Pointer to Passup function which returns data/inds */
+int      (*RLP_Passup)(RLP_UserInds ind, u8 *buffer, int length);
+
+
+/* State variables - see GSM 04.22, Annex A, section A.1.2 */
+
+RLP_StateVariable UA_State;
+RLP_StateVariable UI_State;
+RLP_StateVariable Ackn_State;
+RLP_StateVariable Poll_State;
+RLP_StateVariable Poll_xchg;
+RLP_StateVariable SABM_State;
+RLP_StateVariable DISC_State;
+RLP_StateVariable DM_State;  /* FIXME - not handled */
+RLP_StateVariable XI_R_State;
+RLP_StateVariable XID_C_State;
+RLP_StateVariable XID_R_State;
+RLP_StateVariable TEST_R_State;
+
+u8 VR=0;
+u8 VA=0;
+u8 VS=0;
+u8 VD=0;
+u8 DISC_Count;
+
+u8 DTX_VR;
+RLP_FrameTypes DTX_SF;
+
+#define RLP_M 62
+
+RLP_Data R[RLP_M];
+RLP_Data S[RLP_M];
+
+RLP_StateVariable SABM_State;
+int SABM_Count;
+
+RLP_UserRequestStore UserRequests;
+
+u8 Poll_Count=0;
+
+/* For now timing is done based on a frame reception rate of 20ms */
+/* Serge has measured it as 18.4ms */
+#define RLP_T_Scaling 2
+
+/* Timers - a value of -1 means not set */
+/* To set, timer is loaded with RLP_Timeout1_Limit/RLP_T_Scaling. */
+/* Each received frame (including NULLS / errors) any >0 timer is decrease */
+
+int T;
+int T_RCVS[RLP_M];
+
+bool UA_FBit=true;
+bool Ackn_FBit=false;
+bool DM_FBit=false;  /* FIXME - not handled */
+bool RRReady=false;
+bool LRReady=true;   /* FIXME - not handled (as if we couldn't keep up with 9600bps :-) */
+bool DISC_PBit=false;
+
+u8 LastStatus=0xff;   /* Last Status byte */
+
+
+/* RLP Parameters. FIXME: Reset these - e.g. when entering state 0 */
+
+u8 RLP_SEND_WS = RLP_M-1;
+u8 RLP_RCV_WS = RLP_M-1;
+u8 RLP_Timeout1_Limit = 55;
+u8 RLP_N2 = 15; /* Maximum number of retransmisions. GSM spec says 6 here, but
+                   Nokia will XID this. */
+u8 RLP_T2=0;
+u8 RLP_VersionNumber=0;
+
+
+
+/****** Externally called functions ********/
+/*******************************************/
+
+
+/* Function to initialise RLP code.  Main purpose for now is
+   to set the address of the RLP send function in the API code. */
+
+void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length))
+{
+       int i;
+
+       RLPSendFunction = rlp_send_function;
+       RLP_Passup=rlp_passup;
+       UserRequests.Conn_Req=false;
+       UserRequests.Attach_Req=false;
+       UserRequests.Conn_Req_Neg=false;
+       UserRequests.Reset_Resp=false;
+       UserRequests.Disc_Req=false;
+       CurrentState=RLP_S0; 
+       T=-1;
+       for (i=0;i<RLP_M;i++) T_RCVS[i]=-1;
+
+       UA_FBit=true;
+       Ackn_FBit=false;
+       DISC_PBit=false;
+       LastStatus=0xff;
+       Poll_Count=0;
+       VR=0;
+       VA=0;
+       VS=0;
+       VD=0;
+
+       RLP_SEND_WS = RLP_M-1;
+       RLP_RCV_WS = RLP_M-1;
+       RLP_Timeout1_Limit = 55;
+       RLP_N2 = 15; 
+       RLP_T2=0;
+       RLP_VersionNumber=0;
+
+}
+
+/* Set a user event */
+/* Called by user program for now */
+
+void RLP_SetUserRequest(RLP_UserRequests type, bool value) {
+
+       switch (type) {
+       case Conn_Req:
+               UserRequests.Conn_Req=value;
+               break;
+       case Attach_Req:
+               UserRequests.Attach_Req=value;
+               break;
+       case Conn_Req_Neg:
+               UserRequests.Conn_Req_Neg=value;
+               break;
+       case Reset_Resp:
+               UserRequests.Reset_Resp=value;
+               break;
+       case Disc_Req:
+               UserRequests.Disc_Req=value;
+               break;
+       default:
+               break;
+       }
+}
+
+
+
+
+/***** Internal functions **********/
+/***********************************/
+
+
+/* Check whether a user event is set */
+
+bool RLP_GetUserRequest(RLP_UserRequests type) {
+
+       bool result=false, *x;
+
+       switch (type) {
+       case Conn_Req:
+               x=&UserRequests.Conn_Req;
+               break;
+       case Attach_Req:
+               x=&UserRequests.Attach_Req;
+               break;
+       case Conn_Req_Neg:
+               x=&UserRequests.Conn_Req_Neg;
+               break;
+       case Reset_Resp:
+               x=&UserRequests.Reset_Resp;
+               break;
+       case Disc_Req:
+               x=&UserRequests.Disc_Req;
+               break;
+       default:
+               x=&result;
+               break;
+       }
+
+       result=*x;
+
+       if ( *x == true )
+               *x=false;
+
+       return result;
+}
+
+void RLP_SetTimer(int *timer)
+{
+       *timer=(int)(RLP_Timeout1_Limit/RLP_T_Scaling);
+}
+
+
+/* Previous sequence number. */
+static INLINE u8 Decr(u8 x)
+{
+       if (x==0)
+               return (RLP_M-1);
+       else
+               return (x-1);
+}
+
+/* Next sequence number. */
+static INLINE u8 Incr(u8 x)
+{
+       if (x==RLP_M-1)
+               return 0;
+       else
+               return (x+1);
+}
+
+/* Difference between sequence numbers. */
+
+/* FIXME: Not used now, so I have commented it out. PJ
+ * static INLINE u8 Diff(u8 x, u8 y)
+ * {
+ *   int result = x-y;
+ *   return (result >= 0) ? result : result + RLP_M;
+ * }
+*/
+
+/* Check value is within range */
+static bool InWindow(u8 val, u8 lower, u8 upper)
+{
+       /* allow for one level of wrapping round */
+       if (lower>=RLP_M) lower-=RLP_M;
+       if (upper>=RLP_M) upper-=RLP_M;
+       if (val>=RLP_M)   val-=RLP_M;
+
+  /*   .......L*****U....... */
+       if (lower <= upper)
+               return (val >= lower) && (val <= upper);
+
+  /*  ******U.........L***** */
+       return (val <= upper) || (val >= lower);
+}
+
+void RLP_Init_link_vars(void)
+{
+       int i;
+  
+       Ackn_State=_idle;
+       Poll_State=_idle;
+       Poll_Count=0;
+       Poll_xchg=_idle;
+       SABM_State=_idle;
+       DISC_State=_idle;
+       RRReady=true;  /* This seems a bit strange but it's what the spec says... */
+       VA=0;
+       VR=0;
+       VS=0;
+       VD=0;  
+       LastStatus=0xff;
+
+       for(i=0;i<RLP_M;i++) {
+               R[i].State=_idle;
+               S[i].State=_idle;
+       }
+  
+}
+
+
+void RLP_AddRingBufferDataToSlots(void)
+{
+       u8 buffer[24];
+       int size;
+
+       while ((S[VD].State==_idle)
+              && ((size=RLP_Passup(GetData,buffer,24))!=0)) {
+               memset(S[VD].Data,0xff,25);    /* FIXME - this isn't necessary - but makes debugging easier! */
+               if (size>23) {
+                       S[VD].Data[0]=0x1e;
+                       size=24;
+               }
+               else S[VD].Data[0]=size;
+    
+               memcpy(&S[VD].Data[1],buffer,size);
+    
+               if (size!=24) S[VD].Data[size+1]=0x1f;
+
+               S[VD].State=_send;
+               VD=Incr(VD);
+       }  
+}
+
+
+/* FIXME: Remove this after finishing. */
+
+void X(RLP_F96Frame *frame) {
+
+       int i;
+
+       for (i=0; i<30; i++)
+               printf("byte[%2d]: %02x\n", i, *( (u8 *)frame+i));
+   
+}
+
+
+void ResetAllT_RCVS(void)
+{
+
+       int i;
+       for (i=0;i<RLP_M;i++) T_RCVS[i]=-1; 
+}
+
+
+
+/* This function is used for sending RLP frames to the phone. */
+
+void RLP_SendF96Frame(RLP_FrameTypes FrameType,
+                      bool OutCR, bool OutPF,
+                      u8 OutNR, u8 OutNS,
+                      u8 *OutData, u8 OutDTX)
+{
+
+       RLP_F96Frame frame;
+       int i;
+
+       frame.Header[0]=0;
+       frame.Header[1]=0;
+
+#define SetCRBit frame.Header[0]|=0x01;
+#define SetPFBit frame.Header[1]|=0x02;
+
+#define ClearCRBit frame.Header[0]&=(~0x01);
+#define ClearPFBit frame.Header[1]&=(~0x02);
+
+       /* If Command/Response bit is set, set it in the header. */
+       if (OutCR)
+               SetCRBit;
+
+
+       /* If Poll/Final bit is set, set it in the header. */
+       if (OutPF)
+               SetPFBit;
+
+
+       /* If OutData is not specified (ie. is NULL) we want to clear frame.Data
+          array for the user. */
+       if (!OutData) {
+
+               frame.Data[0]=0x00; // 0x1f
+
+               for (i=1; i<25; i++)
+                       frame.Data[i]=0;
+       }
+       else {
+               for (i=0; i<25; i++)
+                       frame.Data[i]=OutData[i];
+       }
+
+#define PackM(x)  frame.Header[1]|=((x)<<2);
+#define PackS(x)  frame.Header[0]|=((x)<<1);
+#define PackNR frame.Header[1]|=(OutNR<<2);
+#define PackNS frame.Header[0]|=(OutNS<<3);frame.Header[1]|=(OutNS>>5);
+
+       switch (FrameType) {
+
+               /* Unnumbered frames. Be careful - some commands are used as commands
+                  only, so we have to set C/R bit later. We should not allow user for
+                  example to send SABM as response because in the spec is: The SABM
+                  encoding is used as command only. */
+
+       case RLPFT_U_SABM:
+
+               frame.Header[0]|=0xf8; /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */
+               frame.Header[1]|=0x01; /* 1 P/F M1 M2 M3 M4 M5 X */
+
+               SetCRBit; /* The SABM encoding is used as a command only. */
+               SetPFBit; /* It is always used with the P-bit set to "1". */
+
+               PackM(RLPU_SABM);
+
+               break;
+
+       case RLPFT_U_UA:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               ClearCRBit; /* The UA encoding is used as a response only. */
+
+               PackM(RLPU_UA);
+
+               break;
+
+       case RLPFT_U_DISC:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               SetCRBit; /* The DISC encoding is used as a command only. */
+
+               PackM(RLPU_DISC);
+
+               break;
+
+       case RLPFT_U_DM:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               ClearCRBit; /* The DM encoding is used as a response only. */
+
+               PackM(RLPU_DM);
+
+               break;
+
+       case RLPFT_U_NULL:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               PackM(RLPU_NULL);
+
+               break;
+
+       case RLPFT_U_UI:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               PackM(RLPU_UI);
+
+               break;
+
+       case RLPFT_U_XID:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               SetPFBit; /* XID frames are always used with the P/F-bit set to "1". */
+
+               PackM(RLPU_XID);
+
+               break;
+
+       case RLPFT_U_TEST:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               PackM(RLPU_TEST);
+
+               break;
+
+       case RLPFT_U_REMAP:
+
+               frame.Header[0]|=0xf8;
+               frame.Header[1]|=0x01;
+
+               ClearPFBit; /* REMAP frames are always used with P/F-bit set to "0". */
+
+               PackM(RLPU_REMAP);
+
+               break;
+
+       case RLPFT_S_RR:
+
+               frame.Header[0]|=0xf0;  /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */
+               frame.Header[1]|=0x01; /* 1 P/F ...N(R)... */
+
+               PackNR;
+
+               PackS(RLPS_RR);
+
+               break;
+
+       case RLPFT_S_REJ:
+
+               frame.Header[0]|=0xf0;
+               frame.Header[1]|=0x01;
+
+               PackNR;
+
+               PackS(RLPS_REJ);
+
+               break;
+
+       case RLPFT_S_RNR:
+
+               frame.Header[0]|=0xf0;
+               frame.Header[1]|=0x01;
+
+               PackNR;
+
+               PackS(RLPS_RNR);
+
+               break;
+
+       case RLPFT_S_SREJ:
+
+               frame.Header[0]|=0xf0;
+               frame.Header[1]|=0x01;
+
+               PackNR;
+
+               PackS(RLPS_SREJ);
+
+               break;
+
+       case RLPFT_SI_RR:
+
+               PackNR;
+               PackNS;
+
+               PackS(RLPS_RR);
+
+               break;
+
+       case RLPFT_SI_REJ:
+               PackNR;
+               PackNS;
+
+               PackS(RLPS_REJ);
+
+               break;
+
+       case RLPFT_SI_RNR:
+
+               PackNR;
+               PackNS;
+
+               PackS(RLPS_RNR);
+
+               break;
+
+       case RLPFT_SI_SREJ:
+               PackNR;
+               PackNS;
+
+               PackS(RLPS_SREJ);
+
+               break;
+
+       default:
+               break;
+       }
+
+
+       /* Store FCS in the frame. */
+       RLP_CalculateCRC24Checksum((u8 *)&frame, 27, frame.FCS);
+
+       // X(&frame);
+
+       if (RLPSendFunction)
+               RLPSendFunction(&frame, OutDTX);
+
+}
+
+/* Check_input_PDU in Serge's code. */
+
+void RLP_DisplayF96Frame(RLP_F96Frame *frame)
+{
+       int           count;
+       RLP_F96Header header;
+
+       if (T>=0) T--;
+       for (count=0;count<RLP_M;count++) if (T_RCVS[count]>=0) T_RCVS[count]--;
+
+       CurrentFrameType=RLPFT_BAD;
+
+       if (!frame) {
+               /* no frame provided, drop through to state machine anyway */
+       } else if (RLP_CheckCRC24FCS((u8 *)frame, 30) == true) {
+
+               /* Here we have correct RLP frame so we can parse the field of the header
+                  to out structure. */
+
+               RLP_DecodeF96Header(frame, &header);
+
+               switch (header.Type) {
+
+               case RLPFT_U: /* Unnumbered frames. */
+
+#ifdef RLP_DEBUG
+                       fprintf(stdout, "Unnumbered Frame [$%02x%02x] M=%02x ", frame->Header[0],
+                               frame->Header[1],
+                               header.M);
+#endif
+
+                       switch (header.M) {
+
+                       case RLPU_SABM :
+                               if (header.CR == 0 || header.PF == 0) break;
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Set Asynchronous Balanced Mode (SABM) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_SABM;
+
+                               break;
+
+                       case RLPU_UA:
+                               if (header.CR == 1) break;
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Unnumbered Acknowledge (UA) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_UA;
+
+                               break;
+
+                       case RLPU_DISC:
+                               if (header.CR == 0) break;
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Disconnect (DISC) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_DISC;
+
+                               break;
+
+                       case RLPU_DM:
+                               if (header.CR == 1) break;
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Disconnected Mode (DM) ");
+#endif
+                               CurrentFrameType=RLPFT_U_DM;
+
+                               break;
+
+                       case RLPU_UI:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Unnumbered Information (UI) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_UI;
+
+                               break;
+
+                       case RLPU_XID:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "Exchange Information (XID) \n");
+                               RLP_DisplayXID(frame->Data);
+#endif
+
+                               CurrentFrameType=RLPFT_U_XID;
+
+                               break;
+
+                       case RLPU_TEST:
+
+#ifdef DEBUG
+                               fprintf(stdout, "Test (TEST) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_TEST;
+
+                               break;
+
+                       case RLPU_NULL:
+
+#ifdef DEBUG
+                               fprintf(stdout, "Null information (NULL) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_NULL;
+
+                               break;
+
+                       case RLPU_REMAP:
+
+#ifdef DEBUG
+                               fprintf(stdout, "Remap (REMAP) ");
+#endif
+
+                               CurrentFrameType=RLPFT_U_REMAP;
+
+                               break;
+                    
+                       default :
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, _("Unknown!!! "));
+#endif
+
+                               CurrentFrameType=RLPFT_BAD;
+
+                               break;
+
+                       }
+                       break;
+            
+               case RLPFT_S: /* Supervisory frames. */
+
+#ifdef RLP_DEBUG
+                       fprintf(stdout, "Supervisory Frame [$%02x%02x] S=0x%x N(R)=%d ",
+                               frame->Header[0],
+                               frame->Header[1],
+                               header.S,
+                               header.Nr);
+#endif
+
+                       switch (header.S) {
+
+                       case RLPS_RR:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "RR");
+#endif
+
+                               CurrentFrameType=RLPFT_S_RR;
+
+                               break;
+
+                       case RLPS_REJ:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "REJ");
+#endif
+
+                               CurrentFrameType=RLPFT_S_REJ;
+
+                               break;
+
+                       case RLPS_RNR:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "RNR");
+#endif
+
+                               CurrentFrameType=RLPFT_S_RNR;
+
+                               break;
+
+                       case RLPS_SREJ:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "SREJ");
+#endif
+
+                               CurrentFrameType=RLPFT_S_SREJ;
+
+                               break;
+
+                       default:
+
+#ifdef DEBUG
+                               fprintf(stdout, _("BAD"));
+#endif
+
+                               CurrentFrameType=RLPFT_BAD;
+
+                               break;
+
+                       }
+
+                       break;
+            
+               default:
+
+#ifdef RLP_DEBUG
+                       fprintf(stdout, "Info+Supervisory Frame [$%02x%02x] S=0x%x N(S)=%d N(R)=%d ",
+                               frame->Header[0],
+                               frame->Header[1],
+                               header.S,
+                               header.Ns,
+                               header.Nr);
+#endif
+
+                       switch (header.S) {
+
+                       case RLPS_RR:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "RR");
+#endif
+
+                               CurrentFrameType=RLPFT_SI_RR;
+
+                               break;
+
+                       case RLPS_REJ:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "REJ");
+#endif
+
+                               CurrentFrameType=RLPFT_SI_REJ;
+
+                               break;
+
+                       case RLPS_RNR:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "RNR");
+#endif
+
+                               CurrentFrameType=RLPFT_SI_RNR;
+
+                               break;
+
+                       case RLPS_SREJ:
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "SREJ");
+#endif
+
+                               CurrentFrameType=RLPFT_SI_SREJ;
+
+                               break;
+
+                       default:
+
+#ifdef DEBUG
+                               fprintf(stdout, "BAD");
+#endif
+
+                               CurrentFrameType=RLPFT_BAD;
+
+                               break;
+                       }
+
+                       break;
+               }   
+
+#ifdef RLP_DEBUG
+
+               /* Command/Response and Poll/Final bits. */
+
+               fprintf(stdout, " C/R=%d P/F=%d", header.CR, header.PF);
+#endif
+
+#ifdef DEBUG
+
+               /* Information. */
+    
+               if (CurrentFrameType!=RLPFT_U_NULL) {
+
+                       fprintf(stdout, "\n");
+
+                       for (count = 0; count < 25; count ++) {
+
+                               if (isprint(frame->Data[count]))
+                                       fprintf(stdout, "[%02x%c]", frame->Data[count], frame->Data[count]);
+                               else
+                                       fprintf(stdout, "[%02x ]", frame->Data[count]);
+
+                               if (count == 15)
+                                       fprintf(stdout, "\n");
+                       }
+               }
+
+#endif
+#ifdef RLP_DEBUG
+               /* FCS. */
+    
+               fprintf (stdout, " FCS: %02x %02x %02x\n\n", frame->FCS[0],
+                        frame->FCS[1],
+                        frame->FCS[2]);
+
+               fflush(stdout);
+
+#endif
+
+       }
+       else {
+
+               /* RLP Checksum failed - don't we need some statistics about these
+                  failures? Nothing is printed, because in the first stage of connection
+                  there are too many bad RLP frames... */
+
+#ifdef DEBUG
+               fprintf(stdout, _("Frame FCS is bad. Ignoring...\n"));
+#endif
+
+       }
+
+       MAIN_STATE_MACHINE(frame, &header);
+
+       /*
+         Y:= outblock();
+       */
+
+       return;
+}
+
+/* FIXME: real TEST_Handling - we do not handle TEST yet. */
+
+void TEST_Handling() {
+}
+
+
+
+/* FIXME: better XID_handling - but this will answer a XID command. */
+
+bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) {
+  
+       u8 count;
+       u8 type;
+       u8 length;
+
+       if (CurrentFrameType == RLPFT_U_XID) {
+    
+               count=0;
+    
+               while (frame->Data[count] !=0) {
+
+                       type=frame->Data[count] >> 4;
+                       length=frame->Data[count] & 0x0f;
+                       count++;
+      
+                       switch (type) {
+
+                       case 0x01: /* RLP Version Number */
+                               RLP_VersionNumber=frame->Data[count];
+                               count+=length;
+                               break;  
+                       case 0x02: /* Interworking Function (IWF) to Mobile Station (MS) window size */
+                               if (frame->Data[count]>=1 && frame->Data[count]<RLP_M)
+                                       RLP_RCV_WS=frame->Data[count];
+                               count+=length;
+                               break;
+                       case 0x03: /* MS to IWF window size */
+                               if (frame->Data[count]>=1 && frame->Data[count]<RLP_M)
+                                       RLP_SEND_WS=frame->Data[count];
+                               count+=length;
+                               break;
+                       case 0x04: /* Acknowledgement Timer (T1). */
+                               RLP_Timeout1_Limit=frame->Data[count];
+                               count+=length;
+                               break;
+                       case 0x05: /* Retransmission attempts (N2). */
+                               RLP_N2=frame->Data[count];
+                               count+=length;
+                               break;
+                       case 0x06: /* Reply delay (T2). */
+                               RLP_T2=frame->Data[count];
+                               count+=length;
+                               break;
+                       case 0x07: /* Compression - not yet! */
+                               break;
+                       default:
+                               count+=length;
+                               break;
+                       }
+               }
+
+               /* Now reassemble a reply */
+    
+               count=0;
+               memset(frame->Data,0x00,25);  /* Makes debugging easier */
+    
+               /* Version Number - force to 0 for now */
+               RLP_VersionNumber=0;
+               frame->Data[count++]=0x11;
+               frame->Data[count++]=RLP_VersionNumber;
+    
+               /* Window sizes */
+               frame->Data[count++]=0x21;
+               frame->Data[count++]=RLP_RCV_WS;
+               frame->Data[count++]=0x31;
+               frame->Data[count++]=RLP_SEND_WS;
+    
+               /* Acknowledgement Timer (T1). */
+               frame->Data[count++]=0x41;
+               frame->Data[count++]=RLP_Timeout1_Limit;
+
+               /* Retransmission attempts (N2). */
+               frame->Data[count++]=0x51;
+               frame->Data[count++]=RLP_N2;
+
+               /* Reply delay (T2). */
+               frame->Data[count++]=0x61;
+               frame->Data[count++]=RLP_T2;
+
+               XID_R_State = _send;
+
+               return true;
+       }
+
+       return false;
+}
+
+
+bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) {
+
+#ifdef DEBUG
+       //    fprintf(stdout, _("Send_TXU()\n"));
+       //    fprintf(stdout, _("XID_R_State=%d\n"), XID_R_State);
+#endif
+
+       /*
+
+         if (RLP_UserEvent(TEST_R_State)) {
+         RLP_SendF96Frame(RLPFT_U_TEST, false, TEST_R_FBit, 0, 0, TEST_R_Data, false);
+         return true;
+         }
+         else
+
+       */
+
+       if (XID_R_State == _send && frame) {
+               RLP_SendF96Frame(RLPFT_U_XID, false, true, 0, 0, frame->Data, false);
+               XID_R_State = _idle;
+               return true;
+       }
+
+       /*
+
+         else if ((XID_C_State == _send ) && (Poll_xchg == _idle)) {
+         RLP_SendF96Frame(RLPFT_U_XID, true, true, 0, 0, XID_C_Data, false);
+         XID_C_State = _wait;
+         T_XID = 1;
+         Poll_xchg = _wait;
+         return true;
+         } else if (RLP_UserEvent(UI_State)) {
+         RLP_SendF96Frame(RLPFT_U_UI, true, false, 0, 0, NULL, false);
+         return true;
+         }
+
+       */
+
+       return false;
+}
+
+
+/* Deliver data */
+
+void RLP_DeliverAllInSeqIF()
+{
+       int i,j;
+
+       do {
+
+               if ((R[VR].Data[0] & 0xE0)!=LastStatus) {
+                       LastStatus=(R[VR].Data[0] & 0xE0);
+                       RLP_Passup(StatusChange,&LastStatus,0);
+               }
+    
+               j=0;
+               i=R[VR].Data[0] & 0x1f;
+               if (i==0x1e) j=24;
+               if (i<0x18) j=i;
+
+               /* FIXME - should check for more data in the frame */
+    
+               RLP_Passup(Data,R[VR].Data+1,j);
+               R[VR].State=_idle;
+               VR=Incr(VR);
+
+       } while (R[VR].State==_rcvd);
+}
+
+
+/* Mark any missing information frames between VR and Ns*/
+void RLP_MarkMissingIF(u8 Ns)
+{
+       u8 i;
+       for (i=VR; i!=Ns; i=Incr(i)) {
+               if (R[i].State==_idle) R[i].State=_srej;  /* bug in spec, fig A.23 */
+       }
+}
+
+
+/* Information frame handler */
+
+bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+
+       if ((header->CR) && (header->PF))
+               return true;
+
+       /* If the window size is 61, a received frame must have a sequence
+          number between VR and VR+60 */
+
+       if (!InWindow(header->Ns,VR,VR+RLP_RCV_WS-1))
+               return true;
+
+       if (header->Ns==VR) {
+               /* This is not in the spec but I think it is necessary */
+               if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1;
+               R[VR].State=_rcvd;
+               memcpy(R[VR].Data,frame->Data,25);
+               RLP_DeliverAllInSeqIF();
+               Ackn_State=_send;
+       }
+       else {  /* Out of sequence, cause a SREJ */
+               if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1;
+               R[header->Ns].State=_rcvd;
+               memcpy(R[header->Ns].Data,frame->Data,25);
+               RLP_MarkMissingIF(header->Ns);
+       }
+    
+       return false;
+}
+
+
+/* Mark acknowledged send frames */
+
+void RLP_AdvanceVA(u8 Nr)
+{
+       while (VA!=Nr) {
+               S[VA].State=_idle;
+               VA=Incr(VA);
+       }
+}
+
+
+/* Decrease VS back down to Nr since these have not been acknowledged */
+
+void RLP_DecreaseVS(u8 Nr)
+{
+       while (VS!=Nr) {
+               VS=Decr(VS);
+               S[VS].State=_send;
+       }
+}
+
+/* Supervisory frame handling */
+
+void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+       u8 i;
+
+       if ((header->CR) && (header->PF)) {
+               /* Special exchange (ie. error) - counter? */
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Got Poll command\n");
+#endif
+               Ackn_State=_send;
+               Ackn_FBit=true;
+               for (i=0; i<RLP_M; i++) R[i].State=_idle;
+               ResetAllT_RCVS();
+       }
+       if (Poll_State!=_idle) {
+               if (header->PF==0) return;
+               if ((CurrentFrameType==RLPFT_S_SREJ) || (CurrentFrameType==RLPFT_S_REJ) ||
+                   (CurrentFrameType==RLPFT_SI_SREJ) || (CurrentFrameType==RLPFT_SI_REJ)) return;
+               RLP_DecreaseVS(header->Nr);
+               Poll_State=_idle;
+               Poll_xchg=_idle;
+       }
+       switch (CurrentFrameType){
+    
+       case RLPFT_S_RR:
+       case RLPFT_SI_RR:
+               RLP_AdvanceVA(header->Nr);
+               RRReady=true;
+               break;
+       case RLPFT_S_RNR:
+       case RLPFT_SI_RNR:
+               RLP_AdvanceVA(header->Nr);
+               RRReady=false;
+               break;
+       case RLPFT_S_REJ:
+       case RLPFT_SI_REJ:
+               RLP_AdvanceVA(header->Nr);
+               RRReady=true;
+               RLP_DecreaseVS(header->Nr);
+               break;
+       case RLPFT_S_SREJ:
+       case RLPFT_SI_SREJ:
+               S[header->Nr].State=_send;
+               T=-1;
+               return;
+       default:
+               break;
+       }
+
+       if (VA==VS) T=-1;
+
+}
+
+
+/* Find the first SREJ frame */
+
+bool RLP_SREJSlot(u8 *x)
+{
+       u8 i;
+
+       for (i=Incr(VR); i!=VR; i=Incr(i)) if (R[i].State==_srej) {
+               *x=i;
+               return true;
+       }
+  
+       return false;
+}
+
+
+
+/* Check if any SREJ frames need sending, if not send the next in line */
+
+bool RLP_PrepareDataToTransmit(u8 *p)
+{
+       u8 i;
+
+       for (i=VA; i!=VS; i=Incr(i))
+               if (S[i].State==_send) {
+                       *p=i;
+                       S[i].State=_wait;
+                       return true;
+               }
+       if (S[VS].State!=_send) return false;
+       if (!InWindow(VS,VA,VA+RLP_SEND_WS-1))
+               return false;
+       *p=VS;
+       S[VS].State=_wait;
+       VS=Incr(VS);
+       return true;
+}
+
+
+
+/* Send a SREJ command */
+
+void RLP_SendSREJ(u8 x)
+{
+       u8 k;
+  
+       if ((Poll_xchg==_idle) && (Poll_State==_send)) {
+
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending SREJ with poll\n");
+#endif
+
+               RLP_SendF96Frame(RLPFT_S_SREJ, true, true, x , 0 , NULL, false);    
+               R[x].State=_wait;
+               RLP_SetTimer(&T_RCVS[x]);
+               Poll_Count++;
+               Poll_State=_wait;
+               Poll_xchg=_wait;
+               RLP_SetTimer(&T);
+       }
+       else if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending SREJ for %d along with frame %d\n",x,k);
+#endif
+               RLP_SendF96Frame(RLPFT_SI_SREJ, true, false, x , k , S[k].Data, false); 
+               R[x].State=_wait;
+               RLP_SetTimer(&T_RCVS[x]);
+               RLP_SetTimer(&T);
+       }
+       else {
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending SREJ for %d\n",x);
+#endif
+               RLP_SendF96Frame(RLPFT_S_SREJ, true, false, x , 0 , NULL, false); 
+               R[x].State=_wait;
+               RLP_SetTimer(&T_RCVS[x]);
+       }
+}
+
+
+/* Send a command */
+
+void RLP_Send_XX_Cmd(RLP_FrameTypes type)
+{
+       u8 k;
+
+       if ((Poll_xchg!=_wait) && (Poll_State==_send)) {
+               RLP_SendF96Frame(type, true, true, VR , 0 , NULL, false);    
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending Comd %x with Poll\n",type);
+#endif
+               Ackn_State=_idle;
+               Poll_Count++;
+               Poll_State=_wait;
+               Poll_xchg=_wait;
+               RLP_SetTimer(&T);
+       }
+       else if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending Comd %x with frame %d\n",type,k);
+#endif
+               RLP_SendF96Frame(type+4, true, false, VR , k , S[k].Data, false); 
+               Ackn_State=_idle;
+               RLP_SetTimer(&T);
+       }
+       else {
+#ifdef RLP_DEBUG
+               if (type!=9)
+                       fprintf(stdout, "Sending Comd %x\n",type);
+#endif
+               RLP_SendF96Frame(type, true, false, VR , 0 , NULL, false); 
+               Ackn_State=_idle;
+               DTX_SF=type;
+               DTX_VR=VR;   /* As v7.1.0 spec */
+       }
+}
+
+
+/* Send a Response */
+
+void RLP_Send_XX_Resp(RLP_FrameTypes type)
+{
+       u8 k;
+  
+       if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending Resp %x with frame %d\n",type+4,k);
+#endif
+               RLP_SendF96Frame(type+4, false, true, VR , k , S[k].Data, false); 
+               Ackn_State=_idle;
+               Ackn_FBit=false;
+               RLP_SetTimer(&T);
+       }
+       else {
+#ifdef RLP_DEBUG
+               fprintf(stdout, "Sending Resp %x\n",type);
+#endif
+               RLP_SendF96Frame(type, false, true, VR , 0 , NULL, false); 
+               Ackn_State=_idle;
+               Ackn_FBit=false;
+       }
+}
+
+
+/* Decide which frame to use and send it - currently only used in state 4 */
+
+void RLP_SendData()
+{
+       u8 x;
+
+       if (UA_State==_send) {
+               RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0 , 0 , NULL, false);    
+               UA_State=_idle;
+       }
+       else if (Ackn_FBit==true) {
+#ifdef RLP_DEBUG
+               printf("About to send Poll resp\n");
+#endif
+               if (LRReady) RLP_Send_XX_Resp(RLPFT_S_RR);
+               else RLP_Send_XX_Resp(RLPFT_S_RNR);
+       }
+       else if (RLP_SREJSlot(&x)) RLP_SendSREJ(x); 
+       else if (LRReady) RLP_Send_XX_Cmd(RLPFT_S_RR);
+       else RLP_Send_XX_Cmd(RLPFT_S_RNR);
+}
+
+void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) {
+       int i;
+
+       switch (CurrentState) {
+
+               /***** RLP State 0. *****/
+
+               /* ADM and Detached.
+
+                  This is the initial state after power on.
+
+                  As long as the RLP entity is "Detached", DISC(P) and/or SABM at the
+                  lower interface is acted upon by sending DM(P) or DM(1). Any other
+                  stimulus at the lower interface is ignored.
+
+                  This state can be exited only with Attach_Req. */
+
+       case RLP_S0:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 0.\n"));
+#endif
+
+               switch (CurrentFrameType) {
+
+               case RLPFT_U_DISC:
+                       RLP_SendF96Frame(RLPFT_U_DM, false, header->PF, 0, 0, NULL, false);
+                       break;
+
+               case RLPFT_U_SABM:
+                       RLP_SendF96Frame(RLPFT_U_DM, false, true, 0, 0, NULL, false);
+                       break;
+
+               default:
+                       RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+                       if (RLP_GetUserRequest(Attach_Req)) {
+                               NextState=RLP_S1;
+                               UA_State=_idle;
+                       }
+                       break;
+               }
+
+               break;
+  
+               /***** RLP State 1. *****/
+
+               /* ADM and Attached.
+
+                  The RLP entity is ready to established a connection, either by
+                  initiating the connection itself (Conn_Req) or by responding to an
+                  incoming connection request (SABM).
+
+                  Upon receiving a DISC PDU, the handling of the UA response is
+                  initiated. */
+
+       case RLP_S1:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 1.\n"));
+#endif
+
+               if (!XID_Handling(frame, header)) {
+
+                       switch(CurrentFrameType) {
+
+                       case RLPFT_U_TEST:
+                               TEST_Handling();
+                               break;
+
+                       case RLPFT_U_SABM:
+                               RLP_Passup(Conn_Ind,NULL,0);
+                               NextState=RLP_S3;
+                               break;
+
+                       case RLPFT_U_DISC:
+                               UA_State=_send;
+                               UA_FBit=header->PF;
+                               break;
+
+                       case RLPFT_BAD:  /* If we get a bad frame we can still respond with SABM */
+                       default:
+                               if (RLP_GetUserRequest(Conn_Req)) {
+                                       SABM_State=_send;
+                                       SABM_Count=0;
+                                       NextState=RLP_S2;
+                               }
+                               break;
+                       }
+
+               }
+               if (!Send_TXU(frame, header)) {
+      
+                       if (UA_State == _send) {
+                               RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+                               UA_State=_idle;
+                       }
+                       else
+                               RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+               }
+               break;
+  
+               /***** RLP State 2. *****/
+
+       case RLP_S2:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 2.\n"));
+#endif
+
+               if (!XID_Handling(frame, header)) {
+
+                       switch(CurrentFrameType) {
+
+                       case RLPFT_U_TEST:
+                               TEST_Handling();
+                               break;
+
+                       case RLPFT_U_SABM:
+                               /*
+                                 T=0;
+                                 Conn_Conf=true;
+                                 UA_State=_send;
+                                 UA_FBit=true;
+                                 Init_Link_Vars;
+                                 NextState=4;
+                               */
+                               break;
+
+                       case RLPFT_U_DISC:
+                               /*
+                                 T=0;
+                                 DISC_Ind;
+                                 UA_State=_send;
+                                 UA_FBit=header->PF;
+                                 NextState=RLP_S1;
+                               */
+                               break;
+
+                       case RLPFT_U_UA:
+#ifdef DEBUG
+                               fprintf(stdout, _("UA received in RLP state 2.\n"));
+#endif
+
+                               if (SABM_State == _wait && header->PF) {
+                                       T=-1;
+                                       // Conn_Conf=true;
+                                       // Init_Link_Vars;
+                                       NextState=RLP_S4;
+                               }
+                               break;
+
+                       case RLPFT_U_DM:
+                               if (SABM_State == _wait && header->PF) {
+                                       Poll_xchg=_idle;
+                                       // Conn_Conf_Neg=true;
+                                       NextState=RLP_S1;
+                               }
+                               break;
+
+                       default:
+                               if (T == RLP_Timeout1_Limit) {
+                                       Poll_xchg=_idle;
+                                       if (SABM_Count>RLP_N2)
+                                               NextState=RLP_S8;
+                                       SABM_State=_send;
+                               }
+                               break;
+                       }
+               }
+
+               if (!Send_TXU(frame, header)) {
+
+                       if (SABM_State == _send && Poll_xchg == _idle) {
+                               RLP_SendF96Frame(RLPFT_U_SABM, true, true, 0, 0, NULL, false);
+                               SABM_State=_wait;
+                               SABM_Count++;
+                               Poll_xchg=_wait;
+                               T=1;
+                       } else
+                               RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+               }
+
+               if (RLP_GetUserRequest(Disc_Req)) {
+                       T=-1;
+                       DISC_State=_send;
+                       DISC_Count=0;
+                       DISC_PBit=(Poll_xchg==_idle);
+                       NextState=5;
+               }
+  
+               break;
+
+               /***** RLP State 3. *****/
+
+       case RLP_S3:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 3.\n"));
+#endif
+
+               if (!XID_Handling(frame, header)) {
+    
+                       switch(CurrentFrameType) {
+
+                       case RLPFT_U_TEST:
+                               TEST_Handling();
+                               break;
+       
+                       case RLPFT_U_DISC:
+                               RLP_Passup(Disc_Ind,NULL,0);
+                               UA_State=_send;
+                               UA_FBit=header->PF;
+                               NextState=RLP_S1;
+                               break;
+
+                       default:
+                               if (RLP_GetUserRequest(Conn_Req)) {
+                                       UA_State=_send;
+                                       UA_FBit=true;
+                                       NextState=RLP_S4;
+                                       RLP_Init_link_vars();
+                               } else if (RLP_GetUserRequest(Conn_Req_Neg)) {
+                                       DM_State=_send;  /* FIXME - code to handle DM_State - missing from spec? */
+                                       DM_FBit=true;
+                                       NextState=RLP_S1;
+                               }
+                               break;
+                       }
+               }
+    
+               if (!Send_TXU(frame, header)) {
+      
+                       if (UA_State == _send) {
+                               RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+                               UA_State=_idle;
+                       }
+                       else
+                               RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+               }
+    
+
+               if (RLP_GetUserRequest(Disc_Req)) {
+                       T=-1;
+                       DISC_State=_send;
+                       DISC_Count=0;
+                       DISC_PBit=(Poll_xchg==_idle);
+                       NextState=5;
+               }
+    
+               break;
+    
+               /***** RLP State 4. *****/
+  
+       case RLP_S4:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 4.\n"));
+#endif
+    
+               if (!XID_Handling(frame, header)) {
+
+                       switch (CurrentFrameType) {
+       
+                       case RLPFT_U_TEST:
+                               TEST_Handling();
+                               break;
+                       case RLPFT_U_DISC:
+                               T=-1;
+                               ResetAllT_RCVS();
+                               RLP_Passup(Disc_Ind,NULL,0);
+                               UA_State=_send;
+                               UA_FBit=header->PF;
+                               NextState=RLP_S1;
+                               break;
+                       case RLPFT_U_SABM:
+                               T=-1;
+                               ResetAllT_RCVS();
+                               RLP_Passup(Reset_Ind,NULL,0);
+                               NextState=RLP_S7;
+                               break;
+                       case RLPFT_S_RR:
+                       case RLPFT_S_RNR:
+                       case RLPFT_S_REJ:
+                       case RLPFT_S_SREJ:
+                               /* Should check here for unsolicited Fbit */
+                               /* Spec says: "Nr must be within the set of not yet
+                                  acknowledged I-frames or it must be the next possible
+                                  frame number." That's VA..VS-1 or VS, i.e. VA..VS */
+                               if (!InWindow(header->Nr,VA,VS))
+                                       break;
+                               RLP_S_Handler(frame,header);
+                               break;
+                       case RLPFT_SI_RR:
+                       case RLPFT_SI_RNR:
+                       case RLPFT_SI_REJ:
+                       case RLPFT_SI_SREJ:
+                               /* Should check here for unsolicited Fbit */
+                               if (!InWindow(header->Nr,VA,VS))
+                                       break;
+                               if (!RLP_I_Handler(frame,header)) RLP_S_Handler(frame,header);
+                               break;
+                       default:
+                               break;
+                       }
+               }    
+    
+               for (i=0;i<RLP_M;i++) if (T_RCVS[i]==0) {
+#ifdef RLP_DEBUG
+                       fprintf(stdout, "T_RCVS[%d] Timeout in State 4\n",i);
+#endif
+                       R[i].State=_srej;
+               }
+               if (T==0) {
+                       T=-1;
+#ifdef RLP_DEBUG
+                       fprintf(stdout, "T Timeout in State 4\n");
+#endif      
+
+                       Poll_xchg=_idle;
+                       if (Poll_State==_idle) {
+                               Poll_State=_send;
+                               Poll_Count=0;
+                       }
+                       else {
+                               if (Poll_Count>RLP_N2) {
+#ifdef RLP_DEBUG
+                                       fprintf(stdout, "N2 Errors in State 4\n");
+#endif
+                               }
+                               Poll_State=_send;
+                               Poll_Count++;
+                       }
+               }
+
+               if (!Send_TXU(frame,header)) {
+                       if (UA_State == _send) {
+                               RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+                               UA_State=_idle;
+                       }
+                       else  RLP_SendData();
+               }      
+
+
+               /* Load any data from the Send ringbuffer into the send slots */
+               RLP_AddRingBufferDataToSlots();
+
+#ifdef RLP_DEBUG
+               //    if (CurrentFrameType!=RLPFT_BAD) 
+               fprintf(stdout, "VD=%d, VA=%d, VS=%d, VR=%d\n",VD,VA,VS,VR);
+#ifdef RLP_DEBUG_STATE
+               {
+                       int zzz;
+      
+                       if(UA_State!=_idle) printf("[UA_State %d]",UA_State);
+                       if(UI_State!=_idle) printf("[UI_State %d]",UI_State);
+                       if(Ackn_State!=_idle) printf("[Ackn_State %d]",Ackn_State);
+                       if(Poll_State!=_idle) printf("[Poll_State %d]",Poll_State);
+                       if(Poll_xchg!=_idle) printf("[Poll_xchg %d]",Poll_xchg);
+                       if(SABM_State!=_idle) printf("[SABM_State %d]",SABM_State);
+                       if(DISC_State!=_idle) printf("[DISC_State %d]",DISC_State);
+                       if(DM_State!=_idle) printf("[DM_State %d]",DM_State);
+                       if(XI_R_State!=_idle) printf("[XI_R_State %d]",XI_R_State);
+                       if(XID_C_State!=_idle) printf("[XID_C_State %d]",XID_C_State);
+                       if(XID_R_State!=_idle) printf("[XID_R_State %d]",XID_R_State);
+                       if(TEST_R_State!=_idle) printf("[TEST_R_State %d]",TEST_R_State);
+
+                       printf("S: ");
+                       for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",S[zzz].State);
+                       printf("\nR: ");
+                       for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",R[zzz].State);
+                       printf("\nT: %d, T_RCVS: ",T);
+                       for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",T_RCVS[zzz]);
+                       printf("\n");
+               }
+#endif
+#endif    
+
+
+               if (RLP_GetUserRequest(Disc_Req)) {
+                       T=-1;
+                       ResetAllT_RCVS();
+                       DISC_State=_send;
+                       DISC_Count=0;
+                       DISC_PBit=(Poll_xchg==_idle);
+                       NextState=5;
+               }
+
+               break;
+    
+
+               /***** RLP State 5. *****/
+  
+       case RLP_S5:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 5.\n"));
+#endif
+    
+               if (!XID_Handling(frame, header)) {
+    
+                       switch (CurrentFrameType) {
+    
+                       case RLPFT_U_UA:
+                       case RLPFT_U_DM:
+                               if ((DISC_State==_wait) && (DISC_PBit==header->PF)) {
+                                       if (DISC_PBit==true) Poll_xchg=_idle;
+                                       T=-1;
+                                       NextState=1;
+                               }
+                               break;
+                       case RLPFT_U_DISC:
+                               T=-1;
+                               UA_State=_send;
+                               UA_FBit=header->PF;
+                               NextState=1;
+                               break;
+                       default:
+                               break;
+                       }
+               }
+    
+               if (!Send_TXU(frame,header)) {
+                       if ((DISC_State!=_wait) && !((DISC_PBit==true) && (Poll_xchg==_wait))) {
+                               RLP_SendF96Frame(RLPFT_U_DISC, true, DISC_PBit, 0, 0, NULL, false);
+                               if (DISC_PBit==true) Poll_xchg=_wait;
+                               DISC_State=_wait;
+                               DISC_Count++;
+                               RLP_SetTimer(&T);
+                       }
+                       else
+                               RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+               }
+               if (T==0) {
+                       if (DISC_PBit==1) Poll_xchg=_idle;
+                       DISC_Count++;
+                       if (DISC_Count>RLP_N2) {
+
+#ifdef RLP_DEBUG
+                               fprintf(stdout, "N2 error in State 5!\n");
+#endif
+      
+                       }
+                       DISC_State=_send;
+               }
+
+               break;
+
+               /***** RLP State 6. *****/
+               /* We should only get here after a Reset_Req which is not yet supported */
+
+       case RLP_S6:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 6 - not yet implemented!\n"));
+#endif
+    
+               if (!XID_Handling(frame, header)) {
+
+                       switch (CurrentFrameType) {
+                       default:
+                               break;
+                       }
+
+               }
+
+               if (!Send_TXU(frame,header)) {
+               }
+
+               if (RLP_GetUserRequest(Disc_Req)) {
+                       T=-1;
+                       DISC_State=_send;
+                       DISC_Count=0;
+                       DISC_PBit=(Poll_xchg==_idle);
+                       NextState=5;
+               }
+
+               break;
+
+
+               /***** RLP State 7. *****/
+  
+       case RLP_S7:
+
+#ifdef DEBUG
+               fprintf(stdout, _("RLP state 7.\n"));
+#endif
+    
+               if (!XID_Handling(frame, header)) {
+
+                       switch (CurrentFrameType) {
+                       case RLPFT_U_DISC:
+                               RLP_Passup(Disc_Ind,NULL,0);
+                               UA_State=_send;
+                               UA_FBit=header->PF;
+                               NextState=RLP_S1;
+                               break;
+                       default:
+                               break;
+                       }
+               }
+
+               if (RLP_GetUserRequest(Reset_Resp)){
+                       UA_State=_send;
+                       UA_FBit=1;
+                       RLP_Init_link_vars();
+                       NextState=RLP_S4;
+               }
+
+               if (!Send_TXU(frame,header)) {
+                       RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+               }
+
+               if (RLP_GetUserRequest(Disc_Req)) {
+                       T=-1;
+                       DISC_State=_send;
+                       DISC_Count=0;
+                       DISC_PBit=(Poll_xchg==_idle);
+                       NextState=5;
+               }
+    
+               break;
+
+
+       default:
+    
+#ifdef DEBUG
+               fprintf(stdout, _("DEBUG: Unknown RLP state!\n"));
+#endif
+
+               break;
+       }
+
+       CurrentState=NextState;
+
+}
+
+/* Given a pointer to an RLP XID frame, display contents in human readable
+   form.  Note for now only Version 0 and 1 are supported.  Fields can appear
+   in any order and are delimited by a zero type field. This function is the
+   exact implementation of section 5.2.2.6, Exchange Identification, XID of
+   the GSM specification 04.22. */
+
+void RLP_DisplayXID(u8 *frame) 
+{
+
+       int count = 25;  /* Sanity check */
+       u8  type, length;
+    
+       fprintf(stdout, "XID: ");
+
+       while ((*frame !=0) && (count >= 0)) {
+
+               type = *frame >> 4;
+               length = *frame & 0x0f;
+
+               switch (type) {
+
+               case 0x01: /* RLP Version Number, probably 1 for Nokia. */
+
+                       frame += length;
+                       fprintf(stdout, "Ver %d ", *frame);
+                       break;
+                
+               case 0x02: /* IWF to MS window size */
+
+                       frame += length;
+                       fprintf(stdout, "IWF-MS %d ", *frame);
+                       break;
+                
+               case 0x03: /* MS to IWF window size. */
+
+                       frame += length;
+                       fprintf(stdout, "MS-IWF %d ", *frame);
+                       break;
+
+               case 0x04: /* Acknowledgement Timer (T1). */
+
+                       frame += length;
+                       fprintf(stdout, "T1 %dms ", *frame * 10);
+                       break;
+
+               case 0x05: /* Retransmission attempts (N2). */
+
+                       frame += length;
+                       fprintf(stdout, "N2 %d ", *frame);
+                       break;
+
+               case 0x06: /* Reply delay (T2). */
+
+                       frame += length;
+                       fprintf(stdout, "T2 %dms ", *frame * 10);
+                       break;
+
+               case 0x07: /* Compression. */
+
+                       frame ++;
+                       fprintf(stdout, "Comp [Pt=%d ", (*frame >> 4) );
+                       fprintf(stdout, "P0=%d ", (*frame & 0x03) );
+
+                       frame ++;
+                       fprintf(stdout, "P1l=%d ", *frame);
+                       frame ++;
+                       fprintf(stdout, "P1h=%d ", *frame);
+
+                       frame ++;
+                       fprintf(stdout, "P2=%d] ", *frame);
+                       break;
+            
+               default:
+
+                       frame += length;
+                       fprintf(stdout, "Unknown! type=%02x, length=%02x", type, length);
+                       break;
+
+               }
+               count --;
+               frame ++;
+       } 
+
+       return;
+}
+
+/* Given a pointer to an F9.6 Frame, split data out into component parts of
+   header and determine frame type. */
+
+void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+
+       /* Poll/Final bit. */
+
+       if ((frame->Header[1] & 0x02))
+               header->PF = true;
+       else
+               header->PF = false;
+    
+       /* Command/Response bit. */
+
+       if ((frame->Header[0] & 0x01))
+               header->CR = true;
+       else
+               header->CR = false;
+
+       /* Send Sequence Number. */
+
+       header->Ns = frame->Header[0] >> 3;
+
+       if ((frame->Header[1] & 0x01))
+               header->Ns |= 0x20; /* Most significant bit. */
+
+       /* Determine frame type. See the section 5.2.1 in the GSM 04.22
+          specification. */
+
+       switch (header->Ns) {
+
+       case 0x3f: /* Frames of type U, unnumbered frames. */
+
+               /* U frames have M1, ..., M5 stored in the place of N(R). */
+
+               header->Type = RLPFT_U;
+               header->M = (frame->Header[1] >> 2) & 0x1f;
+               return; /* For U frames, we do not need N(R) and bits S1 and S2. */
+                    
+       case 0x3e: /* Frames of type S, supervisory frames. */
+
+               header->Type = RLPFT_S;
+               break;
+                    
+       default: /* Frames of type I+S, numbered information transfer ans
+                   supervisory frames combined. */
+
+               header->Type = RLPFT_IS;
+               break;
+       }
+
+       /* Receive Sequence Number N(R). */
+       header->Nr = frame->Header[1] >> 2;
+
+       /* Status bits (S1 and S2). */
+       header->S = (frame->Header[0] >> 1) & 0x03;
+
+       return;
+}
+
+
diff --git a/common/data/rlp-crc24.c b/common/data/rlp-crc24.c
new file mode 100644 (file)
index 0000000..cc8af90
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  CRC24 (aka FCS) implementation in RLP.
+
+*/
+
+#include "data/rlp-crc24.h"
+
+/* CRC-24 table is used for computation of RLP checksum. */
+
+const u32 CRC24_Table[256] = {
+    0x00000000, 0x00D6A776, 0x00F64557, 0x0020E221, 0x00B78115, 0x00612663,
+    0x0041C442, 0x00976334, 0x00340991, 0x00E2AEE7, 0x00C24CC6, 0x0014EBB0,
+    0x00838884, 0x00552FF2, 0x0075CDD3, 0x00A36AA5, 0x00681322, 0x00BEB454,
+    0x009E5675, 0x0048F103, 0x00DF9237, 0x00093541, 0x0029D760, 0x00FF7016,
+    0x005C1AB3, 0x008ABDC5, 0x00AA5FE4, 0x007CF892, 0x00EB9BA6, 0x003D3CD0,
+    0x001DDEF1, 0x00CB7987, 0x00D02644, 0x00068132, 0x00266313, 0x00F0C465,
+    0x0067A751, 0x00B10027, 0x0091E206, 0x00474570, 0x00E42FD5, 0x003288A3,
+    0x00126A82, 0x00C4CDF4, 0x0053AEC0, 0x008509B6, 0x00A5EB97, 0x00734CE1,
+    0x00B83566, 0x006E9210, 0x004E7031, 0x0098D747, 0x000FB473, 0x00D91305,
+    0x00F9F124, 0x002F5652, 0x008C3CF7, 0x005A9B81, 0x007A79A0, 0x00ACDED6,
+    0x003BBDE2, 0x00ED1A94, 0x00CDF8B5, 0x001B5FC3, 0x00FB4733, 0x002DE045,
+    0x000D0264, 0x00DBA512, 0x004CC626, 0x009A6150, 0x00BA8371, 0x006C2407,
+    0x00CF4EA2, 0x0019E9D4, 0x00390BF5, 0x00EFAC83, 0x0078CFB7, 0x00AE68C1,
+    0x008E8AE0, 0x00582D96, 0x00935411, 0x0045F367, 0x00651146, 0x00B3B630,
+    0x0024D504, 0x00F27272, 0x00D29053, 0x00043725, 0x00A75D80, 0x0071FAF6,
+    0x005118D7, 0x0087BFA1, 0x0010DC95, 0x00C67BE3, 0x00E699C2, 0x00303EB4,
+    0x002B6177, 0x00FDC601, 0x00DD2420, 0x000B8356, 0x009CE062, 0x004A4714,
+    0x006AA535, 0x00BC0243, 0x001F68E6, 0x00C9CF90, 0x00E92DB1, 0x003F8AC7,
+    0x00A8E9F3, 0x007E4E85, 0x005EACA4, 0x00880BD2, 0x00437255, 0x0095D523,
+    0x00B53702, 0x00639074, 0x00F4F340, 0x00225436, 0x0002B617, 0x00D41161,
+    0x00777BC4, 0x00A1DCB2, 0x00813E93, 0x005799E5, 0x00C0FAD1, 0x00165DA7,
+    0x0036BF86, 0x00E018F0, 0x00AD85DD, 0x007B22AB, 0x005BC08A, 0x008D67FC,
+    0x001A04C8, 0x00CCA3BE, 0x00EC419F, 0x003AE6E9, 0x00998C4C, 0x004F2B3A,
+    0x006FC91B, 0x00B96E6D, 0x002E0D59, 0x00F8AA2F, 0x00D8480E, 0x000EEF78,
+    0x00C596FF, 0x00133189, 0x0033D3A8, 0x00E574DE, 0x007217EA, 0x00A4B09C,
+    0x008452BD, 0x0052F5CB, 0x00F19F6E, 0x00273818, 0x0007DA39, 0x00D17D4F,
+    0x00461E7B, 0x0090B90D, 0x00B05B2C, 0x0066FC5A, 0x007DA399, 0x00AB04EF,
+    0x008BE6CE, 0x005D41B8, 0x00CA228C, 0x001C85FA, 0x003C67DB, 0x00EAC0AD,
+    0x0049AA08, 0x009F0D7E, 0x00BFEF5F, 0x00694829, 0x00FE2B1D, 0x00288C6B,
+    0x00086E4A, 0x00DEC93C, 0x0015B0BB, 0x00C317CD, 0x00E3F5EC, 0x0035529A,
+    0x00A231AE, 0x007496D8, 0x005474F9, 0x0082D38F, 0x0021B92A, 0x00F71E5C,
+    0x00D7FC7D, 0x00015B0B, 0x0096383F, 0x00409F49, 0x00607D68, 0x00B6DA1E,
+    0x0056C2EE, 0x00806598, 0x00A087B9, 0x007620CF, 0x00E143FB, 0x0037E48D,
+    0x001706AC, 0x00C1A1DA, 0x0062CB7F, 0x00B46C09, 0x00948E28, 0x0042295E,
+    0x00D54A6A, 0x0003ED1C, 0x00230F3D, 0x00F5A84B, 0x003ED1CC, 0x00E876BA,
+    0x00C8949B, 0x001E33ED, 0x008950D9, 0x005FF7AF, 0x007F158E, 0x00A9B2F8,
+    0x000AD85D, 0x00DC7F2B, 0x00FC9D0A, 0x002A3A7C, 0x00BD5948, 0x006BFE3E,
+    0x004B1C1F, 0x009DBB69, 0x0086E4AA, 0x005043DC, 0x0070A1FD, 0x00A6068B,
+    0x003165BF, 0x00E7C2C9, 0x00C720E8, 0x0011879E, 0x00B2ED3B, 0x00644A4D,
+    0x0044A86C, 0x00920F1A, 0x00056C2E, 0x00D3CB58, 0x00F32979, 0x00258E0F,
+    0x00EEF788, 0x003850FE, 0x0018B2DF, 0x00CE15A9, 0x0059769D, 0x008FD1EB,
+    0x00AF33CA, 0x007994BC, 0x00DAFE19, 0x000C596F, 0x002CBB4E, 0x00FA1C38,
+    0x006D7F0C, 0x00BBD87A, 0x009B3A5B, 0x004D9D2D
+};
+
+void    RLP_CalculateCRC24Polinomial(u8 *data, int length, u32 *polinomial)
+{
+
+    int     i;
+    u8      cur;
+
+    *polinomial = 0x00ffffff;
+
+    for (i = 0; i < length; i++) {
+        cur = (*polinomial & 0x0000ffff) ^ data[i];
+        *polinomial = (*polinomial >> 8) ^ CRC24_Table[cur];
+    }
+
+    *polinomial = ((~*polinomial) & 0x00ffffff);
+}
+
+
+void    RLP_CalculateCRC24Checksum(u8 *data, int length, u8 *crc)
+{
+    u32     polinomial;
+
+    RLP_CalculateCRC24Polinomial(data, length, &polinomial);
+    crc[0] = polinomial & 0x0000ffff;
+    crc[1] = (polinomial >> 8) & 0x0000ffff;
+    crc[2] = (polinomial >> 16) & 0x0000ffff;
+
+}
+
+bool    RLP_CheckCRC24FCS(u8 *data, int length)
+{
+
+    u8     crc[] = { 0x00, 0x00, 0x00 };
+
+    RLP_CalculateCRC24Checksum(data, length - 3, crc);
+
+    if (((data[length - 3] == crc[0]) &&
+        (data[length - 2] == crc[1]) &&
+        (data[length - 1] == crc[2]))) {
+        return (true);
+    }
+    return (false);
+}
diff --git a/common/data/virtmodem.c b/common/data/virtmodem.c
new file mode 100644 (file)
index 0000000..7c7f4e2
--- /dev/null
@@ -0,0 +1,345 @@
+/*
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This file provides a virtual modem interface to the GSM phone by calling
+  code in gsm-api.c, at-emulator.c and datapump.c. The code here provides
+  the overall framework and coordinates switching between command mode
+  (AT-emulator) and "online" mode where the data pump code translates data
+  from/to the GSM handset and the modem data/fax stream.
+
+*/
+
+#define                __virtmodem_c
+
+#include <config.h>
+
+/* This is the right way to include stdlib with __USE_XOPEN defined */
+#ifdef USE_UNIX98PTYS
+# define _XOPEN_SOURCE 500
+# include <features.h>
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#include "misc.h"
+#include "gsm-api.h"
+#include "gsm-common.h"
+#include "data/at-emulator.h"
+#include "data/datapump.h"
+#include "data/virtmodem.h"
+#include "data/rlp-common.h"
+
+       /* Global variables */
+
+//extern bool TerminateThread;
+int ConnectCount;
+
+       /* Local variables */
+
+int            PtyRDFD;        /* File descriptor for reading and writing to/from */
+int            PtyWRFD;        /* pty interface - only different in debug mode. */ 
+
+bool   UseSTDIO;       /* Use STDIO for debugging purposes instead of pty */
+bool   CommandMode;
+
+pthread_t              Thread;
+bool                   RequestTerminate;
+
+
+       /* If initialised in debug mode, stdin/out is used instead
+          of ptys for interface. */
+bool   VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType connection, char *bindir, bool debug_mode, bool GSMInit,char *synchronizetime)
+{
+       int             rtn;
+
+       CommandMode = true;
+
+       RequestTerminate = false;
+
+       if (debug_mode == true) {
+               UseSTDIO = true;
+       }
+       else {
+               UseSTDIO = false;
+       }
+
+       if (GSMInit) {
+#ifdef DEBUG
+         fprintf (stderr , "Initialising GSM\n");
+#endif /* DEBUG */
+         if ((VM_GSMInitialise(model, port, initlength, connection, synchronizetime) != GE_NONE)) {
+               fprintf (stderr, _("VM_Initialise - VM_GSMInitialise failed!\n"));
+               return (false);
+               
+         }
+       }
+       GSMInit=false;
+
+       if (VM_PtySetup(bindir) < 0) {
+               fprintf (stderr, _("VM_Initialise - VM_PtySetup failed!\n"));
+               return (false);
+       }
+    
+       if (ATEM_Initialise(PtyRDFD, PtyWRFD, model, port) != true) {
+               fprintf (stderr, _("VM_Initialise - ATEM_Initialise failed!\n"));
+               return (false);
+       }
+
+       if (DP_Initialise(PtyRDFD, PtyWRFD) != true) {
+               fprintf (stderr, _("VM_Initialise - DP_Initialise failed!\n"));
+               return (false);
+       }
+
+               /* Create and start thread, */
+       rtn = pthread_create(&Thread, NULL, (void *) VM_ThreadLoop, (void *)NULL);
+
+    if (rtn == EAGAIN || rtn == EINVAL) {
+        return (false);
+    }
+       return (true);
+}
+
+void   VM_ThreadLoop(void)
+{
+       int res;
+       struct pollfd ufds;
+
+               /* Note we can't use signals here as they are already used
+                  in the FBUS code.  This may warrant changing the FBUS
+                  code around sometime to use select instead to free up
+                  the SIGIO handler for mainline code. */
+
+       ufds.fd=PtyRDFD;
+       ufds.events=POLLIN;
+
+       while (!RequestTerminate) {
+         if (!CommandMode) {
+           sleep(1);
+         } else {  /* If we are in data mode, leave it to datapump to get the data */
+
+               res=poll(&ufds,1,500);
+
+               switch (res) {
+                       case 0: /* Timeout */
+                               break;
+
+                       case -1:
+                               perror("VM_ThreadLoop - select");
+                               exit (-1);
+
+                       default:
+                         if (ufds.revents==POLLIN) {
+                           VM_CharHandler();
+                         } else usleep(500); /* Probably the file has been closed */
+                         break;
+               }
+         }
+       }
+       
+}
+
+       /* Application should call VM_Terminate to shut down
+          the virtual modem thread */
+void           VM_Terminate(void)
+{
+     
+       /* Request termination of thread */
+       RequestTerminate = true;
+
+       /* Now wait for thread to terminate. */
+       pthread_join(Thread, NULL);
+
+       if (!UseSTDIO) {
+               close (PtyRDFD);
+               close (PtyWRFD);
+       }
+}
+
+       /* Open pseudo tty interface and (in due course create a symlink
+          to be /dev/gnokii etc. ) */
+
+int            VM_PtySetup(char *bindir)
+{
+       int                     err;
+       char            mgnokiidev[200];
+       char            *slave_name;
+       char            cmdline[200];
+
+       if (bindir) {
+               strncpy(mgnokiidev, bindir, 200);
+               strcat(mgnokiidev, "/");
+       }
+       strncat(mgnokiidev, "mgnokiidev", 200 - strlen(bindir));
+
+       if (UseSTDIO) {
+               PtyRDFD = STDIN_FILENO;
+               PtyWRFD = STDOUT_FILENO;
+               return (0);
+       }
+       
+       PtyRDFD = VM_GetMasterPty(&slave_name);
+       if (PtyRDFD < 0) {
+               fprintf (stderr, _("Couldn't open pty!\n"));
+               return(-1);
+       }
+       PtyWRFD = PtyRDFD;
+
+               /* Check we haven't been installed setuid root for some reason
+                  if so, don't create /dev/gnokii */
+       if (getuid() != geteuid()) {
+               fprintf(stderr, _("gnokiid should not be installed setuid root!\n"));
+               return (0);
+       }
+
+#ifdef DEBUG
+       fprintf (stderr, _("Slave pty is %s, calling %s to create /dev/gnokii.\n"), slave_name, mgnokiidev);
+#endif /* DEBUG */
+
+               /* Create command line, something line ./mkgnokiidev ttyp0 */
+       sprintf(cmdline, "%s %s", mgnokiidev, slave_name);
+
+               /* And use system to call it. */        
+       err = system (cmdline);
+       
+       return (err);
+
+}
+
+    /* Handler called when characters received from serial port.
+       calls state machine code to process it. */
+void    VM_CharHandler(void)
+{
+    unsigned char   buffer[255];
+    int             res;
+
+
+    /* If we are in command mode, get the character, otherwise leave it */
+
+    if (CommandMode && ATEM_Initialised) {
+      
+      res = read(PtyRDFD, buffer, 255);
+      
+      /* A returned value of -1 means something serious has gone wrong - so quit!! */
+      /* Note that file closure etc. should have been dealt with in ThreadLoop */
+      
+      if (res < 0) {   
+//         TerminateThread=true;
+           return;
+      }
+       
+      ATEM_HandleIncomingData(buffer, res);
+    }  
+}     
+
+       /* Initialise GSM interface, returning GSM_Error as appropriate  */
+GSM_Error      VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, char *synchronizetime)
+{
+       int             count=0;
+       GSM_Error       error;
+
+               /* Initialise the code for the GSM interface. */     
+
+       error = GSM_Initialise(model,port, initlength, connection, RLP_DisplayF96Frame, synchronizetime);
+
+       if (error != GE_NONE) {
+               fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+       return (error);
+       }
+
+               /* First (and important!) wait for GSM link to be active. We allow 10
+                  seconds... */
+
+       while (count++ < 200 && *GSM_LinkOK == false) {
+       usleep(50000);
+       }
+
+       if (*GSM_LinkOK == false) {
+               fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting. \n"));
+               return (GE_NOLINK); 
+       }
+
+       return (GE_NONE);
+}
+
+/* VM_GetMasterPty()
+   Takes a double-indirect character pointer in which to put a slave
+   name, and returns an integer file descriptor.  If it returns < 0, an
+   error has occurred.  Otherwise, it has returned the master pty
+   file descriptor, and fills in *name with the name of the
+   corresponding slave pty.  Once the slave pty has been opened,
+   you are responsible to free *name.  Code is from Developling Linux
+   Applications by Troan and Johnson */
+
+
+int    VM_GetMasterPty(char **name) { 
+
+#ifdef USE_UNIX98PTYS
+       int master, err;
+
+       master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK);
+       if (master >= 0) {
+               err = grantpt(master);
+               err = err || unlockpt(master);
+               if (!err) {
+                       *name = ptsname(master);
+               } else {
+                       return(-1);
+               }
+       }
+#else /* USE_UNIX98PTYS */
+   int i = 0 , j = 0;
+   /* default to returning error */
+   int master = -1;
+
+   /* create a dummy name to fill in */
+   *name = strdup("/dev/ptyXX");
+
+   /* search for an unused pty */
+   for (i=0; i<16 && master <= 0; i++) {
+      for (j=0; j<16 && master <= 0; j++) {
+         (*name)[8] = "pqrstuvwxyzPQRST"[i];
+         (*name)[9] = "0123456789abcdef"[j];
+         /* open the master pty */
+         if ((master = open(*name, O_RDWR | O_NOCTTY | O_NONBLOCK )) < 0) {
+            if (errno == ENOENT) {
+               /* we are out of pty devices */
+               free (*name);
+               return (master);
+            }
+         }
+      }
+   }
+   if ((master < 0) && (i == 16) && (j == 16)) {
+      /* must have tried every pty unsuccessfully */
+      free (*name);
+      return (master);
+   }
+
+   /* By substituting a letter, we change the master pty
+    * name into the slave pty name.
+    */
+   (*name)[5] = 't';
+
+#endif /* USE_UNIX98PTYS */
+
+   return (master);
+}
+
diff --git a/common/devices/tekram.c b/common/devices/tekram.c
new file mode 100644 (file)
index 0000000..5da6097
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * $Id$
+ *
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#ifndef WIN32
+  #include <fcntl.h>
+  #include <sys/ioctl.h>
+  #include <termios.h>
+  #include "devices/unixserial.h"
+#else
+  #include <windows.h>
+  #include "devices/winserial.h"
+#endif
+
+#include "devices/tekram.h"
+
+int tekram_open(__const char *__file) {
+
+  return (serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK));
+}
+
+void tekram_close(int __fd) {
+
+  serial_setdtrrts(__fd, 0, 0);
+
+  serial_close(__fd);
+}
+
+void tekram_reset(int __fd) {
+
+  serial_setdtrrts(__fd, 0, 0); usleep(50000);
+  serial_setdtrrts(__fd, 1, 0); usleep(1000);
+  serial_setdtrrts(__fd, 1, 1); usleep(50);
+
+  serial_changespeed(__fd, 9600);
+}
+
+void tekram_changespeed(int __fd, int __speed) {
+
+  unsigned char speedbyte;
+
+
+  switch (__speed) {
+
+  default:
+  case 9600:   speedbyte = TEKRAM_PW | TEKRAM_B9600;   break;
+  case 19200:  speedbyte = TEKRAM_PW | TEKRAM_B19200;  break;
+  case 38400:  speedbyte = TEKRAM_PW | TEKRAM_B38400;  break;
+  case 57600:  speedbyte = TEKRAM_PW | TEKRAM_B57600;  break;
+  case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break;
+
+  }
+
+
+  tekram_reset(__fd);
+
+  serial_setdtrrts(__fd, 1, 0);
+
+  usleep(7);
+
+  serial_write(__fd, &speedbyte, 1);
+
+  usleep(100000);
+
+  serial_setdtrrts(__fd, 1, 1);
+
+
+  serial_changespeed(__fd, __speed);
+}
+
+size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes) {
+
+  return (serial_read(__fd, __buf, __nbytes));
+}
+
+size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n) {
+
+  return (serial_write(__fd, __buf, __n));
+}
+
+int tekram_select(int fd, struct timeval *timeout) {
+
+  fd_set readfds;
+
+  FD_ZERO(&readfds);
+  FD_SET(fd, &readfds);
+
+  return (select(fd + 1, &readfds, NULL, NULL, timeout));
+
+}
diff --git a/common/devices/unixirda.c b/common/devices/unixirda.c
new file mode 100644 (file)
index 0000000..cfbf39a
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * $Id$
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include "devices/unixirda.h"
+#include "devices/linuxirda.h"
+
+
+#ifndef AF_IRDA
+#define AF_IRDA 23
+#endif
+
+#define INFO_LEN               22
+#define DISCOVERY_TIMEOUT      60.0
+#define DISCOVERY_SLEEP                0.4
+
+static char *phone[] = {
+        "Nokia 5210",
+       "Nokia 6210", "Nokia 6250", "Nokia 6310",
+       "Nokia 7110",
+       "Nokia 8210", "Nokia 8310", "Nokia 8850"
+};
+
+double d_time(void)
+{
+       double          time;
+       struct timeval  tv;
+       
+       gettimeofday(&tv, NULL);
+       
+       time = tv.tv_sec + (((double)tv.tv_usec) / 1000000.0);
+       
+       return time;
+}
+
+double d_sleep(double s)
+{
+       double          time;
+       struct timeval  tv1, tv2;
+       
+       gettimeofday(&tv1, NULL);
+       usleep(s * 1000000);
+       gettimeofday(&tv2, NULL);
+       
+       time = tv2.tv_sec - tv1.tv_sec + (((double)(tv2.tv_usec - tv1.tv_usec)) / 1000000.0);
+       
+       return time;
+}
+
+static int irda_discover_device(int fd)
+{
+
+       struct irda_device_list *list;
+       struct irda_device_info *dev;
+       unsigned char           *buf;
+       int                     s, len, i, j;
+       int                     daddr = -1;
+       double                  t1, t2;
+       int phones = sizeof(phone) / sizeof(*phone);
+       
+       len = sizeof(*list) + sizeof(*dev) * 10;        // 10 = max devices in discover
+       buf = malloc(len);
+       list = (struct irda_device_list *)buf;
+       dev = list->dev;
+       
+       t1 = d_time();
+       
+       do {
+               s = len;
+               memset(buf, 0, s);
+               
+               if (getsockopt(fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &s) == 0) {
+                       for (i = 0; (i < list->len) && (daddr == -1); i++) {
+                               for (j = 0; (j < phones) && (daddr == -1); j++) {
+                                       if (strncmp(dev[i].info, phone[j], INFO_LEN) == 0) {
+                                               daddr = dev[i].daddr;
+#ifdef DEBUG
+                                               fprintf(stdout,_("%s\t%x\n"), dev[i].info, dev[i].daddr);
+#endif
+                                       }
+                               }
+                               if (daddr == -1) {
+#ifdef DEBUG
+                                       fprintf(stdout,_("unknown: %s\t%x\n"), dev[i].info, dev[i].daddr);
+#endif
+                               }
+                       }
+               }
+               
+               if (daddr == -1) {
+                       d_sleep(DISCOVERY_SLEEP);
+               }
+               
+               t2 = d_time();
+               
+       } while ((t2 - t1 < DISCOVERY_TIMEOUT) && (daddr == -1));
+       
+       free(buf);
+       
+       return daddr;
+}
+
+int irda_open(void)
+{
+       struct sockaddr_irda    peer;
+       int                     fd = -1, daddr;
+       int                     pgrp;         
+       
+       
+       fd = socket(AF_IRDA, SOCK_STREAM, 0);   /* Create socket */
+       if (fd == -1) {
+               perror("socket");
+                       exit(1);
+                    }
+
+       /* discover the devices */ 
+       daddr = irda_discover_device(fd);
+       if (daddr == -1)  {
+                       printf("irda_discover: no nokia devices found");
+                       exit(1);
+                    }
+
+       /* Arrange for the current process to receive
+           SIGIO when the state of the socket changes. */
+       pgrp = getpid();
+       if (fcntl (fd, F_SETOWN, pgrp) < 0)
+       perror("F_SETOWN");
+
+       /*  Set the socket state for Asynchronous  */
+       if (fcntl (fd, F_SETFL, FASYNC) < 0) {
+               perror("fcntl");
+                       exit(1);
+                    }
+
+       peer.sir_family = AF_IRDA;
+       peer.sir_lsap_sel = LSAP_ANY;
+       peer.sir_addr = daddr;
+       strcpy(peer.sir_name, "Nokia:PhoNet");
+               
+       if (connect(fd, (struct sockaddr *)&peer, sizeof(peer))) {      /* Connect to service "Nokia:PhoNet" */
+               perror("connect");
+               close(fd);
+               fd = -1;
+               }
+       
+       return fd;
+}
+
+int irda_close(int fd)
+{
+       shutdown(fd, 0);
+       return close(fd);
+}
+
+int irda_write(int __fd, __const __ptr_t __bytes, int __size)
+{
+  int actual,ret;
+
+   actual = 0;
+   
+   do {
+    if ((ret = send(__fd, __bytes, __size - actual, 0)) < 0)
+       return(actual);
+
+       actual += ret;
+       __bytes += ret;
+
+    } while (actual < __size);
+
+    return (actual);
+}
+
+int irda_read(int __fd, __ptr_t __bytes, int __size)
+{
+       return (recv(__fd, __bytes, __size, 0));
+}
+
+int irda_select(int fd, struct timeval *timeout)
+{
+       fd_set readfds;
+
+       FD_ZERO(&readfds);
+       FD_SET(fd, &readfds);
+
+       return (select(fd + 1, &readfds, NULL, NULL, timeout));
+}
diff --git a/common/devices/unixserial.c b/common/devices/unixserial.c
new file mode 100644 (file)
index 0000000..bc7e37e
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+  
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include "misc.h"
+
+/* Do not compile this file under Win32 systems. */
+
+#ifndef WIN32
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <string.h>
+
+#if __unices__
+#  include <sys/file.h>
+#endif
+
+#include <termios.h>
+#include "devices/unixserial.h"
+
+#ifdef HAVE_SYS_IOCTL_COMPAT_H
+  #include <sys/ioctl_compat.h>
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+/* If the target operating system does not have cfsetspeed, we can emulate
+   it. */
+
+#ifndef HAVE_CFSETSPEED
+  #if defined(HAVE_CFSETISPEED) && defined(HAVE_CFSETOSPEED)
+     #define cfsetspeed(t, speed) \
+     (cfsetispeed(t, speed) || cfsetospeed(t, speed))
+  #else
+    static int cfsetspeed(struct termios *t, int speed) {
+    #ifdef HAVE_TERMIOS_CSPEED
+      t->c_ispeed = speed;
+      t->c_ospeed = speed;
+    #else
+      t->c_cflag |= speed;
+    #endif
+      return 0;
+    }
+  #endif
+#endif
+
+#ifndef O_NONBLOCK
+  #define O_NONBLOCK  0
+#endif
+
+/* Structure to backup the setting of the terminal. */
+
+struct termios serial_termios;
+
+/* Open the serial port and store the settings. */
+
+int serial_open(__const char *__file, int __oflag) {
+
+  int __fd;
+  int retcode;
+
+  __fd = open(__file, __oflag);
+  if (__fd == -1) {
+    perror("Gnokii serial_open: open");
+    return (-1);
+  }
+
+  retcode=tcgetattr(__fd, &serial_termios);
+  if(retcode==-1) {
+    perror("Gnokii serial_open:tcgetattr");
+    /* Don't call serial_close since serial_termios is not valid */
+    close(__fd);
+    return(-1);
+  }
+  
+  return __fd;
+}
+
+/* Close the serial port and restore old settings. */
+
+int serial_close(int __fd) {
+
+  if (__fd >= 0)
+    tcsetattr(__fd, TCSANOW, &serial_termios);
+
+  return (close(__fd));
+}
+
+/* Open a device with standard options. */
+
+int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake) {
+
+  int fd;
+  int retcode;
+  struct termios tp;
+
+  /* Open device */
+
+  fd = serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK);
+
+  if (fd < 0) 
+    return fd;
+
+  /* Allow process/thread to receive SIGIO */
+
+#if !(__unices__)
+  retcode = fcntl(fd, F_SETOWN, getpid());
+  if (retcode == -1){
+    perror("Gnokii serial_opendevice: fnctl(F_SETOWN)");
+    serial_close(fd);
+    return(-1);
+  }
+#endif
+
+  /* Make filedescriptor asynchronous. */
+
+  if (__with_async) {
+    retcode=fcntl(fd, F_SETFL, FASYNC);
+    if (retcode == -1){
+      perror("Gnokii serial_opendevice: fnctl(F_SETFL)");
+      serial_close(fd);
+      return(-1);
+    }
+  }
+  
+  /* Initialise the port settings */
+
+  memcpy(&tp, &serial_termios, sizeof(struct termios));
+
+  /* Set port settings for canonical input processing */
+
+  tp.c_cflag = B0 | CS8 | CLOCAL | CREAD;
+  if (__with_odd_parity) {
+    tp.c_cflag |= (PARENB | PARODD);
+    tp.c_iflag = 0;
+  }
+  else
+    tp.c_iflag = IGNPAR;
+  if (__with_hw_handshake)
+    tp.c_cflag |= CRTSCTS;
+  else
+    tp.c_cflag &= ~CRTSCTS;
+
+  tp.c_oflag = 0;
+  tp.c_lflag = 0;
+  tp.c_cc[VMIN] = 1;
+  tp.c_cc[VTIME] = 0;
+
+  retcode=tcflush(fd, TCIFLUSH);
+  if (retcode == -1) {
+    perror("Gnokii serial_opendevice: tcflush");
+    serial_close(fd);
+    return(-1);
+  }
+
+  retcode=tcsetattr(fd, TCSANOW, &tp);
+  if (retcode == -1){
+    perror("Gnokii serial_opendevice: tcsetattr");
+    serial_close(fd);
+    return(-1);
+  }
+
+  return fd;
+}
+
+/* Set the DTR and RTS bit of the serial device. */
+
+void serial_setdtrrts(int __fd, int __dtr, int __rts) {
+
+  unsigned int flags;
+
+  flags = TIOCM_DTR;
+
+  if (__dtr) ioctl(__fd, TIOCMBIS, &flags);
+        else ioctl(__fd, TIOCMBIC, &flags);
+
+  flags = TIOCM_RTS;
+
+  if (__rts) ioctl(__fd, TIOCMBIS, &flags);
+        else ioctl(__fd, TIOCMBIC, &flags);
+}
+
+
+int serial_select(int fd, struct timeval *timeout) {
+
+  fd_set readfds;
+
+  FD_ZERO(&readfds);
+  FD_SET(fd, &readfds);
+
+  return (select(fd + 1, &readfds, NULL, NULL, timeout));
+
+}
+
+
+/* Change the speed of the serial device. */
+
+void serial_changespeed(int __fd, int __speed) {
+
+#ifndef SGTTY
+  struct termios t;
+#else
+  struct sgttyb t;
+#endif
+
+  int speed=B9600;
+
+  switch (__speed) {
+    case 9600:   speed = B9600;   break;
+    case 19200:  speed = B19200;  break;
+    case 38400:  speed = B38400;  break;
+    case 57600:  speed = B57600;  break;
+    case 115200: speed = B115200; break;
+  }
+
+#ifndef SGTTY
+  tcgetattr(__fd, &t);
+
+  // This is not needed! We set up the speed via cfsetspeed
+  //  t.c_cflag &= ~CBAUD;
+  //  t.c_cflag |= speed;
+#ifdef DEBUG
+  if (cfsetspeed(&t, speed) == -1)
+       fprintf(stdout,_("Serial port speed setting failed\n"));
+#else
+  cfsetspeed(&t, speed);
+#endif
+
+  tcsetattr(__fd, TCSADRAIN, &t);
+#else
+  ioctl(__fd, TIOCGETP, &t);
+
+  t.sg_ispeed = speed;
+  t.sg_ospeed = speed;
+
+  ioctl(__fd, TIOCSETN, &t);
+#endif
+}
+
+/* Read from serial device. */
+
+size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) {
+
+  return (read(__fd, __buf, __nbytes));
+}
+
+/* Write to serial device. */
+
+size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) {
+       
+       return (write(__fd, __buf, __n));
+}
+
+#endif  /* WIN32 */
diff --git a/common/gsm-api.c b/common/gsm-api.c
new file mode 100644 (file)
index 0000000..99b73d7
--- /dev/null
@@ -0,0 +1,792 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Provides a generic API for accessing functions on the phone, wherever
+  possible hiding the model specific details.
+
+  The underlying code should run in it's own thread to allow communications to
+  the phone to be run independantly of mailing code that calls these API
+  functions.
+
+  Unless otherwise noted, all functions herein block until they complete.  The
+  functions themselves are defined in a structure in gsm-common.h.
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+#ifdef WIN32
+  #include <windows.h>
+  #include "misc_win32.h"
+#endif
+
+#include "gsm-api.h"
+
+#include "newmodules/n6110.h"
+#include "newmodules/n7110.h"
+#include "newmodules/newat.h"
+#ifdef DEBUG
+  #include "newmodules/sniff/sniff.h"
+#endif
+#include "protocol/fbusirda.h"
+#include "protocol/fbus.h"
+#include "protocol/mbus.h"
+#include "protocol/at.h"
+#include "files/cfgreader.h"
+
+#ifndef WIN32
+  #include "devices/device.h"
+#endif
+
+#ifdef VC6
+  /* for VC6 make scripts save VERSION constant in mversion.h file */
+  #include "mversion.h"
+#endif
+
+/* GSM_LinkOK is set to true once normal communications with the phone have
+   been established. */
+
+bool *GSM_LinkOK;
+
+/* Define pointer to the GSM_Functions structure used by external code to call
+   relevant API functions. This structure is defined in gsm-common.h. */
+
+GSM_Functions *GSM;
+
+/* Define pointer to the GSM_Information structure used by external code to
+   obtain information that varies from model to model. This structure is also
+   defined in gsm-common.h */
+
+GSM_Information                *GSM_Info;
+
+/* Initialise interface to the phone. Model number should be a string such as
+   3810, 5110, 6110 etc. Device is the serial port to use e.g. /dev/ttyS0, the
+   user must have write permission to the device. */
+
+GSM_Protocol *Protocol;
+
+/* Local variables used by get/set phonebook entry code. Buffer is used as a
+   source or destination for phonebook data and other functions... Error is
+   set to GE_NONE by calling function, set to GE_COMPLETE or an error code by
+   handler routines as appropriate. */
+                                  
+GSM_PhonebookEntry *CurrentPhonebookEntry;
+GSM_Error          CurrentPhonebookError;
+
+GSM_SpeedDial      *CurrentSpeedDialEntry;
+GSM_Error          CurrentSpeedDialError;
+
+unsigned char      Current_IMEI[GSM_MAX_IMEI_LENGTH];
+unsigned char      Current_Revision[GSM_MAX_REVISION_LENGTH];
+unsigned char      Current_Model[GSM_MAX_MODEL_LENGTH];
+
+GSM_SMSMessage     *CurrentSMSMessage;
+GSM_Error          CurrentSMSMessageError;
+int                CurrentSMSPointer;
+
+GSM_SMSFolders      *CurrentSMSFolders;
+GSM_Error          CurrentSMSFoldersError;
+int                CurrentSMSFoldersCount;
+
+GSM_OneSMSFolder   CurrentSMSFolder;
+GSM_Error          CurrentSMSFolderError;
+int                CurrentSMSFolderID;
+
+GSM_MemoryStatus   *CurrentMemoryStatus;
+GSM_Error          CurrentMemoryStatusError;
+
+GSM_NetworkInfo    *CurrentNetworkInfo;
+GSM_Error          CurrentNetworkInfoError;
+
+GSM_SMSStatus      *CurrentSMSStatus;
+GSM_Error          CurrentSMSStatusError;
+
+GSM_MessageCenter  *CurrentMessageCenter;
+GSM_Error          CurrentMessageCenterError;
+
+int                *CurrentSecurityCodeStatus;
+GSM_Error          CurrentSecurityCodeError;
+GSM_SecurityCode   *CurrentSecurityCode;
+
+GSM_DateTime       *CurrentDateTime;
+GSM_Error          CurrentDateTimeError;
+
+GSM_DateTime       *CurrentAlarm;
+GSM_Error          CurrentAlarmError;
+
+GSM_CalendarNote   *CurrentCalendarNote;
+GSM_Error          CurrentCalendarNoteError;
+
+GSM_NotesInfo      CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2;
+GSM_Error          CurrentCalendarNotesInfoError;
+
+GSM_Error          CurrentSetDateTimeError;
+GSM_Error          CurrentSetAlarmError;
+
+GSM_Error          CurrentEnableExtendedCommandsError;
+
+int                CurrentRFLevel,
+                   CurrentBatteryLevel,
+                   CurrentPowerSource;
+
+int                CurrentDisplayStatus;
+GSM_Error          CurrentDisplayStatusError;
+
+GSM_Error          CurrentResetPhoneSettingsError;
+
+char               *CurrentNetmonitor;
+GSM_Error          CurrentNetmonitorError;
+
+GSM_Bitmap         *CurrentGetBitmap=NULL;
+GSM_Error          CurrentGetBitmapError;
+
+GSM_Error          CurrentSetBitmapError;
+
+GSM_Error          CurrentSendDTMFError;
+
+GSM_Profile        *CurrentProfile;
+GSM_Error          CurrentProfileError;
+
+GSM_Error          CurrentDisplayOutputError;
+
+GSM_CBMessage      *CurrentCBMessage;
+GSM_Error          CurrentCBError;
+
+int                CurrentPressKeyEvent;
+GSM_Error          CurrentPressKeyError;
+
+GSM_Error          CurrentPlayToneError=GE_UNKNOWN;
+
+GSM_Error          CurrentDialVoiceError;
+
+GSM_Error          CurrentGetOperatorNameError;
+GSM_Network        *CurrentGetOperatorNameNetwork;
+GSM_Error          CurrentSetOperatorNameError;
+
+GSM_Error          CurrentGetIMEIError;
+
+GSM_Error          CurrentGetHWError;
+
+unsigned char      CurrentPPS[4];
+GSM_Error          CurrentProductProfileSettingsError;
+
+char               CurrentIncomingCall[20];
+
+GSM_Error          CurrentBinRingtoneError;
+GSM_BinRingtone    *CurrentGetBinRingtone=NULL;
+
+GSM_Error          CurrentRingtoneError;
+
+GSM_Error          CurrentMagicError;
+
+GSM_Error          CurrentSimlockInfoError;
+GSM_AllSimlocks    *CurrentSimLock;
+
+GSM_Error          CurrentGetWAPBookmarkError;
+GSM_Error          CurrentSetWAPBookmarkError;
+GSM_WAPBookmark    *WAPBookmark;
+
+GSM_Error          CurrentGetWAPSettingsError;
+GSM_WAPSettings    *WAPSettings;
+
+GSM_Error          CurrentCallDivertError;
+GSM_CallDivert    *CurrentCallDivert;
+
+char              *CurrentManufacturer;
+
+/* This is the connection type used in gnokii. */
+GSM_ConnectionType CurrentConnectionType;
+
+/* Pointer to a callback function used to return changes to a calls status */
+/* This saves unreliable polling */
+void (*CurrentCallPassup)(char c);
+
+/* Pointer to callback function in user code to be called when RLP frames
+   are received. */
+void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame);
+
+/* Used to disconnect the call */
+u8 CurrentCallSequenceNumber;
+
+bool CurrentLinkOK;
+
+bool CurrentRequestTerminate;
+
+bool CurrentDisableKeepAlive;
+
+bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection) {
+
+  bool found_match=false;
+
+  if (strstr(InfoToCheck.FBUSModels, model) != NULL) {
+    if (connection==GCT_FBUS) found_match=true;
+  }
+  if (strstr(InfoToCheck.MBUSModels, model) != NULL) {
+    if (connection==GCT_MBUS) found_match=true;
+  }
+  if (strstr(InfoToCheck.InfraredModels, model) != NULL) {
+    if (connection==GCT_Infrared) found_match=true;
+  }
+  if (strstr(InfoToCheck.DLR3Models, model) != NULL) {
+    if (connection==GCT_DLR3) found_match=true;
+  }
+  if (strstr(InfoToCheck.IrdaModels, model) != NULL) {
+    if (connection==GCT_Irda) found_match=true;
+  }
+  if (strstr(InfoToCheck.ATModels, model) != NULL) {
+    if (connection==GCT_AT) found_match=true;
+  }
+  if (strstr(InfoToCheck.TekramModels, model) != NULL) {
+    if (connection==GCT_Tekram) found_match=true;
+  }
+
+  return found_match;
+}
+GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame)) {
+  int InitLength;
+  int count;
+  unsigned char init_char = N6110_SYNC_BYTE;
+
+  /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */
+  char phonemodel[64];
+
+  if (Protocol->Initialise(device,initlength,connection,rlp_callback)!=GE_NONE)
+  {
+    return GE_NOTSUPPORTED; 
+  }
+
+  if (connection!=GCT_MBUS) {
+    InitLength = atoi(initlength);
+
+    if ((strcmp(initlength, "default") == 0) || (InitLength == 0)) {
+      InitLength = 250;        /* This is the usual value, lower may work. */
+    }
+
+#ifdef DEBUG
+    fprintf(stdout,_("Writing init chars...."));
+#endif
+
+    /* Initialise link with phone or what have you */
+    /* Send init string to phone, this is a bunch of 0x55 characters. Timing is
+       empirical. */
+    for (count = 0; count < InitLength; count ++) {
+      usleep(100);
+      Protocol->WritePhone(1,&init_char);
+    }
+
+#ifdef DEBUG
+    fprintf(stdout,_("Done\n"));  
+#endif
+
+    N6110_SendStatusRequest();
+  }
+
+  usleep(100);
+
+  if (N6110_SendIDFrame()!=GE_NONE)
+    return GE_TIMEOUT;
+  while (N6110_GetModel(phonemodel) != GE_NONE)
+    sleep(1);
+
+  if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5"))
+  {
+    GSM->Terminate();      
+    
+    /* Set pointers to relevant addresses */
+    GSM = &N7110_Functions;
+    GSM_Info = &N7110_Information;
+    GSM_LinkOK = &CurrentLinkOK;
+    return GE_NONE;
+  }
+
+  return GE_NONE;
+}
+
+GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime)
+{
+  bool found_match=false;
+  
+  GSM_ConnectionType connection2;
+
+  struct tm *now;
+  time_t nowh;
+  GSM_DateTime Date;
+  GSM_Error error;
+  
+  connection2=connection;
+
+  CurrentRLP_RXCallback = rlp_callback;
+  CurrentCallPassup=NULL;
+  CurrentPhonebookEntry=NULL;
+  CurrentNetworkInfo = NULL;
+  CurrentGetBitmap=NULL;
+  CurrentPlayToneError=GE_UNKNOWN;
+  strcpy(CurrentIncomingCall," ");
+  CurrentGetBinRingtone=NULL;
+  CurrentNetworkInfo=NULL;
+  CurrentRequestTerminate=false;
+  CurrentDisableKeepAlive=false;
+  CurrentCalendarNotesInfo.HowMany=2000;
+  CurrentMagicError = GE_BUSY;  
+  
+  if (!strcmp(model,"auto")) {
+
+    /* For now */
+    GSM = &N6110_Functions;
+    GSM_Info = &N6110_Information;
+    GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+    fprintf(stdout,_("Trying FBUS for new Nokia phones...\n"));
+#endif
+    /* Trying FBUS */
+    Protocol = &FBUS_Functions;
+    CurrentConnectionType=GCT_FBUS;    
+    connection2=GCT_FBUS;
+    if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+    {
+      found_match=true;
+    } else {
+      GSM->Terminate();      
+    }
+
+    if (!found_match) {
+      usleep(100);          
+      
+      /* For now */
+      GSM = &N6110_Functions;
+      GSM_Info = &N6110_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+      fprintf(stdout,_("Trying DLR3 for new Nokia phones...\n"));
+#endif
+      /* Trying DLR3 */
+      Protocol = &FBUS_Functions;
+      CurrentConnectionType=GCT_DLR3;    
+      connection2=GCT_DLR3;
+      if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+      {
+        found_match=true;
+      } else {
+        GSM->Terminate();      
+      }
+    }
+    
+    if (!found_match) {
+      usleep(100);          
+      
+      /* For now */
+      GSM = &N6110_Functions;
+      GSM_Info = &N6110_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+      fprintf(stdout,_("Trying MBUS for new Nokia phones...\n"));
+#endif
+      /* Trying MBUS */
+      Protocol = &MBUS_Functions;
+      CurrentConnectionType=GCT_MBUS;    
+      connection2=GCT_MBUS;
+      if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+      {
+        found_match=true;
+      } else {
+        GSM->Terminate();      
+      }
+    }
+
+    if (!found_match) return GE_NOTSUPPORTED;
+
+    usleep(50);
+        
+  } else {
+#ifdef DEBUG
+    if (CheckModel (Nsniff_Information, model, connection)) {
+      /* Set pointers to relevant addresses */
+      GSM = &Nsniff_Functions;
+      GSM_Info = &Nsniff_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+      found_match=true;
+    }
+#endif
+
+    if (CheckModel (N6110_Information, model, connection)) {
+      /* Set pointers to relevant addresses */
+      GSM = &N6110_Functions;
+      GSM_Info = &N6110_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+      found_match=true;
+    }
+    if (CheckModel (N7110_Information, model, connection)) {
+      /* Set pointers to relevant addresses */
+      GSM = &N7110_Functions;
+      GSM_Info = &N7110_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+      found_match=true;
+    }
+    if (CheckModel (Nat_Information, model, connection)) {
+      /* Set pointers to relevant addresses */
+      GSM = &Nat_Functions;
+      GSM_Info = &Nat_Information;
+      GSM_LinkOK = &CurrentLinkOK;
+      found_match=true;
+    }
+
+    if (found_match) {
+      switch (connection) {
+        case GCT_FBUS    : Protocol = &FBUS_Functions;    break;
+        case GCT_Infrared: Protocol = &FBUS_Functions;    break;
+        case GCT_Tekram  : Protocol = &FBUS_Functions;    break;
+        case GCT_DLR3    : Protocol = &FBUS_Functions;    break;
+        case GCT_MBUS    : Protocol = &MBUS_Functions;    break;
+        case GCT_Irda    : Protocol = &FBUSIRDA_Functions;break;
+        case GCT_AT      : Protocol = &AT_Functions;      break;
+        case GCT_Default : Protocol = NULL;               break;
+      }
+    } else
+      return GE_NOTSUPPORTED;
+  }
+
+    
+  /* Now call model specific initialisation code. */
+  error=(GSM->Initialise(device, initlength, connection2, rlp_callback));
+
+  /* RTH: FIXME: second try for Irda (6210 only?)*/
+  if ( error!=GE_NONE && connection == GCT_Irda)
+  {
+   #ifdef DEBUG
+     fprintf(stdout,"Irda connection: second try!\n");
+   #endif
+   device_close();
+   error=(GSM->Initialise(device, initlength, connection2, rlp_callback));
+  }
+
+  if (error==GE_NONE && !strcmp(SynchronizeTime,"yes"))
+  {
+    nowh=time(NULL);
+    now=localtime(&nowh);
+
+    Date.Year = now->tm_year;
+    Date.Month = now->tm_mon+1;
+    Date.Day = now->tm_mday;
+    Date.Hour = now->tm_hour;
+    Date.Minute = now->tm_min;
+    Date.Second = now->tm_sec;
+
+    if (Date.Year<1900)
+    {
+
+      /* Well, this thing is copyrighted in U.S. This technique is known as
+         Windowing and you can read something about it in LinuxWeekly News:
+         http://lwn.net/1999/features/Windowing.phtml. This thing is beeing
+         written in Czech republic and Poland where algorithms are not allowed
+         to be patented. */
+
+      if (Date.Year>90)
+        Date.Year = Date.Year+1900;
+      else
+        Date.Year = Date.Year+2000;
+    }
+
+    /* FIXME: Error checking should be here. */
+    GSM->SetDateTime(&Date);
+  }
+
+  return error;
+}
+
+GSM_Error Unimplemented(void)
+{
+       return GE_NOTIMPLEMENTED;
+}
+
+GSM_Error NotSupported(void)
+{
+       return GE_NOTSUPPORTED;
+}
+
+/* Applications should call N6110_Terminate to shut down the N6110 thread and
+   close the serial port. */
+void NULL_Terminate(void)
+{
+  Protocol->Terminate();
+}
+
+#ifdef WIN32
+/* Here are things made for keeping connecting */
+void NULL_KeepAlive()
+{
+}
+#else
+/* Here are things made for keeping connecting */
+void NULL_KeepAlive()
+{
+}
+#endif
+
+#ifdef DEBUG
+void NULL_TX_DisplayMessage(u16 MessageLength, u8 *MessageBuffer)
+{
+  fprintf(stdout, _("PC: "));
+
+  txhexdump(MessageLength,MessageBuffer);
+}
+#endif
+
+bool NULL_WritePhone (u16 length, u8 *buffer) {
+  if (device_write(buffer,length)!=length) return false;
+                                      else return true;
+}
+
+GSM_Error NULL_WaitUntil (int time, GSM_Error *value)
+{
+  int timeout;
+
+  timeout=time;
+  
+  /* Wait for timeout or other error. */
+  while (timeout != 0 && *value == GE_BUSY ) {
+          
+    if (--timeout == 0)
+      return (GE_TIMEOUT);
+                    
+    usleep (100000);
+  }
+
+  return *value;
+}
+
+GSM_Error NULL_SendMessageSequence (int time, GSM_Error *value,
+                 u16 message_length, u8 message_type, u8 *buffer)
+{
+  *value=GE_BUSY;
+  
+  Protocol->SendMessage(message_length, message_type, buffer);  
+
+  return NULL_WaitUntil (time, value);
+}
+
+GSM_ConnectionType GetConnectionTypeFromString(char *Connection) {
+
+  GSM_ConnectionType connection=GCT_FBUS;
+
+  if (!strcmp(Connection, "irda"))     connection=GCT_Irda;
+  if (!strcmp(Connection, "infrared")) connection=GCT_Infrared;
+  if (!strcmp(Connection, "mbus"))     connection=GCT_MBUS;
+  if (!strcmp(Connection, "dlr3"))     connection=GCT_DLR3;
+  if (!strcmp(Connection, "at"))       connection=GCT_AT;
+  if (!strcmp(Connection, "tekram210"))connection=GCT_Tekram;
+  
+  return connection;
+}
+
+bool GetMemoryTypeString(char *memorytext, GSM_MemoryType *type)
+{
+  int i=0;
+
+  typedef struct {
+    GSM_MemoryType type;
+    char *name;
+  } GSM_MTStrings;
+
+  GSM_MTStrings mystring[] = {
+    {GMT_ME,"ME"},
+    {GMT_SM,"SM"},
+    {GMT_FD,"FD"},
+    {GMT_ON,"ON"},
+    {GMT_EN,"EN"},
+    {GMT_DC,"DC"},
+    {GMT_RC,"RC"},  
+    {GMT_MC,"MC"},
+    {GMT_LD,"LD"},
+    {GMT_MT,"MT"},
+    {GMT_ME,"undefined"}
+  };
+
+  while (strcmp(mystring[i].name,"undefined")) {
+    if (*type==mystring[i].type) {
+      strcpy(memorytext,mystring[i].name);
+      return true;
+    }
+    i++;
+  }
+  return false;
+}
+
+bool GetMemoryTypeID(char *memorytext, GSM_MemoryType *type)
+{
+  int i=0;
+
+  typedef struct {
+    GSM_MemoryType type;
+    char *name;
+  } GSM_MTStrings;
+
+  GSM_MTStrings mystring[] = {
+    {GMT_ME,"ME"},
+    {GMT_SM,"SM"},
+    {GMT_FD,"FD"},
+    {GMT_ON,"ON"},
+    {GMT_EN,"EN"},
+    {GMT_DC,"DC"},
+    {GMT_RC,"RC"},  
+    {GMT_MC,"MC"},
+    {GMT_LD,"LD"},
+    {GMT_MT,"MT"},
+    {GMT_ME,"undefined"}
+  };
+
+  while (strcmp(mystring[i].name,"undefined")) {
+    if (strcmp(mystring[i].name,memorytext)==0) {
+      *type=mystring[i].type;
+      return true;
+    }
+    i++;
+  }
+
+  return false;
+}
+
+char *GetMygnokiiVersion() {
+
+  static char Buffer[1000]="";
+
+  sprintf(Buffer, "%s",VERSION);
+
+  return Buffer;
+}
+
+/*
+1.Name,2.CodeName,3.Calendar,4.Netmonitor,5.Caller groups,6.Phonebook,
+7.Authentication 8.Datacalls 9.KeysPressing 10.SMSC Default Recipient
+11.SpeedDials 12.ScreenSavers 13.DTMF 14.SMS 15.NoPowerFrame 16.StartUpLogo
+17.Profiles 18.Ringtones 19.WAP
+*/
+
+static OnePhoneModel allmodels[] = {
+
+/*1,    2,       3,      4,       5,        6       7      8        9      10        11      12       13     14      15        16       17       18        19 */
+{"3210","NSE-8",{      0,F_NETMON,        0,      0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0}},
+{"3210","NSE-9",{      0,F_NETMON,        0,      0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0}},
+{"3310","NHM-5",{F_CAL33,F_NETMON,        0,F_PBK33,     0,       0,     0,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM,    0}},
+{"3330","NHM-6",{F_CAL33,F_NETMON,        0,F_PBK33,     0,       0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,        0,F_STANIM,F_PROF33,F_RING_SM,F_WAP}},
+{"5110","NSE-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
+{"5130","NSK-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
+{"5190","NSB-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
+{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},
+{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},    
+{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP}},
+{"8210","NSM-3",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"8850","NSM-2",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
+{"9210","RAE-3",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},//quesses only !
+{""    ,""     ,{      0,       0,        0,      0,     0,       0,     0,        0,      0,       0,     0,      0,        0,       0,       0,        0,    0}}
+};
+
+OnePhoneModel *GetPhoneModelData (const char *num)
+{
+       register int i = 0;
+
+       while (allmodels[i].number != "") {
+               if (strcmp (num, allmodels[i].number) == 0) {
+                       return (&allmodels[i]);
+               }
+               i++;
+       }
+
+       return (&allmodels[i]);
+}
+
+char *GetModelName ()
+{
+  static char model[64];
+
+  while (GSM->GetModel(model)  != GE_NONE) sleep(1);
+
+  return (GetPhoneModelData(model)->model);
+}
+
+int GetModelFeature (featnum_index num)
+{
+  static char model[64];
+
+  while (GSM->GetModel(model)  != GE_NONE) sleep(1);
+
+  return (GetPhoneModelData(model)->features[num]);
+}
+
+int LogAvailable=-1; //-1 not checked earlier, 0 not, 1 yes
+char *logfilename;
+
+bool AppendLog(u8 *buffer, int length,bool format)
+{
+  FILE *file=NULL;
+  char buffer2[50001];
+  int i;
+
+  struct CFG_Header *cfg_info;
+  char *LogFile;       
+
+  if (LogAvailable==-1) {
+
+    LogAvailable=0;
+
+    cfg_info=CFG_FindGnokiirc();
+    if (cfg_info==NULL) return false;
+
+    LogFile = CFG_Get(cfg_info, "global", "logfile");
+    if (LogFile) {
+      LogAvailable=1;
+      logfilename=LogFile;
+
+      file=fopen(logfilename, "a+");
+
+      /* We have first entry in this session and too large file */
+      if (fread( buffer2, 1, 50000,file )==50000) {
+        fclose(file);
+        file=fopen(logfilename, "w");
+      }
+    }
+  } else {
+    if (LogAvailable==1) {
+      file=fopen(logfilename, "a");
+    }
+  }
+  
+  if (LogAvailable==1) {
+    for (i=0;i<length;i++) {
+      if (format) {
+        fprintf(file, "%02x",buffer[i]);
+        switch (buffer[i]) {
+          case 0x09:fprintf(file,_(" |"));break;
+          default:
+            if (isprint(buffer[i])) fprintf(file, _("%c|"),buffer[i]);
+                               else fprintf(file, _(" |"));
+            break;
+        } 
+      } else {
+        fprintf(file, "%c",buffer[i]);
+      }
+    }
+    if (format) fprintf(file, "\n");
+    fclose(file);
+  }
+
+  return (LogAvailable==1);
+}
+
+bool AppendLogText(u8 *buffer,bool format)
+{
+  return AppendLog(buffer,strlen(buffer),format);
+}
diff --git a/common/gsm-bitmaps.c b/common/gsm-bitmaps.c
new file mode 100644 (file)
index 0000000..1e96f8b
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Functions for manipulating bitmaps
+  
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#include "gsm-common.h"
+#include "gsm-bitmaps.h"
+#include "gsm-sms.h"
+#include "gsm-coding.h"
+#include "gsm-networks.h"
+
+void GSM_SetPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+  int pixel;
+  if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+    bmp->bitmap[((y/8)*bmp->width)+x] |= 1 << (y%8);
+  if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+    pixel=bmp->width*y + x;
+    bmp->bitmap[pixel/8] |= 1 << (7-(pixel%8));
+  }
+  if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] |= 1 << (7-(x%8));
+}
+  
+void GSM_ClearPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+  int pixel;
+  if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+    bmp->bitmap[((y/8)*bmp->width)+x] &= 255 - (1 << (y%8));
+  if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+    pixel=bmp->width*y + x;
+    bmp->bitmap[pixel/8] &= ~(1 << (7-(pixel%8)));
+  }
+  if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] &= 255 - (1 << (7-(x%8)));
+}
+
+bool GSM_IsPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+  int i=0;
+  int pixel;
+
+  if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+    i=(bmp->bitmap[((y/8)*bmp->width) + x] & 1<<((y%8)));
+  if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+    pixel=bmp->width*y + x;
+    i=(bmp->bitmap[pixel/8] & 1<<(7-(pixel%8)));
+  }
+  if (bmp->type == GSM_PictureImage) i=(bmp->bitmap[9*y + (x/8)] & 1<<(7-(x%8)));
+
+  if (i) return true; else return false;
+}
+  
+void GSM_ClearBitmap(GSM_Bitmap *bmp)
+{
+  int i;
+  for (i=0;i<bmp->size;i++) bmp->bitmap[i]=0;
+}
+
+GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap)
+{
+  int offset = 1;
+  unsigned char buffer[20];
+
+  switch (message->UDHType) {
+  case GSM_OpLogo:
+    EncodeUDHHeader(buffer, GSM_OperatorLogo);
+    if (message->Length!=133) return GE_UNKNOWN;
+    
+    bitmap->type = GSM_OperatorLogo;
+
+    DecodeNetworkCode(message->MessageText, bitmap->netcode);
+
+    offset = 4;
+    break;
+
+  case GSM_CallerIDLogo:
+    EncodeUDHHeader(buffer, GSM_CallerLogo);
+    if (message->Length!=130) return GE_UNKNOWN;
+    
+    bitmap->type=GSM_CallerLogo;
+
+    break;
+  default: /* error */
+    return GE_UNKNOWN;
+    break;
+  }
+  bitmap->width = message->MessageText[offset];
+  bitmap->height = message->MessageText[offset + 1];
+  
+  if (bitmap->width!=72 || bitmap->height!=14) return GE_INVALIDIMAGESIZE;
+  
+  bitmap->size = (bitmap->width * bitmap->height) / 8;
+  memcpy(bitmap->bitmap, message->MessageText + offset + 3, bitmap->size);
+
+#ifdef DEBUG
+  fprintf(stdout, _("Bitmap from SMS: width %i, height %i\n"),bitmap->width,bitmap->height);
+#endif
+
+  return GE_NONE;
+}
+
+void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target)
+{
+  GSM_Bitmap backup;
+  int x,y,width,height;
+  
+  backup=*bitmap;
+      
+  if (target==GSM_StartupLogo) {
+    bitmap->width=84;
+    bitmap->height=48;
+  }
+  if (target==GSM_7110StartupLogo) {
+    bitmap->width=96;
+    bitmap->height=65;
+  }
+  if (target==GSM_6210StartupLogo) {
+    bitmap->width=96;
+    bitmap->height=60;
+  }
+  if (target==GSM_OperatorLogo || target==GSM_CallerLogo) {
+    bitmap->width=72;
+    bitmap->height=14;
+  }
+  if (target==GSM_PictureImage ) {
+    bitmap->width=72;
+    bitmap->height=28;
+  }
+  if (target==GSM_7110OperatorLogo) {
+    bitmap->width=78;
+    bitmap->height=21;
+  }
+  bitmap->type=target;
+  bitmap->size=(bitmap->width*bitmap->height + 7)/8;
+  
+  width=backup.width;
+  if (bitmap->width<width) {
+    width=bitmap->width;
+#ifdef DEBUG
+    fprintf(stdout,_("We lost some part of image - it's cut (width from %i to %i) !\n"),backup.width,width);
+#endif /* DEBUG */
+  }
+  
+  height=backup.height;
+  if (bitmap->height<height) {
+    height=bitmap->height; 
+#ifdef DEBUG
+    fprintf(stdout,_("We lost some part of image - it's cut (height from %i to %i) !\n"),backup.height,height);
+#endif /* DEBUG */
+  }
+  
+  GSM_ClearBitmap(bitmap);
+  
+  for (y=0;y<height;y++) {
+    for (x=0;x<width;x++)
+      if (GSM_IsPointBitmap(&backup,x,y)) GSM_SetPointBitmap(bitmap,x,y);
+  }
+  
+//GSM_PrintBitmap(&backup);
+//GSM_PrintBitmap(bitmap);
+}
+
+void GSM_PrintBitmap(GSM_Bitmap *bitmap)
+{
+  int x,y;
+
+  for (y=0;y<bitmap->height;y++) {
+    for (x=0;x<bitmap->width;x++) {
+      if (GSM_IsPointBitmap(bitmap,x,y)) {
+        fprintf(stdout, _("#"));
+      } else {
+        fprintf(stdout, _(" "));
+      }
+    }
+    fprintf(stdout, _("\n"));
+  }
+}
+
+int GSM_SaveBitmapToSMS(GSM_MultiSMSMessage *SMS, GSM_Bitmap *bitmap,
+                        bool ScreenSaver, bool UnicodeText)
+{
+  char MessageBuffer[GSM_MAX_SMS_8_BIT_LENGTH*4];
+  int MessageLength=0;
+  GSM_UDH UDHType=GSM_NoUDH;
+  
+  switch (bitmap->type) {
+    case GSM_OperatorLogo:
+      UDHType=GSM_OpLogo;
+
+      EncodeNetworkCode(MessageBuffer, bitmap->netcode);
+      MessageLength=3;
+
+      /* Set the logo size */
+      MessageBuffer[MessageLength++] = 0x00;
+      MessageBuffer[MessageLength++] = bitmap->width;
+      MessageBuffer[MessageLength++] = bitmap->height;
+      MessageBuffer[MessageLength++] = 0x01;
+
+      memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+      MessageLength=MessageLength+bitmap->size;
+
+      break;
+    case GSM_CallerLogo:
+      UDHType=GSM_CallerIDLogo;
+
+      /* Set the logo size */
+      MessageBuffer[MessageLength++] = 0x00;
+      MessageBuffer[MessageLength++] = bitmap->width;
+      MessageBuffer[MessageLength++] = bitmap->height;
+      MessageBuffer[MessageLength++] = 0x01;
+
+      memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+      MessageLength=MessageLength+bitmap->size;
+
+      break;
+    case GSM_PictureImage:
+      UDHType=GSM_ProfileUDH;
+
+      MessageBuffer[MessageLength++]=0x30;     //SM version. Here 3.0
+
+      if (!ScreenSaver)
+        MessageBuffer[MessageLength++]=SM30_OTA; //ID for OTA bitmap
+      else
+        MessageBuffer[MessageLength++]=SM30_SCREENSAVER; //ID for screen saver
+
+      /* Length for picture part */
+      MessageBuffer[MessageLength++]=0x01;     //length hi
+      MessageBuffer[MessageLength++]=0x00;     //length lo
+
+      /* Set the logo size */
+      MessageBuffer[MessageLength++] = 0x00;
+      MessageBuffer[MessageLength++] = bitmap->width;
+      MessageBuffer[MessageLength++] = bitmap->height;
+      MessageBuffer[MessageLength++] = 0x01;
+
+      memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+      MessageLength=MessageLength+bitmap->size;
+
+      if (strlen(bitmap->text)!=0) {
+        if (UnicodeText) {
+          MessageBuffer[MessageLength++]=SM30_UNICODETEXT; //ID for Unicode text
+
+          /* Length for text part */
+          MessageBuffer[MessageLength++]=0x00;             //length of text1
+          MessageBuffer[MessageLength++]=strlen(bitmap->text)*2;//length of text2
+
+          EncodeUnicode (MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+          MessageLength=MessageLength+2*strlen(bitmap->text);
+        } else {
+          MessageBuffer[MessageLength++]=SM30_ISOTEXT;    //ID for ISO-8859-1 text
+
+          /* Length for text part */
+          MessageBuffer[MessageLength++]=0x00;            //length of text1
+          MessageBuffer[MessageLength++]=strlen(bitmap->text); //length of text2
+
+          memcpy(MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+          MessageLength=MessageLength+strlen(bitmap->text);
+       }
+      }
+      break;
+    
+    default: /* error */
+      break;
+  }
+        
+  GSM_MakeMultiPartSMS2(SMS,MessageBuffer,MessageLength, UDHType, GSM_Coding_Default);
+
+  return 0;
+}
diff --git a/common/gsm-networks.c b/common/gsm-networks.c
new file mode 100644 (file)
index 0000000..b36bcf5
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  This file implements GSM networks searching.
+
+*/
+
+#include <string.h>
+
+#include "gsm-common.h"
+#include "gsm-networks.h"
+#include "gsm-coding.h"
+
+GSM_Country GSM_Countries[] =
+{
+  { "202", "Greece" },
+  { "204", "Netherlands" },
+  { "206", "Belgium" },
+  { "208", "France" },
+  { "213", "Andorra" },
+  { "214", "Spain" },
+  { "216", "Hungary" },
+  { "218", "Bosnia Herzegovina" },
+  { "219", "Croatia" },
+  { "220", "Yugoslavia" },
+  { "222", "Italy" },
+  { "226", "Romania" },
+  { "228", "Switzerland" },
+  { "230", "Czech Republic" },
+  { "231", "Slovak Republic" },
+  { "232", "Austria" },
+  { "234", "United Kingdom" },
+  { "238", "Denmark" },
+  { "240", "Sweden" },
+  { "242", "Norway" },
+  { "244", "Finland" },
+  { "246", "Lithuania" },
+  { "247", "Latvia" },
+  { "248", "Estonia" },
+  { "250", "Russia" },
+  { "255", "Ukraine" },
+  { "259", "Moldova" },
+  { "260", "Poland" },
+  { "262", "Germany" },
+  { "266", "Gibraltar" },
+  { "268", "Portugal" },
+  { "270", "Luxembourg" },
+  { "272", "Ireland" },
+  { "274", "Iceland" },
+  { "276", "Albania" },
+  { "278", "Malta" },
+  { "280", "Cyprus" },
+  { "282", "Georgia" },
+  { "283", "Armenia" },
+  { "284", "Bulgaria" },
+  { "286", "Turkey" },
+  { "290", "Greenland" },
+  { "293", "Slovenia" },
+  { "294", "Macedonia" },
+  { "302", "Canada" },
+  { "310", "Papua New Guinea" },
+  { "310", "U.S.A." },
+  { "340", "French West Indies" },
+  { "400", "Azerbaijan" },
+  { "404", "India" },
+  { "410", "Pakistan" },
+  { "413", "Sri Lanka" },
+  { "415", "Lebanon" },
+  { "416", "Jordan" },
+  { "417", "Syria" },
+  { "418", "Iraq" },
+  { "419", "Kuwait" },
+  { "420", "Saudi Arabia" },
+  { "422", "Oman" },
+  { "424", "United Arab Emirates" },
+  { "425", "Israel" },
+  { "426", "Bahrain" },
+  { "427", "Qatar" },
+  { "432", "Iran" },
+  { "434", "Uzbekistan" },
+  { "437", "Kyrgyz Republic" },
+  { "452", "Vietnam" },
+  { "454", "Hong Kong" },
+  { "455", "Macau" },
+  { "456", "Cambodia" },
+  { "457", "Lao" },
+  { "460", "China" },
+  { "466", "Taiwan" },
+  { "470", "Bangladesh" },
+  { "502", "Malaysia" },
+  { "505", "Australia" },
+  { "510", "Indonesia" },
+  { "515", "Philippines" },
+  { "520", "Thailand" },
+  { "525", "Singapore" },
+  { "528", "Brunei Darussalam" },
+  { "530", "New Zealand" },
+  { "542", "Fiji" },
+  { "546", "New Caledonia" },
+  { "547", "French Polynesia" },
+  { "602", "Egypt" },
+  { "603", "Algeria" },
+  { "604", "Morocco" },
+  { "605", "Tunisia" },
+  { "608", "Senegal" },
+  { "611", "Guinea" },
+  { "612", "Cote d'Ivoire" },
+  { "615", "Togo" },
+  { "617", "Mauritius" },
+  { "618", "Liberia" },
+  { "620", "Ghana" },
+  { "624", "Cameroon" },
+  { "625", "Cape Verde" },
+  { "633", "Seychelles" },
+  { "634", "Mozambique" },
+  { "634", "Sudan" },
+  { "635", "Rwanda" },
+  { "636", "Ethiopia" },
+  { "640", "Tanzania" },
+  { "641", "Uganda" },
+  { "645", "Zambia" },
+  { "646", "Madagascar" },
+  { "647", "Reunion" },
+  { "648", "Zimbabwe" },
+  { "649", "Namibia" },
+  { "650", "Malawi" },
+  { "651", "Lesotho" },
+  { "652", "Botswana" },
+  { "655", "South Africa" },
+  { "730", "Chile" },
+  { "734", "Venezuela" },
+
+  { "undefined", "unknown" }
+};
+
+GSM_Network GSM_Networks[] =
+{
+  { "202 01", "Cosmote" },
+  { "202 05", "PANAFON" },
+  { "202 10", "TELESTET" },
+  { "204 04", "LIBERTEL" },
+  { "204 08", "KPN Telecom" },
+  { "204 12", "Telfort" },
+  { "204 16", "BEN" },
+  { "204 20", "Dutchtone NV" },
+  { "206 01", "PROXIMUS" },
+  { "206 10", "Mobistar" },
+  { "208 01", "ITINERIS" },
+  { "208 10", "SFR" },
+  { "208 20", "Bouygues Telecom" },
+  { "213 03", "MOBILAND" },
+  { "214 01", "Airtel GSM 900-Spain" },
+  { "214 03", "Retevision Movil" },
+  { "214 07", "MOVISTAR" },
+  { "216 01", "Pannon GSM" },
+  { "216 70", "Vodafone" },
+  { "216 30", "Westel 900" },
+  { "218 90", "GSMBIH" },
+  { "219 01", "CRONET" },
+  { "219 10", "VIP" },
+  { "220 01", "MOBTEL" },
+  { "220 02", "ProMonte GSM" },
+  { "222 01", "Telecom Italia Mobile" },
+  { "222 10", "OMNITEL" },
+  { "222 88", "Wind Telecomunicazioni SpA" },
+  { "226 01", "CONNEX GSM" },
+  { "226 10", "DIALOG" },
+  { "228 01", "NATEL International" },
+  { "228 02", "diAx Mobile AG" },
+  { "230 01", "Paegas" },
+  { "230 02", "EuroTel" },
+  { "230 03", "Oskar" },
+  { "231 01", "Globtel" },
+  { "231 02", "EuroTel GSM" },
+  { "232 01", "A1" },
+  { "232 03", "max.mobil." },
+  { "232 05", "ONE" },
+  { "232 07", "tele.ring" },
+  { "234 10", "Cellnet" },
+  { "234 15", "Vodafone" },
+  { "234 30", "One 2 One" },
+  { "234 33", "ORANGE" },
+  { "234 50", "Jersey Telecoms GSM" },
+  { "234 55", "Guernsey Telecoms GSM" },
+  { "234 58", "PRONTO GSM" },
+  { "238 01", "TDK-MOBIL" },
+  { "238 02", "SONOFON" },
+  { "238 20", "TELIA DK" },
+  { "238 30", "Mobilix" },
+  { "240 01", "Telia AB" },
+  { "240 07", "COMVIQ" },
+  { "240 08", "EUROPOLITAN" },
+  { "242 01", "Telenor Mobil" },
+  { "242 02", "NetCom GSM" },
+  { "244 03", "Telia City (Finland)" },
+  { "244 05", "Radiolinja" },
+  { "244 09", "Finnet" },
+  { "244 91", "Sonera" },
+  { "246 01", "OMNITEL" },
+  { "246 02", "Bite GSM" },
+  { "247 01", "LMT LV" },
+  { "247 02", "BALTCOM GSM" },
+  { "248 01", "EMT GSM" },
+  { "248 02", "Radiolinja Eesti AS" },
+  { "248 03", "Q GSM" },
+  { "250 01", "Mobile Telesystems" },
+  { "250 02", "North-West GSM" },
+  { "250 05", "Siberian Cellular Systems 900" },
+  { "250 07", "BM Telecom" },
+  { "250 10", "Don Telecom" },
+  { "250 12", "FECS-900" },
+  { "250 13", "Kuban GSM" },
+  { "250 39", "Uraltel" },
+  { "250 44", "North Caucasian GSM" },
+  { "250 99", "BeeLine" },
+  { "255 01", "UMC" },
+  { "255 02", "WellCOM" },
+  { "255 03", "Kyivstar" },
+  { "255 05", "Golden Telecom" },
+  { "259 01", "VOXTEL" },
+  { "260 01", "PLUS GSM" },
+  { "260 02", "ERA GSM" },
+  { "260 03", "IDEA Centertel" },
+  { "262 01", "D1 TELEKOM" },
+  { "262 02", "D2 PRIVAT" },
+  { "262 03", "E-Plus" },
+  { "262 07", "Interkom" },
+  { "266 01", "Gibtel GSM" },
+  { "268 01", "TELECEL" },
+  { "268 03", "OPTIMUS" },
+  { "268 06", "TMN" },
+  { "270 01", "LUXGSM" },
+  { "270 77", "TANGO" },
+  { "272 01", "EIRCELL-GSM" },
+  { "272 02", "Digifone" },
+  { "274 01", "Landssiminn GSM 900" },
+  { "274 02", "TAL hf" },
+  { "276 01", "AMC" },
+  { "278 01", "Vodafone Malta Limited" },
+  { "280 01", "CYTAGSM" },
+  { "282 01", "Geocell Limited" },
+  { "282 02", "Magti GSM" },
+  { "283 01", "ArmGSM" },
+  { "284 01", "M-TEL GSM BG" },
+  { "286 01", "Turkcell" },
+  { "286 02", "TELSIM GSM" },
+  { "288 01", "Faroese Telecom" },
+  { "290 01", "Tele Greenland" },
+  { "293 40", "SI.MOBIL d. d." },
+  { "293 41", "MOBITEL" },
+  { "294 01", "MobiMak" },
+  { "302 37", "Microcell Connexions Inc" },
+  { "310 01", "Cellnet" },
+  { "310 02", "Sprint Spectrum" },
+  { "310 11", "Wireless 2000 Telephone Co." },
+  { "310 15", "BellSouth Mobility DCS" },
+  { "310 16", "Omnipoint" },
+  { "310 17", "Pac Bell" },
+  { "310 26", "VOICESTREAM" },
+  { "310 27", "Powertel" },
+  { "310 31", "AERIAL" },
+  { "310 77", "Iowa Wireless Services LP" },
+  { "340 01", "AMERIS" },
+  { "400 01", "AZERCELL GSM" },
+  { "400 02", "Bakcell GSM 2000" },
+
+  { "404 01", "AIRCELL"},\r
+  { "404 02", "Evergrowth"},\r
+  { "404 03", "Bharthi Telenet"},\r
+  { "404 05", "Fascel"},\r
+  { "404 07", "Tata Cell"},\r //TATA Cellular
+  { "404 08", "Koshika"},
+  { "404 09", "Reliance"},\r
+  { "404 10", "AIRTEL"},\r //AirTel
+  { "404 11", "Essar"},\r //Essar Cellphone
+  { "404 12", "Escotel"},\r
+  { "404 14", "Spice"},\r //Modicom
+  { "404 15", "AIRCELL"},\r //Essar Cellphone
+  { "404 18", "Reliance"},\r
+  { "404 19", "Escotel"},\r
+  { "404 20", "Orange"},\r //Max Touch
+  { "404 21", "BPL Mobile"},\r //BPL - Mobile
+  { "404 22", "Birla AT&T"},\r
+  { "404 24", "Birla AT&T"},\r
+  { "404 26", "Koshika"},\r
+  { "404 27", "BPL Mobile"},\r //BPL USWEST Cellular
+  { "404 30", "Usha"},\r //Command
+  { "404 31", "AIRCELL"},\r //?
+  { "404 31", "Command"},\r //?
+  { "404 32", "Koshika"},\r
+  { "404 34", "Koshika"},\r
+  { "404 36", "Reliance"},\r
+  { "404 40", "SkyCell"},\r
+  { "404 41", "RPG"}, //RPG Cellular
+  { "404 42", "AIRCELL"},\r //AIRCEL
+  { "404 43", "BPL Mobile"},\r
+  { "404 44", "Spice"},\r
+  { "404 45", "AIRTEL-blr"},\r
+  { "404 46", "BPL Moibile"},\r
+  { "404 49", "AIRTEL"},
+  { "404 50", "Reliance"},\r
+  { "404 52", "Reliance"},
+  { "404 56", "Escotel"},
+  { "404 60", "AIRCELL"},\r
+  { "404 67", "Reliance"},
+  { "404 70", "Hexacom"},\r
+  { "404 78", "RPG"},\r
+  { "404 85", "Reliance"},\r
+\r
+  { "410 01", "Mobilink" },
+  { "413 02", "DIALOG GSM" },
+  { "415 01", "CELLIS" },
+  { "415 03", "LIBANCELL" },
+  { "416 01", "Fastlink" },
+  { "417 09", "MOBILE SYRIA" },
+  { "419 02", "MTCNet" },
+  { "420 01", "Al Jawwal" },
+  { "420 07", "E.A.E" },
+  { "422 02", "GTO" },
+  { "424 02", "UAE-ETISALAT" },
+  { "425 01", "Partner Communications Company Ltd" },
+  { "426 01", "BHR MOBILE PLUS" },
+  { "427 01", "QATARNET" },
+  { "432 11", "TCI" },
+  { "434 04", "Daewoo Unitel" },
+  { "434 05", "Coscom" },
+  { "437 01", "Bitel" },
+  { "454 00", "TCSL GSM" },
+  { "454 04", "HKGHT" },
+  { "454 06", "SMARTONE GSM" },
+  { "454 10", "New World PCS" },
+  { "454 12", "PEOPLES" },
+  { "454 16", "SUNDAY" },
+  { "455 01", "TELEMOVEL+ GSM900-Macau" },
+  { "456 01", "MobiTel" },
+  { "456 02", "SAMART-GSM" },
+  { "457 01", "Lao Shinawatra Telecom" },
+  { "460 00", "China Telecom GSM" },
+  { "460 01", "CU-GSM" },
+  { "466 01", "Far EasTone Telecoms 900" },
+  { "466 06", "TUNTEX GSM 1800" },
+  { "466 88", "KG Telecom" },
+  { "466 92", "Chunghwa GSM" },
+  { "466 93", "MobiTai" },
+  { "466 97", "TWNGSM" },
+  { "466 99", "TransAsia" },
+  { "470 01", "GrameenPhone Ltd" },
+  { "470 19", "Mobile 2000" },
+  { "502 12", "Maxis Mobile" },
+  { "502 13", "TM Touch" },
+  { "502 16", "DiGi 1800" },
+  { "502 17", "ADAM" },
+  { "502 19", "CELCOM" },
+  { "505 01", "MobileNet" },
+  { "505 02", "OPTUS" },
+  { "505 03", "VODAFONE" },
+  { "505 08", "One.Tel" },
+  { "510 01", "SATELINDO" },
+  { "510 10", "TELKOMSEL" },
+  { "510 11", "Excelcom" },
+  { "515 01", "ISLACOM" },
+  { "515 02", "Globe Telecom" },
+  { "520 01", "AIS GSM" },
+  { "520 10", "WCS" },
+  { "520 18", "Worldphone 1800" },
+  { "520 23", "HELLO" },
+  { "525 01", "SingTel Mobile" },
+  { "525 02", "ST-PCN" },
+  { "525 03", "MOBILEONE" },
+  { "528 11", "DSTCom" },
+  { "530 01", "Vodafone New Zealand Limited" },
+  { "542 01", "Vodafone" },
+  { "546 01", "Mobilis" },
+  { "547 20", "VINI" },
+  { "602 01", "MobiNil" },
+  { "602 02", "Tunicell" },
+  { "603 01", "ALGERIAN MOBILE NETWORK" },
+  { "604 01", "I A M" },
+  { "608 01", "ALIZE" },
+  { "611 02", "Lagui" },
+  { "612 03", "IVOIRIS" },
+  { "612 05", "Telecel" },
+  { "615 01", "TOGO CELL" },
+  { "617 01", "Cellplus Mobile Comms" },
+  { "618 01", "Omega" },
+  { "620 01", "SPACEFON" },
+  { "625 01", "CVMOVEL" },
+  { "633 01", "Seychelles Cellular Services" },
+  { "633 10", "AIRTEL" },
+  { "634 01", "MobiTel" },
+  { "635 10", "Rwandacell" },
+  { "636 01", "ETMTN" },
+  { "640 01", "TRITEL" },
+  { "641 10", "MTN-Uganda" },
+  { "642 02", "ANTARIS" },
+  { "643 01", "T.D.M GSM 900" },
+  { "645 01", "ZAMCELL" },
+  { "646 01", "Madacom" },
+  { "646 03", "Sacel Madagascar S.A." },
+  { "647 10", "SRR" },
+  { "648 01", "NET*ONE" },
+  { "648 03", "Telecel" },
+  { "649 01", "MTC" },
+  { "650 01", "Callpoint 900" },
+  { "651 01", "Vodacom Lesotho (Pty) Ltd" },
+  { "655 01", "Vodacom" },
+  { "655 10", "MTN" },
+  { "680 38", "NPI Wireless" },
+  { "730 01", "Entel Telefonia Movi" },
+  { "730 10", "Entel PCS" },
+  { "734 01", "Infonet" },
+
+  { "undefined", "unknown" }
+};
+
+char *GSM_GetNetworkName(char *NetworkCode)
+{
+
+  int index=0;
+
+  while ( strcmp(GSM_Networks[index].Code, NetworkCode) &&
+          strcmp(GSM_Networks[index].Code, "undefined") )
+    index++;
+
+  return GSM_Networks[index].Name;
+}
+
+char *GSM_GetNetworkCode(char *NetworkName)
+{
+
+  int index=0;
+
+  while ( strcmp(GSM_Networks[index].Name, NetworkName) &&
+          strcmp(GSM_Networks[index].Code, "undefined") )
+    index++;
+
+  return GSM_Networks[index].Code;
+}
+
+char *GSM_GetCountryName(char *CountryCode)
+{
+
+  int index=0;
+
+  while ( strncmp(GSM_Countries[index].Code, CountryCode, 3) &&
+          strcmp(GSM_Countries[index].Code, "undefined") )
+    index++;
+
+  return GSM_Countries[index].Name;
+}
+
+char *GSM_GetCountryCode(char *CountryName)
+{
+
+  int index=0;
+
+  while ( strcmp(GSM_Countries[index].Name, CountryName) &&
+          strcmp(GSM_Countries[index].Code, "undefined") )
+    index++;
+
+  return GSM_Countries[index].Code;
+}
+
+void EncodeNetworkCode(unsigned char* buffer, unsigned char* output)
+{
+    EncodeBCD (buffer, output, 6, false);
+    buffer[1]=buffer[1] | 0xf0;
+}
+
+void DecodeNetworkCode(unsigned char* buffer, unsigned char* output)
+{
+    DecodeBCD (output, buffer, 3);
+    output[6]=output[5];
+    output[5]=output[4];
+    output[4]=output[3];
+    output[3]=' ';
+}
diff --git a/common/gsm-ringtones.c b/common/gsm-ringtones.c
new file mode 100644 (file)
index 0000000..aa68378
--- /dev/null
@@ -0,0 +1,1023 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This file provides support for ringtones.
+
+*/
+
+#ifdef WIN32
+  #include <windows.h>
+  #include "misc_win32.h"
+#else
+  #include <unistd.h>
+#endif
+
+#include "gsm-api.h"
+
+GSM_Ringtone SMringtone;
+GSM_BinRingtone ringtone;
+
+/* Beats-per-Minute Encoding */
+
+int BeatsPerMinute[] = {
+   25,  28,  31,  35,  40,  45,  50,  56,  63,  70,
+   80,  90, 100, 112, 125, 140, 160, 180, 200, 225,
+  250, 285, 320, 355, 400, 450, 500, 565, 635, 715,
+  800, 900
+};
+
+struct OneRingtone RingingTones[] = {
+         {"",0,0},
+/*  1 */ {"Uploaded #1",0,0},   /*  2 */ {"Ring ring",0,0},
+/*  3 */ {"Low",0,0},           /*  4 */ {"Fly",0,0},
+/*  5 */ {"Mosquito",0,0},      /*  6 */ {"Bee",0,0},
+/*  7 */ {"Intro",0,0},         /*  8 */ {"Etude",0,0},
+/*  9 */ {"Hunt",0,0},          /* 10 */ {"Going up",0,0},
+/* 11 */ {"City bird",0,0},     /* 12 */ {"Chase",0,0},
+/* 13 */ {"Scifi",0,0},         /* 14 */ {"Kick",0,0},
+/* 15 */ {"Do-mi-so",0,0},      /* 16 */ {"Robo N1X",0,0},
+/* 17 */ {"Dizzy",0,0},         /* 18 */ {"Playground",0,0},
+/* 19 */ {"That's it!",0,0},    /* 20 */ {"Grande valse",0,0},
+/* 21 */ {"Knock knock",0,0},   /* 22 */ {"Knock again",0,0},
+/* 23 */ {"Helan",0,0},         /* 24 */ {"Fuga",0,0},          
+/* 25 */ {"Menuet",0,0},        /* 26 */ {"Ode to Joy",0,0},
+/* 27 */ {"Elise",0,0},         /* 28 */ {"Mozart 40",0,0},
+/* 29 */ {"Piano Concerto",0,0},/* 30 */ {"William Tell",0,0},
+/* 31 */ {"Badinerie",0,0},     /* 32 */ {"Polka",0,0},
+/* 33 */ {"Attraction",0,0},    /* 34 */ {"Polite",0,0},
+/* 35 */ {"Persuasion",0,0},    /* 36 */ {"Tick tick",0,0},
+/* 37 */ {"Samba",0,0},         /* 38 */ {"Orient",0,0},
+/* 39 */ {"Charleston",0,0},    /* 40 */ {"Songette",0,0},    
+/* 41 */ {"Jumping",0,0},       /* 42 */ {"Lamb",0,0},
+/* 43 */ {"Marry",0,0},         /* 44 */ {"Tango",0,0},
+/* 45 */ {"Tangoed",0,0},       /* 46 */ {"Down",0,0},
+/* 47 */ {"Polska",0,0},        /* 48 */ {"WalzeBrilliant",0,0},
+/* 49 */ {"Cicada",0,0},        /* 50 */ {"Trio",0,0},
+/* 51 */ {"Circles",0,0},       /* 52 */ {"Nokia tune",0,0},
+/* 53 */ {"Sunny walks",0,0},   /* 54 */ {"Basic rock",0,0},
+/* 55 */ {"Reveille",0,0},      /* 56 */ {"Groovy Blue",0,0},
+/* 57 */ {"Brave Scotland",0,0},/* 58 */ {"Matilda",0,0},
+/* 59 */ {"Bumblebee",0,0},     /* 60 */ {"Hungarian",0,0},
+/* 61 */ {"Valkyrie",0,0},      /* 62 */ {"Bach #3",0,0},
+/* 63 */ {"Toreador",0,0},      /* 64 */ {"9th Symphony",0,0},
+/* 65 */ {"Uploaded #2",0,0},   /* 66 */ {"Uploaded #3",0,0},
+/* 67 */ {"Uploaded #4",0,0},   /* 68 */ {"Uploaded #5",0,0},
+         {"",0,0}
+};
+
+int OctetAlign(unsigned char *Dest, int CurrentBit)
+{
+  int i=0;
+
+  while((CurrentBit+i)%8) {
+    ClearBit(Dest, CurrentBit+i);
+    i++;
+  }
+
+  return CurrentBit+i;
+}
+
+int OctetAlignNumber(int CurrentBit)
+{
+  int i=0;
+
+  while((CurrentBit+i)%8) { i++; }
+
+  return CurrentBit+i;
+}
+
+int BitPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits)
+{
+
+  int i;
+
+  for (i=0; i<Bits; i++)
+    if (GetBit(Source, i))   SetBit(Dest, CurrentBit+i);
+                      else ClearBit(Dest, CurrentBit+i);
+
+  return CurrentBit+Bits;
+}
+
+int GSM_GetTempo(int Beats) {
+
+  int i=0;
+
+  while ( i < sizeof(BeatsPerMinute)/sizeof(BeatsPerMinute[0])) {
+
+    if (Beats<=BeatsPerMinute[i]) break;
+    i++;
+  }
+
+  return i<<3;
+}    
+
+int BitPackByte(unsigned char *Dest, int CurrentBit, unsigned char Command, int Bits) {
+
+  unsigned char Byte[]={Command};
+
+  return BitPack(Dest, CurrentBit, Byte, Bits);
+}
+
+
+/* This is messy but saves using the math library! */
+
+int GSM_GetDuration(int number, unsigned char *spec) {
+
+  int duration=0;
+
+  switch (number) {
+
+  case 128*3/2: duration=Duration_Full; *spec=DottedNote;        break;  
+  case 128*2/3: duration=Duration_Full; *spec=Length_2_3;        break;  
+  case 128    : duration=Duration_Full; *spec=NoSpecialDuration; break;  
+  case 64*9/4 : duration=Duration_1_2;  *spec=DoubleDottedNote;  break;    
+  case 64*3/2 : duration=Duration_1_2;  *spec=DottedNote;        break;  
+  case 64*2/3 : duration=Duration_1_2;  *spec=Length_2_3;        break;  
+  case 64     : duration=Duration_1_2;  *spec=NoSpecialDuration; break;  
+  case 32*9/4 : duration=Duration_1_4;  *spec=DoubleDottedNote;  break;    
+  case 32*3/2 : duration=Duration_1_4;  *spec=DottedNote;        break;  
+  case 32*2/3 : duration=Duration_1_4;  *spec=Length_2_3;        break;  
+  case 32     : duration=Duration_1_4;  *spec=NoSpecialDuration; break;  
+  case 16*9/4 : duration=Duration_1_8;  *spec=DoubleDottedNote;  break;    
+  case 16*3/2 : duration=Duration_1_8;  *spec=DottedNote;        break;  
+  case 16*2/3 : duration=Duration_1_8;  *spec=Length_2_3;        break;  
+  case 16     : duration=Duration_1_8;  *spec=NoSpecialDuration; break;  
+  case 8*9/4  : duration=Duration_1_16; *spec=DoubleDottedNote;  break;    
+  case 8*3/2  : duration=Duration_1_16; *spec=DottedNote;        break;  
+  case 8*2/3  : duration=Duration_1_16; *spec=Length_2_3;        break;  
+  case 8      : duration=Duration_1_16; *spec=NoSpecialDuration; break;  
+  case 4*9/4  : duration=Duration_1_32; *spec=DoubleDottedNote;  break;    
+  case 4*3/2  : duration=Duration_1_32; *spec=DottedNote;        break;  
+  case 4*2/3  : duration=Duration_1_32; *spec=Length_2_3;        break;  
+  case 4      : duration=Duration_1_32; *spec=NoSpecialDuration; break;  
+  }
+
+  return duration;
+}
+
+
+int GSM_GetNote(int number) {
+  
+  int note=0;
+  if (number!=255) {
+    note=number%14;
+    switch (note) {
+
+    case  0: note=Note_C;   break;
+    case  1: note=Note_Cis; break;
+    case  2: note=Note_D;   break;
+    case  3: note=Note_Dis; break;
+    case  4: note=Note_E;   break;
+    case  6: note=Note_F;   break;
+    case  7: note=Note_Fis; break;
+    case  8: note=Note_G;   break;
+    case  9: note=Note_Gis; break;
+    case 10: note=Note_A;   break;
+    case 11: note=Note_Ais; break;
+    case 12: note=Note_H;   break;
+    }
+  }
+  else note = Note_Pause;
+
+  return note;
+
+}
+
+int GSM_GetScale(int number) {
+
+  int scale=-1;
+
+  if (number!=255) {
+    scale=number/14;
+
+    /* Ensure the scale is valid */
+    scale%=4;
+
+    scale=scale<<6;
+  }
+  return scale;
+}
+
+/* This function packs the ringtone from the structure "ringtone" to
+   "package", where maxlength means length of package.
+   Function returns number of packed notes and change maxlength to
+   number of used chars in "package" */
+u8 GSM_PackRingtone(GSM_Ringtone *ringtone, unsigned char *package, int *maxlength)
+{
+  int StartBit=0;
+  unsigned char CommandLength = 0x02;
+  unsigned char spec;
+  int oldscale=10, newscale=0, oldstyle=0, oldtempo=0;
+  int HowMany=0;              /* How many instructions packed */
+  int HowLong=0;              /* How many bits packed */
+  int StartNote=0, EndNote=0; /* First and last packed note from ringtone */
+
+  /* Default ringtone parameters */
+  u8 DefNoteScale=2, DefNoteDuration=4;
+  int DefNoteTempo=63;
+  u8 DefNoteStyle=NaturalStyle;
+  
+  int buffer[6];\r              /* Used to find default ringtone parameters */
+  int i,j,k=0,thisnote,thisnotelong;\r
+  
+  /* Find the most frequently used duration and use this for the default */\r
\r for (i=0;i<6;i++) buffer[i]=0;\r
+  for (i=0;i<ringtone->NrNotes;i++) {\r
+    switch (ringtone->notes[i].duration) {\r
+      case 192: buffer[0]++; break;\r
+      case 128: buffer[0]++; break;\r
+      case  96:        buffer[1]++; break;\r
+      case  64: buffer[1]++; break;\r
+      case  48: buffer[2]++; break;\r
+      case  32: buffer[2]++; break;\r
+      case  24: buffer[3]++; break;\r
+      case  16: buffer[3]++; break;\r
+      case  12: buffer[4]++; break;\r
+      case   8: buffer[4]++; break;\r
+      case   6: buffer[5]++; break;\r
+      case   4: buffer[5]++; break;\r
+    }\r
+  }\r
+\r
+  /* Now find the most frequently used */\r
+  j=0;\r
+  for (i=0;i<6;i++) {\r
+    if (buffer[i]>j) {\r
+      k=i; \r
+      j=buffer[i];\r
+    }\r
+  }\r
+\r
+  /* Finally convert the default duration */\r
+  switch (k) {\r
+      case 0: DefNoteDuration=128; break;      \r
+      case 1: DefNoteDuration= 64; break;      \r
+      case 2: DefNoteDuration= 32; break;      \r
+      case 3: DefNoteDuration= 16; break;      \r
+      case 4: DefNoteDuration=  8; break;      \r
+      case 5: DefNoteDuration=  4; break;      \r
+     default: DefNoteDuration= 16; break;      \r
+  }  \r
+\r
+  /* Find the most frequently used scale and use this for the default */\r\r
+  for (i=0;i<6;i++) buffer[i]=0;\r
+  for (i=0;i<ringtone->NrNotes;i++) {\r
+    if (ringtone->notes[i].note!=255) {\r
+      buffer[ringtone->notes[i].note/14]++;\r
+    }\r
+  }\r
+  j=0;\r
+  for (i=0;i<6;i++) {\r
+    if (buffer[i]>j) {\r
+      DefNoteScale=i;\r
+      j=buffer[i];\r
+    }\r
+  }\r
+
+  StartBit=BitPackByte(package, StartBit, CommandLength, 8);
+  StartBit=BitPackByte(package, StartBit, RingingToneProgramming, 7);
+
+  /* The page 3-23 of the specs says that <command-part> is always
+     octet-aligned. */
+  StartBit=OctetAlign(package, StartBit);
+
+  StartBit=BitPackByte(package, StartBit, Sound, 7);
+  StartBit=BitPackByte(package, StartBit, BasicSongType, 3);
+
+  /* Set special chars in ringtone name */
+  for (i=0;i<strlen(ringtone->name);i++) {
+    if (ringtone->name[i]=='~') ringtone->name[i]=1; //enables/disables blinking
+    if (ringtone->name[i]=='`') ringtone->name[i]=0; //hides rest ot contents
+  }
+
+  /* Packing the name of the tune. */
+  StartBit=BitPackByte(package, StartBit, strlen(ringtone->name)<<4, 4);
+  StartBit=BitPack(package, StartBit, ringtone->name, 8*strlen(ringtone->name));
+
+  /* Set special chars in ringtone name */
+  for (i=0;i<strlen(ringtone->name);i++) {
+    if (ringtone->name[i]==1) ringtone->name[i]='~'; //enables/disables blinking
+    if (ringtone->name[i]==0) ringtone->name[i]='`'; //hides rest ot contents
+  }
+
+  /* Info about song pattern */
+  StartBit=BitPackByte(package, StartBit, 0x01, 8); /* One song pattern */
+  StartBit=BitPackByte(package, StartBit, PatternHeaderId, 3);
+  StartBit=BitPackByte(package, StartBit, A_part, 2);
+  StartBit=BitPackByte(package, StartBit, ringtone->Loop<<4, 4);
+
+  /* Info, how long is contents for SMS */
+  HowLong=8+8+7+3+4+8*strlen(ringtone->name)+8+3+2+4+8+3+2+3+5;
+  
+  /* Calculating number of instructions in the tune.
+     Each Note contains Note and (sometimes) Scale.
+     Default Tempo and Style are instructions too. */
+  HowMany=2; /* Default Tempo and Style */
+
+  /* Default style and tempo */
+  DefNoteStyle=ringtone->notes[0].style;
+  DefNoteTempo=ringtone->notes[0].tempo;
+  oldstyle=DefNoteStyle;
+  oldtempo=DefNoteTempo;
+
+  for(i=0; i<ringtone->NrNotes; i++) {
+
+    /* PC Composer 2.0.010 doesn't like, when we start ringtone from pause:
+       displays, that format is invalid and
+       hangs, when you move mouse over place, where pause is */       
+    if (GSM_GetNote(ringtone->notes[i].note)==Note_Pause && oldscale==10) {
+      StartNote++;
+    } else {
+
+      thisnote=0;
+      thisnotelong=0;
+     
+      /* we don't write Scale/Style info before "Pause" note - it saves place */
+      if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause) {
+
+        if (ringtone->allnotesscale ||
+            oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) {
+
+          /* We calculate, if we have space to add next scale instruction */
+          if (((OctetAlignNumber(HowLong+5)+8)/8)<=(*maxlength)) {
+            oldscale=newscale;
+            HowLong+=5;
+            HowMany++;
+            thisnote++;
+            thisnotelong+=5;
+         } else {
+           break;
+         }
+       }
+       if (ringtone->notes[i].style!=oldstyle) {
+          /* We calculate, if we have space to add next style instruction */
+          if (((OctetAlignNumber(HowLong+5)+8)/8)<=(*maxlength)) {
+           oldstyle=ringtone->notes[i].style;
+            HowLong+=5;
+            HowMany++;
+            thisnote++;
+            thisnotelong+=5;
+         } else {
+            HowLong=HowLong-thisnotelong;
+            HowMany=HowMany-thisnote;
+            break;
+         }
+       }
+      }
+      
+      if (ringtone->notes[i].tempo!=oldtempo) {
+        /* We calculate, if we have space to add next tempo instruction */
+        if (((OctetAlignNumber(HowLong+8)+8)/8)<=(*maxlength)) {
+          oldtempo=ringtone->notes[i].tempo;
+          HowLong+=8;
+          HowMany++;
+          thisnote++;
+          thisnotelong+=8;
+       } else {
+          HowLong=HowLong-thisnotelong;
+          HowMany=HowMany-thisnote;
+          break;
+        }
+      }
+    
+      /* We calculate, if we have space to add next note instruction */
+      if (((OctetAlignNumber(HowLong+12)+8)/8)<=(*maxlength)) {
+        HowMany++;
+        EndNote++;
+        HowLong+=12;
+      } else {
+        HowLong=HowLong-thisnotelong;
+        HowMany=HowMany-thisnote;
+        break;
+      }
+    }
+
+    /* We are sure, we pack it for SMS or setting to phone, not for OTT file */    
+    if (*maxlength<1000) {
+       /* Like Pc Composer say - before of phone limitations...*/
+      if ((EndNote-StartNote)==FB61_MAX_RINGTONE_NOTES-1) break;
+    }
+  }
+
+  StartBit=BitPackByte(package, StartBit, HowMany, 8);
+#ifdef DEBUG
+//  fprintf(stdout,_("length of new pattern: %i %i\n"),HowMany,StartBit);
+#endif
+
+  /* Style */
+  StartBit=BitPackByte(package, StartBit, StyleInstructionId, 3);
+  StartBit=BitPackByte(package, StartBit, DefNoteStyle, 2);
+    
+  /* Beats per minute/tempo of the tune */
+  StartBit=BitPackByte(package, StartBit, TempoInstructionId, 3);
+  StartBit=BitPackByte(package, StartBit, GSM_GetTempo(DefNoteTempo), 5);
+#ifdef DEBUG
+//  fprintf(stdout,_("def temp: %i %i\n"),GSM_GetTempo(DefNoteTempo),StartBit);
+#endif
+
+  /* Default scale */
+  oldscale=10;
+  
+  /* Default style */
+  oldstyle=DefNoteStyle;
+
+  /* Default tempo */
+  oldtempo=DefNoteTempo;
+
+  /* Notes packing */
+  for(i=StartNote; i<(EndNote+StartNote); i++) {
+
+    /* we don't write Scale info before "Pause" note - it saves place */
+    if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause) {
+      if (ringtone->allnotesscale ||
+          oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) {
+#ifdef DEBUG
+//    fprintf(stdout,_("Scale\n"));
+#endif
+        oldscale=newscale;
+        StartBit=BitPackByte(package, StartBit, ScaleInstructionId, 3);
+        StartBit=BitPackByte(package, StartBit, GSM_GetScale(ringtone->notes[i].note), 2);
+      }
+      if (ringtone->notes[i].style!=oldstyle) {
+        /* Style */
+        StartBit=BitPackByte(package, StartBit, StyleInstructionId, 3);
+        StartBit=BitPackByte(package, StartBit, ringtone->notes[i].style, 2);
+        oldstyle=ringtone->notes[i].style;
+      }
+    }
+
+    if (ringtone->notes[i].tempo!=oldtempo) {
+      /* Beats per minute/tempo of the tune */
+      StartBit=BitPackByte(package, StartBit, TempoInstructionId, 3);
+      StartBit=BitPackByte(package, StartBit, GSM_GetTempo(ringtone->notes[i].tempo), 5);
+      oldtempo=ringtone->notes[i].tempo;
+    }    
+    
+    /* Note */
+    StartBit=BitPackByte(package, StartBit, NoteInstructionId, 3);
+    StartBit=BitPackByte(package, StartBit, GSM_GetNote(ringtone->notes[i].note), 4);
+    StartBit=BitPackByte(package, StartBit, GSM_GetDuration(ringtone->notes[i].duration,&spec), 3);
+    StartBit=BitPackByte(package, StartBit, spec, 2);
+
+#ifdef DEBUG    
+//    fprintf(stdout,_("note(%i): %i, scale: %i, duration: %i, spec: %i\n"),i,ringtone->notes[i].note,GSM_GetScale(ringtone->notes[i].note),GSM_GetDuration(ringtone->notes[i].duration,&spec),spec);
+#endif
+
+  }
+
+  StartBit=OctetAlign(package, StartBit);
+
+  StartBit=BitPackByte(package, StartBit, CommandEnd, 8);
+  
+#ifdef DEBUG
+  if (StartBit!=OctetAlignNumber(HowLong)+8)
+    fprintf(stdout,_("Error in PackRingtone - StartBit different to HowLong %d - %d)\n"),StartBit,OctetAlignNumber(HowLong)+8);
+#endif
+
+  *maxlength=StartBit/8;  
+
+  return(EndNote+StartNote);
+}
+
+int BitUnPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits)
+{
+  int i;
+
+  for (i=0; i<Bits; i++)
+    if (GetBit(Dest, CurrentBit+i)) {   SetBit(Source, i); }
+                               else { ClearBit(Source, i); }
+
+  return CurrentBit+Bits;
+}
+
+int BitUnPackInt(unsigned char *Src, int CurrentBit, int *integer, int Bits) {
+
+  int l=0,z=128,i;
+
+  for (i=0; i<Bits; i++) {
+    if (GetBit(Src, CurrentBit+i)) l=l+z;
+    z=z/2;
+  }
+
+  *integer=l;
+  
+  return CurrentBit+i;
+}
+
+int OctetUnAlign(int CurrentBit)
+{
+  int i=0;
+
+  while((CurrentBit+i)%8) i++;
+
+  return CurrentBit+i;
+}
+
+/* TODO: better checking, if contents of ringtone is OK */
+GSM_Error GSM_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength)
+{
+  int StartBit=0;
+  int HowMany;
+  int l,q,i;
+  int spec;
+
+  /* Default ringtone parameters */
+  u8 DefNoteScale=2, DefNoteDuration=4;
+  int DefNoteTempo=63;
+  u8 DefNoteStyle=NaturalStyle;
+
+  ringtone->allnotesscale=false;
+  
+  StartBit=BitUnPackInt(package,StartBit,&l,8);
+#ifdef DEBUG
+  if (l!=0x02)
+    fprintf(stdout,_("Not header\n"));  
+#endif
+  if (l!=0x02) return GE_SUBFORMATNOTSUPPORTED;
+
+  StartBit=BitUnPackInt(package,StartBit,&l,7);    
+#ifdef DEBUG
+  if (l!=RingingToneProgramming)
+    fprintf(stdout,_("Not RingingToneProgramming\n"));  
+#endif
+  if (l!=RingingToneProgramming) return GE_SUBFORMATNOTSUPPORTED;
+    
+  /* The page 3-23 of the specs says that <command-part> is always
+     octet-aligned. */
+  StartBit=OctetUnAlign(StartBit);
+
+  StartBit=BitUnPackInt(package,StartBit,&l,7);    
+#ifdef DEBUG
+  if (l!=Sound)
+    fprintf(stdout,_("Not Sound\n"));  
+#endif
+  if (l!=Sound) return GE_SUBFORMATNOTSUPPORTED;
+
+  StartBit=BitUnPackInt(package,StartBit,&l,3);    
+#ifdef DEBUG
+  if (l!=BasicSongType)
+    fprintf(stdout,_("Not BasicSongType\n"));  
+#endif
+  if (l!=BasicSongType) return GE_SUBFORMATNOTSUPPORTED;
+
+  /* Getting length of the tune name */
+  StartBit=BitUnPackInt(package,StartBit,&l,4);
+  l=l>>4;
+#ifdef DEBUG
+//  fprintf(stdout,_("Length of name: %i\n"),l);
+#endif
+
+  /* Unpacking the name of the tune. */
+  StartBit=BitUnPack(package, StartBit, ringtone->name, 8*l);
+  ringtone->name[l]=0;
+
+  /* Set special chars in ringtone name */
+  for (i=0;i<strlen(ringtone->name);i++) {
+    if (ringtone->name[i]==1) ringtone->name[i]='~'; //enables/disables blinking
+    if (ringtone->name[i]==0) ringtone->name[i]='`'; //hides rest ot contents
+  }
+
+#ifdef DEBUG
+//   fprintf(stdout,_("Name: %s\n"),ringtone->name);
+#endif
+
+  StartBit=BitUnPackInt(package,StartBit,&l,8);    
+#ifdef DEBUG
+//  fprintf(stdout,_("Number of song patterns: %i\n"),l);
+#endif
+  if (l!=1) return GE_SUBFORMATNOTSUPPORTED; //we support only one song pattern
+
+  StartBit=BitUnPackInt(package,StartBit,&l,3);          
+#ifdef DEBUG
+  if (l!=PatternHeaderId)
+    fprintf(stdout,_("Not PatternHeaderId\n"));
+#endif
+  if (l!=PatternHeaderId) return GE_SUBFORMATNOTSUPPORTED;
+
+  StartBit+=2; //Pattern ID - we ignore it
+
+  StartBit=BitUnPackInt(package,StartBit,&l,4);          
+  l=l>>4;
+#ifdef DEBUG
+  fprintf(stdout,_("Loop value: %i\n"),l);
+#endif
+  ringtone->Loop=l;
+
+  HowMany=0;
+  StartBit=BitUnPackInt(package, StartBit, &HowMany, 8);
+#ifdef DEBUG
+  fprintf(stdout,_("length of new pattern: %i %i\n"),HowMany,StartBit);
+#endif
+
+  ringtone->NrNotes=0;
+    
+  for (i=0;i<HowMany;i++) {
+
+    StartBit=BitUnPackInt(package,StartBit,&q,3);              
+    switch (q) {
+      case VolumeInstructionId:
+#ifdef DEBUG
+//        fprintf(stdout,_("Volume\n"));
+#endif
+        StartBit+=4;
+        break;
+      case StyleInstructionId:
+        StartBit=BitUnPackInt(package,StartBit,&l,2);              
+#ifdef DEBUG
+//     fprintf(stdout,_("Style %i\n"),l>>6);
+#endif
+       switch (l) {
+         case StaccatoStyle  : DefNoteStyle=StaccatoStyle;   break;
+         case ContinuousStyle: DefNoteStyle=ContinuousStyle; break;
+         case NaturalStyle   : DefNoteStyle=NaturalStyle;    break;
+       }
+       break;
+      case TempoInstructionId:
+        StartBit=BitUnPackInt(package,StartBit,&l,5);                  
+        l=l>>3;
+        DefNoteTempo=BeatsPerMinute[l];
+#ifdef DEBUG
+//     fprintf(stdout,_("Tempo %i\n"),l);
+#endif
+        break;
+      case ScaleInstructionId:
+        StartBit=BitUnPackInt(package,StartBit,&l,2);
+       DefNoteScale=l>>6;
+#ifdef DEBUG
+//     fprintf(stdout,_("scale: %i %i\n"),DefNoteScale,ringtone->NrNotes);
+#endif
+       break;
+      case NoteInstructionId:
+        StartBit=BitUnPackInt(package,StartBit,&l,4);    
+
+        switch (l) {
+          case Note_C  :ringtone->notes[ringtone->NrNotes].note=0;break;
+          case Note_Cis:ringtone->notes[ringtone->NrNotes].note=1;break;
+          case Note_D  :ringtone->notes[ringtone->NrNotes].note=2;break;
+          case Note_Dis:ringtone->notes[ringtone->NrNotes].note=3;break;
+          case Note_E  :ringtone->notes[ringtone->NrNotes].note=4;break;
+          case Note_F  :ringtone->notes[ringtone->NrNotes].note=6;break;
+          case Note_Fis:ringtone->notes[ringtone->NrNotes].note=7;break;
+          case Note_G  :ringtone->notes[ringtone->NrNotes].note=8;break;
+          case Note_Gis:ringtone->notes[ringtone->NrNotes].note=9;break;
+          case Note_A  :ringtone->notes[ringtone->NrNotes].note=10;break;
+          case Note_Ais:ringtone->notes[ringtone->NrNotes].note=11;break;
+          case Note_H  :ringtone->notes[ringtone->NrNotes].note=12;break;
+          default      :ringtone->notes[ringtone->NrNotes].note=255;break; //Pause ?
+        }
+      
+        if (ringtone->notes[ringtone->NrNotes].note!=255)
+          ringtone->notes[ringtone->NrNotes].note=ringtone->notes[ringtone->NrNotes].note+DefNoteScale*14;
+
+        StartBit=BitUnPackInt(package,StartBit,&l,3);    
+       DefNoteDuration=l;
+
+        StartBit=BitUnPackInt(package,StartBit,&spec,2);    
+
+        if (DefNoteDuration==Duration_Full && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=128*3/2;
+        if (DefNoteDuration==Duration_Full && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=128*2/3;
+        if (DefNoteDuration==Duration_Full && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=128;
+        if (DefNoteDuration==Duration_1_2 && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=64*3/2;
+        if (DefNoteDuration==Duration_1_2 && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=64*2/3;
+        if (DefNoteDuration==Duration_1_2 && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=64;
+        if (DefNoteDuration==Duration_1_4 && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=32*3/2;
+        if (DefNoteDuration==Duration_1_4 && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=32*2/3;
+        if (DefNoteDuration==Duration_1_4 && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=32;
+        if (DefNoteDuration==Duration_1_8 && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=16*3/2;
+        if (DefNoteDuration==Duration_1_8 && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=16*2/3;
+        if (DefNoteDuration==Duration_1_8 && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=16;
+        if (DefNoteDuration==Duration_1_16 && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=8*3/2;
+        if (DefNoteDuration==Duration_1_16 && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=8*2/3;
+        if (DefNoteDuration==Duration_1_16 && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=8;
+        if (DefNoteDuration==Duration_1_32 && spec==DottedNote)
+            ringtone->notes[ringtone->NrNotes].duration=4*3/2;
+        if (DefNoteDuration==Duration_1_32 && spec==Length_2_3)
+            ringtone->notes[ringtone->NrNotes].duration=4*2/3;
+        if (DefNoteDuration==Duration_1_32 && spec==NoSpecialDuration)
+            ringtone->notes[ringtone->NrNotes].duration=4;
+
+        ringtone->notes[ringtone->NrNotes].style=DefNoteStyle;
+
+        ringtone->notes[ringtone->NrNotes].tempo=DefNoteTempo;
+       
+#ifdef DEBUG    
+//    fprintf(stdout,_("note(%i): %i, scale: %i, duration: %i, spec: %i\n"),ringtone->NrNotes,ringtone->notes[ringtone->NrNotes].note,DefNoteScale,DefNoteDuration,spec);
+#endif
+        if (ringtone->NrNotes==FB61_MAX_RINGTONE_NOTES) break;
+       
+        ringtone->NrNotes++;
+        break;
+      default:
+#ifdef DEBUG
+    fprintf(stdout,_("Unsupported block %i %i\n"),q,i);  
+#endif
+        return GE_SUBFORMATNOTSUPPORTED;
+    } 
+  }
+
+#ifdef DEBUG
+//  printf("Number of notes=%d\n",ringtone->NrNotes);
+#endif
+
+  return GE_NONE;
+}
+
+GSM_Error GSM_ReadRingtone(GSM_SMSMessage *message, GSM_Ringtone *ringtone)
+{
+  if (message->UDHType==GSM_RingtoneUDH) {
+    return GSM_UnPackRingtone(ringtone, message->MessageText, message->Length);
+  } else return GE_SUBFORMATNOTSUPPORTED;
+}
+
+int GSM_GetFrequency(int number) {
+  
+  int freq=0;
+
+  /* Values according to the software from http://iki.fi/too/sw/xring/
+     generated with:
+     perl -e 'print int(4400 * (2 **($_/12)) + .5)/10, "\n" for(3..14)'
+  */ 
+  if (number!=255) {
+    freq=number%14;
+    switch (freq) {
+
+    case  0: freq=523.3; break; // C
+    case  1: freq=554.4; break; // Cis
+
+    case  2: freq=587.3; break; //D
+    case  3: freq=622.3; break; //Dis
+    
+    case  4: freq=659.3; break; //E
+
+    case  6: freq=698.5; break; //F
+    case  7: freq=740;   break; //Fis
+
+    case  8: freq=784;   break; //G
+    case  9: freq=830.6; break; //Gis
+
+    case 10: freq=880;   break; //A
+    case 11: freq=932.3; break; //Ais
+    
+    case 12: freq=987.8; break; //H
+
+    default: freq=0; break;
+    }
+  }
+  else freq = 0;
+
+  if ((number/14)!=0) freq=freq*(number/14);
+                else freq=freq/2;
+
+  return freq;
+
+}
+
+/* Very fast hack. It should be written correctly ! */
+void GSM_PlayOneNote (GSM_RingtoneNote note) {
+  int Hz;
+
+  Hz=GSM_GetFrequency(note.note);
+       
+  GSM->PlayTone(Hz,5);
+
+  /* Is it correct ? Experimental values here */
+  switch (note.style) {
+    case StaccatoStyle:
+      usleep (7500);
+      GSM->PlayTone(0,0);      
+      usleep ((1500000/note.tempo*note.duration)-(7500));
+      break;
+    case ContinuousStyle:
+      usleep  (1500000/note.tempo*note.duration);
+      break;
+    case NaturalStyle:
+      usleep  (1500000/note.tempo*note.duration-50);
+      GSM->PlayTone(0,0);      
+      usleep (50);
+      break;   
+  }
+}
+
+void GSM_PlayRingtone (GSM_Ringtone *ringtone) {
+
+  int i;
+  
+  for (i=0;i<ringtone->NrNotes;i++) {
+     GSM_PlayOneNote(ringtone->notes[i]);
+  }      
+
+  /* Disables buzzer */
+  GSM->PlayTone(255*255,0);  
+}
+
+/* Initializes one ringtone: first is number of ringtone in 
+   RingingTones in gnokii.h, second its' code, last position in phone menu */
+void RT(int number, int code, int menu) {
+  RingingTones[number].code=code;
+  RingingTones[number].menu=menu;
+}
+
+/* This function initializes structures with ringtones names adequate for
+   your phone model and firmware; if your phone is not now supported:
+   1.set first ringtone in 1'st profile in your phone
+   2.make ./gnokii --getprofile 1
+   3.read ringtone code
+   4.see in gnokii.h, if ringtone name is gnokii.h in RingingTones (if not, add)
+   5.put here RT(a,b,c), where a is number of name in RingingTones in gnokii.h,
+     b is its' code and c is number of ringtone in phone menu
+   6.repeat steps 1-5 for all ringtones
+   7.send me (Marcin-Wiacek@Topnet.PL) all RT and phone model */
+void PrepareRingingTones(char model[64], char rev[64]) {
+
+  char rev2[64];
+  int i;
+  bool doit;
+
+  if (!RingingTones[0].code) {
+    if (!strcmp(model,"NSE-1")) //5110
+    {
+      RT( 2,18, 1);RT( 3,19, 2);RT( 7,23, 3);RT( 5,21, 4);RT( 9,25, 5);
+                   RT(20,48, 7);RT(11,27, 8);RT(33,59, 9);RT(35,62,10);
+      RT(46,60,11);RT(16,36,12);RT(17,37,13);RT(13,32,14);RT(14,34,15);
+      RT(19,43,16);RT(18,39,17);RT(24,50,18);RT(31,57,19);RT(28,54,20);
+      RT(30,56,21);RT(40,73,22);RT(39,72,23);RT(37,69,24);
+      RT(23,49,26);RT(38,71,27);             RT(41,74,29);
+      
+      strcpy(rev2,"05.23"); //5.24 and higher
+      doit=false;
+      for(i=0;i<5;i++)
+      {
+        if (rev[i]<rev2[i]) break;
+       if (rev[i]>rev2[i]) doit=true;
+      }
+      
+      if (doit) {
+         RT(22,47, 6);RT(47,58,25);RT(45,80,28);RT(43,75,30);
+      } else
+      {
+         RT(21,47, 6);RT(32,58,25);RT(44,80,28);RT(42,75,30);
+      }
+      RingingTones[0].menu=30; /* How many ringtones in phone */
+    }
+    if (!strcmp(model,"NSM-1")) //6150
+    {
+      RT( 2,18, 1);RT( 3,19, 2);RT( 7,23, 3);RT( 6,22, 4);
+      RT( 4,20, 5);RT( 5,21, 6);RT(15,35, 7);RT(12,30, 8);
+      RT( 9,25, 9);RT(20,47,10);RT( 8,24,11);RT(11,27,12);
+      RT(10,26,13);RT(34,60,14);RT(33,58,15);RT(35,61,16);
+      RT(16,36,17);RT(13,32,18);RT(19,43,19);RT(18,39,20);
+      RT(24,49,21);RT(31,56,22);RT(25,50,23);RT(27,52,24);
+      RT(26,51,25);RT(28,53,26);RT(29,54,27);RT(30,55,28);
+      RT(39,71,29);RT(37,68,30);RT(47,57,31);RT(23,48,32);
+      RT(38,70,33);RT(36,67,34);RT(41,73,35);
+      /*uploadable ringtone*/
+      RT( 1,17,36);
+      RingingTones[0].menu=36; /* How many ringtones in phone */
+    }
+    if (!strcmp(model,"NPE-3")) //6210
+    {
+      RT(19,64, 1);RT( 2,65, 2);RT( 3,66, 3);RT(15,67, 4);RT( 6,68, 5);
+      RT(49,69, 6);RT(50,70, 7);RT( 7,71, 8);RT(35,72, 9);RT(33,73,10);
+      RT(18,74,11);RT( 5,75,12);RT(51,76,13);RT(52,77,14);RT(53,78,15);
+      RT(37,79,16);RT(54,80,17);RT(55,81,18);RT(56,82,19);RT(57,83,20);
+      RT(58,84,21);RT(59,85,22);RT(25,86,23);RT(27,87,24);RT(30,88,25);
+      RT(39,89,26);RT(24,90,27);RT( 8,91,28);RT(60,92,29);RT(61,93,30);
+      RT(31,94,31);RT(62,95,32);RT(63,96,33);RT(64,97,34);RT(48,98,35);
+      /* Uploadable ringtones */
+      RT( 1,137,36);RT(65,138,37);RT(66,139,38);RT(67,140,39);RT(68,141,40);
+
+      RingingTones[0].menu=40; /* How many ringtones in phone */
+    }
+    RingingTones[0].code=true;
+  }
+}
+
+/* returns names from code or number in menu */
+char *RingingToneName(int code, int menu)
+{
+  int index=1,i;
+  GSM_Error error;
+
+  if (code==0)
+  {
+    while (strcmp(RingingTones[index].name,"")) {
+      if (RingingTones[index].menu==menu) break;
+      index++;
+    }
+  } else
+  {
+    while (strcmp(RingingTones[index].name,"")) {
+      if (RingingTones[index].code==code) break;
+      index++;
+    }
+  }
+
+  if (!strncmp(RingingTones[index].name,"Uploaded ",9)) {
+     ringtone.location=atoi(&RingingTones[index].name[10]);
+
+     error=GSM->GetBinRingtone(&ringtone);
+
+     if (error==GE_NONE) return ringtone.name;
+     if (error==GE_UNKNOWNMODEL) {
+    
+        /* In 33x we have normal "Smart Messaging" format */
+        if (GetModelFeature (FN_RINGTONES)==F_RING_SM) {
+      
+          i=7;
+         if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8;
+         ringtone.frame[i]=0x02;
+       
+          GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i);
+
+          return SMringtone.name;
+       }
+     }
+  }
+  
+  return RingingTones[index].name;
+}
+
+/* returns code from number in menu */
+int RingingToneCode(int menu)
+{
+  int index=1;
+
+  while ( RingingTones[index].menu!=menu) index++;
+
+  return RingingTones[index].code;
+}
+
+/* returns number in menu from code */
+int RingingToneMenu(int code)
+{
+  int index=1;
+
+  while ( RingingTones[index].code!=code) index++;
+
+  return RingingTones[index].menu;
+}
+
+int NumberOfRingtones()
+{
+  return RingingTones[0].menu;
+}
+
+int GSM_SaveRingtoneToSMS(GSM_MultiSMSMessage *SMS,
+                          GSM_Ringtone *ringtone, bool profilestyle)
+{  
+  int i, j;
+  unsigned char MessageBuffer[GSM_MAX_SMS_8_BIT_LENGTH*4];
+  unsigned char MessageBuffer2[GSM_MAX_SMS_8_BIT_LENGTH*4];
+  int MessageLength;
+  GSM_UDH UDHType;
+  
+  EncodeUDHHeader(MessageBuffer, GSM_RingtoneUDH);
+  MessageLength=GSM_MAX_SMS_8_BIT_LENGTH-(MessageBuffer[0]+1);
+  i=GSM_PackRingtone(ringtone, MessageBuffer, &MessageLength);
+
+  if (i!=ringtone->NrNotes && profilestyle)
+  {
+    MessageLength=0;
+    MessageBuffer[MessageLength++]=0x30;          //SM version. Here 3.0
+    MessageBuffer[MessageLength++]=SM30_RINGTONE; //ID for ringtone
+
+    MessageBuffer[MessageLength++]=0x01;          //length hi.Later changed
+    MessageBuffer[MessageLength++]=0x00;          //length lo.Later changed
+
+    j=SM30_MAX_RINGTONE_FRAME_LENGTH;
+    i=GSM_PackRingtone(ringtone, MessageBuffer2, &j);
+    MessageLength=MessageLength+j;
+    memcpy(MessageBuffer+4,MessageBuffer2,j);
+      
+    MessageBuffer[2]=j/256;
+    MessageBuffer[3]=j%256;
+
+    UDHType=GSM_ProfileUDH;
+  } else
+    UDHType=GSM_RingtoneUDH;
+
+  GSM_MakeMultiPartSMS2(SMS,MessageBuffer,MessageLength, UDHType, GSM_Coding_Default);
+
+  return i;
+}
diff --git a/common/gsm-sms.c b/common/gsm-sms.c
new file mode 100644 (file)
index 0000000..5a35034
--- /dev/null
@@ -0,0 +1,1020 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "gsm-api.h"
+#include "gsm-coding.h"
+
+/* User data headers */
+GSM_UDHHeader UDHHeaders[] = {
+  { GSM_ConcatenatedMessages, 0x05, "\x00\x03\x01\x00\x00" },
+      /* See GSM 03.40 section 9.2.3.24.1 */
+  { GSM_DisableVoice,         0x04, "\x01\x02\x00\x00" },
+  { GSM_DisableFax,           0x04, "\x01\x02\x01\x00" },
+  { GSM_DisableEmail,         0x04, "\x01\x02\x02\x00" },
+  { GSM_EnableVoice,          0x04, "\x01\x02\x00\x01" },
+  { GSM_EnableFax,            0x04, "\x01\x02\x01\x01" },
+  { GSM_EnableEmail,          0x04, "\x01\x02\x02\x01" },
+      /* See GSM 03.40 section 9.2.3.24.2 for voice, fax and email messages */
+  { GSM_VoidSMS,              0x08, "\x01\x02\x02\x01\x01\x02\x02\x00" },
+      /* When send such SMS to some phones, they don't display anything,
+         only beep and enable vibra/light */
+  { GSM_BugSMS,               0x09, "\x01\x02\x02\x01\x01\x02\x02\x00\xc0" },
+
+  /* Short Smart Messaging UDH */
+  /* General format: */
+  /* 1 byte  0x05     : IEI application port addressing scheme, 16 bit address */
+  /* 1 byte  0x04     : IEI length */
+  /* 2 bytes          : destination address: high & low byte */
+  /* 2 bytes 0x00 0x00: originator address: high & low byte */
+  { GSM_RingtoneUDH,          0x06, "\x05\x04\x15\x81\x00\x00" },
+  { GSM_OpLogo,               0x06, "\x05\x04\x15\x82\x00\x00" },
+  { GSM_CallerIDLogo,         0x06, "\x05\x04\x15\x83\x00\x00" },
+  { GSM_WAPBookmarkUDH,       0x06, "\x05\x04\xc3\x4f\x00\x00" },
+
+  /* Long Smart Messaging UDH */
+  /* General format: */
+  /* 1 byte 0x05      : IEI application port addressing scheme, 16 bit address */
+  /* 1 byte 0x04      : IEI length */
+  /* 2 bytes 0x00 0x00: destination address: high & low byte */
+  /* 2 bytes 0x00 0x00: originator address: high & low byte */
+  /* 1 byte 0x00      : null byte for end first part ? */
+  /* 1 byte 0x03      : length for rest ? */
+  /* 1 byte                               */
+  /* 1 byte           : number of all SMS */
+  /* 1 byte           : number of current SMS */
+  { GSM_CalendarNoteUDH,      0x0b, "\x05\x04\x00\xe4\x00\x00\x00\x03\xc7\x00\x00" }, //from 3310 ?
+  { GSM_CalendarNoteUDH2,     0x0b, "\x05\x04\x23\xf5\x00\x00\x00\x03\x01\x00\x00" }, //from 6210 or 9210 Note: last 0x01 changes according to note type
+  { GSM_ProfileUDH,           0x0b, "\x05\x04\x15\x8a\x00\x00\x00\x03\xce\x00\x00" },
+  { GSM_WAPBookmarkUDH,       0x0b, "\x05\x04\xc3\x4f\x00\x00\x00\x03\x01\x00\x00" },//note last 0x01 can change
+  { GSM_WAPSettingsUDH,       0x0b, "\x05\x04\xc3\x4f\x00\x00\x00\x03\x7f\x00\x00" },
+  { GSM_PhonebookUDH,         0x0b, "\x05\x04\x23\xf4\x00\x00\x00\x03\x01\x00\x00" },
+
+  { GSM_NoUDH,                0x00, "" }
+};
+
+#define ByteMask ((1 << Bits) - 1)
+
+int GSM_PackSevenBitsToEight(int offset, unsigned char *input, unsigned char *output)
+{
+        unsigned char *OUT = output; /* Current pointer to the output buffer */
+        unsigned char *IN  = input;  /* Current pointer to the input buffer */
+        int Bits;                    /* Number of bits directly copied to
+                                        the output buffer */
+        Bits = (7 + offset) % 8;
+
+        /* If we don't begin with 0th bit, we will write only a part of the
+           first octet */
+        if (offset) {
+                *OUT = 0x00;
+                OUT++;
+        }
+
+        while ((IN - input) < strlen(input)) {
+                unsigned char Byte = EncodeWithDefaultAlphabet(*IN);
+
+                *OUT = Byte >> (7 - Bits);
+                /* If we don't write at 0th bit of the octet, we should write
+                   a second part of the previous octet */
+                if (Bits != 7)
+                        *(OUT-1) |= (Byte & ((1 << (7-Bits)) - 1)) << (Bits+1);
+
+                Bits--;
+
+                if (Bits == -1) Bits = 7;
+                else OUT++;
+
+                IN++;
+        }
+        return (OUT - output);
+}
+
+int GSM_UnpackEightBitsToSeven(int offset, int in_length, int out_length,
+                           unsigned char *input, unsigned char *output)
+{
+        unsigned char *OUT = output; /* Current pointer to the output buffer */
+        unsigned char *IN  = input;  /* Current pointer to the input buffer */
+        unsigned char Rest = 0x00;
+        int Bits;
+
+        Bits = offset ? offset : 7;
+
+        while ((IN - input) < in_length) {
+
+                *OUT = ((*IN & ByteMask) << (7 - Bits)) | Rest;
+                Rest = *IN >> Bits;
+
+                /* If we don't start from 0th bit, we shouldn't go to the
+                   next char. Under *OUT we have now 0 and under Rest -
+                   _first_ part of the char. */
+                if ((IN != input) || (Bits == 7)) OUT++;
+                IN++;
+
+                if ((OUT - output) >= out_length) break;
+
+                /* After reading 7 octets we have read 7 full characters but
+                   we have 7 bits as well. This is the next character */
+                if (Bits == 1) {
+                        *OUT = Rest;
+                        OUT++;
+                        Bits = 7;
+                        Rest = 0x00;
+                } else {
+                        Bits--;
+                }
+        }
+
+        return OUT - output;
+}
+
+/* This function implements packing of numbers (SMS Center number and
+   destination number) for SMS sending function. */
+/* See GSM 03.40 9.1.1:
+   1 byte  - length of number given in semioctets or bytes (when given in bytes,
+             includes one byte for byte with number format.
+             Returned by function (set semioctet to true, if want result
+             in semioctets).
+   1 byte  - format of number. See GSM_NumberType; in gsm-common.h. Returned
+             in u8 *Output.
+   n bytes - 2n or 2n-1 semioctets with number. For some types of numbers
+             in the most significant bits of the last byte with 0x0f
+             (1111 binary) are filled if the number is represented
+             with odd number of digits. Returned in u8 *Output. */
+/* 1 semioctet = 4 bits = half of byte */
+int GSM_PackSemiOctetNumber(u8 *Number, u8 *Output, bool semioctet) {
+
+  u8 *IN=Number;  /* Pointer to the input number */
+  u8 *OUT=Output; /* Pointer to the output */
+  int length=0,j;
+  unsigned char format=GNT_UNKNOWN; // format of number used by us
+
+  /* Checking for format number */
+  while (*IN) {
+    if (length==0 && *IN=='+')
+      format=GNT_INTERNATIONAL;  // first byte is '+'. It can be international
+    else {
+      if (*IN>'9' || *IN<'0') { 
+        format=GNT_ALPHANUMERIC; //char is not number. It must be alphanumeric
+      }
+    }
+    IN++;length++;
+  }
+
+  /* Now we return to first byte */
+  for (j=0;j<length;j++) IN--;
+
+  /* The first byte in the Semi-octet representation of the address field is
+     the Type-of-Address. This field is described in the official GSM
+     specification 03.40 version 5.3.0, section 9.1.2.5, page 33.*/
+  *OUT++=format;
+
+  /* The next field is the number. See GSM 03.40 section 9.1.2 */
+  switch (format) {
+    case GNT_ALPHANUMERIC:
+      length=GSM_PackSevenBitsToEight(0, IN, OUT)*2;
+      break;
+
+    case GNT_INTERNATIONAL:
+      length--;
+      EncodeBCD (OUT, IN+1, length, true);
+      break;
+
+    default:
+      EncodeBCD (OUT, IN, length, true);
+      break;
+  }
+
+  if (semioctet) {
+    return length;
+  } else {
+    /* Convert number of semioctets to number of chars */
+    if (length % 2) length++;
+    return length / 2 + 1;
+  }
+}
+
+char *GSM_UnpackSemiOctetNumber(u8 *Number, bool semioctet) {
+
+  static char Buffer[20]="";  
+  int length=Number[0];
+
+  if (semioctet) {
+    /* Convert number of semioctets to number of chars */
+    if (length % 2) length++;
+    length=length / 2 + 1;
+  }
+  
+  length--; //without leading byte with format of number
+
+  switch (Number[1]) {
+    case GNT_ALPHANUMERIC:
+      GSM_UnpackEightBitsToSeven(0, length, length, Number+2, Buffer);
+      Buffer[length]=0;
+      break;
+
+    case GNT_INTERNATIONAL:
+      Buffer[0]='+';
+      DecodeBCD (Buffer+1, Number+2, length);
+      break;
+
+    default:
+      DecodeBCD (Buffer, Number+2, length);
+      break;
+  }
+
+  return Buffer;
+}
+
+/* See GSM 03.40 section 9.2.3.11 */
+GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req)
+{
+#ifdef DEBUG
+  fprintf(stdout,_("Date & time in saved SMS: %02i/%02i/%04i %02i:%02i:%02i\n"),
+    DT->Day,DT->Month,DT->Year,DT->Hour,DT->Minute,DT->Second);
+#endif
+  
+  req[0]=EncodeWithBCDAlphabet(DT->Year);
+  req[1]=EncodeWithBCDAlphabet(DT->Month);
+  req[2]=EncodeWithBCDAlphabet(DT->Day);
+  req[3]=EncodeWithBCDAlphabet(DT->Hour);
+  req[4]=EncodeWithBCDAlphabet(DT->Minute);
+  req[5]=EncodeWithBCDAlphabet(DT->Second);
+
+  /* FIXME: do it */
+  req[6]=0; /* TimeZone = +-0 */
+
+  return GE_NONE;
+}
+
+/* See GSM 03.40 section 9.2.3.11 */
+GSM_Error GSM_DecodeSMSDateTime(GSM_DateTime *DT, unsigned char *req)
+{
+  DT->Year    = DecodeWithBCDAlphabet(req[0]);
+  DT->Month   = DecodeWithBCDAlphabet(req[1]);
+  DT->Day     = DecodeWithBCDAlphabet(req[2]);
+  DT->Hour    = DecodeWithBCDAlphabet(req[3]);
+  DT->Minute  = DecodeWithBCDAlphabet(req[4]);
+  DT->Second  = DecodeWithBCDAlphabet(req[5]);
+
+  DT->Timezone=(10*(req[6]&0x07)+(req[6]>>4))/4;
+  if (req[6]&0x08) DT->Timezone = -DT->Timezone;
+
+#ifdef DEBUG
+  fprintf(stdout, _("%d%d-"), req[0]&0xf, req[0]>>4);
+  fprintf(stdout, _("%d%d-"), req[1]&0xf, req[1]>>4);
+  fprintf(stdout, _("%d%d "), req[2]&0xf, req[2]>>4);
+  fprintf(stdout, _("%d%d:"), req[3]&0xf, req[3]>>4);
+  fprintf(stdout, _("%d%d:"), req[4]&0xf, req[4]>>4);
+  fprintf(stdout, _("%d%d "), req[5]&0xf, req[5]>>4);
+
+  if (req[6]) {
+    if (req[6] & 0x08) fprintf(stdout, "-");
+                  else fprintf(stdout, "+");
+
+    fprintf(stdout, _("%02d00"), (10*(req[6]&0x07)+(req[6]>>4))/4);
+  }
+
+  fprintf(stdout, "\n");
+#endif
+
+  return GE_NONE;
+}
+
+int GSM_EncodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+  int off,size=0,size2=0,w,i;
+
+  /* off - length of the user data header */
+  off = 0;
+
+  if (SMS->UDHType) {
+    /* GSM 03.40 section 9.2.3.23 (TP-User-Data-Header-Indicator) */
+    ETSI->firstbyte |= 0x40;
+
+    /* off - length of the user data header */
+    off = 1 + SMS->UDH[0];
+
+    /* we copy the udh */
+    memcpy(ETSI->MessageText, SMS->UDH, off);
+
+//  if (SMS->UDHType==GSM_HangSMS) ETSI->TPDCS=0x08; //Such SMS hangs phone (5110, 5.07),
+                                                     //when saved to Outbox atry try to read it
+                                                    /*from phone's menu*/
+  }
+
+  switch (SMS->Coding) {
+    /* When save SMS to SIM and it's 8 bit SMS,
+       "Edit" is not displayed in phone menu and
+       "Message cannot be displayed here" instead of message text */
+    case GSM_Coding_8bit:
+
+      /* the mask for the 8-bit data */
+      /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+      ETSI->TPDCS |= 0xf4;
+    
+      memcpy(ETSI->MessageText + off, SMS->MessageText, SMS->Length);
+
+      size2 = size = SMS->Length+off;
+
+      break;
+
+    case GSM_Coding_Default:
+
+      w=(7-off)%7;
+      if (w<0) w=(14-off)%14;
+
+      size = GSM_PackSevenBitsToEight(w, SMS->MessageText, ETSI->MessageText + off);
+      size += off;
+      size2 = (off*8 + w) / 7 + strlen(SMS->MessageText);
+
+      break;
+
+    case GSM_Coding_Unicode:
+
+      /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+      ETSI->TPDCS |= 0x08;
+
+#ifdef DEBUG
+      fprintf(stdout,_("SMS Length is %i\n"),strlen(SMS->MessageText));
+#endif
+
+      EncodeUnicode (ETSI->MessageText+off,SMS->MessageText,strlen(SMS->MessageText));
+      /* here we code "special" chars */
+      for (i=0;i<strlen(SMS->MessageText);i++) {
+       if (SMS->MessageText[i]=='~') ETSI->MessageText[off+1+i*2]=1; //enables/disables blinking
+        if (SMS->MessageText[i]=='`') ETSI->MessageText[off+1+i*2]=0; //hides rest ot contents
+      }
+
+      size=size2=strlen(SMS->MessageText)*2+off;
+
+      break;
+  }
+
+  /* FIXME: support for compression */
+  /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+  /* See also GSM 03.42 */
+  /* if (SMS->Compression) ETSI->TPDCS |= 0x20; */
+
+  /* SMS->Length is:
+       - integer representation of the number od octets within the user data when UD is coded using 8bit data
+       - the sum of the number of septets in UDH including any padding and number of septets in UD in other case */
+  /* GSM 03.40 section 9.2.3.16 (TP-User-Data-Length) */
+  ETSI->TPUDL = size2;
+
+  return size;
+}
+
+GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+  int off,w,i,tmp=0;
+  unsigned char output[161];
+  bool UDHOK;
+
+  /* off - length of the user data header */
+  off = 0;
+  
+  SMS->UDHType = GSM_NoUDH;
+
+  if (ETSI->firstbyte & 64) { /* UDH header available */
+
+    off = (ETSI->MessageText[0] + 1); /* Length of UDH header */
+    
+    /* Copy UDH header into SMS->UDH */
+    for (i = 0; i < off; i++) SMS->UDH[i] = ETSI->MessageText[i];
+
+#ifdef DEBUG
+    fprintf(stdout, "   UDH header available (length %i",off);
+#endif
+    
+    SMS->UDHType = GSM_UnknownUDH;
+
+    i=-1;
+    while (true) {
+      i++;
+      if (UDHHeaders[i].UDHType==GSM_NoUDH) break;
+      tmp=UDHHeaders[i].Length;
+      if (tmp==SMS->UDH[0]) { //if length is the same
+
+        if (tmp==0x05) tmp=tmp-2;/*two last bytes can be different for such UDH*/
+        if (tmp==0x0b) tmp=tmp-3;/*three last bytes can be different for such UDH*/
+
+        UDHOK=true;
+        for (w=0;w<tmp;w++) {
+          if (UDHHeaders[i].Text[w]!=SMS->UDH[w+1]) {
+            UDHOK=false;
+            break;
+          }
+        }
+        if (UDHOK) {
+          SMS->UDHType=UDHHeaders[i].UDHType;
+          break;
+        }
+      }
+    }
+
+#ifdef DEBUG
+    switch (SMS->UDHType) {
+      case GSM_ConcatenatedMessages:
+        fprintf(stdout,_(", concatenated (linked) message %d/%d"),SMS->UDH[5],SMS->UDH[4]);break;
+      case GSM_DisableVoice:
+        fprintf(stdout,_(", disables voice indicator"));break;
+      case GSM_EnableVoice:
+        fprintf(stdout,_(", enables voice indicator"));break;
+      case GSM_DisableFax:
+        fprintf(stdout,_(", disables fax indicator"));break;
+      case GSM_EnableFax:
+        fprintf(stdout,_(", enables fax indicator"));break;
+      case GSM_DisableEmail:
+        fprintf(stdout,_(", disables email indicator"));break;
+      case GSM_EnableEmail:
+        fprintf(stdout,_(", enables email indicator"));break;
+      case GSM_VoidSMS:
+        fprintf(stdout,_(", void SMS"));break;
+      case GSM_WAPBookmarkUDH:
+        fprintf(stdout,_(", WAP Bookmark"));break;
+      case GSM_WAPBookmarkUDHLong:
+        fprintf(stdout,_(", WAP Bookmark, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      case GSM_WAPSettingsUDH:
+        fprintf(stdout,_(", WAP Settings, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      case GSM_RingtoneUDH:
+        fprintf(stdout,_(", ringtone"));break;
+      case GSM_OpLogo:
+        fprintf(stdout,_(", GSM Operator Logo"));break;
+      case GSM_CallerIDLogo:
+        fprintf(stdout,_(", Caller Logo"));break;
+      case GSM_ProfileUDH:
+        fprintf(stdout,_(", Profile SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      case GSM_CalendarNoteUDH:
+        fprintf(stdout,_(", Calendar note SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      case GSM_CalendarNoteUDH2:
+        fprintf(stdout,_(", Calendar note SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      case GSM_PhonebookUDH:
+        fprintf(stdout,_(", Phonebook Entry, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+      default:
+        fprintf(stdout,_(", UNKNOWN"));break;
+    }
+               
+    fprintf(stdout, ")\n");
+
+    hexdump(off,SMS->UDH);
+#endif
+  }
+
+  SMS->Coding = GSM_Coding_Default;
+
+  /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+  if ((ETSI->TPDCS & 0xf4) == 0xf4) SMS->Coding=GSM_Coding_8bit;
+  if ((ETSI->TPDCS & 0x08) == 0x08) SMS->Coding=GSM_Coding_Unicode;
+
+  switch (SMS->Coding) {
+    case GSM_Coding_Default:
+      w=(7-off)%7;
+      if (w<0) w=(14-off)%14;
+  
+      SMS->Length=ETSI->TPUDL - (off*8 + w) / 7;
+
+      tmp=GSM_UnpackEightBitsToSeven(w,ETSI->TPUDL-off, SMS->Length, ETSI->MessageText+off, output);
+
+#ifdef DEBUG
+      fprintf(stdout, "   7 bit SMS, body is (length %i): ",SMS->Length);
+#endif /* DEBUG */
+
+      DecodeDefault (SMS->MessageText, output, tmp);
+
+#ifdef DEBUG
+      fprintf(stdout, "%s\n",SMS->MessageText);          
+#endif
+
+      break;
+    case GSM_Coding_8bit:
+      SMS->Length=ETSI->TPUDL - off;
+
+      memcpy(SMS->MessageText,ETSI->MessageText+off,SMS->Length);
+
+#ifdef DEBUG
+      fprintf(stdout, "   8 bit SMS, body is (length %i)\n",SMS->Length);
+      hexdump(SMS->Length,SMS->MessageText);
+#endif /* DEBUG */
+
+      break;
+    case GSM_Coding_Unicode:
+      SMS->Length=(ETSI->TPUDL - off) / 2;
+
+#ifdef DEBUG
+      fprintf(stdout, "   7 bit SMS, body is (length %i), Unicode coding: ",SMS->Length);
+      for (i=0; i<SMS->Length;i++) {
+        fprintf(stdout, "[%02x %02x]", ETSI->MessageText[off+i*2] , ETSI->MessageText[off+i*2+1]);
+      }
+      fprintf(stdout, "\n");             
+#endif /* DEBUG */
+
+      /* here we decode "special" chars */
+      for (i=0; i<SMS->Length;i++) {
+        if (ETSI->MessageText[off+i*2]  ==0x00 &&
+           ETSI->MessageText[off+i*2+1]==0x01)
+         ETSI->MessageText[off+i*2+1]='~'; //enables/disables blinking
+        if (ETSI->MessageText[off+i*2]  ==0x00 &&
+            ETSI->MessageText[off+i*2+1]==0x00)
+         ETSI->MessageText[off+i*2+1]='`'; //hides rest ot contents
+      }
+
+      DecodeUnicode (SMS->MessageText, ETSI->MessageText+off, SMS->Length);
+
+      break;
+  }
+
+  return GE_NONE;
+}
+
+GSM_Error GSM_DecodeETSISMSStatusReportData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+  /* See GSM 03.40 section 9.2.3.11 (TP-Service-Centre-Time-Stamp) */
+#ifdef DEBUG
+  fprintf(stdout, _("   SMSC response date: "));
+#endif
+  GSM_DecodeSMSDateTime(&SMS->SMSCTime, ETSI->SMSCDateTime);
+    
+  if (ETSI->TPStatus < 0x03) {
+    strcpy(SMS->MessageText,_("Delivered"));
+
+#ifdef DEBUG
+    /* more detailed reason only for debug */
+    /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+    switch (ETSI->TPStatus) {
+      case 0x00: fprintf(stdout, _("   SM received by the SME"));break;
+      case 0x01: fprintf(stdout, _("   SM forwarded by the SC to the SME but the SC is unable to confirm delivery"));break;
+      case 0x02: fprintf(stdout, _("   SM replaced by the SC"));break;
+    }
+#endif /* DEBUG */
+
+    SMS->Length = 10;
+      
+  } else if (ETSI->TPStatus & 0x40) {
+
+    strcpy(SMS->MessageText,_("Failed"));
+
+#ifdef DEBUG
+    /* more detailed reason only for debug */
+    if (ETSI->TPStatus & 0x20) {
+
+      /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+      fprintf(stdout, _("   Temporary error, SC is not making any more transfer attempts\n"));
+      switch (ETSI->TPStatus) {
+        case 0x60: fprintf(stdout, _("   Congestion"));break;
+        case 0x61: fprintf(stdout, _("   SME busy"));break;
+        case 0x62: fprintf(stdout, _("   No response from SME"));break;
+        case 0x63: fprintf(stdout, _("   Service rejected"));break;
+        case 0x64: fprintf(stdout, _("   Quality of service not available"));break;
+        case 0x65: fprintf(stdout, _("   Error in SME"));break;
+        default  : fprintf(stdout, _("   Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+      }
+
+    } else {
+
+      /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+      fprintf(stdout, _("   Permanent error, SC is not making any more transfer attempts\n"));
+      switch (ETSI->TPStatus) {
+        case 0x40: fprintf(stdout, _("   Remote procedure error"));break;
+        case 0x41: fprintf(stdout, _("   Incompatibile destination"));break;
+        case 0x42: fprintf(stdout, _("   Connection rejected by SME"));break;
+        case 0x43: fprintf(stdout, _("   Not obtainable"));break;
+        case 0x44: fprintf(stdout, _("   Quality of service not available"));break;
+        case 0x45: fprintf(stdout, _("   No internetworking available"));break;
+        case 0x46: fprintf(stdout, _("   SM Validity Period Expired"));break;
+        case 0x47: fprintf(stdout, _("   SM deleted by originating SME"));break;
+        case 0x48: fprintf(stdout, _("   SM Deleted by SC Administration"));break;
+        case 0x49: fprintf(stdout, _("   SM does not exist"));break;
+        default  : fprintf(stdout, _("   Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+      }
+    }
+#endif /* DEBUG */
+      
+      SMS->Length = 6;
+  } else if (ETSI->TPStatus & 0x20) {
+    strcpy(SMS->MessageText,_("Pending"));
+
+#ifdef DEBUG
+    /* more detailed reason only for debug */
+    /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+    fprintf(stdout, _("   Temporary error, SC still trying to transfer SM\n"));
+    switch (ETSI->TPStatus) {
+      case 0x20: fprintf(stdout, _("   Congestion"));break;
+      case 0x21: fprintf(stdout, _("   SME busy"));break;
+      case 0x22: fprintf(stdout, _("   No response from SME"));break;
+      case 0x23: fprintf(stdout, _("   Service rejected"));break;
+      case 0x24: fprintf(stdout, _("   Quality of service not aviable"));break;
+      case 0x25: fprintf(stdout, _("   Error in SME"));break;
+      default  : fprintf(stdout, _("   Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+    }
+#endif /* DEBUG */
+    SMS->Length = 7;
+  } else {
+    strcpy(SMS->MessageText,_("Unknown"));
+
+#ifdef DEBUG
+    /* more detailed reason only for debug */
+    fprintf(stdout, _("   Reserved/Specific to SC: %x"),ETSI->TPStatus);
+#endif /* DEBUG */
+    SMS->Length = 8;
+  }
+
+#ifdef DEBUG
+  fprintf(stdout, _("\n"));
+#endif /* DEBUG */
+
+  return GE_NONE;
+}
+
+GSM_Error GSM_EncodeETSISMSSubmitHeader(GSM_SMSMessage *SMS,GSM_ETSISMSMessage *ETSI)
+{
+  GSM_Error error;
+
+  /* First of all we should get SMSC number */
+  if (SMS->MessageCenter.No) {
+    error = GSM->GetSMSCenter(&SMS->MessageCenter);
+    if (error != GE_NONE) return error;
+    SMS->MessageCenter.No = 0;
+  }
+
+#ifdef DEBUG
+  fprintf(stdout, _("Packing SMS to \"%s\" via message center \"%s\"\n"), SMS->Destination, SMS->MessageCenter.Number);
+#endif /* DEBUG */
+
+  ETSI->SMSCNumber[0]=GSM_PackSemiOctetNumber(SMS->MessageCenter.Number, ETSI->SMSCNumber+1, false);
+
+  /* GSM 03.40 section 9.2.3.17 (TP-Reply-Path) */
+  if (SMS->ReplyViaSameSMSC) ETSI->firstbyte |= 128;
+  
+  /* When save to Outbox with SMS Class, "Edit" is not displayed in phone menu
+     and can forward it to another phone with set class (for example, 0=Flash) */
+  /* Message Class*/
+  /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+  if (SMS->Class>=0 && SMS->Class<5) ETSI->TPDCS |= (240+SMS->Class);  
+
+  /* When is not set for SMS saved for Inbox, phone displays "Message" instead
+     of number and doesn't display "Details" info */
+  ETSI->Number[0] = GSM_PackSemiOctetNumber(SMS->Destination, ETSI->Number+1, true);
+
+  return GE_NONE;
+}
+
+GSM_Error GSM_DecodeETSISMSHeader(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+#ifdef DEBUG
+  fprintf(stdout, _("   SMS center number: %s"), GSM_UnpackSemiOctetNumber(ETSI->SMSCNumber,false));
+  if (SMS->folder==0 && (ETSI->firstbyte & 128)!=0) //GST_INBOX
+    fprintf(stdout, _(" (centre set for reply)"));
+#endif
+
+  strcpy(SMS->MessageCenter.Number, GSM_UnpackSemiOctetNumber(ETSI->SMSCNumber,false));
+
+  SMS->ReplyViaSameSMSC=false;
+  if ((ETSI->firstbyte & 128)!=0) SMS->ReplyViaSameSMSC=true;
+
+#ifdef DEBUG      
+  fprintf(stdout, _("\n   Remote number (recipient or sender): %s\n"), GSM_UnpackSemiOctetNumber(ETSI->Number,true));
+#endif
+
+  strcpy(SMS->Sender, GSM_UnpackSemiOctetNumber(ETSI->Number,true));
+
+  return GE_NONE;
+}
+
+/* FIXME: we should allow for all validity formats */
+GSM_Error GSM_EncodeETSISMSSubmitValidity(GSM_SMSMessage *SMS,GSM_ETSISMSMessage *ETSI)
+{
+  /* GSM 03.40 section 9.2.3.3 (TP-Validity-Period-Format) */
+  /* Bits 4 and 3: 10. TP-VP field present and integer represent (relative) */
+  ETSI->firstbyte |= 0x10;
+
+  /* GSM 03.40 section 9.2.3.12 (TP-Validity Period) */
+  /* FIXME: error-checking for correct Validity - it should not be bigger then
+     63 weeks and smaller then 5minutes. We should also test intervals because
+     the SMS->Validity to TP-VP is not continuos. I think that the simplest
+     solution will be an array of correct values. We should parse it and if we
+     find the closest TP-VP value we should use it. Or is it good to take
+     closest smaller TP-VP as we do now? I think it is :-) */
+
+  /* 5 minutes intervals up to 12 hours = 720 minutes */
+  if (SMS->Validity <= 720)
+    ETSI->TPVP = (unsigned char) (SMS->Validity/5)-1;
+
+  /* 30 minutes intervals up to 1 day */
+  else if ((SMS->Validity > 720) && (SMS->Validity <= 1440))
+    ETSI->TPVP = (unsigned char) ((SMS->Validity-720)/30)+143;
+
+  /* 1 day intervals up to 30 days */
+  else if ((SMS->Validity > 1440) && (SMS->Validity <= 43200))
+    ETSI->TPVP = (unsigned char) (SMS->Validity/1440)+166;
+
+  /* 1 week intervals up to 63 weeks */
+  else if ((SMS->Validity > 43200) && (SMS->Validity <= 635040))
+    ETSI->TPVP = (unsigned char) (SMS->Validity/10080)+192;
+
+  return GE_NONE;
+}
+
+/* FIXME: do we need more than SMS_Submit and SMS_Deliver ? */
+GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length)
+{
+  int size=0;
+
+  ETSI->firstbyte=0;
+  ETSI->TPPID=0;
+  ETSI->TPDCS=0;
+  ETSI->TPUDL=0;
+  ETSI->TPStatus=0;
+  ETSI->TPVP=0;
+
+  switch (PDU) {
+    case SMS_Submit:
+
+      /* GSM 03.40 section 9.2.3.1 (TP-Message-Type-Indicator) */
+      /* Bits 1 and 0: 01. SMS-Submit */
+      ETSI->firstbyte |= 0x01;
+
+      /* GSM 03.40 section 9.2.3.5 (TP-Status-Raport-Request) */
+      /* Mask for request for delivery report from SMSC */
+      if (SMS->Type == GST_DR) ETSI->firstbyte |= 32;
+
+      GSM_EncodeETSISMSSubmitHeader(SMS, ETSI);
+      GSM_EncodeETSISMSSubmitValidity(SMS, ETSI);
+      size=GSM_EncodeETSISMSSubmitData(SMS, ETSI);
+
+      break;
+    case SMS_Deliver:
+
+      /* GSM 03.40 section 9.2.3.1 (TP-Message-Type-Indicator) */
+      /* Bits 1 and 0: 00. SMS-Deliver */
+      ETSI->firstbyte |= 0x00;
+
+      GSM_EncodeETSISMSSubmitHeader(SMS, ETSI);
+      GSM_EncodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+      size=GSM_EncodeETSISMSSubmitData(SMS, ETSI);
+
+      break;
+    default:
+      break;
+  }
+
+  /* size is the length of the data in octets including udh */
+  *length=size;
+
+  return GE_NONE;
+}
+
+/* This function decodes parts of SMS coded according to GSM 03.40 
+   (given in GSM_ETSISMSMessage) to GSM_SMSMessage */
+GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+  SMS_MessageType PDU=SMS_Deliver;
+
+  /* See GSM 03.40 section 9.2.3.1 */
+  if ((ETSI->firstbyte & 0x03) == 0x01) PDU=SMS_Submit;
+  if ((ETSI->firstbyte & 0x03) == 0x02) PDU=SMS_Status_Report;
+
+  GSM_DecodeETSISMSHeader(SMS, ETSI);
+
+  switch (PDU) {
+    case SMS_Submit:
+#ifdef DEBUG
+      fprintf(stdout, _("   SMS submit "));
+#endif
+      SMS->SMSData=false; 
+      GSM_DecodeETSISMSSubmitData(SMS,ETSI);
+      break;
+    case SMS_Deliver:
+#ifdef DEBUG
+      fprintf(stdout, _("   SMS deliver "));
+      fprintf(stdout, _("   Date: "));
+#endif
+      SMS->SMSData=true; 
+      GSM_DecodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+      GSM_DecodeETSISMSSubmitData(SMS,ETSI);
+      break;
+    case SMS_Status_Report:
+#ifdef DEBUG
+      fprintf(stdout, _("   SMS status report "));
+      fprintf(stdout, _("   Date: "));
+#endif
+      SMS->SMSData=true; 
+      GSM_DecodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+      GSM_DecodeETSISMSStatusReportData(SMS,ETSI);
+      break;
+    default:
+      break;
+  }
+
+  SMS->MessageText[SMS->Length]=0;
+
+  return GE_NONE;
+}
+
+void GSM_SetDefaultSMSData (GSM_SMSMessage *SMS)
+{
+  struct tm *now;
+  time_t nowh;
+  GSM_DateTime Date;
+
+  /* Default settings for SMS message:
+  - no delivery report
+  - Class Message 1
+  - no compression
+  - SMSC no. 1
+  - validity 3 days */
+
+  SMS->folder = GST_OUTBOX;
+  SMS->Type = GST_SMS;
+  SMS->Class = -1;
+  SMS->Compression = false;
+  SMS->MessageCenter.No = 1;
+  SMS->Validity = 4320; /* 4320 minutes == 72 hours */
+  SMS->ReplyViaSameSMSC = false;
+  SMS->UDHType = GSM_NoUDH;
+  SMS->Coding=GSM_Coding_Default;
+  strcpy(SMS->Destination,"");
+
+  /* This part is required to save SMS */    
+
+  SMS->Status = GSS_NOTSENTREAD;
+  SMS->Location = 0;
+
+  nowh=time(NULL);
+  now=localtime(&nowh);
+
+  Date.Year = now->tm_year;
+  Date.Month = now->tm_mon+1;
+  Date.Day = now->tm_mday;
+  Date.Hour = now->tm_hour;
+  Date.Minute = now->tm_min;
+  Date.Second = now->tm_sec;
+
+  /* I have 100 (for 2000) Year now :-) */
+  if (Date.Year>99 && Date.Year<1900) {
+    Date.Year=Date.Year+1900;
+  }
+
+  /* We need to have only two last digits of year */
+  if (Date.Year>1900)
+  {
+    if (Date.Year<2000) Date.Year = Date.Year-1900;
+                   else Date.Year = Date.Year-2000;
+  }
+
+  SMS->Time.Year=Date.Year;
+  SMS->Time.Month=Date.Month;
+  SMS->Time.Day=Date.Day;
+  SMS->Time.Hour=Date.Hour;
+  SMS->Time.Minute=Date.Minute;
+  SMS->Time.Second=Date.Second;
+
+  SMS->Name[0]=0;
+}
+
+/* This function encodes the UserDataHeader as described in:
+   - GSM 03.40 version 6.1.0 Release 1997, section 9.2.3.24
+   - Smart Messaging Specification, Revision 1.0.0, September 15, 1997
+*/
+GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType)
+{
+       int i=0;
+
+       if (UDHType!=GSM_NoUDH) {
+          while (true) {
+            if (UDHHeaders[i].UDHType==GSM_NoUDH) {
+#ifdef DEBUG
+               fprintf(stderr,_("Not supported User Data Header type\n"));
+#endif
+               break;
+            }
+            if (UDHHeaders[i].UDHType==UDHType) {
+               text[0] = UDHHeaders[i].Length; // UDH Length
+               memcpy(text+1, UDHHeaders[i].Text, UDHHeaders[i].Length);
+               break;
+            }
+            i++;
+          }
+        }
+       return GE_NONE;
+}
+
+int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS,
+    unsigned char *MessageBuffer,int cur, GSM_UDH UDHType, GSM_Coding_Type Coding){
+
+  int j;
+  int current,smsudhlength;
+
+  GSM_SetDefaultSMSData(SMS);
+
+  EncodeUDHHeader(SMS->UDH, UDHType);
+  SMS->UDHType=UDHType;
+
+  switch (UDHType) {
+    case GSM_EnableVoice:
+    case GSM_DisableVoice:
+    case GSM_EnableEmail:
+    case GSM_DisableEmail:
+    case GSM_EnableFax:
+    case GSM_DisableFax:
+      SMS->Class=1;
+      SMS->Coding=Coding;
+      break;
+    case GSM_NoUDH:
+    case GSM_ConcatenatedMessages:
+    case GSM_VoidSMS:
+    case GSM_HangSMS:
+    case GSM_BugSMS:
+    case GSM_PhonebookUDH:
+    case GSM_CalendarNoteUDH: //class=1?
+      SMS->Class=-1;
+      SMS->Coding=Coding;
+      break;
+    case GSM_OpLogo:
+    case GSM_CallerIDLogo:
+    case GSM_RingtoneUDH:
+    case GSM_WAPBookmarkUDH:
+    case GSM_WAPBookmarkUDHLong:
+    case GSM_WAPSettingsUDH:
+    case GSM_ProfileUDH:
+      SMS->Class=1;
+      SMS->Coding=GSM_Coding_8bit;
+      break;
+    default:
+      fprintf(stderr,_("Error in makesinglepartsms !\n\n\n"));
+  }
+
+  current=cur;
+
+  smsudhlength=0;
+  if (UDHType!=GSM_NoUDH)
+    smsudhlength=SMS->UDH[0]+1;
+
+  j=0;
+  switch (SMS->Coding) {
+    case GSM_Coding_8bit:
+      j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength);     //max=140
+      break;
+    case GSM_Coding_Default:
+      j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength)*8/7; //max=160
+      break;
+    case GSM_Coding_Unicode:
+      j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength)/2;   //max=70
+      break;
+  }
+  if (current>j) current=j;
+
+  memcpy(SMS->MessageText,MessageBuffer,current);    
+  SMS->MessageText[current]=0;
+  SMS->Length=current;
+
+  return current;
+}
+
+void GSM_MakeMultiPartSMS2(GSM_MultiSMSMessage *SMS,
+    unsigned char *MessageBuffer,int MessageLength, GSM_UDH UDHType, GSM_Coding_Type Coding){
+
+  int i=0,j,pos=0,current=0;
+
+  for (i=0;i<4;i++) {  
+    if (pos==MessageLength) break;
+
+    current=MessageLength-pos;
+
+    pos=pos+GSM_MakeSinglePartSMS2(&SMS->SMS[i],MessageBuffer+pos,current,UDHType,Coding);
+  }
+
+  for (j=0;j<i;j++)
+  {
+    switch (UDHType) {
+      case GSM_ProfileUDH:
+      case GSM_WAPBookmarkUDHLong:
+      case GSM_WAPSettingsUDH:
+      case GSM_CalendarNoteUDH:
+      case GSM_CalendarNoteUDH2:
+      case GSM_PhonebookUDH:
+        SMS->SMS[j].UDH[10]=i;
+        SMS->SMS[j].UDH[11]=j+1;
+        break;
+      case GSM_ConcatenatedMessages:
+        SMS->SMS[j].UDH[4]=i;
+        SMS->SMS[j].UDH[5]=j+1;
+        break;
+    default:
+      break;
+    }
+  }
+
+  SMS->number=i;
+}
diff --git a/common/misc.c b/common/misc.c
new file mode 100644 (file)
index 0000000..34d81b7
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <string.h>\r
+#include <ctype.h>\r
+#include <time.h>\r
+
+#ifndef WIN32
+  #include <sys/types.h>
+  #include <sys/stat.h>
+  #include <stdlib.h>
+  #include <fcntl.h>
+  #include <signal.h>
+  #include <unistd.h>
+  #include <errno.h>
+#endif\r
+\r
+#include "misc.h"\r
+#include "gsm-common.h"\r
+
+#ifndef HAVE_TIMEOPS
+
+/* FIXME: I have timersub defined in sys/time.h :-( PJ
+   FIXME: Jano wants this function too... PJ
+
+int timersub(struct timeval *a, struct timeval *b, struct timeval *result) {
+  do {
+    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;
+    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;
+    if ((result)->tv_usec < 0) {
+      --(result)->tv_sec;
+      (result)->tv_usec += 1000000;
+    }
+  } while (0);
+}
+*/
+
+#endif
+
+int GetLine(FILE *File, char *Line, int count) {
+
+  char *ptr;
+
+  if (fgets(Line, count, File)) {
+    ptr=Line+strlen(Line)-1;
+
+    while ( (*ptr == '\n' || *ptr == '\r') && ptr>=Line) *ptr--='\0';
+
+    return strlen(Line);
+  } else return -1;
+}
+
+/*
+ * like atoi, but of a non-null-terminated string of a specified portion
+ */
+int mem_to_int(const char str[], int len)
+{
+  char aux[81];
+
+  strncpy(aux, str, len);
+  aux[len]=0;
+  return( atoi(aux) );
+} 
+
+/*
+ * make hexdump of Message
+ */
+#ifdef DEBUG
+void hexdump(u16 MessageLength, u8 *MessageBuffer)
+{
+  int count;
+  int n=0;
+  char string1[80]="";
+  char string2[80]="";
+  char hex1[10];
+  char hex2[10];
+  for (count = 0; count < MessageLength; count ++)
+  {
+    n++;
+
+    switch (MessageBuffer[count]) {
+      case 0x09:
+        sprintf(hex1,"%02x  ",MessageBuffer[count]);
+        strcpy(hex2,".");
+        break;
+      default:
+        if (isprint(MessageBuffer[count]))
+          sprintf(hex1,"%02x%c ",MessageBuffer[count],MessageBuffer[count]);
+        else
+          sprintf(hex1,"%02x  ",MessageBuffer[count]);
+
+        if (isprint(MessageBuffer[count])) sprintf(hex2,"%c",MessageBuffer[count]);
+                                      else strcpy(hex2,".");
+        break;
+    }
+
+    if ( n!=15 && count != MessageLength-1 ) hex1[3]='|';
+    strcat(string1,hex1);
+    strcat(string2,hex2);
+    if ( n==15 || count == MessageLength-1 )
+    {      
+      fprintf(stdout,"%-60s%03x %s\n",string1,count+1,string2);
+      strcpy(string1,"");
+      strcpy(string2,"");
+      n=0;
+    }
+  }//for count
+
+  if (n!=0) fprintf (stdout,_("\n")); 
+  fflush(stdout);
+}
+
+void txhexdump(u16 MessageLength, u8 *MessageBuffer)
+{ 
+  int count;
+  int n=0;
+  for (count = 0; count < MessageLength; count ++)
+   {
+    n++;
+    fprintf(stdout,_("%02x"),MessageBuffer[count]);
+    switch (MessageBuffer[count]) {
+      case 0x09:
+        fprintf(stdout,_(" |"));
+        break;
+      default:
+        if (isprint(MessageBuffer[count])) fprintf(stdout, _("%c|"),MessageBuffer[count]);
+                                      else fprintf(stdout,_(" |"));
+        break;
+    }
+
+    if (n==18)
+    { 
+      fprintf (stdout,_("\n"));
+      n=0;
+    }
+   }//for count
+
+  if (n!=0) fprintf (stdout,_("\n")); 
+
+  fflush(stdout);
+}
+#endif
+
+#ifndef WIN32
+
+#define max_buf_len 128
+#define lock_path "/var/lock/LCK.."
+
+/* Lock the device. Return allocated string with a lock name */
+char *lock_device(const char* port)
+{
+       char *lock_file = NULL;
+       char buffer[max_buf_len];
+       char *aux = rindex(port, '/');
+       int fd, len = strlen(aux) + strlen(lock_path);
+
+       memset(buffer, 0, sizeof(buffer));
+       lock_file = calloc(len + 1, 1);
+       if (!lock_file) {
+               fprintf(stderr, _("Cannot lock device\n"));
+               return NULL;
+       }
+       /* I think we don't need to use strncpy, as we should have enough
+        * buffer due to strlen results
+        */
+       strcpy(lock_file, lock_path);
+       strcat(lock_file, aux);
+
+       /* Check for the stale lockfile.
+        * The code taken from minicom by Miquel van Smoorenburg */
+       if ((fd = open(lock_file, O_RDONLY)) >= 0) {
+               char buf[max_buf_len];
+               int pid, n = 0;
+
+               n = read(fd, buf, sizeof(buf) - 1);
+               close(fd);
+               if (n > 0) {
+                       pid = -1;
+                       if (n == 4)
+                               /* Kermit-style lockfile. */
+                               pid = *(int *)buf;
+                       else {
+                               /* Ascii lockfile. */
+                               buf[n] = 0;
+                               sscanf(buf, "%d", &pid);
+                       }
+                       if (pid > 0 && kill((pid_t)pid, 0) < 0 && errno == ESRCH) {
+                               fprintf(stderr, _("Lockfile is stale. Overriding it..\n"));
+                               sleep(1);
+                               unlink(lock_file);
+                       } else
+                               n = 0;
+               }
+               if (n == 0) {
+                       free(lock_file);
+                       fprintf(stderr, _("Device is already locked.\n"));
+                       return NULL;
+               }
+       }
+
+       /* Try to create a new file, with 0644 mode */
+       fd = open(lock_file, O_CREAT | O_EXCL, 0644);
+       if (fd == -1) {
+               free(lock_file);
+               fprintf(stderr, _("Cannot lock device\n"));
+               return NULL;
+       }
+       sprintf(buffer, "%10ld gnokii\n", (long)getpid());
+       write(fd, buffer, strlen(buffer));
+       close(fd);
+       return lock_file;
+}
+
+/* Removes lock and frees memory */
+bool unlock_device(char *lock_file)
+{
+       int err;
+
+       if (!lock_file) {
+               fprintf(stderr, _("Cannot unlock device\n"));
+               return false;
+       }
+       err = unlink(lock_file);
+       free(lock_file);
+       return (err + 1);
+}
+#endif /* WIN32 */
diff --git a/config/config.guess b/config/config.guess
new file mode 100755 (executable)
index 0000000..6012b39
--- /dev/null
@@ -0,0 +1,1298 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+#   Free Software Foundation, Inc.
+
+timestamp='2001-07-12'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# Please send patches to <config-patches@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int dummy(){}" > $dummy.c ;
+       for c in cc gcc c89 ; do
+         ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+         if test $? = 0 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       rm -f $dummy.c $dummy.o $dummy.rel ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # Netbsd (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       # Determine the machine/vendor (is the vendor relevant).
+       case "${UNAME_MACHINE}" in
+           amiga) machine=m68k-unknown ;;
+           arm32) machine=arm-unknown ;;
+           atari*) machine=m68k-atari ;;
+           sun3*) machine=m68k-sun ;;
+           mac68k) machine=m68k-apple ;;
+           macppc) machine=powerpc-apple ;;
+           hp3[0-9][05]) machine=m68k-hp ;;
+           ibmrt|romp-ibm) machine=romp-ibm ;;
+           *) machine=${UNAME_MACHINE}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE}" in
+           i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit 0 ;;
+    alpha:OSF1:*:*)
+       if test $UNAME_RELEASE = "V4.0"; then
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+       fi
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       cat <<EOF >$dummy.s
+       .data
+\$Lformat:
+       .byte 37,100,45,37,120,10,0     # "%d-%x\n"
+
+       .text
+       .globl main
+       .align 4
+       .ent main
+main:
+       .frame \$30,16,\$26,0
+       ldgp \$29,0(\$27)
+       .prologue 1
+       .long 0x47e03d80 # implver \$0
+       lda \$2,-1
+       .long 0x47e20c21 # amask \$2,\$1
+       lda \$16,\$Lformat
+       mov \$0,\$17
+       not \$1,\$18
+       jsr \$26,printf
+       ldgp \$29,0(\$26)
+       mov 0,\$16
+       jsr \$26,exit
+       .end main
+EOF
+       eval $set_cc_for_build
+       $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+       if test "$?" = 0 ; then
+               case `./$dummy` in
+                       0-0)
+                               UNAME_MACHINE="alpha"
+                               ;;
+                       1-0)
+                               UNAME_MACHINE="alphaev5"
+                               ;;
+                       1-1)
+                               UNAME_MACHINE="alphaev56"
+                               ;;
+                       1-101)
+                               UNAME_MACHINE="alphapca56"
+                               ;;
+                       2-303)
+                               UNAME_MACHINE="alphaev6"
+                               ;;
+                       2-307)
+                               UNAME_MACHINE="alphaev67"
+                               ;;
+               esac
+       fi
+       rm -f $dummy.s $dummy
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit 0 ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit 0;;
+    amiga:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit 0 ;;
+    arc64:OpenBSD:*:*)
+       echo mips64el-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hkmips:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    pmax:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sgi:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit 0 ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit 0 ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit 0 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit 0 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    sun3*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+       echo m88k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit 0 ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       eval $set_cc_for_build
+       $CC_FOR_BUILD $dummy.c -o $dummy \
+         && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && rm -f $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit 0 ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit 0 ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit 0 ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit 0 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit 0 ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit 0 ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit 0 ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               eval $set_cc_for_build
+               $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+               rm -f $dummy.c $dummy
+               echo rs6000-ibm-aix3.2.5
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit 0 ;;
+    *:AIX:*:[45])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+              case "${HPUX_REV}" in
+                11.[0-9][0-9])
+                  if [ -x /usr/bin/getconf ]; then
+                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                        esac ;;
+                    esac
+                  fi ;;
+              esac
+              if [ "${HP_ARCH}" = "" ]; then
+              sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+       eval $set_cc_for_build
+       (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+       if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+       rm -f $dummy.c $dummy
+       fi ;;
+       esac
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    3050*:HI-UX:*:*)
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       eval $set_cc_for_build
+       $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
+       echo unknown-hitachi-hiuxwe2
+       exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit 0 ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit 0 ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit 0 ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit 0 ;;
+    hppa*:OpenBSD:*:*)
+       echo hppa-unknown-openbsd
+       exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+       echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*T3D:*:*:*)
+       echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY-2:*:*:*)
+       echo cray2-cray-unicos
+        exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    hp300:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:FreeBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit 0 ;;
+    *:OpenBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit 0 ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit 0 ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i386-pc-interix
+       exit 0 ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit 0 ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit 0 ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    *:GNU:*:*)
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit 0 ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit 0 ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux
+       exit 0 ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    mips:Linux:*:*)
+       case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
+         big)    echo mips-unknown-linux-gnu && exit 0 ;;
+         little) echo mipsel-unknown-linux-gnu && exit 0 ;;
+       esac
+       ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit 0 ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev67 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit 0 ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit 0 ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       ld_supported_targets=`cd /; ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit 0 ;;               
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit 0 ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit 0 ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+#  if __GLIBC__ >= 2
+    printf ("%s-pc-linux-gnu\n", argv[1]);
+#  else
+    printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+#  endif
+# else
+   printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+  printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+       eval $set_cc_for_build
+       $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
+       test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit 0 ;;
+    i*86:*:5:[78]*)
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit 0 ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit 0 ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit 0 ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit 0 ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit 0 ;;
+    M68*:*:R3V[567]*:*)
+       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit 0 ;;
+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                           # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit 0 ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit 0 ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit 0 ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit 0 ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit 0 ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Darwin:*:*)
+       echo `uname -p`-apple-darwin${UNAME_RELEASE}
+       exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       if test "${UNAME_MACHINE}" = "x86pc"; then
+               UNAME_MACHINE=pc
+       fi
+       echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+       exit 0 ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit 0 ;;
+    NSR-[KW]:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit 0 ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit 0 ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit 0 ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit 0 ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit 0 ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit 0 ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit 0 ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit 0 ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+eval $set_cc_for_build
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit 0 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit 0 ;;
+    c34*)
+       echo c34-convex-bsd
+       exit 0 ;;
+    c38*)
+       echo c38-convex-bsd
+       exit 0 ;;
+    c4*)
+       echo c4-convex-bsd
+       exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.sub b/config/config.sub
new file mode 100755 (executable)
index 0000000..578b302
--- /dev/null
@@ -0,0 +1,1375 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+#   Free Software Foundation, Inc.
+
+timestamp='2001-06-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
+               | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
+               | pyramid | mn10200 | mn10300 | tron | a29k \
+               | 580 | i960 | h8300 \
+               | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
+               | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+               | hppa64 \
+               | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
+               | alphaev6[78] \
+               | we32k | ns16k | clipper | i370 | sh | sh[34] \
+               | powerpc | powerpcle \
+               | 1750a | dsp16xx | pdp10 | pdp11 \
+               | mips16 | mips64 | mipsel | mips64el \
+               | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+               | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+               | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \
+               | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
+               | v850 | c4x \
+               | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
+               | pj | pjl | h8500 | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       # FIXME: clean up the formatting here.
+       vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
+             | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
+             | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
+             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+             | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
+             | xmp-* | ymp-* \
+             | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
+             | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
+             | hppa2.0n-* | hppa64-* \
+             | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
+             | alphaev6[78]-* \
+             | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+             | clipper-* | orion-* \
+             | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \
+             | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
+             | mips16-* | mips64-* | mipsel-* \
+             | mips64el-* | mips64orion-* | mips64orionel-* \
+             | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+             | mipstx39-* | mipstx39el-* | mcore-* \
+             | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
+             | [cjt]90-* \
+             | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+             | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
+             | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       cray2)
+               basic_machine=cray2-cray
+               os=-unicos
+               ;;
+       [cjt]90)
+               basic_machine=${basic_machine}-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mipsel*-linux*)
+               basic_machine=mipsel-unknown
+               os=-linux-gnu
+               ;;
+       mips*-linux*)
+               basic_machine=mips-unknown
+               os=-linux-gnu
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       mmix*)
+               basic_machine=mmix-knuth
+               os=-mmixware
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+        pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | k5 | k6 | nexgen)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2)
+               basic_machine=i686-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sparclite-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=t3e-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       windows32)
+               basic_machine=i386-pc
+               os=-windows32-msvcrt
+               ;;
+       xmp)
+               basic_machine=xmp-cray
+               os=-unicos
+               ;;
+        xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       mips)
+               if [ x$os = x-linux-gnu ]; then
+                       basic_machine=mips-unknown
+               else
+                       basic_machine=mips-mips
+               fi
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh3 | sh4)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv9 | sparcv9b)
+               basic_machine=sparc-sun
+               ;;
+        cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       c4x*)
+               basic_machine=c4x-none
+               os=-coff
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto*)
+               os=-nto-qnx
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+       pdp10-*)
+               os=-tops20
+               ;;
+        pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+        *-gould)
+               os=-sysv
+               ;;
+        *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+        *-sgi)
+               os=-irix
+               ;;
+        *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxsim* | -vxworks*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755 (executable)
index 0000000..398a88e
--- /dev/null
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       :
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+               chmodcmd=""
+       else
+               instcmd=$mkdirprog
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               :
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               :
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               :
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+       '
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               :
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               :
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..87ea315
--- /dev/null
@@ -0,0 +1,528 @@
+dnl
+dnl  Makefile for the GNOKII tool suite.
+dnl 
+dnl  Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+dnl                2000 Karel Zak, Pawe³ Kot
+dnl
+dnl  $Id$
+dnl
+
+AC_INIT(gnokii/gnokii.c)
+
+AC_CONFIG_AUX_DIR(config)
+
+AC_CANONICAL_SYSTEM
+AC_PREFIX_DEFAULT("/usr/local")
+
+dnl ======================== Default setting
+CFLAGS="-O2 -Wall"
+ALL_LINGUAS="cs de et fi nl sk pl it"
+
+dnl ======================== Checks for programs.
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_LEX
+AC_PATH_PROG(RM, rm, no)
+AC_PATH_PROG(FIND, find, no)
+AC_CHECK_PROGS(MAKE, gmake make)
+AC_PROG_INSTALL
+
+dnl Let us have $prefix variable aviable here
+test x"$prefix" = xNONE && prefix="$ac_default_prefix"
+
+AC_ARG_ENABLE(debug, 
+       [  --enable-debug          compile with debug code],
+       [ CFLAGS="-g -Wall"
+         AC_DEFINE(DEBUG)
+         debug="yes" ],
+       [ debug="no"  ]
+)
+
+AC_ARG_ENABLE(xdebug,
+       [  --enable-xdebug         compile with xdebug code],
+       [ AC_DEFINE(XDEBUG)
+         xdebug="yes" ],
+       [ xdebug="no"  ]
+)
+
+AC_ARG_ENABLE(rlpdebug, 
+       [  --enable-rlpdebug       compile with RLP debug code],
+       [ AC_DEFINE(RLP_DEBUG)
+         rlpdebug="yes" ],
+       [ rlpdebug="no"  ]
+)
+
+dnl ======================== NLS support
+
+LIBS=""
+NLS_LIBS=""
+NLS_CFLAGS=""
+
+AC_ARG_WITH(libintl,
+       [  --with-libintl=DIR      specifies the base NLS],
+       [ if test "x$withval" = "xyes"; then
+               AC_MSG_WARN(Usage is --with-libintl=DIR)
+         else
+               NLS_LIBS="-L$withval/lib"
+               NLS_CFLAGS="-I$withval/include"
+         fi
+       ]
+)
+
+AC_ARG_ENABLE(nls,
+       [  --disable-nls           do not use NLS],
+       [ USE_NLS=$enableval ],
+       [ USE_NLS=yes ]
+)
+
+if test "$USE_NLS" = "yes"; then
+       AC_PROG_MAKE_SET
+       AC_CHECK_HEADERS(locale.h)
+       AC_CHECK_FUNCS(setlocale)
+       AC_SUBST(HAVE_LOCALE_H)  
+
+       CPPFLAGS="$CPPFLAGS $NLS_CFLAGS"
+       AC_TRY_CPP([#include <libintl.h>],
+                  [ AC_DEFINE(HAVE_LIBINTL_H)
+                    AC_MSG_RESULT([checking for libintl.h... yes]) ],
+                  [ AC_MSG_WARN(not found header file: libintl.h !!!)
+                    USE_NLS=no ]
+       )
+fi
+
+if test "$USE_NLS" = "yes"; then
+       AC_CHECK_FUNC(gettext,
+                     AC_DEFINE(HAVE_LIBINTL),
+                     AC_CHECK_LIB(intl, gettext,
+                                  [ NLS_LIBS="$NLS_LIBS -lintl"
+                                    AC_DEFINE(HAVE_LIBINTL) ],
+                                  [ AC_MSG_WARN(not found library: intl !!!)
+                                    USE_NLS=no ],
+                                  $NLS_LIBS
+                     )
+       )
+fi
+
+if test "$USE_NLS" = "yes"; then
+
+       AC_SUBST(HAVE_LIBINTL_H)
+       AC_SUBST(HAVE_LIBINTL)
+
+       dnl Handle localedir
+       LOCALEDIR='${prefix}/share/locale'
+       AC_ARG_WITH(locale-dir,
+                   [  --with-locale-dir=DIR   Location of the locale file(s)
+                       [PREFIX/share/locale]],
+                   [ if test x$withval = xyes; then
+                       AC_MSG_WARN(Usage is: --with-locale-dir=basedir)
+                     else
+                       if test x$withval = xno; then
+                               AC_MSG_WARN(Usage is: --with-locale-dir=basedir)
+                       else
+                               LOCALEDIR=$withval
+                       fi
+                     fi
+                   ]
+       )
+       AC_SUBST(LOCALEDIR)
+
+       AC_PATH_PROG(MSGFMT, msgfmt, $MSGFMT)
+       if test -n "$MSGFMT"; then
+               AC_CHECK_FUNCS(dcgettext)
+               AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+               AC_PATH_PROG(XGETTEXT, xgettext, $XGETTEXT)
+               AC_PATH_PROG(MSGMERGE, msgmerge, $MSGMERGE)
+
+               dnl Test whether we really found GNU xgettext.
+               if test -n "$XGETTEXT"; then
+                       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+                               : ;
+                       else
+                               AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it])
+                               XGETTEXT=""
+                       fi
+               fi
+
+               dnl We add another test for comparing GNU xgettext with openwin xgettext
+               if test -n "$XGETTEXT"; then
+                       if $XGETTEXT --help > /dev/null 2> /dev/null; then
+                               : ;
+                       else
+                               AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it])
+                               XGETTEXT=""
+                       fi
+               fi
+
+               dnl Test whether we really found GNU msgfmt.
+               if test -n "$MSGFMT"; then
+                       if $MSGFMT < /dev/null 2> /dev/null; then
+                               AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; NLS will not be installed])
+                               MSGFMT=""
+                       fi
+               fi
+
+               AC_TRY_LINK(,
+                           [ extern int _nl_msg_cat_cntr;
+                             return _nl_msg_cat_cntr],
+                           [ CATOBJEXT=.gmo
+                             DATADIRNAME=share],  
+                           [ CATOBJEXT=.mo
+                             DATADIRNAME=lib]
+               )
+               INSTOBJEXT=.mo
+       fi
+
+       if test -n "$ALL_LINGUAS"; then
+               for lang in $ALL_LINGUAS; do
+                       CATALOGS="$CATALOGS $lang$CATOBJEXT"
+               done
+       fi
+       AC_SUBST(CATALOGS)
+       AC_SUBST(CATOBJEXT)
+       AC_SUBST(INSTOBJEXT)
+       AC_SUBST(DATADIRNAME)
+fi
+
+dnl don't use NLS, when there is no gettext installed
+if test x"$MSGFMT" = x; then
+       USE_NLS=no
+fi
+
+if test x"$USE_NLS" = xyes; then
+       AC_DEFINE(USE_NLS)
+fi
+
+dnl ======================== Checks for libraries.
+
+AC_ARG_WITH(libpthread, 
+   [  --with-libpthread=DIR   specifies the base libpthread],
+   [ if test x$withval = xyes
+     then 
+      AC_MSG_WARN(Usage is: --with-libpthread=DIR)
+     else
+      PTHREAD_LIBS="-L$withval/lib/"
+      PTHREAD_CFLAGS="-I$withval/include/"
+     fi
+   ]
+)
+
+dnl Check for libpthread
+PTHREAD_LIBS_SAVE="$PTHREAD_LIBS"
+PTHREAD_LIBS=error
+AC_CHECK_LIB(pthread, pthread_attr_init, [
+                      PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT"
+                      PTHREAD_LIBS="$PTHREAD_LIBS_SAVE -lpthread" ])
+
+dnl FIXME: test this on *BSD and report results immediatelly to the ml please
+dnl If it is not found, try to check for c_r (on FreeBSD)
+if test "x$PTHREAD_LIBS" = xerror; then
+  AC_CHECK_LIB(c_r, pthread_attr_init, [
+                    PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE"
+                    PTHREAD_LIBS="-pthread" ])
+fi
+
+dnl FIXME: do we really test here if libc contains this function?
+if test "x$PTHREAD_LIBS" = xerror; then
+   AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="",
+      AC_MSG_ERROR(not found library: pthread !!!))
+fi
+
+dnl The following is taken from inn sources
+AC_MSG_CHECKING(for tm_gmtoff in struct tm)
+AC_TRY_LINK([#include <time.h>],
+        [struct tm t; t.tm_gmtoff = 0],
+        [AC_MSG_RESULT(yes)
+         AC_DEFINE(HAVE_TM_GMTON)],
+        [AC_MSG_RESULT(no)])
+
+dnl The following is taken from inn sources
+AC_MSG_CHECKING(for timersub)
+AC_TRY_LINK([#include <sys/time.h>],
+        [timersub(NULL, NULL, NULL)],
+        [AC_DEFINE(HAVE_TIMEOPS)
+         AC_DEFINE(HAVE_TIMEOPS)
+         AC_MSG_RESULT(yes)],
+        [AC_MSG_RESULT(no)])
+
+have_termios="no"
+dnl Checking for setspeed in termios.h
+AC_MSG_CHECKING(for cfsetspeed in termios.h)
+AC_TRY_LINK([#include <termios.h>],
+        [struct termios t; cfsetspeed(&t, B9600);],
+        [AC_DEFINE(HAVE_CFSETSPEED)
+         have_termios="yes"
+         AC_MSG_RESULT(yes)],
+        AC_MSG_RESULT(no))
+
+if test $have_termios = "no"; then
+   AC_MSG_CHECKING(for cfsetispeed and cfsetospeed in termios.h)
+   AC_TRY_LINK([#include <termios.h>],
+               [struct termios t; cfsetispeed(&t, B9600);  cfsetospeed(&t, B9600);],
+               [AC_DEFINE(HAVE_CFSETISPEED)
+                AC_DEFINE(HAVE_CFSETOSPEED)
+                have_termios="yes"
+                AC_MSG_RESULT(yes)],
+               [AC_MSG_RESULT(no)])
+
+   if test $have_termios = "no"; then
+      AC_MSG_CHECKING(for c_ispeed and c_ospeed in struct termios)
+      AC_TRY_LINK([#include <termios.h>],
+                  [struct termios t; t.c_iflag = B9600; t.c_oflag = B9600;],
+                  [AC_DEFINE(HAVE_TERMIOS_CSPEED)
+                   AC_MSG_RESULT(yes)],
+                  [AC_MSG_RESULT(no)])
+   fi
+fi
+
+dnl ======================== Checks for getopt_long support 
+
+AC_CHECK_HEADER(getopt.h, ,
+      [CFLAGS="$CFLAGS -I../getopt"])
+
+AC_ARG_WITH(gnugetopt,
+   [  --with-getopt=DIR       specifies the getopt library location directory],
+   [ if test x$withval=yes; then
+        AC_MSG_WARN(Usage is: --with-getopt=DIR) 
+     else
+        GETOPT_LIBS="-L$withval"
+     fi
+   ]
+)
+
+OWN_GETOPT=""
+AC_CHECK_FUNC(getopt_long, , [
+        LIBS="$LIBS $GETOPT_LIBS"
+           AC_CHECK_LIB(gnugetopt, getopt_long, LIBS="$LIBS -lgnugetopt",
+            OWN_GETOPT="1")])
+
+dnl ======================== Checks for X base support 
+
+if test "$no_x" = yes -o "$with_x" = "no"; then
+   x_support="no"
+   XPM_CFLAGS=""
+   XPM_LIBS=""
+   GTK_CFLAGS=""
+   GTK_LIBS=""
+else
+   AC_PATH_X
+   CPPFLAGS="$CPPFLAGS -I$x_includes"
+   AC_CHECK_HEADERS(X11/xpm.h,
+                    [ XPMINC="yes" ],
+                    [ XPMINC="no" ])
+
+   if test "x$XPMINC" = "xno"; then
+      x_support="no"
+      XPM_CFLAGS=""
+      XPM_LIBS=""
+      GTK_CFLAGS=""
+      GTK_LIBS=""
+      AC_MSG_WARN(Cannot find include X11/xpm.h)
+      AC_MSG_WARN(Disabling xgnokii.)
+   elif test "x$x_libraries" = "xNONE"; then
+      x_support="no"
+      XPM_CFLAGS=""
+      XPM_LIBS=""
+      GTK_CFLAGS=""
+      GTK_LIBS=""
+      AC_MSG_WARN(Cannot find library libX11.)
+      AC_MSG_WARN(Disabling xgnokii.)
+   else
+      AC_CHECK_LIB(Xpm, XpmWriteFileFromXpmImage,
+            [ XPM_CFLAGS="-I$x_includes" XPM_LIBS="-L$x_libraries -lXpm -lX11"
+              AC_DEFINE(XPM) ],
+            AC_MSG_WARN(Cannot found library libXpm - disabling XPM support.),
+            [ -L$x_libraries -lX11 ]
+      )
+
+      AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config, no)
+      if test "$GTK_CONFIG" = no; then
+         x_support="no"
+         GTK_CFLAGS=""
+         GTK_LIBS=""
+         AC_MSG_WARN(Cannot find gtk-config.)
+         AC_MSG_WARN(Disabling xgnokii.)
+      else
+         GTK_CFLAGS=`$GTK_CONFIG --cflags`
+         GTK_LIBS=`$GTK_CONFIG --libs`
+         x_support="yes"   
+
+         XGNOKIIDIR='${prefix}/share'
+         XGNOKIIPATH=${prefix}/share
+         AC_ARG_WITH(xgnokiidir,
+            [  --with-xgnokiidir=DIR   specifies the base for xgnokii],
+            [ if test x$withval = xyes; then 
+                 AC_MSG_WARN(Usage is: --with-xgnokiilib=DIR)
+              else
+                 XGNOKIIDIR="$withval"
+                 XGNOKIIPATH="$withval"
+              fi
+            ]
+         )
+      fi
+   fi
+fi
+
+dnl ======================== Check for libsocket
+AC_CHECK_LIB(socket, socket)
+
+dnl ======================== Additional switches
+
+AC_ARG_ENABLE(security, 
+   [  --enable-security       enable all security features ],
+   [ AC_DEFINE(SECURITY)
+     security="yes" ],
+   [ security="no"  ]
+)
+
+AC_ARG_ENABLE(win32, 
+   [  --enable-win32          if you want win32 suport ],
+   [ AC_DEFINE(WIN32)
+     win32="-DWIN32" ],
+   [ win32=""]
+)
+
+AC_CHECK_FUNC(grantpt,
+   [ AC_TRY_RUN([
+#define  _XOPEN_SOURCE 500
+
+#include <features.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main()
+{
+       char *name = NULL;
+        int master, err;
+
+        master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK);
+        if (master >= 0) {
+                err = grantpt(master);
+                err = err || unlockpt(master);
+                if (!err) {
+                        name = ptsname(master);
+                } else {
+                        exit(-1);
+                }
+        } else {
+               exit(-1);
+       }
+       close(master);
+       exit(0);
+}
+                ],
+                AC_DEFINE(USE_UNIX98PTYS),
+                AC_MSG_WARN("No unix98ptys"),
+               AC_MSG_WARN("Ensure to disable unix98ptys when crosscompiling"))
+   ]
+)
+
+dnl ======================== Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h)
+
+dnl ======================== Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+dnl ======================== Checks for library functions.
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_MEMCMP
+AC_TYPE_SIGNAL
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS(mktime select strdup strstr strtol strtok strsep snprintf)
+
+CFLAGS="$CFLAGS $NLS_CFLAGS"
+LIBS="$LIBS $NLS_LIBS"
+
+PACKAGE=gnokii
+XPACKAGE=xgnokii
+VERSION=`cat VERSION`
+XVERSION=`cat xgnokii/VERSION`
+HAVE_XGNOKII=$x_support
+
+case "$INSTALL" in
+  'config/install-sh -c') INSTALL=`pwd`/$INSTALL
+   ;;
+esac
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+AC_SUBST(SHELL)
+case "$build_os" in
+  solaris*) SHELL=/bin/ksh
+   ;;
+esac
+
+AC_CONFIG_HEADER(include/config.h)
+
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_SUBST(XVERSION)
+AC_SUBST(XPACKAGE)
+AC_SUBST(XGNOKIIDIR)
+AC_SUBST(XGNOKIIPATH)
+AC_SUBST(exec_prefix)
+AC_SUBST(USE_NLS)
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(GTK_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(XPM_CFLAGS)
+AC_SUBST(XPM_LIBS)
+AC_SUBST(OWN_GETOPT)
+AC_SUBST(USE_UNIX98PTYS)
+AC_SUBST(HAVE_XGNOKII)
+
+AC_OUTPUT(
+   include/config.h.in
+   Makefile.global
+   po/Makefile.in
+   packaging/RedHat/gnokii.spec
+   packaging/Slackware/SlackBuild,
+   [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile]
+   )
+
+
+dnl ======================== Final report
+
+echo "
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999-2000  The Gnokii Development Team.
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+  See file COPYING for more details.
+
+    Host system:        $host_os
+    Gnokii version:     $VERSION
+    Xgnokii version:    $XVERSION
+    X (GTK) support:    $x_support
+    Debug:              $debug
+    XDebug:             $xdebug
+    RLPDebug:           $rlpdebug
+    NLS:                $USE_NLS
+    Security:           $security
+    Win32:              $win32 
+    Prefix:             $prefix
+
+  Type '${MAKE}' for compilation or '${MAKE} makelib' when want to compile
+  all binaries with one shared library
+  
+  After it '${MAKE} install', '${MAKE} install-suid', '${MAKE} install-strip'
+  or '${MAKE} install-ss' to install gnokii.
+"
diff --git a/getopt/Makefile b/getopt/Makefile
new file mode 100644 (file)
index 0000000..037269d
--- /dev/null
@@ -0,0 +1,28 @@
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+CFLAGS += $(PTHREAD_CFLAGS)
+LDFLAGS =
+
+SRCS = getopt.c getopt1.c
+OBJS = getopt.o getopt1.o
+
+all: libgetopt.a
+
+libgetopt.a: $(OBJS)
+       $(AR) cq $@ $(OBJS)
+
+depend dep:
+       $(CPP) -M $(CFLAGS) $(SRCS) > depend
+
+distclean clean::
+       $(RM) $(OBJS) *~ depend *.a
+
+#####
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+.PHONY: all clean dep depend
diff --git a/getopt/getopt.c b/getopt/getopt.c
new file mode 100644 (file)
index 0000000..7b4f938
--- /dev/null
@@ -0,0 +1,753 @@
+/* Getopt for GNU.
+   NOTE: getopt is now part of the C library, so if you don't know what
+   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+   before changing it!
+
+   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94
+       Free Software Foundation, Inc.
+
+This file is part of the GNU C Library.  Its master source is NOT part of
+the C library, however.  The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+\f
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+   Ditto for AIX 3.2 and <stdlib.h>.  */
+#ifndef _NO_PROTO
+#define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+   reject `defined (const)'.  */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+   contain conflicting prototypes for getopt.  */
+#include <stdlib.h>
+#endif /* GNU C library.  */
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+   but it behaves differently for the user, since it allows the user
+   to intersperse the options with the other arguments.
+
+   As `getopt' works, it permutes the elements of ARGV so that,
+   when it is done, all the options precede everything else.  Thus
+   all application programs are extended to handle flexible argument order.
+
+   Setting the environment variable POSIXLY_CORRECT disables permutation.
+   Then the behavior is completely standard.
+
+   GNU application programs can use a third alternative mode in which
+   they can distinguish the relative order of options and other arguments.  */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+char *optarg = NULL;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+/* XXX 1003.2 says this must be 1 before any call.  */
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+   in which the last option character we returned was found.
+   This allows us to pick up the scan where we left off.
+
+   If this is zero, or a null string, it means resume the scan
+   by advancing to the next ARGV-element.  */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+   This must be initialized on some systems to avoid linking in the
+   system's own getopt implementation.  */
+
+int optopt = '?';
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+   If the caller did not specify anything,
+   the default is REQUIRE_ORDER if the environment variable
+   POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+   REQUIRE_ORDER means don't recognize them as options;
+   stop option processing when the first non-option is seen.
+   This is what Unix does.
+   This mode of operation is selected by either setting the environment
+   variable POSIXLY_CORRECT, or using `+' as the first character
+   of the list of option characters.
+
+   PERMUTE is the default.  We permute the contents of ARGV as we scan,
+   so that eventually all the non-options are at the end.  This allows options
+   to be given in any order, even with programs that were not written to
+   expect this.
+
+   RETURN_IN_ORDER is an option available to programs that were written
+   to expect options and other ARGV-elements in any order and that care about
+   the ordering of the two.  We describe each non-option ARGV-element
+   as if it were the argument of an option with character code 1.
+   Using `-' as the first character of the list of option characters
+   selects this mode of operation.
+
+   The special argument `--' forces an end of option-scanning regardless
+   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
+   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
+
+static enum
+{
+  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable.  */
+static char *posixly_correct;
+\f
+#ifdef __GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+   because there are many ways it can cause trouble.
+   On some systems, it contains special magic macros that don't work
+   in GCC.  */
+#include <string.h>
+#define        my_index        strchr
+#else
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+char *getenv ();
+
+static char *
+my_index (str, chr)
+     const char *str;
+     int chr;
+{
+  while (*str)
+    {
+      if (*str == chr)
+       return (char *) str;
+      str++;
+    }
+  return 0;
+}
+
+/* If using GCC, we can safely declare strlen this way.
+   If not using GCC, it is ok not to declare it.  */
+#ifdef __GNUC__
+/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+   That was relevant to code that was here before.  */
+#if !defined (__STDC__) || !__STDC__
+/* gcc with -traditional declares the built-in strlen to return int,
+   and has done so at least since version 2.4.5. -- rms.  */
+extern int strlen (const char *);
+#endif /* not __STDC__ */
+#endif /* __GNUC__ */
+
+#endif /* not __GNU_LIBRARY__ */
+\f
+/* Handle permutation of arguments.  */
+
+/* Describe the part of ARGV that contains non-options that have
+   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+   `last_nonopt' is the index after the last of them.  */
+
+static int first_nonopt;
+static int last_nonopt;
+
+/* Exchange two adjacent subsequences of ARGV.
+   One subsequence is elements [first_nonopt,last_nonopt)
+   which contains all the non-options that have been skipped so far.
+   The other is elements [last_nonopt,optind), which contains all
+   the options processed since those non-options were skipped.
+
+   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   the new indices of the non-options in ARGV after they are moved.  */
+
+static void
+exchange (argv)
+     char **argv;
+{
+  int bottom = first_nonopt;
+  int middle = last_nonopt;
+  int top = optind;
+  char *tem;
+
+  /* Exchange the shorter segment with the far end of the longer segment.
+     That puts the shorter segment into the right place.
+     It leaves the longer segment in the right place overall,
+     but it consists of two parts that need to be swapped next.  */
+
+  while (top > middle && middle > bottom)
+    {
+      if (top - middle > middle - bottom)
+       {
+         /* Bottom segment is the short one.  */
+         int len = middle - bottom;
+         register int i;
+
+         /* Swap it with the top part of the top segment.  */
+         for (i = 0; i < len; i++)
+           {
+             tem = argv[bottom + i];
+             argv[bottom + i] = argv[top - (middle - bottom) + i];
+             argv[top - (middle - bottom) + i] = tem;
+           }
+         /* Exclude the moved bottom segment from further swapping.  */
+         top -= len;
+       }
+      else
+       {
+         /* Top segment is the short one.  */
+         int len = top - middle;
+         register int i;
+
+         /* Swap it with the bottom part of the bottom segment.  */
+         for (i = 0; i < len; i++)
+           {
+             tem = argv[bottom + i];
+             argv[bottom + i] = argv[middle + i];
+             argv[middle + i] = tem;
+           }
+         /* Exclude the moved top segment from further swapping.  */
+         bottom += len;
+       }
+    }
+
+  /* Update records for the slots the non-options now occupy.  */
+
+  first_nonopt += (optind - last_nonopt);
+  last_nonopt = optind;
+}
+
+/* Initialize the internal data when the first call is made.  */
+
+static const char *
+_getopt_initialize (optstring)
+     const char *optstring;
+{
+  /* Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  first_nonopt = last_nonopt = optind = 1;
+
+  nextchar = NULL;
+
+  posixly_correct = getenv ("POSIXLY_CORRECT");
+
+  /* Determine how to handle the ordering of options and nonoptions.  */
+
+  if (optstring[0] == '-')
+    {
+      ordering = RETURN_IN_ORDER;
+      ++optstring;
+    }
+  else if (optstring[0] == '+')
+    {
+      ordering = REQUIRE_ORDER;
+      ++optstring;
+    }
+  else if (posixly_correct != NULL)
+    ordering = REQUIRE_ORDER;
+  else
+    ordering = PERMUTE;
+
+  return optstring;
+}
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns `EOF'.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return '?' after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return '?'.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+     int argc;
+     char *const *argv;
+     const char *optstring;
+     const struct option *longopts;
+     int *longind;
+     int long_only;
+{
+  optarg = NULL;
+
+  if (optind == 0)
+    optstring = _getopt_initialize (optstring);
+
+  if (nextchar == NULL || *nextchar == '\0')
+    {
+      /* Advance to the next ARGV-element.  */
+
+      if (ordering == PERMUTE)
+       {
+         /* If we have just processed some options following some non-options,
+            exchange them so that the options come first.  */
+
+         if (first_nonopt != last_nonopt && last_nonopt != optind)
+           exchange ((char **) argv);
+         else if (last_nonopt != optind)
+           first_nonopt = optind;
+
+         /* Skip any additional non-options
+            and extend the range of non-options previously skipped.  */
+
+         while (optind < argc
+                && (argv[optind][0] != '-' || argv[optind][1] == '\0'))
+           optind++;
+         last_nonopt = optind;
+       }
+
+      /* The special ARGV-element `--' means premature end of options.
+        Skip it like a null option,
+        then exchange with previous non-options as if it were an option,
+        then skip everything else like a non-option.  */
+
+      if (optind != argc && !strcmp (argv[optind], "--"))
+       {
+         optind++;
+
+         if (first_nonopt != last_nonopt && last_nonopt != optind)
+           exchange ((char **) argv);
+         else if (first_nonopt == last_nonopt)
+           first_nonopt = optind;
+         last_nonopt = argc;
+
+         optind = argc;
+       }
+
+      /* If we have done all the ARGV-elements, stop the scan
+        and back over any non-options that we skipped and permuted.  */
+
+      if (optind == argc)
+       {
+         /* Set the next-arg-index to point at the non-options
+            that we previously skipped, so the caller will digest them.  */
+         if (first_nonopt != last_nonopt)
+           optind = first_nonopt;
+         return EOF;
+       }
+
+      /* If we have come to a non-option and did not permute it,
+        either stop the scan or describe it to the caller and pass it by.  */
+
+      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
+       {
+         if (ordering == REQUIRE_ORDER)
+           return EOF;
+         optarg = argv[optind++];
+         return 1;
+       }
+
+      /* We have found another option-ARGV-element.
+        Skip the initial punctuation.  */
+
+      nextchar = (argv[optind] + 1
+                 + (longopts != NULL && argv[optind][1] == '-'));
+    }
+
+  /* Decode the current option-ARGV-element.  */
+
+  /* Check whether the ARGV-element is a long option.
+
+     If long_only and the ARGV-element has the form "-f", where f is
+     a valid short option, don't consider it an abbreviated form of
+     a long option that starts with f.  Otherwise there would be no
+     way to give the -f short option.
+
+     On the other hand, if there's a long option "fubar" and
+     the ARGV-element is "-fu", do consider that an abbreviation of
+     the long option, just like "--fu", and not "-f" with arg "u".
+
+     This distinction seems to be the most useful approach.  */
+
+  if (longopts != NULL
+      && (argv[optind][1] == '-'
+         || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+    {
+      char *nameend;
+      const struct option *p;
+      const struct option *pfound = NULL;
+      int exact = 0;
+      int ambig = 0;
+      int indfound = 0;
+      int option_index;
+
+      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+       /* Do nothing.  */ ;
+
+      /* Test all long options for either exact match
+        or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name; p++, option_index++)
+       if (!strncmp (p->name, nextchar, nameend - nextchar))
+         {
+           if (nameend - nextchar == strlen (p->name))
+             {
+               /* Exact match found.  */
+               pfound = p;
+               indfound = option_index;
+               exact = 1;
+               break;
+             }
+           else if (pfound == NULL)
+             {
+               /* First nonexact match found.  */
+               pfound = p;
+               indfound = option_index;
+             }
+           else
+             /* Second or later nonexact match found.  */
+             ambig = 1;
+         }
+
+      if (ambig && !exact)
+       {
+         if (opterr)
+           fprintf (stderr, "%s: option `%s' is ambiguous\n",
+                    argv[0], argv[optind]);
+         nextchar += strlen (nextchar);
+         optind++;
+         return '?';
+       }
+
+      if (pfound != NULL)
+       {
+         option_index = indfound;
+         optind++;
+         if (*nameend)
+           {
+             /* Don't test has_arg with >, because some C compilers don't
+                allow it to be used on enums.  */
+             if (pfound->has_arg)
+               optarg = nameend + 1;
+             else
+               {
+                 if (opterr)
+                   {
+                     if (argv[optind - 1][1] == '-')
+                       /* --option */
+                       fprintf (stderr,
+                                "%s: option `--%s' doesn't allow an argument\n",
+                                argv[0], pfound->name);
+                     else
+                       /* +option or -option */
+                       fprintf (stderr,
+                            "%s: option `%c%s' doesn't allow an argument\n",
+                            argv[0], argv[optind - 1][0], pfound->name);
+                   }
+                 nextchar += strlen (nextchar);
+                 return '?';
+               }
+           }
+         else if (pfound->has_arg == 1)
+           {
+             if (optind < argc)
+               optarg = argv[optind++];
+             else
+               {
+                 if (opterr)
+                   fprintf (stderr, "%s: option `%s' requires an argument\n",
+                            argv[0], argv[optind - 1]);
+                 nextchar += strlen (nextchar);
+                 return optstring[0] == ':' ? ':' : '?';
+               }
+           }
+         nextchar += strlen (nextchar);
+         if (longind != NULL)
+           *longind = option_index;
+         if (pfound->flag)
+           {
+             *(pfound->flag) = pfound->val;
+             return 0;
+           }
+         return pfound->val;
+       }
+
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+        or the option starts with '--' or is not a valid short
+        option, then it's an error.
+        Otherwise interpret it as a short option.  */
+      if (!long_only || argv[optind][1] == '-'
+         || my_index (optstring, *nextchar) == NULL)
+       {
+         if (opterr)
+           {
+             if (argv[optind][1] == '-')
+               /* --option */
+               fprintf (stderr, "%s: unrecognized option `--%s'\n",
+                        argv[0], nextchar);
+             else
+               /* +option or -option */
+               fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+                        argv[0], argv[optind][0], nextchar);
+           }
+         nextchar = (char *) "";
+         optind++;
+         return '?';
+       }
+    }
+
+  /* Look at and handle the next short option-character.  */
+
+  {
+    char c = *nextchar++;
+    char *temp = my_index (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*nextchar == '\0')
+      ++optind;
+
+    if (temp == NULL || c == ':')
+      {
+       if (opterr)
+         {
+           if (posixly_correct)
+             /* 1003.2 specifies the format of this message.  */
+             fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c);
+           else
+             fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c);
+         }
+       optopt = c;
+       return '?';
+      }
+    if (temp[1] == ':')
+      {
+       if (temp[2] == ':')
+         {
+           /* This is an option that accepts an argument optionally.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               optind++;
+             }
+           else
+             optarg = NULL;
+           nextchar = NULL;
+         }
+       else
+         {
+           /* This is an option that requires an argument.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               /* If we end this ARGV-element by taking the rest as an arg,
+                  we must advance to the next element now.  */
+               optind++;
+             }
+           else if (optind == argc)
+             {
+               if (opterr)
+                 {
+                   /* 1003.2 specifies the format of this message.  */
+                   fprintf (stderr, "%s: option requires an argument -- %c\n",
+                            argv[0], c);
+                 }
+               optopt = c;
+               if (optstring[0] == ':')
+                 c = ':';
+               else
+                 c = '?';
+             }
+           else
+             /* We already incremented `optind' once;
+                increment it again when taking next ARGV-elt as argument.  */
+             optarg = argv[optind++];
+           nextchar = NULL;
+         }
+      }
+    return c;
+  }
+}
+
+int
+getopt (argc, argv, optstring)
+     int argc;
+     char *const *argv;
+     const char *optstring;
+{
+  return _getopt_internal (argc, argv, optstring,
+                          (const struct option *) 0,
+                          (int *) 0,
+                          0);
+}
+
+#endif /* _LIBC or not __GNU_LIBRARY__.  */
+\f
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+   the above definition of `getopt'.  */
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+
+      c = getopt (argc, argv, "abc:d:0123456789");
+      if (c == EOF)
+       break;
+
+      switch (c)
+       {
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+         if (digit_optind != 0 && digit_optind != this_option_optind)
+           printf ("digits occur in two different argv-elements.\n");
+         digit_optind = this_option_optind;
+         printf ("option %c\n", c);
+         break;
+
+       case 'a':
+         printf ("option a\n");
+         break;
+
+       case 'b':
+         printf ("option b\n");
+         break;
+
+       case 'c':
+         printf ("option c with value `%s'\n", optarg);
+         break;
+
+       case '?':
+         break;
+
+       default:
+         printf ("?? getopt returned character code 0%o ??\n", c);
+       }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+       printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/getopt/getopt.h b/getopt/getopt.h
new file mode 100644 (file)
index 0000000..f3696d9
--- /dev/null
@@ -0,0 +1,133 @@
+/* Declarations for getopt.
+   Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
+
+This file is part of the GNU C Library.  Its master source is NOT part of
+the C library, however.  The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument         (or 0) if the option does not take an argument,
+   required_argument   (or 1) if the option requires an argument,
+   optional_argument   (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+#if defined (__STDC__) && __STDC__
+  const char *name;
+#else
+  char *name;
+#endif
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+#define        no_argument             0
+#define required_argument      1
+#define optional_argument      2
+
+#if defined (__STDC__) && __STDC__
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in stdlib.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int argc, char *const *argv, const char *shortopts);
+#else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+#endif /* __GNU_LIBRARY__ */
+extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+                       const struct option *longopts, int *longind);
+extern int getopt_long_only (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind);
+
+/* Internal only.  Users should not call this directly.  */
+extern int _getopt_internal (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind,
+                            int long_only);
+#else /* not __STDC__ */
+extern int getopt ();
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GETOPT_H */
diff --git a/getopt/getopt1.c b/getopt/getopt1.c
new file mode 100644 (file)
index 0000000..de8e2ad
--- /dev/null
@@ -0,0 +1,184 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+   Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
+       Free Software Foundation, Inc.
+
+This file is part of the GNU C Library.  Its master source is NOT part of
+the C library, however.  The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+\f
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "getopt.h"
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+   reject `defined (const)'.  */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#else
+char *getenv ();
+#endif
+
+#ifndef        NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (argc, argv, options, long_options, opt_index)
+     int argc;
+     char *const *argv;
+     const char *options;
+     const struct option *long_options;
+     int *opt_index;
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+   If an option that starts with '-' (not '--') doesn't match a long option,
+   but does match a short option, it is parsed as a short option
+   instead.  */
+
+int
+getopt_long_only (argc, argv, options, long_options, opt_index)
+     int argc;
+     char *const *argv;
+     const char *options;
+     const struct option *long_options;
+     int *opt_index;
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+
+#endif /* _LIBC or not __GNU_LIBRARY__.  */
+\f
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+      int option_index = 0;
+      static struct option long_options[] =
+      {
+       {"add", 1, 0, 0},
+       {"append", 0, 0, 0},
+       {"delete", 1, 0, 0},
+       {"verbose", 0, 0, 0},
+       {"create", 0, 0, 0},
+       {"file", 1, 0, 0},
+       {0, 0, 0, 0}
+      };
+
+      c = getopt_long (argc, argv, "abc:d:0123456789",
+                      long_options, &option_index);
+      if (c == EOF)
+       break;
+
+      switch (c)
+       {
+       case 0:
+         printf ("option %s", long_options[option_index].name);
+         if (optarg)
+           printf (" with arg %s", optarg);
+         printf ("\n");
+         break;
+
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+         if (digit_optind != 0 && digit_optind != this_option_optind)
+           printf ("digits occur in two different argv-elements.\n");
+         digit_optind = this_option_optind;
+         printf ("option %c\n", c);
+         break;
+
+       case 'a':
+         printf ("option a\n");
+         break;
+
+       case 'b':
+         printf ("option b\n");
+         break;
+
+       case 'c':
+         printf ("option c with value `%s'\n", optarg);
+         break;
+
+       case 'd':
+         printf ("option d with value `%s'\n", optarg);
+         break;
+
+       case '?':
+         break;
+
+       default:
+         printf ("?? getopt returned character code 0%o ??\n", c);
+       }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+       printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/gnokii/Makefile b/gnokii/Makefile
new file mode 100644 (file)
index 0000000..2018e7d
--- /dev/null
@@ -0,0 +1,84 @@
+
+#
+# Makefile for the GNOKII tool suite.
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+
+CFLAGS += $(PTHREAD_CFLAGS)
+LDLIBS += $(PTHREAD_LIBS)
+
+ifdef XPM_LIBS
+    LDLIBS += $(XPM_LIBS)
+endif
+
+OBJS = gnokii.o
+
+ifdef OWN_GETOPT
+    OBJS += $(TOPDIR)/getopt/libgetopt.a
+endif
+
+all: gnokii
+
+gnokii: $(OBJS) $(TOPDIR)/common/COMMON.o $(TOPDIR)/common/gsm-filetypes.o
+       $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
+
+$(TOPDIR)/common/COMMON.o: 
+       $(MAKE) -C $(TOPDIR)/common COMMON.o
+
+$(TOPDIR)/common/gsm-filetypes.o: 
+       $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o
+
+$(TOPDIR)/getopt/libgetopt.a:
+       $(MAKE) -C $(TOPDIR)/getopt
+
+$(TOPDIR)/common/libmygnokii.so:
+       $(MAKE) -C $(TOPDIR)/common makelib
+       
+gnokiilib: $(OBJS) $(TOPDIR)/common/libmygnokii.so
+       $(CC) $(LDFLAGS) $(TARGET_ARCH) $(OBJS) -L$(TOPDIR)/common -lmygnokii $(LOADLIBES) $(LDLIBS) -o $@
+
+makelib: gnokiilib
+
+clean:
+       $(RM) $(OBJS) *~ depend gnokii gnokiilib *.exe core *.bak
+
+install: all
+       $(INSTALL) -d $(bindir)
+       $(INSTALL) gnokii $(bindir)
+       $(INSTALL) gnokiilib $(bindir)/gnokii
+
+install-strip: all
+       $(INSTALL) -d $(bindir)
+       $(INSTALL) -s gnokii $(bindir)
+       $(INSTALL) -s gnokiilib $(bindir)/gnokii
+       @echo "done"
+
+install-suid: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -d $(bindir)
+       $(INSTALL) -o root -g gnokii -m 0750 gnokii $(bindir)
+       $(INSTALL) -o root -g gnokii -m 0750 gnokiilib $(bindir)/gnokii
+       @echo
+
+install-ss: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -d $(bindir)
+       $(INSTALL) -o root -g gnokii -m 0750 -s gnokii $(bindir)
+       $(INSTALL) -o root -g gnokii -m 0750 -s gnokiilib $(bindir)/gnokii
+       @echo
+
+depend dep:
+       $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+.PHONY: all install clean dep depend
diff --git a/gnokii/gnokii.c b/gnokii/gnokii.c
new file mode 100644 (file)
index 0000000..9daceb9
--- /dev/null
@@ -0,0 +1,8748 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Mainline code for gnokii utility.  Handles command line parsing and
+  reading/writing phonebook entries and other stuff.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+#include <sys/stat.h>
+
+#ifndef VC6
+  #if defined(__svr4__) || defined(__FreeBSD__)
+  #  include <strings.h>       /* for bzero */
+  #endif
+#else
+  /* for VC6 make scripts save VERSION constant in mversion.h file */
+  #include "mversion.h"
+#endif
+
+#ifdef WIN32
+
+  #include <windows.h>
+
+  #include "misc_win32.h"
+  #include "getopt.h"
+
+  #define DEV_CONSOLE "CON:"
+
+#else
+
+  #include <unistd.h>
+  #include <termios.h>
+  #include <fcntl.h>
+  #include <sys/types.h>
+  #include <sys/time.h>
+  #include <getopt.h>
+
+  #define DEV_CONSOLE "/dev/tty"
+#endif
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "gsm-networks.h"
+#include "gsm-ringtones.h"
+#include "gsm-bitmaps.h"
+#include "gsm-wap.h"
+#include "gsm-sms.h"
+#include "gsm-datetime.h"
+#include "gsm-phonebook.h"
+#include "gsm-calendar.h"
+#include "gsm-coding.h"
+#include "newmodules/n6110.h"
+#include "files/cfgreader.h"
+#include "files/gsm-filetypes.h"
+#include "gnokii.h"
+
+#ifdef USE_NLS
+  #include <locale.h>
+#endif
+
+char *model;           /* Model from .gnokiirc file. */
+char *Port;            /* Port from .gnokiirc file */
+char *Initlength;      /* Init length from .gnokiirc file */
+char *Connection;      /* Connection type from .gnokiirc file */
+char *SynchronizeTime; /* If we set date and time from computer to phone (from .gnokiirc file) */
+char *BinDir;          /* Binaries directory from .gnokiirc file - not used here yet */
+
+GSM_SMSMessage SMS[4];
+  
+char *GetProfileCallAlertString(int code) {
+
+  switch (code) {
+    case PROFILE_CALLALERT_RINGING     : return "Ringing";
+    case PROFILE_CALLALERT_ASCENDING   : return "Ascending";
+    case PROFILE_CALLALERT_RINGONCE    : return "Ring once";
+    case PROFILE_CALLALERT_BEEPONCE    : return "Beep once";
+    case PROFILE_CALLALERT_CALLERGROUPS: return "Caller groups";
+    case PROFILE_CALLALERT_OFF         : return "Off";
+    default                            : return "Unknown";
+  }
+}
+
+char *GetProfileVolumeString(int code) {
+
+  switch (code) {
+    case PROFILE_VOLUME_LEVEL1 : return "Level 1";
+    case PROFILE_VOLUME_LEVEL2 : return "Level 2";
+    case PROFILE_VOLUME_LEVEL3 : return "Level 3";
+    case PROFILE_VOLUME_LEVEL4 : return "Level 4";
+    case PROFILE_VOLUME_LEVEL5 : return "Level 5";
+    default                    : return "Unknown";
+  }
+}
+
+char *GetProfileKeypadToneString(int code) {
+
+  switch (code) {
+    case PROFILE_KEYPAD_OFF    : return "Off";
+    case PROFILE_KEYPAD_LEVEL1 : return "Level 1";
+    case PROFILE_KEYPAD_LEVEL2 : return "Level 2";
+    case PROFILE_KEYPAD_LEVEL3 : return "Level 3";
+    default                    : return "Unknown";
+  }
+}
+
+char *GetProfileMessageToneString(int code) {
+
+  switch (code) {
+    case PROFILE_MESSAGE_NOTONE    : return "No tone";
+    case PROFILE_MESSAGE_STANDARD  : return "Standard";
+    case PROFILE_MESSAGE_SPECIAL   : return "Special";
+    case PROFILE_MESSAGE_BEEPONCE  : return "Beep once";
+    case PROFILE_MESSAGE_ASCENDING : return "Ascending";
+    default                        : return "Unknown";
+  }
+}
+
+char *GetProfileWarningToneString(int code) {
+
+  switch (code) {
+    case PROFILE_WARNING_OFF : return "Off";
+    case PROFILE_WARNING_ON  : return "On";
+    default                  : return "Unknown";
+  }
+}
+
+char *GetProfileOnOffString(int code) {
+
+  switch (code) {
+    case 0x00 : return "Off";
+    case 0x01 : return "On";
+    default   : return "Unknown";
+  }
+}
+
+static char *GetProfileVibrationString(int code)
+{
+       switch (code) {
+       case PROFILE_VIBRATION_OFF:     return "Off";
+       case PROFILE_VIBRATION_ON:      return "On";
+       case PROFILE_VIBRATION_FIRST:   return "Vibrate first";
+       default:                        return "Unknown";
+       }
+}
+
+char BufferProfileGroups[90];
+
+char *GetProfileCallerGroups(int code) 
+{
+  static char az_group_name[5][MAX_BITMAP_TEXT_LENGTH];
+  static bool enteronce=false;
+  register int i;
+  GSM_Bitmap bitmap;
+
+  if( code == PROFILE_CALLERGROUPS_ALL )
+       return _("All calls alert");
+
+  if( !enteronce ) {
+    for(i=0;i<5;i++) az_group_name[i][0]='\0';
+    enteronce=true;
+  }
+
+  BufferProfileGroups[0]=0;
+    
+  for(i=0;i<5;i++)
+  {
+    int code2test;
+    char z_gtype[12];
+
+    code2test=(i==0) ? 1 : 2<<(i-1);
+
+    if( code & code2test )
+    {
+      if (!strcmp(az_group_name[i],"")) 
+      {
+        if (GetModelFeature (FN_CALLERGROUPS)!=0) {
+          bitmap.type=GSM_CallerLogo;
+          bitmap.number=i;
+          strcpy(z_gtype,_("unknown"));
+          if (GSM->GetBitmap(&bitmap)==GE_NONE)
+            strcpy( az_group_name[i], bitmap.text );
+        }
+        if ((!strcmp(az_group_name[i],""))) {
+            switch(i) {
+            case 0:strcpy(az_group_name[i],_("Family"));break;
+            case 1:strcpy(az_group_name[i],_("VIP"));break;
+            case 2:strcpy(az_group_name[i],_("Friends"));break;
+            case 3:strcpy(az_group_name[i],_("Colleagues"));break;
+            case 4:strcpy(az_group_name[i],_("Other"));break;
+            default:break;
+          }
+        }
+      }
+      strcpy(z_gtype,az_group_name[i]);
+
+      if( strlen(BufferProfileGroups) ) strcat(BufferProfileGroups,"+");
+      strcat(BufferProfileGroups, z_gtype);
+    }
+    
+  }
+
+  return BufferProfileGroups;
+}
+
+char *print_error(GSM_Error e)
+{
+
+//     case GE_DEVICEOPENFAILED:         return "Couldn't open specified serial device.";
+//     case GE_UNKNOWNMODEL:             return "Model specified isn't known/supported.";
+//     case GE_NOLINK:                   return "Couldn't establish link with phone.";
+//     case GE_TRYAGAIN:                 return "Try again.";
+//     case GE_INVALIDSMSLOCATION:       return "Invalid SMS location.";
+//     case GE_INVALIDPHBOOKLOCATION:    return "Invalid phonebook location.";
+//     case GE_INVALIDMEMORYTYPE:        return "Invalid type of memory.";
+//     case GE_INVALIDSPEEDDIALLOCATION: return "Invalid speed dial location.";
+//     case GE_INVALIDCALNOTELOCATION:   return "Invalid calendar note location.";
+//     case GE_INVALIDDATETIME:          return "Invalid date, time or alarm specification.";
+//     case GE_EMPTYSMSLOCATION:         return "SMS location is empty.";
+//     case GE_PHBOOKNAMETOOLONG:        return "Phonebook name is too long.";
+//     case GE_PHBOOKNUMBERTOOLONG:      return "Phonebook number is too long.";
+//     case GE_PHBOOKWRITEFAILED:        return "Phonebook write failed.";
+//     case GE_SMSSENDOK:                return "SMS was send correctly.";
+//     case GE_SMSSENDFAILED:            return "SMS send fail.";
+//     case GE_SMSTOOLONG:               return "SMS message too long.";
+//     case GE_NONEWCBRECEIVED:          return "Attempt to read CB when no new CB received";
+//     case GE_INTERNALERROR:            return "Problem occured internal to model specific code.";
+//     case GE_NOTSUPPORTED:             return "Function not supported by the phone";
+//     case GE_BUSY:                     return "Command is still being executed.";
+//     case GE_USERCANCELED:             return "User has cancelled the action.";   
+//     case GE_UNKNOWN:                  return "Unknown error - well better than nothing!!";
+//     case GE_MEMORYFULL:               return "Memory is full";
+//     case GE_LINEBUSY:                 return "Outgoing call requested reported line busy";
+//     case GE_NOCARRIER:                return "No Carrier error during data call setup ?";
+
+       switch (e) {
+       case GE_NONE:                     return "No error, done OK";
+       case GE_INVALIDSECURITYCODE:      return "Invalid Security code.";
+       case GE_NOTIMPLEMENTED:           return "Called command is not implemented for the used model. Please contact marcin-wiacek@topnet.pl, if you want to help in implementing it";
+       case GE_TIMEOUT:                  return "Command timed out.";
+       case GE_CANTOPENFILE:             return "Can't open file with bitmap/ringtone";
+       case GE_SUBFORMATNOTSUPPORTED:    return "Subformat of file not supported";
+       case GE_WRONGNUMBEROFCOLORS:      return "Wrong number of colors in specified bitmap file (only 2 colors files supported)";
+       case GE_WRONGCOLORS:              return "Wrong colors in bitmap file";
+       case GE_INVALIDIMAGESIZE:         return "Invalid size of bitmap (in file, sms etc.)";
+       case GE_INVALIDFILEFORMAT:        return "Invalid format of file";
+        case GE_TOOSHORT:                 return "File too short";
+        case GE_INSIDEBOOKMARKSMENU:      return "Inside WAP Bookmarks menu. Please leave it and try again";
+        case GE_INVALIDBOOKMARKLOCATION:  return "Invalid or empty WAP bookmark location";
+        case GE_INSIDESETTINGSMENU:       return "Inside WAP Settings menu. Please leave it and try again";
+        case GE_INVALIDSETTINGSLOCATION:  return "Invalid or empty WAP settings location";
+       default:                          return "Unknown error.";
+       }
+}
+
+
+GSM_Error GSM_ReadRingtoneFileOnConsole(char *FileName, GSM_Ringtone *ringtone)
+{
+  GSM_Error error;
+  
+  error=GSM_ReadRingtoneFile(FileName, ringtone);
+  
+  switch (error) {
+    case GE_CANTOPENFILE:
+    case GE_SUBFORMATNOTSUPPORTED:
+      fprintf(stderr, _("File \"%s\"\nError: %s\n"),FileName,print_error(error));
+      break;
+    default:
+      break;
+  }
+  
+  return error;
+}
+
+GSM_Error GSM_SaveRingtoneFileOnConsole(char *FileName, GSM_Ringtone *ringtone)
+{
+  int confirm,confirm2;
+  char ans[4];
+  struct stat buf;
+  GSM_Error error;
+
+  /* Ask before overwriting */
+  while (stat(FileName, &buf) == 0) {
+  
+    confirm=-1;
+    confirm2=-1;
+    
+    while (confirm < 0) {
+      fprintf(stderr, _("Saving ringtone. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "),FileName);
+      GetLine(stdin, ans, 4);
+      if (!strcmp(ans, "O") || !strcmp(ans, "o")) confirm = 1;
+      if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm = 2;
+      if (!strcmp(ans, "S") || !strcmp(ans, "s")) return GE_USERCANCELED;
+    }  
+    if (confirm==1) break;
+    if (confirm==2) {
+      while (confirm2 < 0) {
+        fprintf(stderr, _("Enter name of new file: "));
+        GetLine(stdin, FileName, 50);
+        if (&FileName[0]==0) return GE_USERCANCELED;
+       confirm2=1;
+      }  
+    }
+  }
+  
+  error=GSM_SaveRingtoneFile(FileName,ringtone);
+  
+  switch (error) {
+    case GE_CANTOPENFILE:        fprintf(stderr, _("Failed to write file \"%s\"\n"),FileName);
+                                 break;
+    default:                     break;
+  }
+  
+  return error;
+}
+
+GSM_Error GSM_ReadBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap)
+{
+  GSM_Error error;
+  
+  error=GSM_ReadBitmapFile(FileName, bitmap);
+
+  switch (error) {
+    case GE_CANTOPENFILE:
+    case GE_WRONGNUMBEROFCOLORS:
+    case GE_WRONGCOLORS:        
+    case GE_INVALIDFILEFORMAT:  
+    case GE_SUBFORMATNOTSUPPORTED:
+    case GE_TOOSHORT:
+    case GE_INVALIDIMAGESIZE:
+      fprintf(stderr, _("File \"%s\"\nError: %s\n"),FileName,print_error(error));
+      break;
+    default: 
+      break;
+  }
+  
+  return error;
+}
+
+GSM_Error GSM_SaveBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap)
+{
+  int confirm,confirm2;
+  char ans[4];
+  struct stat buf;
+  GSM_Error error;
+
+  /* Ask before overwriting */
+  while (stat(FileName, &buf) == 0) {
+  
+    confirm=-1;
+    confirm2=-1;
+    
+    while (confirm < 0) {
+      fprintf(stderr, _("Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "),FileName);
+      GetLine(stdin, ans, 4);
+      if (!strcmp(ans, "O") || !strcmp(ans, "o")) confirm = 1;
+      if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm = 2;
+      if (!strcmp(ans, "S") || !strcmp(ans, "s")) return GE_USERCANCELED;
+    }  
+    if (confirm==1) break;
+    if (confirm==2) {
+      while (confirm2 < 0) {
+        fprintf(stderr, _("Enter name of new file: "));
+        GetLine(stdin, FileName, 50);
+        if (&FileName[0]==0) return GE_USERCANCELED;
+       confirm2=1;
+      }  
+    }
+  }
+  
+  error=GSM_SaveBitmapFile(FileName,bitmap);
+  
+  switch (error) {
+    case GE_CANTOPENFILE:        fprintf(stderr, _("Failed to write file \"%s\"\n"),FileName);
+                                 break;
+    default:                     break;
+  }
+  
+  return error;
+}
+
+/* mode == 0 -> overwrite
+ * mode == 1 -> ask
+ * mode == 2 -> append
+ */
+int GSM_SaveTextFileOnConsole(char *FileName, char *text, int mode)
+{
+  int confirm, confirm2;
+  char ans[4];
+  struct stat buf;
+  int error;
+
+  /* Ask before overwriting */
+  if (mode==1) {
+    while (stat(FileName, &buf) == 0 && mode==1) {
+      
+      confirm=-1;
+      confirm2=-1;
+      
+      while (confirm < 0) {
+        fprintf(stderr, _("File \"%s\" exists. (O)verwrite, (a)ppend, create (n)ew or (s)kip ? "),FileName);
+        GetLine(stdin, ans, 4);
+        if (!strcmp(ans, "O") || !strcmp(ans, "o")) {
+          mode = 0;
+          confirm = 1;
+        }
+        if (!strcmp(ans, "A") || !strcmp(ans, "a")) {
+         mode = 2;
+          confirm = 1;
+        }
+        if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm=2;
+        if (!strcmp(ans, "S") || !strcmp(ans, "s")) return -1;
+      }
+      
+      if (confirm==2) {
+        while (confirm2 < 0) {
+          fprintf(stderr, _("Enter name of new file: "));
+          GetLine(stdin, FileName, 50);
+          if (&FileName[0]==0) return -1;
+         mode=1;
+         confirm2=1;
+        }  
+      }
+      
+    }  
+  }
+  
+  error=GSM_SaveTextFile(FileName, text, mode);
+  
+  switch (error) {
+    case -1: fprintf(stderr, _("Failed to write file \"%s\"\n"),  FileName);
+             break;
+    default: break;
+  }
+
+  return error;
+}
+
+int GSM_SendMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[],
+                                  bool unicode, bool profile, bool scale) {
+
+  int w,i;
+  
+  struct option options[] = {
+             { "smscno",       required_argument, NULL, '1'},
+             { "smsc",         required_argument, NULL, '2'},
+            { "name",         required_argument, NULL, '3'},
+             { "unicode",      no_argument,       NULL, '4'},
+             { "profilestyle", no_argument,       NULL, '5'},
+            { "scale",        no_argument,       NULL, '6'},
+             { NULL,           0,                 NULL,  0 }
+  };
+
+  GSM_Error error;  
+
+  for (w=0;w<MultiSMS->number;w++) {
+
+    if (argnum!=0) {
+      optarg = NULL;
+  
+      /* We check optional parameters from ... */
+      optind = argnum;
+
+      while ((i = getopt_long(argc, argv, "v:ds", options, NULL)) != -1) {
+        switch (i) {
+
+          case '1': /* SMSC number */
+            MultiSMS->SMS[w].MessageCenter.No = 0;
+            strcpy(MultiSMS->SMS[w].MessageCenter.Number,optarg);
+            break;
+
+          case '2': /* SMSC number index in phone memory */
+            MultiSMS->SMS[w].MessageCenter.No = atoi(optarg);
+
+            if (MultiSMS->SMS[w].MessageCenter.No < 1 || MultiSMS->SMS[w].MessageCenter.No > 5) {
+             fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+              GSM->Terminate();
+              return -1;
+           }
+            break;
+
+         case '3': /* Receiver/recipient */
+           strncpy(MultiSMS->SMS[w].Destination,optarg,11); break;
+
+         case '4': /* Unicode */
+           if (unicode) break;
+
+         case '5': /* Profile */
+           if (profile) break;
+
+         case '6': /* Scale */
+           if (scale) break;
+
+          case 'v': /* Set validaty of SMS */
+            MultiSMS->SMS[w].Validity = atoi(optarg);
+            break;
+
+          case 'd': /* delivery report */
+            MultiSMS->SMS[w].Type=GST_DR;
+            break;     
+
+          case 's': /* Set replying via the same SMSC */
+            MultiSMS->SMS[w].ReplyViaSameSMSC = true; break;
+
+        default:
+          fprintf(stderr,_("Unknown option number %i\n"),argc);
+          GSM->Terminate();    
+          return -1;
+
+        }
+      }
+    }
+
+    error=GSM->SendSMSMessage(&MultiSMS->SMS[w]);
+
+    if (error == GE_SMSSENDOK) {
+      fprintf(stdout, _("SMS %i/%i sent OK !\n"),w+1,MultiSMS->number);
+    } else {
+      fprintf(stdout, _("SMS %i/%i, sending failed (error=%d)\n"),w+1,MultiSMS->number, error);
+    }
+
+  }
+
+  GSM->Terminate();  
+
+  return 0;
+}
+
+int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[],
+                                  bool inter, bool unicode, bool profile, bool scale) {
+
+  int w,i;
+  
+  GSM_SMSMessage SMSold;
+
+  struct option options[] = {
+             { "smscno",       required_argument, NULL, '1'},
+             { "smsc",         required_argument, NULL, '2'},
+            { "name",         required_argument, NULL, '3'},
+             { "unicode",      no_argument,       NULL, '4'},
+             { "profilestyle", no_argument,       NULL, '5'},
+            { "scale",        no_argument,       NULL, '6'},
+             { NULL,           0,                 NULL,  0 }
+  };
+
+  int interactive;
+  int confirm = -1;
+  char ans[8];
+
+  GSM_Error error;  
+
+  interactive = inter;
+
+  for (w=0;w<MultiSMS->number;w++) {
+
+    if (argnum!=0) {
+      optarg = NULL;
+  
+      /* We check optional parameters from ... */
+      optind = argnum;
+
+      while ((i = getopt_long(argc, argv, "risal:", options, NULL)) != -1) {
+        switch (i) {
+
+          case '1': /* SMSC number */
+            MultiSMS->SMS[w].MessageCenter.No = 0;
+            strcpy(MultiSMS->SMS[w].MessageCenter.Number,optarg);
+            break;
+
+          case '2': /* SMSC number index in phone memory */
+            MultiSMS->SMS[w].MessageCenter.No = atoi(optarg);
+
+            if (MultiSMS->SMS[w].MessageCenter.No < 1 || MultiSMS->SMS[w].MessageCenter.No > 5) {
+             fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+              GSM->Terminate();
+              return -1;
+           }
+            break;
+
+         case '3': /* Receiver/recipient */
+           strncpy(MultiSMS->SMS[w].Destination,optarg,11); break;
+
+         case '4': /* Unicode */
+           if (unicode) break;
+
+         case '5': /* Profile */
+           if (profile) break;
+
+         case '6': /* Scale */
+           if (scale) break;
+
+          case 'r': /* mark as read */
+            MultiSMS->SMS[w].Status = GSS_SENTREAD; break;
+
+         case 'i': /* Save into Inbox */
+            MultiSMS->SMS[w].folder = GST_INBOX; break;
+         
+          case 's': /* Set replying via the same SMSC */
+            MultiSMS->SMS[w].ReplyViaSameSMSC = true; break;
+
+          case 'a': /* Ask before overwriting */
+            interactive=true;break;     
+       
+          case 'l': /* Specify location */
+            MultiSMS->SMS[0].Location = atoi(optarg); break;     
+
+        default:
+          fprintf(stderr,_("Unknown option number %i\n"),argc);
+          GSM->Terminate();    
+          return -1;
+        }
+      }
+    }
+
+    if (interactive && MultiSMS->SMS[0].Location!=0 && w==0) {
+      SMSold.Location=MultiSMS->SMS[0].Location;
+      error = GSM->GetSMSMessage(&SMSold);
+      switch (error) {
+        case GE_NONE:
+          fprintf(stderr, _("Message at specified location exists. "));
+          while (confirm < 0) {
+            fprintf(stderr, _("Overwrite? (yes/no) "));
+            GetLine(stdin, ans, 7);
+            if (!strcmp(ans, "yes")) confirm = 1;
+            if (!strcmp(ans, "no")) confirm = 0;
+          }  
+          if (!confirm) { GSM->Terminate(); return 0; }
+          else break;
+        case GE_INVALIDSMSLOCATION:
+          fprintf(stderr, _("Invalid location\n"));
+          GSM->Terminate();
+          return -1;
+        default:
+/* FIXME: Remove this fprintf when the function is thoroughly tested */
+#ifdef DEBUG
+            fprintf(stderr, _("Location %d empty. Saving\n"), SMS[w].Location);
+#endif
+          break;
+      }
+    }
+
+    error=GSM->SaveSMSMessage(&MultiSMS->SMS[w]);
+
+    if (error == GE_NONE)
+      fprintf(stdout, _("SMS %i/%i saved at location %i !\n"),w+1,MultiSMS->number,MultiSMS->SMS[w].MessageNumber);
+    else
+      fprintf(stdout, _("SMS %i/%i saving failed (error=%d, location=%i)\n"), w+1, MultiSMS->number, error,MultiSMS->SMS[w].Location);
+  }
+
+  GSM->Terminate();  
+
+  return 0;
+}
+
+void GSM_PlayRingtoneOnConsole(GSM_Ringtone *ringtone)
+{
+  int i;
+#ifdef VC6
+  char mychar;
+#endif
+
+  for (i=0;i<ringtone->NrNotes;i++) {
+#ifdef VC6
+    if (_kbhit()) {
+      mychar=_getch();
+      break;
+    }
+#endif
+    GSM_PlayOneNote (ringtone->notes[i]);
+  }
+  GSM->PlayTone(255*255,0);
+}
+
+/* This function shows the copyright and some informations usefull for
+   debugging. */
+int version(void)
+{
+
+  fprintf(stdout, _("GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, model, Port);
+
+  return 0;
+}
+
+/* The function usage is only informative - it prints this program's usage and
+   command-line options. */
+
+int usage(void)
+{
+
+  fprintf(stdout, _("   usage: gnokii [--help|--monitor [-noloop|-nl]|--version]\n"
+"          gnokii --getmemory memory_type [start [end]] [-short|-v30|-v21|-v]\n"
+"          gnokii --writephonebook [-i]\n"
+"          gnokii --sendphonebookentry destination memory_type location\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --savephonebookentry memory_type location\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [--name name]\n"
+"          gnokii --getvoicemailbox\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n\n"
+
+"          gnokii --getsms memory_type start [end] [-f file]\n"
+"          gnokii --getsmsstatus\n"
+"          gnokii --getsmsfolders\n"
+"          gnokii --deletesms memory_type start [end]\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [--long n] [-s] [-C n]\n"
+"                 [--enablevoice|--disablevoice|--enablefax|--disablefax|\n"
+"                  --enableemail|--disableemail|--void][--unicode][-v n][-d]\n"
+"          gnokii --savesms destination|\"\" [--smsc \n"
+"                 message_center_number] [--smscno message_center_index]\n"
+"                 [--long n] [-r] [-i] [-s][-C n][-a][-l][F n][--smsname name]\n"
+"                 [--enablevoice|--disablevoice|--enablefax|--disablefax|\n"
+"                  --enableemail|--disableemail|--void|--hang|--bug][--unicode]\n"
+"          gnokii --receivesms\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --renamesmsc number new_name\n\n"
+
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n\n"
+
+"          gnokii --getcalendarnote { start end [-v30|-v10] | --short|-s }\n"
+"          gnokii --writecalendarnote vcardfile number\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --sendcalendarnote destination vcardfile number\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --savecalendarnote vcardfile number\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [--name name]\n\n"
+
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --nm_collect screen1|-d [screen2|-d]...\n"
+"          gnokii --netmonitordata [-S file] [-I file] [-h] [-n n] [-ts n][-tm n]\n"
+"                 [-fs str] [-ls str] FLD1:FLD2:FLDn:... \n"
+"                 (see files netmonitordata_????_??? for details)\n\n"
+
+"          gnokii --bitmapconvert source destination\n"
+"          gnokii --bitmapconvert source destination op|7110op [network code]\n"
+"          gnokii --bitmapconvert source destination caller [caller group number]\n"
+"          gnokii --bitmapconvert source destination\n"
+"                   startup|7110startup|6210startup\n"
+"          gnokii --bitmapconvert source destination picture\n"
+"          gnokii --showbitmap logofile\n"
+"          gnokii --sendlogo op destination logofile network_code\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --sendlogo picture destination logofile text\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d] [--unicode]\n"
+"          gnokii --sendlogo screensaver destination logofile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --sendlogo caller destination logofile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --savelogo op logofile network_code\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+"          gnokii --savelogo picture logofile text\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name] [--unicode]\n"
+"          gnokii --savelogo screensaver logofile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+"          gnokii --savelogo caller logofile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+"          gnokii --setlogo op|7110op [logofile] [network code]\n"
+"          gnokii --setlogo startup|7110startup|6210startup [logofile]\n"
+"          gnokii --setlogo startup 1|2|3\n"
+"          gnokii --setlogo caller [logofile] [caller group number] [group name]\n"
+"          gnokii --setlogo picture [logofile] [number] [text] [sender]\n"
+"          gnokii --setlogo {dealer|text} [text]\n"
+"          gnokii --getlogo op|7110op [logofile] [network code]\n"
+"          gnokii --getlogo startup|7110startup|6210startup [logofile]\n"
+"          gnokii --getlogo caller [logofile][caller group number]\n"
+"          gnokii --getlogo picture [logofile][number]\n"
+"          gnokii --getlogo {dealer|text}\n\n"
+
+"          gnokii --sendringtone destination ringtonefile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d] [--scale] [--profilestyle]\n"
+"          gnokii --saveringtone ringtonefile\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [--name name] [--scale] [--profilestyle]\n"
+"          gnokii --setringtone ringtonefile [location]\n"
+"          gnokii --getringtone ringtonefile [location]\n"
+"          gnokii --ringtoneconvert source destination\n"
+"          gnokii --binringtoneconvert source destination\n"
+"          gnokii --playringtone ringtonefile\n"
+"          gnokii --composer ringtonefile\n"
+"          gnokii --allringtones\n\n"
+
+"          gnokii --getprofile [number]\n"
+"          gnokii --setprofile number feature value\n"
+"          gnokii --sendprofile destination profile_name ringtonefile\n"
+"                 picturefile [--smsc message_center_number]\n"
+"                 [--smscno message_center_index] [-s] [-v n] [-d] [--scale]\n\n"
+
+"          gnokii --reset [soft|hard]\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --cancelcall\n"
+"          gnokii --displayoutput\n"
+"          gnokii --presskeysequence sequence\n"
+"          gnokii --backupsettings file\n"
+"          gnokii --restoresettings file\n"
+"          gnokii --getphoneprofile\n"
+"          gnokii --setphoneprofile feature value\n"
+"          gnokii --getoperatorname\n"
+"          gnokii --setoperatorname code name\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --divert register|enable|query|disable|erasure\n"
+"                 all|busy|noans|outofreach all|voice|fax|data\n"
+"                 [number timeout]\n\n"
+
+"          gnokii --phonetests\n"
+"          gnokii --simlock\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --identify\n\n"
+
+"          gnokii --getwapbookmark location\n"
+"          gnokii --setwapbookmark title url [location]\n"
+"          gnokii --sendwapbookmark location destination\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+"          gnokii --savewapbookmark location\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+"          gnokii --getwapsettings location\n"
+"          gnokii --savewapsettings location\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+"          gnokii --sendwapsettings location destination\n"
+"                 [--smsc message_center_number] [--smscno message_center_index]\n"
+"                 [-s] [-v n] [-d]\n"
+  ));
+
+#ifdef SECURITY
+  fprintf(stdout, _(
+"\n          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+"          gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode\n"
+"          gnokii --geteeprom\n"
+"          gnokii --resetphonesettings\n"
+  ));
+#endif
+
+#ifdef DEBUG
+  fprintf(stdout, _(
+"          gnokii --sniff [port]\n"
+"          gnokii --decodefile file\n"
+  ));
+#endif
+
+  return 0;
+}
+
+/* fbusinit is the generic function which waits for the FBUS link. The limit
+   is 10 seconds. After 10 seconds we quit. */
+
+void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame))
+{
+
+  int count=0;
+  GSM_Error error;
+
+#ifndef WIN32
+  if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+    fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of gnokii (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+  /* Initialise the code for the GSM interface. */     
+  error = GSM_Initialise(model, Port, Initlength, GetConnectionTypeFromString(Connection), rlp_handler, SynchronizeTime);
+
+  if (error != GE_NONE) {
+    fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+    exit(-1);
+  }
+
+  /* First (and important!) wait for GSM link to be active. We allow 10
+     seconds... */
+  while (count++ < 200 && *GSM_LinkOK == false)
+    usleep(50000);
+
+  if (*GSM_LinkOK == false) {
+    fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting.\n"));
+    exit(-1);
+  }  
+}
+
+/* This function checks that the argument count for a given options is withing
+   an allowed range. */
+
+int checkargs(int opt, struct gnokii_arg_len gals[], int argc)
+{
+
+  int i;
+
+  /* Walk through the whole array with options requiring arguments. */
+
+  for(i = 0;!(gals[i].gal_min == 0 && gals[i].gal_max == 0); i++) {
+
+    /* Current option. */
+
+    if(gals[i].gal_opt == opt) {
+
+      /* Argument count checking. */
+
+      if(gals[i].gal_flags == GAL_XOR) {
+       if(gals[i].gal_min == argc || gals[i].gal_max == argc) return 0;
+      }
+      else {
+       if(gals[i].gal_min <= argc && gals[i].gal_max >= argc) return 0;
+      }
+
+      return 1;
+
+    }
+
+  }
+
+  /* We do not have options without arguments in the array, so check them. */
+
+  if (argc==0) return 0;
+          else return 1;
+}
+
+/* Main function - handles command line arguments, passes them to separate
+   functions accordingly. */
+
+int main(int argc, char *argv[])
+{
+
+  int c, i, rc = -1;
+  int nargc = argc-2;
+  char **nargv;
+
+  /* Every option should be in this array. */
+
+  static struct option long_options[] =
+  {
+
+    { "help",               no_argument,       NULL, OPT_HELP             },// Display usage.
+    { "version",            no_argument,       NULL, OPT_VERSION          },// Display version and build information.
+    { "getsmsfolders",      no_argument,       NULL, OPT_GETSMSFOLDERS    },// Gets SMS folders
+    { "getsmsstatus",       no_argument,       NULL, OPT_GETSMSSTATUS     },// Get SMS Folder Status
+    { "identify",           no_argument,       NULL, OPT_IDENTIFY         },// Identify
+    { "pmon",               no_argument,       NULL, OPT_PMON             },// For development purposes: run in passive monitoring mode
+    { "foogle",             no_argument,       NULL, OPT_FOOGLE           },// For development purposes: insert you function calls here
+    { "getdatetime",        no_argument,       NULL, OPT_GETDATETIME      },// Get date and time mode    
+    { "getalarm",           no_argument,       NULL, OPT_GETALARM         },// Get alarm    
+    { "cancelcall",         no_argument,       NULL, OPT_CANCELCALL       },// Cancel Call    
+    { "getdisplaystatus",   no_argument,       NULL, OPT_GETDISPLAYSTATUS },// Get display status mode    
+    { "allringtones",       no_argument,       NULL, OPT_ALLRINGTONES     },/* Displays names of available ringtones */    
+    { "displayoutput",      no_argument,       NULL, OPT_DISPLAYOUTPUT    },/* Show texts from phone's display */
+    { "getphoneprofile",    no_argument,       NULL, OPT_GETPHONEPROFILE  },/* Get/Set phone profile settings */
+    { "getoperatorname",    no_argument,       NULL, OPT_GETOPERATORNAME  },/* Get downloaded operator name */    
+    { "getvoicemailbox",    no_argument,       NULL, OPT_GETVOICEMAILBOX  },/* Gets voice mailbox number */    
+    { "phonetests",         no_argument,       NULL, OPT_PHONETESTS       },
+    { "simlockinfo",        no_argument,       NULL, OPT_SIMLOCKINFO      },    
+    { "receivesms",         no_argument,       NULL, OPT_RECEIVESMS       },    
+    { "setoperatorname",    optional_argument, NULL, OPT_SETOPERATORNAME  },/* Set downloaded operator name */    
+    { "setdatetime",        optional_argument, NULL, OPT_SETDATETIME      },// Set date and time    
+    { "writephonebook",     optional_argument, NULL, OPT_WRITEPHONEBOOK   },// Write phonebook (memory) mode
+    { "reset",              optional_argument, NULL, OPT_RESET            },// Resets the phone
+    { "monitor",            optional_argument, NULL, OPT_MONITOR          },// Monitor mode
+    { "setlogo",            optional_argument, NULL, OPT_SETLOGO          },// Set logo
+    { "getprofile",         optional_argument, NULL, OPT_GETPROFILE       },// Show profile
+    { "setalarm",           required_argument, NULL, OPT_SETALARM         },// Set alarm
+    { "dialvoice",          required_argument, NULL, OPT_DIALVOICE        },// Voice call mode
+    { "getcalendarnote",    required_argument, NULL, OPT_GETCALENDARNOTE  },// Get calendar note mode    
+    { "writecalendarnote",  required_argument, NULL, OPT_WRITECALENDARNOTE},// Write calendar note mode
+    { "sendcalendarnote",   required_argument, NULL, OPT_SENDCALENDARNOTE },
+    { "savecalendarnote",   required_argument, NULL, OPT_SAVECALENDARNOTE },
+    { "sendphonebookentry", required_argument, NULL, OPT_SENDPHONEBOOKENTRY},
+    { "savephonebookentry", required_argument, NULL, OPT_SAVEPHONEBOOKENTRY},
+    { "deletecalendarnote", required_argument, NULL, OPT_DELCALENDARNOTE  },// Delete calendar note mode    
+    { "getmemory",          required_argument, NULL, OPT_GETMEMORY        },// Get memory mode
+    { "getspeeddial",       required_argument, NULL, OPT_GETSPEEDDIAL     },// Get speed dial mode
+    { "setspeeddial",       required_argument, NULL, OPT_SETSPEEDDIAL     },// Set speed dial mode
+    { "getsms",             required_argument, NULL, OPT_GETSMS           },// Get SMS message mode
+    { "deletesms",          required_argument, NULL, OPT_DELETESMS        },// Delete SMS message mode
+    { "sendsms",            required_argument, NULL, OPT_SENDSMS          },// Send SMS message mode
+    { "savesms",            required_argument, NULL, OPT_SAVESMS          },// Save SMS message mode
+    { "sendlogo",           required_argument, NULL, OPT_SENDLOGO         },// Send logo as SMS message mode
+    { "savelogo",           required_argument, NULL, OPT_SAVELOGO         },// Save logo on SIM
+    { "sendringtone",       required_argument, NULL, OPT_SENDRINGTONE     },// Send ringtone as SMS message
+    { "saveringtone",       required_argument, NULL, OPT_SAVERINGTONE     },// Saves ringtone on SIM
+    { "setringtone",        required_argument, NULL, OPT_SETRINGTONE      },// Set ringtone    
+    { "getringtone",        required_argument, NULL, OPT_GETRINGTONE      },// Get bin/normal ringtone    
+    { "presskeysequence",   required_argument, NULL, OPT_PRESSKEYSEQUENCE },/* Presses keys in phone's display */
+    { "getsmsc",            required_argument, NULL, OPT_GETSMSC          },// Get SMS center number mode
+    { "renamesmsc",         required_argument, NULL, OPT_RENAMESMSC       },// Rename SMSC
+    { "netmonitor",         required_argument, NULL, OPT_NETMONITOR       },// NetMonitor mode
+    { "senddtmf",           required_argument, NULL, OPT_SENDDTMF         },// Send DTMF sequence
+    { "getlogo",            required_argument, NULL, OPT_GETLOGO          },// Get logo
+    { "setprofile",         required_argument, NULL, OPT_SETPROFILE       },// Set profile feature
+    { "sendprofile",        required_argument, NULL, OPT_SENDPROFILE      },// Send profile via SMS
+    { "setphoneprofile",    required_argument, NULL, OPT_SETPHONEPROFILE  },/* Get/Set phone profile settings */
+    { "restoresettings",    required_argument, NULL, OPT_RESTORESETTINGS  },//Restore various settings from one file
+    { "backupsettings",     required_argument, NULL, OPT_BACKUPSETTINGS   },//Backup various settings to one file
+    { "playringtone",       required_argument, NULL, OPT_PLAYRINGTONE     },/* Plays ringtones */    
+    { "composer",           required_argument, NULL, OPT_COMPOSER         },/* Shows ringtone like in Nokia Composer */    
+    { "ringtoneconvert",    required_argument, NULL, OPT_RINGTONECONVERT  },/* Convert ringtone files */    
+    { "binringtoneconvert", required_argument, NULL, OPT_BINRINGTONECONVERT},/* Convert binary ringtone files */    
+    { "bitmapconvert",      required_argument, NULL, OPT_BITMAPCONVERT    },/* Convert bitmap files */    
+    { "showbitmap",         required_argument, NULL, OPT_SHOWBITMAP       },    
+    { "nm_collect",         required_argument, NULL, OPT_NM_COLLECT       },// NetMonitor periodical data collection mode (newbiee)
+    { "netmonitordata",     required_argument, NULL, OPT_NETMONITORDATA   },// NetMonitor periodical data collection mode (advanced)
+    { "getwapbookmark",     required_argument, NULL, OPT_GETWAPBOOKMARK   },    
+    { "setwapbookmark",     required_argument, NULL, OPT_SETWAPBOOKMARK   },    
+    { "savewapbookmark",    required_argument, NULL, OPT_SAVEWAPBOOKMARK  },    
+    { "savewapsettings",    required_argument, NULL, OPT_SAVEWAPSETTINGS  },    
+    { "sendwapsettings",    required_argument, NULL, OPT_SENDWAPSETTINGS  },    
+    { "sendwapbookmark",    required_argument, NULL, OPT_SENDWAPBOOKMARK  },    
+    { "getwapsettings",     required_argument, NULL, OPT_GETWAPSETTINGS   },    
+    { "divert",             required_argument, NULL, OPT_DIVERT           },
+
+#ifdef SECURITY
+    { "entersecuritycode",  required_argument, NULL, OPT_ENTERSECURITYCODE    },// Enter Security Code mode
+    { "getsecuritycode",    required_argument, NULL, OPT_GETSECURITYCODE      },// Get Security Code
+  { "getsecuritycodestatus",no_argument,       NULL, OPT_GETSECURITYCODESTATUS},// Get Security Code status
+    { "geteeprom",          no_argument,       NULL, OPT_GETEEPROM            },// Gets EEPROM
+    { "resetphonesettings", no_argument,       NULL, OPT_RESETPHONESETTINGS   },// Reset phone settings
+    { "setsimlock",         no_argument,       NULL, OPT_SETSIMLOCK           },// Sets simlock
+#endif
+
+#ifdef DEBUG
+    { "sniff",              optional_argument, NULL, OPT_SNIFFER    },// Will show datas from port
+    { "decodefile",         required_argument, NULL, OPT_DECODEFILE },//decode input file
+#endif
+
+    { 0, 0, 0, 0},
+  };
+
+  /* Every command which requires arguments should have an appropriate entry
+     in this array. */
+       
+  struct gnokii_arg_len gals[] =
+  {
+
+    { OPT_MONITOR,           0, 1, 0 },
+
+#ifdef SECURITY
+    { OPT_ENTERSECURITYCODE, 1, 1, 0 },
+    { OPT_GETSECURITYCODE,   1, 1, 0 },
+#endif
+
+#ifdef DEBUG
+    { OPT_SNIFFER,           0, 1, 0 },
+    { OPT_DECODEFILE,        1, 1, 0 },
+#endif
+
+    { OPT_SETDATETIME,       0, 5, 0 },
+    { OPT_BACKUPSETTINGS,    1, 1, 0 },
+    { OPT_RESTORESETTINGS,   1, 1, 0 },
+    { OPT_SETALARM,          2, 2, 0 },
+    { OPT_DIALVOICE,         1, 1, 0 },
+    { OPT_GETCALENDARNOTE,   1, 3, 0 },
+    { OPT_WRITECALENDARNOTE, 2, 2, 0 },
+    { OPT_SAVECALENDARNOTE,  2, 9, 0 },
+    { OPT_SENDCALENDARNOTE,  3, 9, 0 },
+    { OPT_SAVEPHONEBOOKENTRY,2, 9, 0 },
+    { OPT_SENDPHONEBOOKENTRY,3, 9, 0 },
+    { OPT_DELCALENDARNOTE,   1, 1, 0 },
+    { OPT_GETMEMORY,         2, 4, 0 },
+    { OPT_GETSPEEDDIAL,      1, 1, 0 },
+    { OPT_SETSPEEDDIAL,      3, 3, 0 },
+    { OPT_GETSMS,            2, 5, 0 },
+    { OPT_DELETESMS,         2, 3, 0 },
+    { OPT_SENDSMS,           1,10, 0 },
+    { OPT_SAVESMS,           1,11, 0 },
+    { OPT_SENDLOGO,          3, 9, 0 },
+    { OPT_SAVELOGO,          2,10, 0 },
+    { OPT_SENDRINGTONE,      2, 7, 0 },
+    { OPT_SAVERINGTONE,      1, 9, 0 },
+    { OPT_GETSMSC,           1, 1, 0 },
+    { OPT_RENAMESMSC,        2, 2, 0 },
+    { OPT_NETMONITOR,        1, 1, 0 },
+    { OPT_SENDDTMF,          1, 1, 0 },
+    { OPT_SETLOGO,           1, 5, 0 },
+    { OPT_GETLOGO,           1, 4, 0 },
+    { OPT_SETRINGTONE,       1, 3, 0 },
+    { OPT_GETRINGTONE,       1, 2, 0 },
+    { OPT_PRESSKEYSEQUENCE,  1, 1, 0 },
+    { OPT_RESET,             0, 1, 0 },
+    { OPT_GETPROFILE,        0, 1, 0 },
+    { OPT_SETPROFILE,        3, 3, 0 },
+    { OPT_SENDPROFILE,       4,10, 0 },
+    { OPT_WRITEPHONEBOOK,    0, 1, 0 },
+    { OPT_PLAYRINGTONE,      1, 1, 0 },
+    { OPT_COMPOSER,          1, 1, 0 },
+    { OPT_RINGTONECONVERT,   2, 2, 0 },
+    { OPT_BINRINGTONECONVERT,2, 2, 0 },
+    { OPT_BITMAPCONVERT,     2, 4, 0 },
+    { OPT_SHOWBITMAP,        1, 1, 0 },
+    { OPT_SETOPERATORNAME,   0, 2, 0 },    
+    { OPT_SETPHONEPROFILE,   2, 2, 0 },        
+    { OPT_NM_COLLECT,        1, MAX_NM_COLLECT, 0 },
+    { OPT_NETMONITORDATA,    0,99, 0 },
+    { OPT_GETWAPBOOKMARK,    1, 1, 0 },
+    { OPT_SETWAPBOOKMARK,    2, 3, 0 },
+    { OPT_SAVEWAPBOOKMARK,   1, 9, 0 },
+    { OPT_SENDWAPBOOKMARK,   2, 9, 0 },
+    { OPT_GETWAPSETTINGS,    1, 1, 0 },
+    { OPT_SAVEWAPSETTINGS,   1, 9, 0 },
+    { OPT_SENDWAPSETTINGS,   2, 9, 0 },
+    { OPT_DIVERT,            3, 5, 0 },    
+
+    { 0, 0, 0, 0 },
+  };
+
+  opterr = 0;
+
+  /* For GNU gettext */
+
+#ifdef USE_NLS
+#ifndef VC6
+  textdomain("gnokii");
+  setlocale(LC_ALL, "pl_PL"); //here is string for Polish localisation
+#else
+  setlocale(LC_ALL, ".852"); //Polish codepage for console, not "real" WIN CP
+#endif
+
+#endif
+
+    /* Read config file */
+    if (CFG_ReadConfig(&model, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,false) < 0) {
+       exit(-1);
+    }
+
+  /* Handle command line arguments. */
+
+  c = getopt_long(argc, argv, "", long_options, NULL);
+
+  if (c == -1) {
+
+    /* No argument given - we should display usage. */
+    usage();
+    exit(-1);
+  }
+
+  /* We have to build an array of the arguments which will be passed to the
+     functions.  Please note that every text after the --command will be
+     passed as arguments.  A syntax like gnokii --cmd1 args --cmd2 args will
+     not work as expected; instead args --cmd2 args is passed as a
+     parameter. */
+
+  if((nargv = malloc(sizeof(char *) * argc)) != NULL) {
+
+    for(i = 2; i < argc; i++)
+      nargv[i-2] = argv[i];
+       
+    if(checkargs(c, gals, nargc)) {
+
+      free(nargv);
+
+      /* Wrong number of arguments - we should display usage. */
+      usage();
+      exit(-1);
+    }
+
+#ifndef VC6
+#if defined(__svr4__)
+    /* have to ignore SIGALARM */
+    sigignore(SIGALRM);
+#endif
+#endif
+
+    switch(c) {
+
+    // First, error conditions 
+    case '?':
+      fprintf(stderr, _("Use '%s --help' for usage informations.\n"), argv[0]);
+      break;
+       
+    // Then, options with no arguments
+    case OPT_HELP:                  rc = usage();                   break;
+    case OPT_VERSION:               rc = version();                 break;
+    case OPT_MONITOR:               rc = monitormode(nargc, nargv); break;
+    case OPT_GETSMSFOLDERS:         rc = getsmsfolders();           break;
+    case OPT_GETDATETIME:           rc = getdatetime();             break;
+    case OPT_GETALARM:              rc = getalarm();                break;
+    case OPT_GETDISPLAYSTATUS:      rc = getdisplaystatus();        break;
+    case OPT_PMON:                  rc = pmon();                    break;
+    case OPT_WRITEPHONEBOOK:        rc = writephonebook(nargc, nargv);break;
+
+#ifdef SECURITY
+    case OPT_ENTERSECURITYCODE:     rc = entersecuritycode(optarg); break;
+    case OPT_GETSECURITYCODESTATUS: rc = getsecuritycodestatus();   break;
+    case OPT_GETSECURITYCODE:       rc = getsecuritycode(optarg);   break;
+    case OPT_GETEEPROM:             rc = geteeprom();               break;
+    case OPT_RESETPHONESETTINGS:    rc = resetphonesettings();      break;
+    case OPT_SETSIMLOCK:            rc = setsimlock();              break;
+#endif
+
+#ifdef DEBUG
+    case OPT_SNIFFER:               rc = sniff(nargc, nargv);       break;
+    case OPT_DECODEFILE:            rc = decodefile(nargc, nargv);  break;
+#endif                                 
+       
+    // Now, options with arguments
+    case OPT_SETDATETIME:           rc = setdatetime(nargc, nargv); break;
+    case OPT_SETALARM:              rc = setalarm(nargv);           break;
+    case OPT_DIALVOICE:             rc = dialvoice(optarg);         break;
+    case OPT_CANCELCALL:            rc = cancelcall();              break;
+    case OPT_GETCALENDARNOTE:       rc = getcalendarnote(nargc, nargv);break;
+    case OPT_DELCALENDARNOTE:       rc = deletecalendarnote(optarg);break;
+    case OPT_SAVECALENDARNOTE:      rc = savecalendarnote(nargc, nargv);break;
+    case OPT_SENDCALENDARNOTE:      rc = sendcalendarnote(nargc, nargv);break;
+    case OPT_SAVEPHONEBOOKENTRY:    rc = savephonebookentry(nargc, nargv);break;
+    case OPT_SENDPHONEBOOKENTRY:    rc = sendphonebookentry(nargc, nargv);break;
+    case OPT_WRITECALENDARNOTE:     rc = writecalendarnote(nargv);  break;
+    case OPT_GETMEMORY:             rc = getmemory(nargc, nargv);   break;
+    case OPT_GETSPEEDDIAL:          rc = getspeeddial(optarg);      break;
+    case OPT_SETSPEEDDIAL:          rc = setspeeddial(nargv);       break;
+    case OPT_GETSMS:                rc = getsms(argc, argv);        break;
+    case OPT_GETSMSSTATUS:          rc = getsmsstatus(argc, argv);  break;
+    case OPT_DELETESMS:             rc = deletesms(nargc, nargv);   break;
+    case OPT_SENDSMS:               rc = sendsms(nargc, nargv);     break;
+    case OPT_SAVESMS:               rc = savesms(nargc, nargv);     break;
+    case OPT_DIVERT:                rc = divert(nargc, nargv);      break;
+    case OPT_SENDLOGO:              rc = sendlogo(nargc, nargv);    break;
+    case OPT_SAVELOGO:              rc = savelogo(nargc, nargv);    break;
+    case OPT_GETSMSC:               rc = getsmsc(optarg);           break;
+    case OPT_RENAMESMSC:            rc = renamesmsc(nargc,nargv);   break;
+    case OPT_NETMONITOR:            rc = netmonitor(optarg);        break;
+    case OPT_IDENTIFY:              rc = identify();                break;
+    case OPT_SETLOGO:               rc = setlogo(nargc, nargv);     break;
+    case OPT_GETLOGO:               rc = getlogo(nargc, nargv);     break;
+    case OPT_RECEIVESMS:            rc = receivesms(nargc, nargv);  break;
+    case OPT_SETRINGTONE:           rc = setringtone(nargc, nargv); break;
+    case OPT_GETRINGTONE:           rc = getringtone(nargc, nargv); break;
+    case OPT_PRESSKEYSEQUENCE:      rc = presskeysequence(nargv);   break;
+    case OPT_SENDRINGTONE:          rc = sendringtone(nargc, nargv);break;
+    case OPT_SAVERINGTONE:          rc = saveringtone(nargc, nargv);break;
+    case OPT_GETPROFILE:            rc = getprofile(nargc, nargv);  break;
+    case OPT_SETPROFILE:            rc = setprofile(nargc, nargv);  break;
+    case OPT_SENDPROFILE:           rc = sendprofile(nargc, nargv); break;
+    case OPT_DISPLAYOUTPUT:         rc = displayoutput();           break;
+    case OPT_RESTORESETTINGS:       rc = restoresettings(nargv);    break;
+    case OPT_BACKUPSETTINGS:        rc = backupsettings(nargv);     break;
+    case OPT_RINGTONECONVERT:       rc = ringtoneconvert(nargc, nargv);break;
+    case OPT_BINRINGTONECONVERT:    rc = binringtoneconvert(nargc, nargv);break;
+    case OPT_BITMAPCONVERT:         rc = bitmapconvert(nargc, nargv);break;
+    case OPT_SHOWBITMAP:            rc = showbitmap(nargc, nargv);  break;
+    case OPT_PLAYRINGTONE:          rc = playringtone(nargc, nargv);break;
+    case OPT_COMPOSER:              rc = composer(nargc, nargv);    break;
+    case OPT_FOOGLE:                rc = foogle(nargv);             break;
+    case OPT_PHONETESTS:            rc = phonetests();              break;
+    case OPT_SIMLOCKINFO:           rc = simlockinfo();             break;
+    case OPT_SENDDTMF:              rc = senddtmf(optarg);          break;
+    case OPT_RESET:                 rc = reset(nargc,nargv);        break;
+    case OPT_GETOPERATORNAME:       rc = getoperatorname();         break;
+    case OPT_SETOPERATORNAME:       rc = setoperatorname(nargc,nargv);break;
+    case OPT_GETWAPBOOKMARK:        rc = getwapbookmark(nargc,nargv);break;
+    case OPT_SETWAPBOOKMARK:        rc = setwapbookmark(nargc,nargv);break;
+    case OPT_SAVEWAPBOOKMARK:       rc = savewapbookmark(nargc,nargv);break;
+    case OPT_SENDWAPBOOKMARK:       rc = sendwapbookmark(nargc,nargv);break;
+    case OPT_GETWAPSETTINGS:        rc = getwapsettings(nargc,nargv);break;
+    case OPT_SAVEWAPSETTINGS:       rc = savewapsettings(nargc,nargv);break;
+    case OPT_SENDWAPSETTINGS:       rc = sendwapsettings(nargc,nargv);break;
+    case OPT_ALLRINGTONES:          rc = allringtones();            break;
+    case OPT_GETPHONEPROFILE:       rc = getphoneprofile();         break;
+    case OPT_SETPHONEPROFILE:       rc = setphoneprofile(nargc,nargv);break;
+    case OPT_GETVOICEMAILBOX:       rc = getvoicemailbox();         break;
+    case OPT_NM_COLLECT:            rc = nm_collect(nargc, nargv);  break;
+    case OPT_NETMONITORDATA:        rc = netmonitordata(nargc, nargv);break;
+
+    default:         fprintf(stderr, _("Unknown option: %d\n"), c); break;
+
+    }
+
+    free(nargv);
+
+    return(rc);
+  }
+
+  fprintf(stderr, _("Wrong number of arguments\n"));
+
+  exit(-1);
+}
+
+/* Restores various phone settings from one file */
+int restoresettings(char *argv[])
+{
+  fprintf(stdout,_("Work in progress. Not usefull now. Sorry\n"));
+  return 0;
+}
+
+/* Backup various phone settings from one file */
+int backupsettings(char *argv[])
+{
+  GSM_PhonebookEntry PbkEntry;
+  GSM_Error error;
+  GSM_Backup Backup;
+  int i;
+
+  GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0};
+  GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0};
+
+  fbusinit(NULL);
+
+  fprintf(stderr,_("Backup phonebook from SIM..."));
+  Backup.SIMPhonebookUsed=0;
+  if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE) {//FIXME
+    Backup.SIMPhonebookSize=SIMMemoryStatus.Used+SIMMemoryStatus.Free;
+
+    PbkEntry.MemoryType=GMT_SM;
+
+    for (i=0;i<Backup.SIMPhonebookSize;i++)
+    {
+      if (SIMMemoryStatus.Used==Backup.SIMPhonebookUsed) break;
+
+      PbkEntry.Location=i;
+    
+      error=GSM->GetMemoryLocation(&PbkEntry);
+      switch (error) {
+        case GE_NONE:
+          Backup.SIMPhonebook[Backup.SIMPhonebookUsed]=PbkEntry;
+          Backup.SIMPhonebookUsed++;
+          fprintf(stderr,_("."));
+          break;
+        default:
+          break;
+      }
+    }
+    fprintf(stderr,_("Done\n"));
+  } else fprintf(stderr,_("ERROR\n"));
+
+  fprintf(stderr,_("Backup phonebook from phone..."));
+  Backup.PhonePhonebookUsed=0;
+  if (GSM->GetMemoryStatus(&PhoneMemoryStatus) == GE_NONE) {
+    Backup.PhonePhonebookSize=PhoneMemoryStatus.Used+PhoneMemoryStatus.Free;
+
+    PbkEntry.MemoryType=GMT_ME;
+
+    for (i=0;i<Backup.PhonePhonebookSize;i++)
+    {
+      if (PhoneMemoryStatus.Used==Backup.PhonePhonebookUsed) break;
+
+      PbkEntry.Location=i;
+    
+      error=GSM->GetMemoryLocation(&PbkEntry);
+      switch (error) {
+        case GE_NONE:
+          Backup.PhonePhonebook[Backup.PhonePhonebookUsed]=PbkEntry;
+          Backup.PhonePhonebookUsed++;
+          fprintf(stderr,_("."));
+          break;
+        default:
+          break;
+      }
+    }
+    fprintf(stderr,_("Done\n"));
+  } else fprintf(stderr,_("ERROR\n"));
+
+  if( GetModelFeature (FN_CALLERGROUPS)!=0) {
+    fprintf(stderr,_("Backup caller logos..."));
+    Backup.CallerAvailable=true;
+    for (i=0;i<5;i++) {
+      Backup.CallerGroups[i].number=i;
+      Backup.CallerGroups[i].type=GSM_CallerLogo;
+      if (GSM->GetBitmap(&Backup.CallerGroups[i])!=GE_NONE) return 1;
+    }
+    fprintf(stderr,_("Done\n"));
+  } else Backup.CallerAvailable=false;
+
+//  fprintf(stderr,_("Backup speed dials..."));
+  Backup.SpeedAvailable=false;
+//  for (i=0;i<8;i++) {
+//    Backup.SpeedDials[i].Number=i+1;
+//    if (GSM->GetSpeedDial(&Backup.SpeedDials[i])!=GE_NONE) return 1;
+//  }
+//  fprintf(stderr,_("Done\n"));
+
+  fprintf(stderr,_("Backup operator logo..."));
+  Backup.OperatorLogoAvailable=true;
+  Backup.OperatorLogo.type=GSM_7110OperatorLogo;
+  if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) {
+    Backup.OperatorLogoAvailable=true;
+    Backup.OperatorLogo.type=GSM_OperatorLogo;
+    if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) {
+      Backup.OperatorLogoAvailable=false;
+      fprintf(stderr,_("Error\n"));
+    } else fprintf(stderr,_("Done\n"));
+  } else fprintf(stderr,_("Done\n"));
+
+  Backup.StartupLogoAvailable=false;
+  if( GetModelFeature (FN_STARTUP)!=0) {
+    fprintf(stderr,_("Backup startup logo..."));
+    Backup.StartupLogoAvailable=true;
+    switch (GetModelFeature (FN_STARTUP)) {
+      case F_STA62: Backup.StartupLogo.type=GSM_6210StartupLogo;break;
+      case F_STA71: Backup.StartupLogo.type=GSM_7110StartupLogo;break;
+      default     : Backup.StartupLogo.type=GSM_StartupLogo;break;
+    }
+    if (GSM->GetBitmap(&Backup.StartupLogo)!=GE_NONE) {
+      Backup.StartupLogoAvailable=false;
+      fprintf(stderr,_("Error\n"));
+    } else fprintf(stderr,_("Done\n"));
+  }
+
+  fprintf(stderr,_("Backup welcome note..."));
+  Backup.StartupText.type=GSM_WelcomeNoteText;
+  if (GSM->GetBitmap(&Backup.StartupText)!=GE_NONE) {
+    fprintf(stderr,_("Error\n"));
+  } else fprintf(stderr,_("Done\n"));
+
+  GSM->Terminate();
+
+  GSM_SaveBackupFile(argv[0], &Backup);
+
+  return 0;
+}
+
+/* Presses keys on phone's keyboard */
+
+int presskeysequence(char *argv[])
+{
+  int i,j;
+  int keycode;
+  char key;
+  
+  sleep(1);
+
+  /* We need to make sure that the init is finished to avoid interrupted */
+  /* multiframe packets... */
+
+  fbusinit(NULL);
+  
+  for (i=0;i<strlen(argv[0]);i++)
+  {
+    key=argv[0][i];
+    keycode=0;
+    j=0;
+    
+    if (key!='w' && key!='W')
+    {
+      while (Keys[j].whatchar!=' ') {
+        if (Keys[j].whatchar==key) {    
+          keycode=Keys[j].whatcode;
+          break;
+        }
+        j++;
+      }
+    
+      if (keycode==0) {
+        fprintf(stderr,_("Unknown key: %c !\n"),key);
+        GSM->Terminate();
+        return -1;
+      }
+    
+      if (GSM->PressKey(keycode,PRESSPHONEKEY)!=GE_NONE)
+      {
+        fprintf(stderr,_("Can't press key !\n"));
+        GSM->Terminate();
+        return -1;
+      }
+      if (GSM->PressKey(keycode,RELEASEPHONEKEY)!=GE_NONE)
+      {
+        fprintf(stderr,_("Can't release key !\n"));
+        GSM->Terminate();
+        return -1;
+      }
+    } else
+    {
+      sleep(2);
+    }
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Send  SMS messages. */
+int sendsms(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  char message_buffer[GSM_MAX_CONCATENATED_SMS_LENGTH];
+  int input_len, chars_read,i,msgnum;
+
+  GSM_SMSMessageType SMSType=GST_SMS;
+  int SMSValidity= 4320; /* 4320 minutes == 72 hours */
+  bool SMSReply=false;
+  int SMSClass=-1,SMSCenter=1;
+  char SMSCNumber[100];
+  GSM_Coding_Type SMSCoding=GSM_Coding_Default;
+  GSM_UDH SMSUDHType=GSM_NoUDH;
+
+  struct option options[] = {
+             { "smscno",       required_argument, NULL, '1'},
+             { "smsc",         required_argument, NULL, '2'},
+             { "long",        required_argument, NULL, '3'},
+             { "enablevoice",  no_argument,       NULL, '4'},
+            { "disablevoice", no_argument,       NULL, '5'},
+            { "enableemail",  no_argument,       NULL, '6'},
+            { "disableemail", no_argument,       NULL, '7'},
+            { "enablefax",    no_argument,       NULL, '8'},
+            { "disablefax",   no_argument,       NULL, '9'},
+            { "unicode",      no_argument,       NULL, '-'},
+            { "void",         no_argument,       NULL, '+'},
+            { "hang",         no_argument,       NULL, '('},
+            { "bug",          no_argument,       NULL, ')'},
+             { NULL,           0,                 NULL, 0}
+  };
+  
+  input_len = GSM_MAX_SMS_LENGTH;
+
+  if (argc!=0) {
+
+    optarg = NULL;
+    optind = 0;
+
+    while ((i = getopt_long(argc, argv, "v:dsC:", options, NULL)) != -1) {
+      switch (i) {
+
+        case '1': /* SMSC number */
+          SMSCenter = 0;
+          strcpy(SMSCNumber,optarg);
+          break;
+
+        case '2': /* SMSC number index in phone memory */
+          SMSCenter = atoi(optarg);
+
+          if (SMSCenter < 1 || SMSCenter > 5) {
+            fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+            GSM->Terminate();
+            return -1;
+         }
+          break;
+
+        case '3': /* we send long message */
+          SMSUDHType=GSM_ConcatenatedMessages;
+          input_len = atoi(optarg);
+          if (input_len > GSM_MAX_CONCATENATED_SMS_LENGTH) {
+           fprintf(stderr, _("Input too long, max %i!\n"),GSM_MAX_CONCATENATED_SMS_LENGTH);
+           exit(-1);
+          }
+          break;
+
+        case '4': /* SMS enables voice indicator */
+          SMSUDHType=GSM_EnableVoice;    break;
+
+        case '5': /* SMS disables voice indicator */
+          SMSUDHType=GSM_DisableVoice;   break;          
+
+        case '6': /* SMS enables email indicator */
+          SMSUDHType=GSM_EnableEmail;    break;          
+
+        case '7': /* SMS disables email indicator */
+          SMSUDHType=GSM_DisableEmail;   break;          
+
+        case '8': /* SMS enables fax indicator */
+          SMSUDHType=GSM_EnableFax;      break;          
+
+        case '9': /* SMS disables fax indicator */
+          SMSUDHType=GSM_DisableFax;     break;          
+
+        case '-': /* SMS coding type */
+          SMSCoding=GSM_Coding_Unicode;  break;
+
+        case '+': /* SMS ghost */
+          SMSUDHType=GSM_VoidSMS;        break;
+
+        case '(': /* SMS hanging phone, when saved to Outbox */
+          SMSUDHType=GSM_HangSMS;        break;
+
+        case ')': /* SMS showed incorrectly in phone */
+          SMSUDHType=GSM_BugSMS;         break;
+
+        case 'v': /* Set validaty of SMS */
+          SMSValidity = atoi(optarg);    break;
+
+        case 'd': /* delivery report */
+          SMSType=GST_DR;                break;        
+
+        case 's': /* Set replying via the same SMSC */
+          SMSReply = true;               break;
+
+        case 'C': /* class Message */
+          
+         if (SMSUDHType!=GSM_NoUDH) {
+            fprintf(stderr, _("Can't specify SMS Class with --enablevoice, --disablevoice, --enableemail, --disableemail, --enablefax, --disablefax options !\n"));        
+           return -1;
+         }
+         
+          switch (*optarg) {
+            case '0': SMSClass = 0; break;
+            case '1': SMSClass = 1; break;
+            case '2': SMSClass = 2; break;
+            case '3': SMSClass = 3; break; 
+            default:
+             fprintf(stderr, _("SMS Class (\"C\" option) can be 0, 1, 2 or 3 only !\n"));
+              return -1;
+          }
+          break;
+         
+        default:
+          fprintf(stderr,_("Unknown option number %i\n"),argc);
+          return -1;
+      }
+    }
+  }
+  
+  /* Get message text from stdin. */
+  chars_read = fread(message_buffer, 1, input_len, stdin);
+
+  if (chars_read == 0) {
+    fprintf(stderr, _("Couldn't read from stdin!\n")); 
+    return -1;
+  }
+  if (chars_read > input_len) {
+    fprintf(stderr, _("Input too long!\n"));   
+    return -1;
+  }
+  
+  /*  Null terminate. */
+  message_buffer[chars_read] = 0x00;   
+
+  GSM_MakeMultiPartSMS2(&MultiSMS,message_buffer,chars_read,SMSUDHType,SMSCoding);
+  msgnum=MultiSMS.number;
+
+  switch (SMSUDHType) {
+    case GSM_NoUDH:
+    case GSM_BugSMS:
+    case GSM_VoidSMS:
+    case GSM_HangSMS:
+    case GSM_EnableVoice:
+    case GSM_DisableVoice:
+    case GSM_EnableFax:
+    case GSM_DisableFax:
+    case GSM_EnableEmail:
+    case GSM_DisableEmail:
+      fprintf(stdout,_("Warning: saving %i chars\n"),strlen(MultiSMS.SMS[0].MessageText));
+      msgnum=1;
+      break;
+    default:
+      break;
+  }
+
+  for (i=0;i<msgnum;i++) {
+    strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+    MultiSMS.SMS[i].Class=SMSClass;
+    MultiSMS.SMS[i].ReplyViaSameSMSC=SMSReply;
+    MultiSMS.SMS[i].Type=SMSType;
+    MultiSMS.SMS[i].Validity=SMSValidity;
+  }
+
+  /* Initialise the GSM interface. */     
+  fbusinit(NULL);
+
+  MultiSMS.number=msgnum;
+  GSM_SendMultiPartSMSOnConsole(&MultiSMS, 0,0,NULL,false,false,false);
+  
+  return 0;
+}
+
+int savesms(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  char message_buffer[GSM_MAX_CONCATENATED_SMS_LENGTH];
+  int input_len, chars_read,i,msgnum;
+
+  int SMSClass=-1,SMSCenter=1;
+  char SMSName[25+1];
+  char SMSCNumber[100];
+  GSM_Coding_Type SMSCoding=GSM_Coding_Default;
+  GSM_UDH SMSUDHType=GSM_NoUDH;
+  GSM_SMSMessageStatus SMSStatus;
+  int SMSFolder;
+  bool SMSReply=false;
+  int SMSLocation=0;
+  bool interactive=false;
+
+  struct option options[] = {
+             { "smscno",       required_argument, NULL, '1'},
+             { "smsc",         required_argument, NULL, '2'},
+             { "long",        required_argument, NULL, '3'},
+             { "enablevoice",  no_argument,       NULL, '4'},
+            { "disablevoice", no_argument,       NULL, '5'},
+            { "enableemail",  no_argument,       NULL, '6'},
+            { "disableemail", no_argument,       NULL, '7'},
+            { "enablefax",    no_argument,       NULL, '8'},
+            { "disablefax",   no_argument,       NULL, '9'},
+            { "unicode",      no_argument,       NULL, '-'},
+            { "void",         no_argument,       NULL, '+'},
+            { "hang",         no_argument,       NULL, '('},
+            { "bug",          no_argument,       NULL, ')'},
+            { "smsname",      required_argument, NULL, '/'},
+             { NULL,           0,                 NULL, 0}
+  };
+
+  SMSCNumber[0]=0;
+  SMSName[0]=0;
+  SMSStatus=GSS_NOTSENTREAD;
+  SMSFolder=GST_OUTBOX;
+  
+  input_len = GSM_MAX_SMS_LENGTH;
+
+  if (argc!=0) {
+
+    optarg = NULL;
+    optind = 0;
+
+    while ((i = getopt_long(argc, argv, "risal:C:F:", options, NULL)) != -1) {
+      switch (i) {
+
+        case '1': /* SMSC number */
+          SMSCenter = 0;
+          strcpy(SMSCNumber,optarg);
+          break;
+
+        case '2': /* SMSC number index in phone memory */
+          SMSCenter = atoi(optarg);
+
+          if (SMSCenter < 1 || SMSCenter > 5) {
+            fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+            GSM->Terminate();
+            return -1;
+         }
+          break;
+
+        case '3': /* we send long message */
+          SMSUDHType=GSM_ConcatenatedMessages;
+          input_len = atoi(optarg);
+          if (input_len > GSM_MAX_CONCATENATED_SMS_LENGTH) {
+           fprintf(stderr, _("Input too long, max %i!\n"),GSM_MAX_CONCATENATED_SMS_LENGTH);
+           exit(-1);
+          }
+          break;
+
+        case '4': /* SMS enables voice indicator */
+          SMSUDHType=GSM_EnableVoice;    break;
+
+        case '5': /* SMS disables voice indicator */
+          SMSUDHType=GSM_DisableVoice;   break;          
+
+        case '6': /* SMS enables email indicator */
+          SMSUDHType=GSM_EnableEmail;    break;          
+
+        case '7': /* SMS disables email indicator */
+          SMSUDHType=GSM_DisableEmail;   break;          
+
+        case '8': /* SMS enables fax indicator */
+          SMSUDHType=GSM_EnableFax;      break;          
+
+        case '9': /* SMS disables fax indicator */
+          SMSUDHType=GSM_DisableFax;     break;          
+
+        case '-': /* SMS coding type */
+          SMSCoding=GSM_Coding_Unicode;  break;
+
+        case '+': /* SMS ghost */
+          SMSUDHType=GSM_VoidSMS;        break;
+
+        case '(': /* SMS hanging phone, when saved to Outbox */
+          SMSUDHType=GSM_HangSMS;        break;
+
+        case ')': /* SMS showed incorrectly in phone */
+          SMSUDHType=GSM_BugSMS;         break;
+
+        case 'r': /* mark as read */
+          SMSStatus = GSS_SENTREAD; break;
+        case 'i': /* Save into Inbox */
+          SMSFolder = GST_INBOX; break;
+         
+        case 's': /* Set replying via the same SMSC */
+          SMSReply = true; break;
+
+        case 'a': /* Ask before overwriting */
+          interactive=true;break;     
+       
+        case 'l': /* Specify location */
+          SMSLocation = atoi(optarg); break;     
+
+        case '/': /* Name */
+          strncpy(SMSName,optarg,25);break;
+
+        case 'C': /* class Message */
+          
+         if (SMSUDHType!=GSM_NoUDH) {
+            fprintf(stderr, _("Can't specify SMS Class with --enablevoice, --disablevoice, --enableemail, --disableemail, --enablefax, --disablefax options !\n"));        
+           return -1;
+         }
+         
+          switch (*optarg) {
+            case '0': SMSClass = 0; break;
+            case '1': SMSClass = 1; break;
+            case '2': SMSClass = 2; break;
+            case '3': SMSClass = 3; break; 
+            default:
+             fprintf(stderr, _("SMS Class (\"C\" option) can be 0, 1, 2 or 3 only !\n"));
+              return -1;
+          }
+          break;
+
+        case 'F': /* save into folder n */
+         SMSFolder = atoi(optarg);
+          break;
+
+        default:
+          fprintf(stderr,_("Unknown option number %i\n"),argc);
+          return -1;
+      }
+    }
+  }
+  
+  /* Get message text from stdin. */
+  chars_read = fread(message_buffer, 1, input_len, stdin);
+
+  if (chars_read == 0) {
+    fprintf(stderr, _("Couldn't read from stdin!\n")); 
+    return -1;
+  }
+  if (chars_read > input_len) {
+    fprintf(stderr, _("Input too long!\n"));   
+    return -1;
+  }
+  
+  /*  Null terminate. */
+  message_buffer[chars_read] = 0x00;   
+
+  GSM_MakeMultiPartSMS2(&MultiSMS,message_buffer,chars_read,SMSUDHType,SMSCoding);
+  msgnum=MultiSMS.number;
+
+  switch (SMSUDHType) {
+    case GSM_NoUDH:
+    case GSM_BugSMS:
+    case GSM_VoidSMS:
+    case GSM_HangSMS:
+    case GSM_EnableVoice:
+    case GSM_DisableVoice:
+    case GSM_EnableFax:
+    case GSM_DisableFax:
+    case GSM_EnableEmail:
+    case GSM_DisableEmail:
+      fprintf(stdout,_("Warning: saving %i chars\n"),strlen(MultiSMS.SMS[0].MessageText));
+      msgnum=1;
+      break;
+    default:
+      break;
+  }
+
+  for (i=0;i<msgnum;i++) {
+    MultiSMS.SMS[i].Destination[0]=0;
+    if (argc!=0) strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+    MultiSMS.SMS[i].Location=0;
+    MultiSMS.SMS[i].Class=SMSClass;
+    MultiSMS.SMS[i].MessageCenter.No=SMSCenter;
+    strcpy(MultiSMS.SMS[i].MessageCenter.Number,SMSCNumber);
+    MultiSMS.SMS[i].Status=SMSStatus;
+    strcpy(MultiSMS.SMS[i].Name,SMSName);
+    MultiSMS.SMS[i].folder=SMSFolder;
+    MultiSMS.SMS[i].ReplyViaSameSMSC=SMSReply;
+  }
+
+  MultiSMS.SMS[0].Location=SMSLocation;
+
+  /* Initialise the GSM interface. */     
+  fbusinit(NULL);
+
+  MultiSMS.number=msgnum;
+  GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 0,0,NULL,interactive,false,false,false);
+  
+  return 0;
+}
+
+/* Get SMSC number */
+
+int getsmsc(char *MessageCenterNumber)
+{
+
+  GSM_MessageCenter MessageCenter;
+
+  MessageCenter.No=atoi(MessageCenterNumber);
+
+  fbusinit(NULL);
+
+  if (GSM->GetSMSCenter(&MessageCenter) == GE_NONE) {
+
+    fprintf(stdout, _("%d. SMS center ("),MessageCenter.No);
+    
+    if (!strcmp(MessageCenter.Name,""))
+      fprintf(stdout,_("Set %d"),MessageCenter.No);
+    else fprintf(stdout,_("%s"),MessageCenter.Name);
+      
+    fprintf(stdout,_(") number is "));
+
+    if (!strcmp(MessageCenter.Number,"")) fprintf(stdout,_("not set\n"));
+    else fprintf(stdout,_("%s\n"),MessageCenter.Number);
+
+    fprintf(stdout,_("Default recipient number is "));
+
+    if (!strcmp(MessageCenter.DefaultRecipient,""))
+      fprintf(stdout,_("not set\n"));
+    else fprintf(stdout,_("%s\n"),MessageCenter.DefaultRecipient);
+
+    fprintf(stdout, _("Messages sent as "));
+
+    switch (MessageCenter.Format) {
+      case GSMF_Text  :fprintf(stdout, _("Text"));break;
+      case GSMF_Paging:fprintf(stdout, _("Paging"));break;
+      case GSMF_Fax   :fprintf(stdout, _("Fax"));break;
+      case GSMF_Email :
+      case GSMF_UCI   :fprintf(stdout, _("Email"));break;
+      case GSMF_ERMES :fprintf(stdout, _("ERMES"));break;
+      case GSMF_X400  :fprintf(stdout, _("X.400"));break;
+      default         :fprintf(stdout, _("Unknown"));
+    }
+
+    printf("\n");
+
+    fprintf(stdout, _("Message validity is "));
+
+    switch (MessageCenter.Validity) {
+      case GSMV_1_Hour  :fprintf(stdout, _("1 hour"));break;
+      case GSMV_6_Hours :fprintf(stdout, _("6 hours"));break;
+      case GSMV_24_Hours:fprintf(stdout, _("24 hours"));break;
+      case GSMV_72_Hours:fprintf(stdout, _("72 hours"));break;
+      case GSMV_1_Week  :fprintf(stdout, _("1 week"));break;
+      case GSMV_Max_Time:fprintf(stdout, _("Maximum time"));break;
+      default           :fprintf(stdout, _("Unknown"));
+    }
+
+    fprintf(stdout, "\n");
+
+  }
+  else
+    fprintf(stdout, _("SMS center can not be found :-(\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Get SMS messages. */
+int getsms(int argc, char *argv[])
+{
+
+  GSM_SMSMessage message;
+  GSM_WAPBookmark bookmark;
+  char memory_type_string[20];
+  int start_message, end_message, count, mode = 1;
+  char filename[64];
+  GSM_Error error;
+  GSM_Bitmap bitmap;
+  GSM_Ringtone ringtone;
+  GSM_SMSFolders folders;
+  
+  int confirm = -1, i;
+  char ans[8];
+
+  /* Handle command line args that set type, start and end locations. */
+  if (!GetMemoryTypeID(argv[2], &message.MemoryType))
+  {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[2]);
+    return (-1);
+  }
+  GetMemoryTypeString(memory_type_string, &message.MemoryType);
+
+  for (i=0;i<64;i++) filename[i]=0;
+
+  start_message = atoi(argv[3]);
+  if (argc > 4) {
+     int i;
+     
+     /* [end] can be only argv[4] */
+     if (argv[4][0] == '-') {
+        end_message = start_message;
+     } else {
+        end_message = atoi(argv[4]);
+     }
+
+     /* parse all options (beginning with '-' */
+     while ((i = getopt(argc, argv, "f:")) != -1) {
+       switch (i) {
+         case 'f':
+           if (optarg) {
+#ifdef DEBUG
+          fprintf(stderr, _("Saving into file \"%s\"\n"), optarg);
+#endif /* DEBUG */
+             strncpy(filename, optarg, 64);
+              if (strlen(optarg) > 63) {
+                fprintf(stderr, _("Filename too long - will be truncated to 63 characters.\n"));
+                filename[63] = 0;
+              } else {
+                filename[strlen(optarg)] = 0;
+              }
+           } else {
+             usage();
+             exit(1);
+           }
+           break;
+         default:
+           usage();
+           exit(1);
+       }
+      }
+  } else {
+    end_message = start_message;
+  }
+
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  GSM->GetSMSFolders(&folders);
+
+  
+  /* Now retrieve the requested entries. */
+
+  for (count = start_message; count <= end_message; count ++) {
+
+    message.Location = count;
+
+    error = GSM->GetSMSMessage(&message);
+
+    switch (error) {
+
+    case GE_NONE:
+
+      switch (message.Type) {
+
+        case GST_DR:
+
+         /* RTH FIXME: Test that out ! */
+          fprintf(stdout, _("%d. Delivery Report "), message.MessageNumber);
+          switch (message.Status)
+          {
+           case  GSS_SENTREAD:
+                if (message.folder==0) //GST_INBOX
+                 fprintf(stdout, _("(read)\n"));
+                else
+                 fprintf(stdout, _("(sent)\n"));
+               break;
+           case  GSS_NOTSENTREAD:
+                if (message.folder==0) //GST_INBOX
+                 fprintf(stdout, _("(unread)\n"));
+                else
+                 fprintf(stdout, _("(not sent)\n"));
+               break;
+           case  GSS_UNKNOWN:
+               fprintf(stdout, _("(not known :-()\n"));
+               break;
+           case  GSS_TEMPLATE:
+               fprintf(stdout, _("(template)\n"));
+               break;
+           default:
+               fprintf(stdout, _("(unknown: %d)\n"),message.Status);
+               break;
+          }
+
+          fprintf(stdout, _("Sending date/time : %s %02d/%02d/%02d %d:%02d:%02d "), \
+                  DayOfWeek(message.Time.Year, message.Time.Month, message.Time.Day), \
+                 message.Time.Day, message.Time.Month, message.Time.Year, \
+                  message.Time.Hour, message.Time.Minute, message.Time.Second);
+
+          if (message.Time.Timezone) {
+            if (message.Time.Timezone > 0)
+              fprintf(stdout,_("+%02d00"), message.Time.Timezone);
+            else
+              fprintf(stdout,_("%02d00"), message.Time.Timezone);
+          }
+
+          fprintf(stdout, "\n");
+
+          fprintf(stdout, _("Response date/time: %s %02d/%02d/%02d %d:%02d:%02d "), \
+                  DayOfWeek(message.SMSCTime.Year, message.SMSCTime.Month, message.SMSCTime.Day), \
+                  message.SMSCTime.Day, message.SMSCTime.Month, message.SMSCTime.Year, \
+                  message.SMSCTime.Hour, message.SMSCTime.Minute, message.SMSCTime.Second);
+
+          if (message.SMSCTime.Timezone) {
+            if (message.SMSCTime.Timezone > 0)
+              fprintf(stdout,_("+%02d00"),message.SMSCTime.Timezone);
+            else
+              fprintf(stdout,_("%02d00"),message.SMSCTime.Timezone);
+          }
+
+          fprintf(stdout, "\n");
+
+          fprintf(stdout, _("Receiver: %s Msg Center: %s\n"), message.Sender, message.MessageCenter.Number);
+          fprintf(stdout, _("Text: %s\n\n"), message.MessageText); 
+
+          break;
+
+        case GST_SMS:
+          fprintf(stdout, _("%d. %s Message "), message.MessageNumber,
+                          folders.Folder[message.folder].Name);
+
+         switch (message.Status)
+           {
+           case  GSS_SENTREAD:
+                if (message.folder==0) //GST_INBOX
+                 fprintf(stdout, _("(read)\n"));
+                else
+                 fprintf(stdout, _("(sent)\n"));
+               break;
+           case  GSS_NOTSENTREAD:
+                if (message.folder==0) //GST_INBOX
+                 fprintf(stdout, _("(unread)\n"));
+                else
+                 fprintf(stdout, _("(not sent)\n"));
+               break;
+            case  GSS_UNKNOWN:
+                fprintf(stdout, _("(not known :-()\n"));
+                break;
+            case  GSS_TEMPLATE:
+                fprintf(stdout, _("(template)\n"));
+                break;
+            default:
+                fprintf(stdout, _("(unknown: %d)\n"),message.Status);
+                break;
+           }
+        
+         /* RTH FIXME: date for other status ok ? */ 
+         if (message.SMSData) {
+
+            fprintf(stdout, _("Date/time: %s %02d/%02d/%02d %d:%02d:%02d "), \
+                    DayOfWeek(message.Time.Year, message.Time.Month, message.Time.Day), \
+                    message.Time.Day, message.Time.Month, message.Time.Year, \
+                    message.Time.Hour, message.Time.Minute, message.Time.Second);
+
+            if (message.Time.Timezone) {
+              if (message.Time.Timezone > 0)
+                fprintf(stdout,_("+%02d00"),message.Time.Timezone);
+              else
+                fprintf(stdout,_("%02d00"),message.Time.Timezone);
+            }
+
+            fprintf(stdout, "\n");
+
+           fprintf(stdout, _("Msg Center: %s "), message.MessageCenter.Number);
+           
+           if (message.ReplyViaSameSMSC)
+             fprintf(stdout, _("(centre set for reply) "));
+         }
+
+          if (strcmp(message.Sender,"")) {
+           if (message.folder==1) { //GST_OUTBOX
+             fprintf(stdout, _("Recipient: %s"),message.Sender);
+           } else {
+             fprintf(stdout, _("Sender: %s"),message.Sender);
+           }
+         }
+
+          if (strcmp(message.Sender,"") || message.folder==0)
+            fprintf(stdout, "\n");
+           
+          switch (message.UDHType) {
+
+          case GSM_OpLogo:
+
+            /* put bitmap into bitmap structure */
+           switch (GSM_ReadBitmap(&message, &bitmap)) {
+             case GE_INVALIDIMAGESIZE:
+               fprintf(stdout,_("Image size not supported\n"));
+               break;
+             case GE_NONE:
+               fprintf(stdout, _("GSM operator logo for %s (%s) network.\n"), bitmap.netcode, GSM_GetNetworkName(bitmap.netcode));         
+           
+                GSM_PrintBitmap(&bitmap);
+
+                if (filename[0]!=0) {
+                  GSM_SaveBitmapFileOnConsole(filename, &bitmap);
+                }
+
+               break;
+             default:
+               fprintf(stdout,_("Error reading image\n"));  
+               break;
+           }
+
+#ifdef DEBUG
+            if (message.folder==0) { //GST_INBOX
+              if (!strcmp(message.Sender, "+998000005") &&
+                 !strcmp(message.MessageCenter.Number, "+886935074443") &&
+                 message.Time.Day==27 &&
+                 message.Time.Month==7 &&
+                 message.Time.Year==99 &&
+                 message.Time.Hour==0 &&
+                 message.Time.Minute==10 &&
+                 message.Time.Second==48) fprintf(stdout, _("Saved by Logo Express\n"));
+
+              /* Is it changed in next versions ? Or what ? */
+              if (!strcmp(message.Sender, "+998000002") ||
+                  !strcmp(message.Sender, "+998000003") ||
+                 !strcmp(message.Sender, "+998000004")) fprintf(stdout, _("Saved by Operator Logo Uploader by Thomas Kessler\n"));
+            } else {
+              if (!strcmp(message.Sender, "+8861234567890") &&
+                 !strcmp(message.MessageCenter.Number, "+886935074443")) fprintf(stdout, _("Saved by Logo Express\n"));
+           }
+           if (!strncmp(message.Sender, "OpLogo",6) &&
+               strlen(message.Sender)==11)
+              fprintf(stdout, _("Saved by gnokii\n"));         
+#endif
+
+            break;
+
+          case GSM_WAPBookmarkUDH:
+
+            /* put bookmark into bookmark structure */
+           switch (GSM_ReadWAPBookmark(&message, &bookmark)) {
+             case GE_NONE:
+                fprintf(stdout, ("WAP Bookmark\n"));
+
+                fprintf(stdout,_("Address: \"%s\"\n"),bookmark.address);
+
+                if (bookmark.title[0]==0)
+                  fprintf(stdout,_("Title: \"%s\"\n"),bookmark.address);
+                else
+                  fprintf(stdout,_("Title: \"%s\"\n"),bookmark.title);
+
+               break;
+             default:
+               fprintf(stdout,_("Error reading WAP Bookmark\n"));  
+               break;
+           }
+
+#ifdef DEBUG
+           if (!strcmp(message.Sender, "WAPBookmark"))
+              fprintf(stdout, _("Saved by gnokii\n"));         
+#endif
+
+            break;
+
+          case GSM_CallerIDLogo:
+
+            /* put bitmap into bitmap structure */
+           switch (GSM_ReadBitmap(&message, &bitmap)) {
+             case GE_INVALIDIMAGESIZE:
+               fprintf(stdout,_("Image size not supported\n"));
+               break;
+             case GE_NONE:
+                fprintf(stdout, ("Caller Logo\n"));
+           
+                GSM_PrintBitmap(&bitmap);
+
+                if (filename[0]!=0) {
+                  GSM_SaveBitmapFileOnConsole(filename, &bitmap);
+                }
+
+               break;
+             default:
+               fprintf(stdout,_("Error reading image\n"));  
+               break;
+           }
+
+#ifdef DEBUG
+            if (message.folder==0) { //GST_INBOX
+              if (!strcmp(message.Sender, "+998000005") &&
+                 !strcmp(message.MessageCenter.Number, "+886935074443") &&
+                 message.Time.Day==27 &&
+                 message.Time.Month==7 &&
+                 message.Time.Year==99 &&
+                 message.Time.Hour==0 &&
+                 message.Time.Minute==10 &&
+                 message.Time.Second==48) fprintf(stdout, _("Saved by Logo Express\n"));
+            } else {
+              if (!strcmp(message.Sender, "+8861234567890") &&
+                 !strcmp(message.MessageCenter.Number, "+886935074443")) fprintf(stdout, _("Saved by Logo Express\n"));
+           }
+           if (!strcmp(message.Sender, "GroupLogo"))
+              fprintf(stdout, _("Saved by gnokii\n"));         
+#endif
+
+            break;
+
+          case GSM_ProfileUDH:
+               fprintf(stdout, ("Profile SMS, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+               break;
+
+          case GSM_WAPBookmarkUDHLong:
+               fprintf(stdout, ("WAP Bookmark, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+               break;
+
+          case GSM_WAPSettingsUDH:
+               fprintf(stdout, ("WAP Settings, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+               break;
+         
+          case GSM_RingtoneUDH:
+
+            /* put ringtone into ringtone structure */
+            switch (GSM_ReadRingtone(&message, &ringtone)) {
+             case GE_NONE:
+
+               fprintf(stdout, ("Ringtone \"%s\"\n"),ringtone.name);
+
+                while (confirm < 0) {
+                  fprintf(stderr, _("Do you want to play it ? (yes/no) "));
+                  GetLine(stdin, ans, 7);
+                  if (!strcmp(ans, "yes")) confirm = 1;
+                  if (!strcmp(ans, "no")) confirm = 0;
+                }  
+
+                if (confirm==1) GSM_PlayRingtoneOnConsole(&ringtone);
+               
+                if (filename[0]!=0) GSM_SaveRingtoneFileOnConsole(filename, &ringtone);
+               
+               break;
+               
+              default:
+               fprintf(stdout,_("Gnokii can't read this ringtone - there is probably error inside\n"));
+               break;
+           }
+
+            break;
+
+          case GSM_CalendarNoteUDH:
+           fprintf(stdout, ("Calendar note SMS, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+           fprintf(stdout, _("Text:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+           break;
+
+          case GSM_ConcatenatedMessages:
+            fprintf(stdout, _("Linked (%d/%d)\nText:\n%s\n\n"),message.UDH[5],message.UDH[4], message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+           break;
+
+          case GSM_EnableVoice:
+            fprintf(stdout, _("Enables voice indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_DisableVoice:
+            fprintf(stdout, _("Disables voice indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_EnableFax:
+            fprintf(stdout, _("Enables fax indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_DisableFax:
+            fprintf(stdout, _("Disables fax indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_EnableEmail:
+            fprintf(stdout, _("Enables email indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_DisableEmail:
+            fprintf(stdout, _("Disables email indicator\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_VoidSMS:
+            fprintf(stdout, _("Void SMS\nText:\n%s\n\n"), message.MessageText);
+            if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+            break;
+
+          case GSM_NoUDH:
+           if (message.Coding!=GSM_Coding_8bit) {
+              fprintf(stdout, _("Text:\n%s\n\n"), message.MessageText);
+              if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+           } else {
+             fprintf(stdout, _("Message cannot be displayed here\n")); // like in phone :-)
+           }
+            break;
+
+          default:  //GSM_UnknownUDH and other
+            fprintf(stderr, _("Unknown\n"));
+          }
+
+          break;
+         
+       default:
+         fprintf(stdout,_("Unknown SMS type. Report it\n"));
+         break;
+      }
+
+      break;
+
+    case GE_NOTIMPLEMENTED:
+
+      fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+      GSM->Terminate();
+      return -1;       
+
+    case GE_INVALIDSMSLOCATION:
+
+      fprintf(stderr, _("Invalid location: %s %d\n"), memory_type_string, count);
+
+      break;
+
+    case GE_EMPTYSMSLOCATION:
+
+      fprintf(stderr, _("SMS location %s %d empty.\n"), memory_type_string, count);
+
+      break;
+
+    case GE_NOACCESS:
+
+      fprintf(stderr, _("No access to %s memory.\n"), memory_type_string);
+
+      break;
+
+    default:
+
+      fprintf(stderr, _("GetSMS %s %d failed!(%d)\n\n"), memory_type_string, count, error);
+    }
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int getsmsstatus(int argc, char *argv[])
+{
+  GSM_SMSStatus SMSStatus;
+  GSM_SMSFolders folders;
+  GSM_Error error;
+  GSM_SMSMessage SMS;
+
+  int i,j;
+
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  error = GSM->GetSMSStatus(&SMSStatus);
+  if (error!=GE_NONE) return error;
+
+  fprintf(stdout, _("SMS Messages: UnRead %d, Number %d\n"),SMSStatus.UnRead, SMSStatus.Number);
+
+  error=GSM->GetSMSFolders(&folders);  
+  if (error!=GE_NONE) return error;
+
+  /* For not 7110 compatible phones we have to read all SMS and prepare sms table */
+  if( GetModelFeature (FN_SMS)!=F_SMS71 )
+  {
+    i=1;j=0;
+    while (true) {
+      if (j==SMSStatus.Number) break;
+      SMS.Location=i;
+      if (GSM->GetSMSMessage(&SMS)==GE_NONE) {
+        SMSStatus.foldertable[j].smsnum=i;
+
+        /* We set such folders ID like in 7110 compatible phones */
+        if (SMS.Status==GSS_NOTSENTREAD && SMS.folder==0) //GST_INBOX
+          SMSStatus.foldertable[j].folder=0;
+        else {
+          switch (SMS.folder) {
+            case 0://GST_INBOX
+              SMSStatus.foldertable[j].folder=GST_7110_INBOX;
+              break;
+            case 1://GST_OUTBOX
+              SMSStatus.foldertable[j].folder=GST_7110_OUTBOX;
+              break;
+          }
+        }
+        j++;
+      }
+      i++;
+    }
+  }
+
+  printf("0.Unread         : ");
+  for(j=0; j<SMSStatus.Number; j++)
+  {
+    if (SMSStatus.foldertable[j].folder == 0)
+      printf("%d ",SMSStatus.foldertable[j].smsnum);
+  }
+  printf("\n");
+
+  for (i=0;i<folders.number;i++) {
+    fprintf(stdout,_("%d.%-15s: "),i+1,folders.Folder[i].Name);
+    for(j=0; j<SMSStatus.Number; j++)
+    {
+      if ( SMSStatus.foldertable[j].folder / 8 == i+1)
+       printf("%d ",SMSStatus.foldertable[j].smsnum);
+    }
+    printf("\n");
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Delete SMS messages. */
+int deletesms(int argc, char *argv[])
+{
+
+  GSM_SMSMessage message;
+  char memory_type_string[20];
+  int start_message, end_message, count;
+  GSM_Error error;
+
+  /* Handle command line args that set type, start and end locations. */
+  if (!GetMemoryTypeID(argv[0], &message.MemoryType))
+  {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+    return (-1);
+  }
+  GetMemoryTypeString(memory_type_string, &message.MemoryType);
+
+  start_message = atoi (argv[1]);
+  if (argc > 2) end_message = atoi (argv[2]);
+  else end_message = start_message;
+
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  /* Now delete the requested entries. */
+
+  for (count = start_message; count <= end_message; count ++) {
+
+    message.Location = count;
+
+    error = GSM->DeleteSMSMessage(&message);
+
+    if (error == GE_NONE)
+      fprintf(stdout, _("Deleted SMS %s %d\n"), memory_type_string, count);
+    else {
+      if (error == GE_NOTIMPLEMENTED) {
+       fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+       GSM->Terminate();
+       return -1;      
+      }
+      fprintf(stdout, _("DeleteSMS %s %d failed!(%d)\n\n"), memory_type_string, count, error);
+    }
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+static volatile bool bshutdown = false;
+
+/* SIGINT signal handler. */
+
+static void interrupted(int sig)
+{
+
+  signal(sig, SIG_IGN);
+  bshutdown = true;
+
+}
+
+#ifdef SECURITY
+
+/* In this mode we get the code from the keyboard and send it to the mobile
+   phone. */
+
+int entersecuritycode(char *type)
+{
+  GSM_Error test;
+  GSM_SecurityCode SecurityCode;
+
+  if (!strcmp(type,"PIN"))      SecurityCode.Type=GSCT_Pin;
+  else if (!strcmp(type,"PUK")) SecurityCode.Type=GSCT_Puk;
+  else if (!strcmp(type,"PIN2"))SecurityCode.Type=GSCT_Pin2;
+  else if (!strcmp(type,"PUK2"))SecurityCode.Type=GSCT_Puk2;
+
+  // FIXME: Entering of SecurityCode does not work :-(
+  //  else if (!strcmp(type,"SecurityCode"))
+  //    SecurityCode.Type=GSCT_SecurityCode;
+
+  else {
+    fprintf(stdout, _("Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"));
+    return -1;
+  }
+
+#ifdef WIN32
+  printf("Enter your code: ");
+  gets(SecurityCode.Code);
+#else
+  strcpy(SecurityCode.Code,getpass(_("Enter your code: ")));
+#endif
+
+  fbusinit(NULL);
+
+  test = GSM->EnterSecurityCode(SecurityCode);
+  if (test==GE_NONE)
+    fprintf(stdout,_("Code OK !\n"));
+  else
+    fprintf(stderr,_("%s\n"),print_error(test));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int getsecuritycodestatus(void)
+{
+
+  int Status;
+
+  fbusinit(NULL);
+
+  if (GSM->GetSecurityCodeStatus(&Status) == GE_NONE) {
+
+    fprintf(stdout, _("Security code status: "));
+
+      switch(Status) {
+      case GSCT_SecurityCode:fprintf(stdout, _("waiting for Security Code.\n"));break;
+      case GSCT_Pin:         fprintf(stdout, _("waiting for PIN.\n"));          break;
+      case GSCT_Pin2:        fprintf(stdout, _("waiting for PIN2.\n"));         break;
+      case GSCT_Puk:         fprintf(stdout, _("waiting for PUK.\n"));          break;
+      case GSCT_Puk2:        fprintf(stdout, _("waiting for PUK2.\n"));         break;
+      case GSCT_None:        fprintf(stdout, _("nothing to enter.\n"));         break;
+      default:               fprintf(stdout, _("Unknown!\n"));
+      }
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int getsecuritycode(char *type)
+{
+
+  GSM_SecurityCode SecurityCode;
+  GSM_Error error;
+
+  if (!strcmp(type,"PIN"))              SecurityCode.Type=GSCT_Pin;
+  else if (!strcmp(type,"PUK"))         SecurityCode.Type=GSCT_Puk;
+  else if (!strcmp(type,"PIN2"))        SecurityCode.Type=GSCT_Pin2;
+  else if (!strcmp(type,"PUK2"))        SecurityCode.Type=GSCT_Puk2;
+  else if (!strcmp(type,"SecurityCode"))SecurityCode.Type=GSCT_SecurityCode;
+  else {
+    fprintf(stdout, _("Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"));
+    return -1;
+  }
+    
+  fbusinit(NULL);
+
+  error=GSM->GetSecurityCode(&SecurityCode);
+  
+  switch (error) {
+    case GE_INVALIDSECURITYCODE:
+      fprintf(stdout, _("Error: getting "));
+      switch (SecurityCode.Type) {
+        case GSCT_SecurityCode:fprintf(stdout, _("security code"));break;
+        case GSCT_Pin :fprintf(stdout, _("PIN"));break;
+        case GSCT_Pin2:fprintf(stdout, _("PIN2"));break;
+        case GSCT_Puk :fprintf(stdout, _("PUK"));break;
+        case GSCT_Puk2:fprintf(stdout, _("PUK2"));break;
+       default:break;
+      }
+      fprintf(stdout, _(" not allowed\n"));
+      break;
+    case GE_NONE:
+      switch (SecurityCode.Type) {
+        case GSCT_SecurityCode:fprintf(stdout, _("Security code"));break;
+        case GSCT_Pin :fprintf(stdout, _("PIN"));break;
+        case GSCT_Pin2:fprintf(stdout, _("PIN2"));break;
+        case GSCT_Puk :fprintf(stdout, _("PUK"));break;
+        case GSCT_Puk2:fprintf(stdout, _("PUK2"));break;
+       default:break;
+      }
+      fprintf(stdout, _(" is %s\n"),SecurityCode.Code);
+      break;
+    default:
+      fprintf(stderr, _("%s\n"),print_error(error));
+      break;
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+#endif
+
+/* Voice dialing mode. */
+
+int dialvoice(char *Number)
+{
+  fbusinit(NULL);
+
+  if (GSM->DialVoice(Number)!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Cancel a call */
+int cancelcall(void)
+{
+  fbusinit(NULL);
+
+  if (GSM->CancelCall()!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int savelogo(int argc, char *argv[])
+{
+  GSM_Bitmap bitmap;
+  GSM_NetworkInfo NetworkInfo;
+  GSM_MultiSMSMessage MultiSMS;
+
+  /* Operator logos will be saved with this number */  
+  char oplogonumber[]={'O','p','L','o','g','o',
+                      '0','0','0','0','0',   /* MMC+MNC */
+                      '\0'};
+  int i=0;
+  
+  bool UnicodeText=false;
+
+  /* The first argument is the type of the logo. */
+  if (!strcmp(argv[0], "op")) {
+    fprintf(stdout, _("Saving operator logo.\n"));
+  } else if (!strcmp(argv[0], "caller")) {
+    fprintf(stdout, _("Saving caller line identification logo.\n"));
+  } else if (!strcmp(argv[0], "startup")) {
+    fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "7110startup")) {
+    fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "6210startup")) {
+    fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "7110op")) {
+    fprintf(stderr, _("It isn't possible to save big operator logos!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "picture")) {
+    fprintf(stderr, _("Saving picture image.\n"));
+  } else if (!strcmp(argv[0], "screensaver")) {
+    fprintf(stderr, _("Saving screen saver.\n"));
+  } else {
+    fprintf(stderr, _("You should specify what kind of logo to save!\n"));
+    return (-1);
+  }
+
+  /* The second argument is the bitmap file. */
+  if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return -1;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  /* We check optional parameters from 2'rd */
+  optind = 2;
+
+  if (!strcmp(argv[0], "op")) {
+    GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+  
+    /* The third argument, if present, is the Network code of the operator.
+     * Network code is in this format: "xxx yy" */
+    if (argc > 2) {
+      strcpy(bitmap.netcode, argv[2]);
+#ifdef DEBUG
+      fprintf(stdout, _("Operator code: %s\n"), argv[2]);
+#endif
+      if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown")) {
+       fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+       GSM->Terminate();
+       return -1;
+      }
+      optind++;
+    } else
+    {
+      if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+    }
+    bitmap.type=GSM_OperatorLogo;
+
+    /* Put bitmap into SMS structure */
+    GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,false);
+
+    oplogonumber[6]=bitmap.netcode[0];
+    oplogonumber[7]=bitmap.netcode[1];
+    oplogonumber[8]=bitmap.netcode[2];
+    oplogonumber[9]=bitmap.netcode[4];
+    oplogonumber[10]=bitmap.netcode[5];
+    for(i=0;i<MultiSMS.number;i++)
+      strcpy(MultiSMS.SMS[i].Destination,oplogonumber);
+  }
+  if (!strcmp(argv[0], "caller")) {
+    GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+  
+    bitmap.type=GSM_CallerLogo;
+
+    /* Put bitmap into SMS structure */
+    GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,false);
+
+    for(i=0;i<MultiSMS.number;i++)
+      strcpy(MultiSMS.SMS[i].Destination,"GroupLogo");
+  }
+  if (!strcmp(argv[0], "screensaver")) {
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+    bitmap.text[0]=0;
+
+    for(i=0;i<argc;i++)
+      if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+    /* Put bitmap into SMS structure */
+    GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,true,UnicodeText);
+
+    for(i=0;i<MultiSMS.number;i++)
+      strcpy(MultiSMS.SMS[i].Destination,"ScreenSaver");
+  }
+  if (!strcmp(argv[0], "picture")) {  
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+    for(i=0;i<argc;i++)
+      if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+    bitmap.text[0]=0;
+    if (argc>2) {
+      optind++;
+      if (strlen(argv[2])>121) {
+        fprintf(stdout,_("Sorry: length of text (parameter \"%s\") can be 121 chars or shorter only !\n"),argv[2]);
+        return -1;
+      }
+      strcpy(bitmap.text,argv[2]);
+    }
+    
+    /* Put bitmap into SMS structure */
+    GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,UnicodeText);
+
+    for(i=0;i<MultiSMS.number;i++)
+      strcpy(MultiSMS.SMS[i].Destination,"Picture");
+  }
+
+  GSM_SaveMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,false,true,false,false);
+  
+  return i;
+}
+
+/* The following function allows to send logos using SMS */
+int sendlogo(int argc, char *argv[])
+{
+  GSM_Bitmap bitmap;
+  GSM_NetworkInfo NetworkInfo;
+  GSM_MultiSMSMessage MultiSMS;
+
+  int i;
+
+  bool UnicodeText=false;
+  bool ScreenSaver=false;
+
+  /* The first argument is the type of the logo. */
+  if (!strcmp(argv[0], "op")) {
+    fprintf(stdout, _("Sending operator logo.\n"));
+  } else if (!strcmp(argv[0], "caller")) {
+    fprintf(stdout, _("Sending caller line identification logo.\n"));
+  } else if (!strcmp(argv[0], "picture")) {
+    fprintf(stdout, _("Sending picture image.\n"));
+  } else if (!strcmp(argv[0], "screensaver")) {
+    fprintf(stdout, _("Sending screen saver.\n"));
+  } else if (!strcmp(argv[0], "startup")) {
+    fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "7110startup")) {
+    fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "6210startup")) {
+    fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+    return (-1);
+  } else if (!strcmp(argv[0], "7110op")) {
+    fprintf(stderr, _("It isn't possible to send big operator logos!\n"));
+    return (-1);
+  } else {
+    fprintf(stderr, _("You should specify what kind of logo to send!\n"));
+    return (-1);
+  }
+
+  /* The third argument is the bitmap file. */
+  if (GSM_ReadBitmapFileOnConsole(argv[2], &bitmap)!=GE_NONE) return -1;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  optind = 3;
+
+  if (!strcmp(argv[0], "op")) {
+    GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+  
+    /* The third argument, if present, is the Network code of the operator.
+     * Network code is in this format: "xxx yy" */
+    if (argc > 3) {
+      strcpy(bitmap.netcode, argv[3]);
+#ifdef DEBUG
+      fprintf(stdout, _("Operator code: %s\n"), argv[3]);
+#endif
+      if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown")) {
+       fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+       GSM->Terminate();
+       return -1;
+      }
+      optind++;
+    } else
+    {
+      if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+    }
+    bitmap.type=GSM_OperatorLogo;
+  }
+  if (!strcmp(argv[0], "caller")) {
+    GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+  
+    bitmap.type=GSM_CallerLogo;
+  }
+  if (!strcmp(argv[0], "screensaver")) {
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+    bitmap.text[0]=0;
+
+    for(i=0;i<argc;i++)
+      if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+    
+    ScreenSaver=true;
+  }
+  if (!strcmp(argv[0], "picture")) {  
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+    for(i=0;i<argc;i++)
+      if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+    bitmap.text[0]=0;
+    if (argc>3) {
+      optind++;
+      if (strlen(argv[3])>121) {
+        fprintf(stdout,_("Sorry: length of text (parameter \"%s\") can be 121 chars or shorter only !\n"),argv[3]);
+        return -1;
+      }
+      strcpy(bitmap.text,argv[3]);
+    }
+  }
+
+  /* Put bitmap into SMS structure */
+  GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,ScreenSaver,UnicodeText);
+
+  /* The second argument is the destination, ie the phone number of recipient. */
+  for(i=0;i<MultiSMS.number;i++)
+    strcpy(MultiSMS.SMS[i].Destination,argv[1]);
+
+  GSM_SendMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,true,false,false);
+
+  return i;
+}
+
+/* Getting logos. */
+
+int getlogo(int argc, char *argv[])
+{
+  GSM_Bitmap bitmap;
+  GSM_Error error;
+  int num;
+
+  bitmap.type=GSM_None;
+
+  if (!strcmp(argv[0],"7110op"))
+    bitmap.type=GSM_7110OperatorLogo;
+    
+  if (!strcmp(argv[0],"op"))
+    bitmap.type=GSM_OperatorLogo;
+    
+  if (!strcmp(argv[0],"caller")) {
+    /* There is caller group number missing in argument list. */
+    if (argc==3) {     
+      num=argv[2][0]-'0';
+      if ((num<1)||(num>9)) num=1;
+      bitmap.number=num;
+    } else
+    {
+      bitmap.number=1;
+    }
+    bitmap.number--;
+    bitmap.type=GSM_CallerLogo;
+  }
+
+  if (!strcmp(argv[0],"picture")) {
+    /* There is a number missing in argument list. */
+    if (argc==3) {     
+      if (strlen(argv[2])==2) {
+        num=(argv[2][0]-'0')*10+(argv[2][1]-'0');
+      } else {
+        num=argv[2][0]-'0';
+      }
+      if (num<1) num=1;
+      bitmap.number=num;
+    } else
+    {
+      bitmap.number=1;
+    }
+    bitmap.number--;
+    bitmap.type=GSM_PictureImage;
+  }    
+
+  if (!strcmp(argv[0],"startup"))
+    bitmap.type=GSM_StartupLogo;
+
+  if (!strcmp(argv[0],"7110startup"))
+    bitmap.type=GSM_7110StartupLogo;
+
+  if (!strcmp(argv[0],"6210startup"))
+    bitmap.type=GSM_6210StartupLogo;
+    
+  if (!strcmp(argv[0],"dealer"))
+    bitmap.type=GSM_DealerNoteText;  
+    
+  if (!strcmp(argv[0],"text"))
+    bitmap.type=GSM_WelcomeNoteText;  
+
+  if (bitmap.type!=GSM_None) {
+  
+    fbusinit(NULL);
+    
+    fprintf(stdout, _("Getting Logo\n"));
+        
+    error=GSM->GetBitmap(&bitmap);
+
+    GSM->Terminate();
+    
+    switch (error)
+    {
+      case GE_NONE:
+        if (bitmap.type==GSM_DealerNoteText) fprintf(stdout, _("Dealer welcome note "));
+        if (bitmap.type==GSM_WelcomeNoteText) fprintf(stdout, _("Welcome note "));     
+        if (bitmap.type==GSM_DealerNoteText || bitmap.type==GSM_WelcomeNoteText)
+       {
+          if (bitmap.text[0]!=0)
+         {
+           fprintf(stdout, _("currently set to \"%s\"\n"), bitmap.text);
+         } else {
+            fprintf(stdout, _("currently empty\n"));
+         }
+        } else
+        {
+          if (bitmap.width!=0)
+          {
+            if (bitmap.type==GSM_OperatorLogo || bitmap.type==GSM_7110OperatorLogo)
+           {
+              fprintf(stdout,"Operator logo for %s (%s) network got succesfully\n",bitmap.netcode,GSM_GetNetworkName(bitmap.netcode));
+           }
+            if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_7110StartupLogo || bitmap.type==GSM_6210StartupLogo)
+           {
+              fprintf(stdout,"Startup logo got successfully\n");
+           }
+            if (bitmap.type==GSM_CallerLogo)
+           {
+              fprintf(stdout,"Caller logo got successfully\n");
+           }
+            if (bitmap.type==GSM_PictureImage)
+           {
+              fprintf(stdout,"Picture Image got successfully");
+             if (strcmp(bitmap.text,""))
+                fprintf(stdout,_(", text \"%s\""),bitmap.text);                
+             if (strcmp(bitmap.Sender,""))
+                fprintf(stdout,_(", sender \"%s\""),bitmap.Sender);            
+              fprintf(stdout,"\n");
+           }
+            if (argc>1)
+           {
+             if (GSM_SaveBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return(-1);
+           }
+          } else
+          {
+            fprintf(stdout,"Your phone doesn't have logo uploaded !\n");
+           return -1;
+          }
+        }
+       break;
+      case GE_NOTIMPLEMENTED:
+        fprintf(stderr, _("Function not implemented !\n"));
+        return -1;
+      case GE_NOTSUPPORTED:
+        fprintf(stderr, _("This kind of logo is not supported !\n"));
+        return -1;
+      default:
+        fprintf(stderr, _("Error getting logo (wrong location ?) !\n"));
+        return -1;
+    }
+  } else
+  {
+    fprintf(stderr, _("What kind of logo do you want to get ?\n"));
+    return -1;
+  }
+
+  return 0;
+}
+
+/* Setting logos. */
+
+int setlogo(int argc, char *argv[])
+{
+
+  GSM_Bitmap bitmap,oldbit;
+  GSM_NetworkInfo NetworkInfo;
+  GSM_Error error;
+  char model[64];
+  int num;
+  
+  bool ok=true;
+  
+  int i;
+  
+  fbusinit(NULL);
+  
+  if (!strcmp(argv[0],"text") || !strcmp(argv[0],"dealer"))
+  {
+    if (!strcmp(argv[0],"text")) bitmap.type=GSM_WelcomeNoteText;
+                            else bitmap.type=GSM_DealerNoteText;
+    bitmap.text[0]=0x00;
+    if (argc>1) strncpy(bitmap.text,argv[1],255);
+  } else
+  {
+    if (!strcmp(argv[0],"op") || !strcmp(argv[0],"startup") || !strcmp(argv[0],"caller") ||
+        !strcmp(argv[0],"7110op") || !strcmp(argv[0],"6210startup") || !strcmp(argv[0],"7110startup") ||
+       !strcmp(argv[0],"picture"))
+    {
+      if (argc>1)
+      {
+        if (!strcmp(argv[0],"startup"))
+        {
+          bitmap.type=GSM_StartupLogo;
+          bitmap.width=84;
+          bitmap.height=48;
+         bitmap.size=bitmap.width*bitmap.height/8;
+          num=argv[1][0]-'0';
+          if (num>=1 && num<=3) {
+           bitmap.number=num;
+          } else {
+            if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) {
+              GSM->Terminate();
+              return(-1);
+            }
+           bitmap.number=0;
+            GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+          }
+        } else {
+          if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) {
+            GSM->Terminate();
+           return(-1);
+          }
+        }
+        if (!strcmp(argv[0],"op"))
+        {
+          if (bitmap.type!=GSM_OperatorLogo || argc<3)
+          {
+           if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+         }
+          GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+         if (argc==3)
+         {
+           strncpy(bitmap.netcode,argv[2],7);
+           if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+           {
+             fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+             return -1;
+           }
+         }
+        }
+        if (!strcmp(argv[0],"7110op"))
+        {
+          if (bitmap.type!=GSM_7110OperatorLogo || argc<3)
+          {
+           if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+         }
+          GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+         if (argc==3)
+         {
+           strncpy(bitmap.netcode,argv[2],7);
+           if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+           {
+             fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+             return -1;
+           }
+         }
+        }
+        if (!strcmp(argv[0],"picture"))
+        {
+          GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+         bitmap.number=1;
+         if (argc>2)
+         {
+            if (strlen(argv[2])==2) {
+              num=(argv[2][0]-'0')*10+(argv[2][1]-'0');
+            } else {
+              num=argv[2][0]-'0';
+            }
+            if (num<1) num=1;  
+           bitmap.number=num;
+          }
+         bitmap.number--;
+         bitmap.text[0]=0;
+         if (argc>3)
+           strncpy(bitmap.text,argv[3],121);
+         strcpy(bitmap.Sender,"\0");
+         if (argc>4)
+           strncpy(bitmap.Sender,argv[4],GSM_MAX_SENDER_LENGTH);
+        }
+        if (!strcmp(argv[0],"7110startup"))
+        {
+          GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+        }
+        if (!strcmp(argv[0],"6210startup"))
+        {
+          GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+        }
+        if (!strcmp(argv[0],"caller"))
+        {
+          GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+          if (argc>2)
+         {
+           num=argv[2][0]-'0';
+           if ((num<0)||(num>9)) num=0;
+           bitmap.number=num;
+          } else
+         {
+           bitmap.number=0;
+         }
+          oldbit.type=GSM_CallerLogo;
+          oldbit.number=bitmap.number;
+          if (GSM->GetBitmap(&oldbit)==GE_NONE)
+         {
+            /* We have to get the old name and ringtone!! */
+           bitmap.ringtone=oldbit.ringtone;
+           strncpy(bitmap.text,oldbit.text,255);
+         }
+          if (argc>3) strncpy(bitmap.text,argv[3],255);          
+        }
+       fprintf(stdout, _("Setting Logo.\n"));
+      } else
+      {
+        /* FIX ME: is it possible to permanently remove op logo ? */
+        if (!strcmp(argv[0],"op"))
+        {
+         bitmap.type=GSM_OperatorLogo;
+         strncpy(bitmap.netcode,"000 00",7);
+         bitmap.width=72;
+         bitmap.height=14;
+         bitmap.size=bitmap.width*bitmap.height/8;
+         GSM_ClearBitmap(&bitmap);
+       }
+        if (!strcmp(argv[0],"7110op"))
+        {
+         bitmap.type=GSM_7110OperatorLogo;
+         strncpy(bitmap.netcode,"000 00",7);
+         bitmap.width=78;
+         bitmap.height=21;
+          bitmap.size=(bitmap.width*bitmap.height + 7)/8;
+         GSM_ClearBitmap(&bitmap);
+       }
+       /* FIX ME: how to remove startup and group logos ? */
+       fprintf(stdout, _("Removing Logo.\n"));
+      }  
+    } else
+    {
+      fprintf(stderr, _("What kind of logo do you want to set ?\n"));
+      GSM->Terminate();
+      return -1;
+    }
+  }
+    
+  while (GSM->GetModel(model)  != GE_NONE)
+    sleep(1);
+  
+  /* For Nokia 6110/6130/6150 we use different method of uploading.
+     Phone will display menu, when received it */
+  if (!strcmp(model,"NSE-3") || !strcmp(model,"NSK-3") || !strcmp(model,"NSM-1"))
+  {
+    if (!strcmp(argv[0],"caller") && argc<3)
+      bitmap.number=255;
+    if (!strcmp(argv[0],"op") && argc<3)
+      bitmap.number=255;
+  }
+
+  error=GSM->SetBitmap(&bitmap);
+  
+  switch (error)
+  {
+    case GE_NONE: oldbit.type=bitmap.type;
+                  oldbit.number=bitmap.number;
+                  if (GSM->GetBitmap(&oldbit)==GE_NONE) {
+                   if (bitmap.type==GSM_WelcomeNoteText ||
+                       bitmap.type==GSM_DealerNoteText) {
+                     if (strcmp(bitmap.text,oldbit.text)) {
+                        fprintf(stderr, _("Error setting"));
+                       if (bitmap.type==GSM_DealerNoteText) fprintf(stderr, _(" dealer"));
+                       fprintf(stderr, _(" welcome note - "));
+
+                        /* I know, it looks horrible, but... */
+                       /* I set it to the short string - if it won't be set */
+                       /* it means, PIN is required. If it will be correct, previous */
+                       /* (user) text was too long */
+
+                       /* Without it, I could have such thing: */
+                       /* user set text to very short string (for example, "Marcin") */
+                       /* then enable phone without PIN and try to set it to the very long (too long for phone) */
+                       /* string (which start with "Marcin"). If we compare them as only length different, we could think, */
+                       /* that phone accepts strings 6 chars length only (length of "Marcin") */
+                       /* When we make it correct, we don't have this mistake */
+                       
+                       strcpy(oldbit.text,"!\0");
+                       GSM->SetBitmap(&oldbit);
+                       GSM->GetBitmap(&oldbit);
+                       if (oldbit.text[0]!='!') {
+                         fprintf(stderr, _("SIM card and PIN is required\n"));
+                       } else {
+                         GSM->SetBitmap(&bitmap);
+                         GSM->GetBitmap(&oldbit);
+                         fprintf(stderr, _("too long, truncated to \"%s\" (length %i)\n"),oldbit.text,strlen(oldbit.text));
+                       }
+                        ok=false;
+                     }
+                   } else {
+                     if (bitmap.type==GSM_StartupLogo) {
+                       for (i=0;i<oldbit.size;i++) {
+                         if (oldbit.bitmap[i]!=bitmap.bitmap[i]) {
+                           fprintf(stderr, _("Error setting startup logo - SIM card and PIN is required\n"));
+                           ok=false;
+                           break;
+                         }
+                       }
+                     }
+                   }
+                 }
+                 if (ok) fprintf(stdout, _("Done.\n"));
+                  break;
+    case GE_NOTIMPLEMENTED:fprintf(stderr, _("Function not implemented.\n"));
+                           break;
+    case GE_NOTSUPPORTED:fprintf(stderr, _("This kind of logo is not supported.\n"));
+                           break;
+    default:fprintf(stderr, _("Error (wrong location ?) !\n"));
+            break;
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Calendar notes receiving. */
+
+int getcalendarnote(int argc, char *argv[])
+{
+  GSM_CalendarNote CalendarNote;
+  GSM_NotesInfo NotesInfo;
+  GSM_Error error;
+  int i;
+  int vCalVer=0;
+  bool vInfo=false;
+  int start, stop;
+  bool was_note=false;
+  char z_text[MAX_CALENDAR_TEXT_LENGTH+11];
+
+  /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+  char model[64];
+
+  struct tm *now;
+  time_t nowh;
+  GSM_DateTime Date;
+
+  nowh=time(NULL);
+  now=localtime(&nowh);
+  
+  Date.Year = now->tm_year;
+
+  /* I have 100 (for 2000) Year now :-) */
+  if (Date.Year>99 && Date.Year<1900) {
+    Date.Year=Date.Year+1900;
+  }
+
+  start=atoi(argv[0]);  
+  stop=start;
+  
+  switch (argc) {
+    case 2:
+      if (!strcmp(argv[argc-1],"-v10")) {
+        vCalVer=10;
+      } else {
+        if (!strcmp(argv[argc-1],"-v30")) {
+          vCalVer=30;
+        } else {
+          stop=atoi(argv[1]);
+        }
+      }
+      break;
+    case 3:
+      stop=atoi(argv[1]);
+      if (!strcmp(argv[argc-1],"-v10")) {
+        vCalVer=10;
+      } else {
+        if (!strcmp(argv[argc-1],"-v30")) {
+          vCalVer=30;
+        } else {      
+          usage();
+          return -1;
+       }
+      }
+      break;
+  }
+
+  fbusinit(NULL);
+
+  while (GSM->GetModel(model)  != GE_NONE)
+    sleep(1);
+
+  if (!strcmp(argv[0],"-s") || !strcmp(argv[0],"--short")) 
+    vInfo=true;
+  else if (!isdigit(argv[0][0])) {
+    usage();
+    return -1;
+  }
+    
+  error=GSM->GetCalendarNotesInfo(&NotesInfo);
+  if ( error == GE_NONE ) {
+     if( NotesInfo.HowMany == 0 ) {
+        fprintf(stderr, _("Sorry! No Calendar Notes present on phone.\n"));
+        start=0; stop=(-1); /* This for skipping next 'for' loop ;-> */
+      }
+#ifdef DEBUG
+      fprintf(stdout, _(" CALENDAR NOTES INFO \n"));
+      fprintf(stdout, _("---------------------\n"));
+      fprintf(stdout, _("How Many Locations :%d\n"), NotesInfo.HowMany);
+
+      /* For 6210 (NPE-3) and 7110 (NSE-5), Locations have a different behaviour */
+      if ( GetModelFeature (FN_CALENDAR)==F_CAL71 ) {
+       fprintf(stdout, _("Locations are :\n"));
+       for(i=0;i<NotesInfo.HowMany;i++)
+           fprintf(stdout, _("%4d) %4d\n"), i+1, NotesInfo.Location[i]);
+      }
+#endif
+  } else {
+      /* For 6210 (NPE-3) and 7110 (NSE-5), Locations have a different behaviour */
+      if ( GetModelFeature (FN_CALENDAR)==F_CAL71 ) {
+        fprintf(stderr, _("Can't read Notes Infos from phone.\n"));
+       start=0; stop=(-1); /* This for skipping next 'for' loop ;-> */
+      }
+  }
+
+  if (GetModelFeature (FN_CALENDAR)!=F_CAL71) {
+    error=GE_NONE;
+    NotesInfo.HowMany=200;
+    for (i=0;i<200;i++) {
+      NotesInfo.Location[i]=i+1;
+    }
+  }
+  
+  if( vInfo && stop!=(-1) && error==GE_NONE )
+  {
+    /* Info datas (for 7110 and comp.) */
+    fprintf(stdout, _(" CALENDAR NOTES SUMMARY INFORMATION \n"));
+    fprintf(stdout, _(" ==================================\n"));
+    if (GetModelFeature (FN_CALENDAR)==F_CAL71) {
+      fprintf(stdout, _("Calendar notes present on phone: %d\n"), NotesInfo.HowMany);
+      fprintf(stdout, _("Locations are :\n"));
+    }
+    fprintf(stdout,  "----------------------------------------------------------------------------\n");
+    fprintf(stdout,_(" Loc Phys Type    Summary description              Dt start    Alarm  Recurs\n") );
+    fprintf(stdout,  "----------------------------------------------------------------------------\n");
+
+    for(i=0;i<NotesInfo.HowMany;i++)
+    {
+      /* very short format ... */
+      /*
+      fprintf(stdout, _("%4d) %4d\n"), i, NotesInfo.Location[i]);
+      */
+      CalendarNote.Location=i+1;
+      CalendarNote.ReadNotesInfo=false;
+
+      if (GSM->GetCalendarNote(&CalendarNote) == GE_NONE) {
+        char z_type[11];
+        char z_recur[15];
+        switch (CalendarNote.Type) {
+           case GCN_REMINDER:strcpy(z_type, "REMIND");  break;
+           case GCN_CALL:    strcpy(z_type, "CALL");    break;
+           case GCN_MEETING: strcpy(z_type, "MEETING"); break;
+           case GCN_BIRTHDAY:strcpy(z_type, "BDAY");    break;
+           default:          strcpy(z_type, "UNKNOWN"); break;
+          }
+
+        if( CalendarNote.Recurrance ) {
+          sprintf( z_recur,"%d ", CalendarNote.Recurrance/24 );
+          strcat( z_recur, CalendarNote.Recurrance == 1 ? "day" : "days" );
+        }
+        else
+          strcpy( z_recur, "No" );
+
+        strcpy(z_text,"");
+       
+        if( CalendarNote.Type == GCN_CALL )
+          sprintf(z_text, "\"%s\"", CalendarNote.Phone );
+         
+        if (CalendarNote.Text[0]!=0)
+          sprintf(z_text, "\"%s\"", CalendarNote.Text );
+         
+        if(CalendarNote.Type == GCN_BIRTHDAY) {
+          int i_age;
+          i_age = Date.Year - CalendarNote.Time.Year;
+          sprintf(z_text, "\"%s (%d %s)\"", CalendarNote.Text,
+             i_age, (i_age==1)?"year":"years");
+          strcpy( z_recur, "-" );
+         if (GetModelFeature (FN_CALENDAR)==F_CAL71)
+            fprintf(stdout,
+                _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d  %s %s\n"), 
+              i+1,NotesInfo.Location[i], z_type, z_text,
+              CalendarNote.Time.Year, 
+              CalendarNote.Time.Month, 
+              CalendarNote.Time.Day,
+              (CalendarNote.AlarmType==0x00) ? "Tone  " : "Silent",
+              " " );
+         else
+            fprintf(stdout,
+                _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d  %s %s\n"), 
+              i+1,NotesInfo.Location[i], z_type, z_text,
+              CalendarNote.Time.Year, 
+              CalendarNote.Time.Month, 
+              CalendarNote.Time.Day,
+             (CalendarNote.Alarm.Year) ? "Yes" : "No ",
+              " " );
+        } else
+         if (GetModelFeature (FN_CALENDAR)==F_CAL71)
+            fprintf(stdout,
+                _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d  %s    %s\n"), 
+              i+1,NotesInfo.Location[i], z_type, z_text,
+              CalendarNote.Time.Year, 
+              CalendarNote.Time.Month, 
+              CalendarNote.Time.Day,
+              (CalendarNote.Alarm.Year) ? "Yes" : "No ",
+              z_recur );
+           else
+            fprintf(stdout,
+                _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d  %s\n"), 
+              i+1,NotesInfo.Location[i], z_type, z_text,
+              CalendarNote.Time.Year, 
+              CalendarNote.Time.Month, 
+              CalendarNote.Time.Day,
+              (CalendarNote.Alarm.Year) ? "Yes" : "No ");
+      } else {
+        if (GetModelFeature (FN_CALENDAR)!=F_CAL71) break;
+      }
+    }
+  }
+  else
+  for (i=start;i<=stop;i++) {
+    if (error==GE_NONE) {
+       if( i>NotesInfo.HowMany ) {
+           fprintf(stderr, _("Only %d Calendar Notes present on phone!\n"),NotesInfo.HowMany);
+           break;
+       }
+       if( i==0 ) {
+           fprintf(stderr, _("Calendar Notes location can't be zero... skipping.\n"));
+           continue;
+       }
+    }
+    
+    CalendarNote.Location=i;
+    CalendarNote.ReadNotesInfo=false;
+
+    if (GSM->GetCalendarNote(&CalendarNote) == GE_NONE) {
+
+      if (vCalVer!=0) {
+        if (!was_note) {
+          fprintf(stdout, GSM_GetVCALENDARStart(vCalVer));
+         was_note=true;
+        }
+
+        fprintf(stdout, GSM_GetVCALENDARNote(&CalendarNote,vCalVer));
+
+      } else {  /* not vCal */
+
+        if (was_note) {
+         fprintf(stdout, "\n");
+        } else {
+          was_note=true;
+       }
+
+        fprintf(stdout, _("   Type of the note: "));
+
+        switch (CalendarNote.Type) {
+
+         case GCN_REMINDER:fprintf(stdout, _("Reminder\n"));break;
+          case GCN_CALL    :fprintf(stdout, _("Call\n"));    break;
+          case GCN_MEETING :fprintf(stdout, _("Meeting\n")); break;
+          case GCN_BIRTHDAY:fprintf(stdout, _("Birthday\n"));break;
+         default:          fprintf(stdout, _("Unknown\n"));
+
+       }
+
+        /* For 3310: set date to 2090! */
+        if (GetModelFeature (FN_CALENDAR)==F_CAL33) {
+          fprintf(stdout, _("   Date: xxxx-%02d-%02d\n"), CalendarNote.Time.Month,
+                                                          CalendarNote.Time.Day);
+       } else {
+          fprintf(stdout, _("   Date: %s %d-%02d-%02d\n"), 
+               DayOfWeek(CalendarNote.Time.Year, CalendarNote.Time.Month, CalendarNote.Time.Day),
+                                                       CalendarNote.Time.Year,
+                                                        CalendarNote.Time.Month,
+                                                        CalendarNote.Time.Day);
+       }
+       
+        fprintf(stdout, _("   Time: %02d:%02d:%02d\n"), CalendarNote.Time.Hour,
+                                                        CalendarNote.Time.Minute,
+                                                        CalendarNote.Time.Second);
+
+        if (CalendarNote.Alarm.Year!=0) {
+          fprintf(stdout, _("   Alarm date: %s %d-%02d-%02d\n"), 
+                       DayOfWeek(CalendarNote.Alarm.Year, CalendarNote.Alarm.Month, CalendarNote.Alarm.Day),
+                                                             CalendarNote.Alarm.Year,
+                                                              CalendarNote.Alarm.Month,
+                                                              CalendarNote.Alarm.Day);
+
+          fprintf(stdout, _("   Alarm time: %02d:%02d:%02d\n"), CalendarNote.Alarm.Hour,
+                                                                CalendarNote.Alarm.Minute,
+                                                                CalendarNote.Alarm.Second);
+          if ( GetModelFeature (FN_CALENDAR)==F_CAL71 ) 
+            fprintf(stdout, _("   Alarm type: %s\n"), (CalendarNote.AlarmType==0x00) ?
+                                                          "With Tone" : "Silent" );
+        }
+
+        if ( GetModelFeature (FN_CALENDAR)==F_CAL71 && CalendarNote.Recurrance!= 0 ) 
+           fprintf(stdout, "   It repeat every %d day%s\n", CalendarNote.Recurrance/24,
+                       ((CalendarNote.Recurrance/24)>1) ? "s":"" );
+
+        if (CalendarNote.Type == GCN_BIRTHDAY)
+        {
+          int i_age;
+          i_age = Date.Year - CalendarNote.Time.Year;
+          fprintf(stdout, _("   Text: %s (%d %s)\n"), CalendarNote.Text,
+              i_age, (i_age==1)?"year":"years");
+        } else {
+          if (CalendarNote.Text[0]!=0)
+           fprintf(stdout, _("   Text: %s\n"), CalendarNote.Text);
+       }
+
+        if (CalendarNote.Type == GCN_CALL)
+          fprintf(stdout, _("   Phone: %s\n"), CalendarNote.Phone);
+      }
+    } else {
+      fprintf(stderr, _("The calendar note %i can not be read\n"),i);
+    }
+  }
+
+  if (was_note && vCalVer!=0) {
+    fprintf(stdout, GSM_GetVCALENDAREnd(vCalVer));
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Writing calendar notes. */
+
+int writecalendarnote(char *argv[])
+{
+  GSM_CalendarNote CalendarNote;
+  GSM_Error error;
+  int number;
+
+  number=atoi(argv[1]);
+  
+  if (number<1) {
+    fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+    return -1;
+  }
+  
+  switch ( GSM_ReadVCalendarFile(argv[0], &CalendarNote, &number) ) {
+    case GE_NONE:
+      break;
+    case GE_CANTOPENFILE:
+      fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[0]);
+      return -1;
+    case GE_TOOSHORT:
+      fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+      return(-1);
+    default:
+      fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[0]);
+      return -1;    
+  }
+
+  fbusinit(NULL);
+
+  /* Error 22=Calendar full ;-) */
+
+  error=GSM->WriteCalendarNote(&CalendarNote);
+  switch (error) {
+    case GE_NONE:
+      fprintf(stdout, _("Succesfully written!\n"));break;
+    case GE_TOOLONG:
+      fprintf(stdout, _("Too long text in calendar note!\n"));break;
+    default:
+      fprintf(stdout, _("Failed to write calendar note!\n"));break;
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Calendar note deleting. */
+
+int deletecalendarnote(char *Index)
+{
+
+  GSM_CalendarNote CalendarNote;
+
+  CalendarNote.Location=atoi(Index);
+
+  fbusinit(NULL);
+
+  if (GSM->DeleteCalendarNote(&CalendarNote) == GE_NONE) {
+    fprintf(stdout, _("   Calendar note deleted.\n"));
+  }
+  else {
+    fprintf(stderr, _("The calendar note can not be deleted\n"));
+
+    GSM->Terminate();
+    return -1;
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Setting the date and time. */
+
+int setdatetime(int argc, char *argv[])
+{
+  struct tm *now;
+  time_t nowh;
+  GSM_DateTime Date;
+
+  fbusinit(NULL);
+
+  nowh=time(NULL);
+  now=localtime(&nowh);
+
+  Date.Year = now->tm_year;
+  Date.Month = now->tm_mon+1;
+  Date.Day = now->tm_mday;
+  Date.Hour = now->tm_hour;
+  Date.Minute = now->tm_min;
+  Date.Second = now->tm_sec;
+
+  if (argc>0) Date.Year = atoi (argv[0]);
+  if (argc>1) Date.Month = atoi (argv[1]);
+  if (argc>2) Date.Day = atoi (argv[2]);
+  if (argc>3) Date.Hour = atoi (argv[3]);
+  if (argc>4) Date.Minute = atoi (argv[4]);
+
+  if (Date.Year<1900)
+  {
+
+    /* Well, this thing is copyrighted in U.S. This technique is known as
+       Windowing and you can read something about it in LinuxWeekly News:
+       http://lwn.net/1999/features/Windowing.phtml. This thing is beeing
+       written in Czech republic and Poland where algorithms are not allowed
+       to be patented. */
+
+    if (Date.Year>90)
+      Date.Year = Date.Year+1900;
+    else
+      Date.Year = Date.Year+2000;
+  }
+
+  /* FIXME: Error checking should be here. */
+  GSM->SetDateTime(&Date);
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* In this mode we receive the date and time from mobile phone. */
+
+int getdatetime(void) {
+
+  GSM_DateTime date_time;
+
+  fbusinit(NULL);
+
+  if (GSM->GetDateTime(&date_time)==GE_NONE) {
+    if (date_time.IsSet) {
+      fprintf(stdout, _("Date: %s %4d/%02d/%02d\n"), 
+          DayOfWeek(date_time.Year, date_time.Month, date_time.Day),
+          date_time.Year, date_time.Month, date_time.Day);
+      fprintf(stdout, _("Time: %02d:%02d:%02d\n"), date_time.Hour, date_time.Minute, date_time.Second);
+    } else {
+      fprintf(stdout, _("Date and time not set in phone\n"));
+    }
+  } else {
+    fprintf(stdout,_("Error!\n"));
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Setting the alarm. */
+
+int setalarm(char *argv[])
+{
+
+  GSM_DateTime Date;
+
+  fbusinit(NULL);
+
+  Date.Hour = atoi(argv[0]);
+  Date.Minute = atoi(argv[1]);
+
+  GSM->SetAlarm(1, &Date);
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Getting the alarm. */
+
+int getalarm(void) {
+
+  GSM_DateTime date_time;
+
+  fbusinit(NULL);
+
+  if (GSM->GetAlarm(0, &date_time)==GE_NONE) {
+    fprintf(stdout, _("Alarm: %s\n"), (date_time.IsSet)?"on":"off");
+    fprintf(stdout, _("Time: %02d:%02d\n"), date_time.Hour, date_time.Minute);
+  } else {
+    fprintf(stdout,_("Error!\n"));
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* In monitor mode we don't do much, we just initialise the fbus code.
+   Note that the fbus code no longer has an internal monitor mode switch,
+   instead compile with DEBUG enabled to get all the gumpf. */
+
+int monitormode(int argc, char *argv[])
+{
+
+  float rflevel=-1, batterylevel=-1;
+       unsigned char loop=1;
+
+  GSM_PowerSource powersource=-1;
+  GSM_RFUnits rf_units = GRF_Arbitrary;
+  GSM_BatteryUnits batt_units = GBU_Arbitrary;
+
+  GSM_NetworkInfo NetworkInfo;
+  GSM_CBMessage CBMessage;
+
+  GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0};
+  GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0};
+  GSM_MemoryStatus DC_MemoryStatus = {GMT_DC, 0, 0};
+  GSM_MemoryStatus EN_MemoryStatus = {GMT_EN, 0, 0};
+  GSM_MemoryStatus FD_MemoryStatus = {GMT_FD, 0, 0};
+  GSM_MemoryStatus LD_MemoryStatus = {GMT_LD, 0, 0};
+  GSM_MemoryStatus MC_MemoryStatus = {GMT_MC, 0, 0};
+  GSM_MemoryStatus ON_MemoryStatus = {GMT_ON, 0, 0};
+  GSM_MemoryStatus RC_MemoryStatus = {GMT_RC, 0, 0};
+
+  GSM_SMSStatus SMSStatus = {0, 0};
+
+  char Number[20];
+
+       /* evaluate for presence of "-noloop" argument in parameter */
+       if(argc>0)
+       {
+               if( strcmp(argv[0],"-noloop" ) && strcmp(argv[0],"-nl" ))
+               {
+                       usage();
+                       return -1;
+               }
+               else
+                       loop=0;
+       }
+
+  /* We do not want to monitor serial line forever - press Ctrl+C to stop the
+     monitoring mode. */
+
+  signal(SIGINT, interrupted);
+
+  fprintf (stderr, _("Entering monitor mode...\n"));
+  fprintf (stderr, _("Initialising GSM interface...\n"));
+
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  sleep(1);
+  GSM->EnableCellBroadcast();
+
+  /* Loop here indefinitely - allows you to see messages from GSM code in
+     response to unknown messages etc. The loops ends after pressing the
+     Ctrl+C. */
+  while (!bshutdown) {
+    if (GSM->GetRFLevel(&rf_units, &rflevel) == GE_NONE)
+      fprintf(stdout, _("RFLevel: %d\n"), (int)rflevel);
+
+    if (GSM->GetBatteryLevel(&batt_units, &batterylevel) == GE_NONE)
+      fprintf(stdout, _("Battery: %d\n"), (int)batterylevel);
+
+    if (GSM->GetPowerSource(&powersource) == GE_NONE)
+      fprintf(stdout, _("Power Source: %s\n"), (powersource==GPS_ACDC)?_("AC/DC"):_("battery"));
+
+    if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE)
+      fprintf(stdout, _("SIM: Used %d, Free %d\n"), SIMMemoryStatus.Used, SIMMemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&PhoneMemoryStatus) == GE_NONE)
+      fprintf(stdout, _("Phone: Used %d, Free %d\n"), PhoneMemoryStatus.Used, PhoneMemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&DC_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("DC: Used %d, Free %d\n"), DC_MemoryStatus.Used, DC_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&EN_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("EN: Used %d, Free %d\n"), EN_MemoryStatus.Used, EN_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&FD_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("FD: Used %d, Free %d\n"), FD_MemoryStatus.Used, FD_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&LD_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("LD: Used %d, Free %d\n"), LD_MemoryStatus.Used, LD_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&MC_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("MC: Used %d, Free %d\n"), MC_MemoryStatus.Used, MC_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&ON_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("ON: Used %d, Free %d\n"), ON_MemoryStatus.Used, ON_MemoryStatus.Free);
+
+    if (GSM->GetMemoryStatus(&RC_MemoryStatus) == GE_NONE)
+      fprintf(stdout, _("RC: Used %d, Free %d\n"), RC_MemoryStatus.Used, RC_MemoryStatus.Free);
+
+    if (GSM->GetSMSStatus(&SMSStatus) == GE_NONE)
+      fprintf(stdout, _("SMS Messages: UnRead %d, Number %d\n"), SMSStatus.UnRead, SMSStatus.Number);
+
+    if (GSM->GetIncomingCallNr(Number) == GE_NONE)
+      fprintf(stdout, _("Incoming call: %s\n"), Number);
+
+    if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE)
+      fprintf(stdout, _("Network: %s (%s), LAC: %s, CellID: %s\n"), GSM_GetNetworkName (NetworkInfo.NetworkCode), GSM_GetCountryName(NetworkInfo.NetworkCode), NetworkInfo.LAC, NetworkInfo.CellID);
+
+    if (GSM->ReadCellBroadcast(&CBMessage) == GE_NONE)
+      fprintf(stdout, _("Cell broadcast received on channel %d: %s\n"), CBMessage.Channel, CBMessage.Message);
+
+    if( !loop ) break;
+           
+    sleep(1);
+  }
+
+  if( loop ) fprintf (stderr, _("Leaving monitor mode...\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Shows texts from phone's display */
+
+int displayoutput()
+{
+
+  GSM_Error error;
+  
+  fbusinit(NULL);
+
+  error=GSM->EnableDisplayOutput();
+
+  if (error == GE_NONE)
+  {
+
+    /* We do not want to see texts forever - press Ctrl+C to stop. */
+
+    signal(SIGINT, interrupted);    
+
+    fprintf (stderr, _("Entering display monitoring mode...\n"));
+
+    /* Loop here indefinitely - allows you to read texts from phone's
+       display. The loops ends after pressing the Ctrl+C. */
+
+    while (!bshutdown)
+      sleep(1);
+
+    fprintf (stderr, _("Leaving display monitor mode...\n"));
+
+    error=GSM->DisableDisplayOutput();
+    if (error!=GE_NONE)
+      fprintf (stderr, _("Error!\n"));
+  } else
+      fprintf (stderr, _("Error!\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Displays names of available ringtones */
+int allringtones()
+{
+  char model[64], rev[64];
+  int i;
+
+  fbusinit(NULL);
+
+  while (GSM->GetRevision(rev) != GE_NONE)
+    sleep(1);
+
+  while (GSM->GetModel(model)  != GE_NONE)
+    sleep(1);
+
+  strncpy(rev,rev+2,5);
+  rev[5]=0;
+  PrepareRingingTones(model,rev);
+  
+  for (i=1;i<=NumberOfRingtones();i++)
+  {
+    fprintf(stdout,_("%i. %s\n"),i,RingingToneName(0,i));
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+
+}
+
+/* Reads profile from phone and displays its' settings */
+
+int getprofile(int argc, char *argv[])
+{
+
+  int max_profiles;
+  int start, stop, i;
+  GSM_Profile profile;
+  GSM_Error error;
+  
+  /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+  char model[64], rev[64];
+
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  profile.Number = 0;
+  error=GSM->GetProfile(&profile);
+
+  if (error == GE_NONE)
+  {
+  
+    while (GSM->GetModel(model)  != GE_NONE) sleep(1);
+
+    while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+
+    strncpy(rev,rev+2,5);
+    rev[5]=0;
+    PrepareRingingTones(model,rev);
+
+    switch(GetModelFeature (FN_PROFILES)) {
+      case F_PROF33:max_profiles=6;break;
+      case F_PROF51:max_profiles=3;break;
+      default      :max_profiles=7;break;
+    }
+
+    if (argc>0)
+    {
+      profile.Number=atoi(argv[0])-1;
+      start=profile.Number;
+      stop=start+1;
+
+      if (profile.Number < 0)
+      {
+         fprintf(stderr, _("Profile number must be value from 1 to %d!\n"), max_profiles);
+         GSM->Terminate();
+         return -1;
+      }
+
+      if (profile.Number >= max_profiles)
+      {
+         fprintf(stderr, _("This phone supports only %d profiles!\n"), max_profiles);
+         GSM->Terminate();
+         return -1;
+      }
+    } else {
+      start=0;
+      stop=max_profiles;
+    }
+
+    i=start;
+    while (i<stop)
+    {
+      profile.Number=i;
+
+      if (profile.Number!=0) GSM->GetProfile(&profile);
+
+      printf("%d. \"%s\"", (profile.Number+1), profile.Name);
+      if (profile.DefaultName==-1) printf(" (name defined)");
+      printf("\n");
+
+#ifdef DEBUG
+      printf("Incoming call alert: %d\n", profile.CallAlert);
+      printf("Ringtone ID: %d\n", profile.Ringtone);
+      printf("Ringing volume: %d\n", profile.Volume);
+      printf("Message alert tone: %d\n", profile.MessageTone);
+      printf("Keypad tones: %d\n", profile.KeypadTone);
+      printf("Warning and game tones: %d\n", profile.WarningTone);
+      printf("Lights: %d\n", profile.Lights);
+      printf("Vibration: %d\n", profile.Vibration);
+      printf("Caller groups: 0x%02x\n", profile.CallerGroups);
+      printf("Automatic answer: %d\n", profile.AutomaticAnswer);
+      printf("Screen saver: %d\n", profile.ScreenSaver);
+      printf("\n");
+#endif
+      
+      printf("Incoming call alert: %s\n", GetProfileCallAlertString(profile.CallAlert));
+
+      /* For different phones different ringtones names */
+      if (strcmp(RingingToneName(profile.Ringtone,0),""))
+        printf(_("Ringing tone: %s (number %d in phone menu)\n"), 
+          RingingToneName(profile.Ringtone,0), RingingToneMenu(profile.Ringtone));
+      else
+        printf(_("Ringtone number: %d\n"), profile.Ringtone);
+
+      printf(_("Ringing volume: %s\n"), GetProfileVolumeString(profile.Volume));
+
+      printf(_("Message alert tone: %s\n"), GetProfileMessageToneString(profile.MessageTone));
+
+      printf(_("Keypad tones: %s\n"), GetProfileKeypadToneString(profile.KeypadTone));
+
+      printf(_("Warning and game tones: %s\n"), GetProfileWarningToneString(profile.WarningTone));
+
+      if (GetModelFeature (FN_SCREENSAVER)!=0)
+        printf(_("Screen saver: %s\n"), GetProfileOnOffString(profile.ScreenSaver));
+      
+      printf(_("Vibration: %s\n"), GetProfileVibrationString(profile.Vibration));
+
+      /* It has been nice to add here reading caller group name. ;^) */
+      if (GetModelFeature (FN_CALENDAR)==F_CAL71) 
+        printf(_("Caller groups: %s\n"), 
+                              GetProfileCallerGroups(profile.CallerGroups) );
+
+      /* FIXME: need make investigation for 3310 for these features. For now unknown */
+      if (GetModelFeature (FN_PROFILES)!=F_PROF33) {
+        /* FIXME: Light settings is only used for Car */
+        if (profile.Number==(max_profiles-2)) printf(_("Lights: %s\n"), profile.Lights ? _("On") : _("Automatic"));
+
+        /* FIXME: Automatic answer is only used for Car and Headset. */
+        if (profile.Number>=(max_profiles-2)) printf(_("Automatic answer: %s\n"), GetProfileOnOffString(profile.AutomaticAnswer));
+      }
+
+      printf("\n");
+
+      i++;
+    }
+  } else {
+    if (error == GE_NOTIMPLEMENTED) {
+       fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+       GSM->Terminate();
+       return -1;
+    } else
+    {
+      fprintf(stderr, _("Unspecified error\n"));
+      GSM->Terminate();
+      return -1;
+    }
+  }
+
+  GSM->Terminate();
+
+  return 0;
+
+}
+
+/* Sets profile feature */
+
+int setprofile(int argc, char *argv[])
+{
+
+/* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+  char model[64], rev[64];
+
+  int max_profiles;
+  GSM_Profile profile;
+  GSM_Profile profile2, profile3;
+  GSM_Error error;
+  bool correct_arg1;
+  bool correct_arg2;
+  
+/* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+  
+  profile.Number = 0;
+
+  error = GSM->GetProfile(&profile);
+  
+  if (error == GE_NONE)
+  {
+    while (GSM->GetModel(model)  != GE_NONE) sleep(1);
+      
+    while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+
+    strncpy(rev,rev+2,5);
+    rev[5]=0;
+    PrepareRingingTones(model,rev);
+
+    switch(GetModelFeature (FN_PROFILES)) {
+      case F_PROF33:max_profiles=6;break;
+      case F_PROF51:max_profiles=3;break;
+      default      :max_profiles=7;break;
+    }
+
+    profile.Number=atoi (argv[0]);
+    profile.Number=profile.Number-1;
+    
+    if (profile.Number < 0)
+    {
+      fprintf(stderr, _("Profile number must be value from 1 to %i!\n"), max_profiles);
+      GSM->Terminate();
+      return -1;
+    }
+    
+    if (profile.Number >= max_profiles)
+    {
+      fprintf(stderr, _("This phone supports only %i profiles!\n"), max_profiles);
+      GSM->Terminate();
+      return -1;
+    }
+      
+    if (profile.Number!=0) GSM->GetProfile(&profile);
+        
+    correct_arg1=false;
+    correct_arg2=false;
+
+    if (strcmp(argv[1], "callalert")==0)
+    {
+       if (strcmp(argv[2], "ringing")==0) {profile.CallAlert=PROFILE_CALLALERT_RINGING;correct_arg2=true;}
+       if (strcmp(argv[2], "ascending")==0) {profile.CallAlert=PROFILE_CALLALERT_ASCENDING;correct_arg2=true;}
+       if (strcmp(argv[2], "ringonce")==0) {profile.CallAlert=PROFILE_CALLALERT_RINGONCE;correct_arg2=true;}
+       if (strcmp(argv[2], "beeponce")==0) {profile.CallAlert=PROFILE_CALLALERT_BEEPONCE;correct_arg2=true;}
+       if (strcmp(argv[2], "groups")==0)
+       {
+         profile.CallAlert=PROFILE_CALLALERT_CALLERGROUPS;
+        correct_arg2=true;
+        /*Ignored by N5110*/
+        /*FIX ME: it's ignored by N5130 and 3210 too*/
+        if (max_profiles==3) fprintf(stdout, _("Warning: value \"groups\" for profile feature \"callalert\" will be ignored in this phone model !\n"));
+       }
+       if (strcmp(argv[2], "off")==0 || strcmp(argv[2], "0")==0) {profile.CallAlert=PROFILE_CALLALERT_OFF;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"callalert\" are ringing|ascending|ringonce|beeponce|groups|off|0 !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "volume")==0)
+    {
+       if (strcmp(argv[2], "1")==0) {profile.Volume=PROFILE_VOLUME_LEVEL1;correct_arg2=true;}
+       if (strcmp(argv[2], "2")==0) {profile.Volume=PROFILE_VOLUME_LEVEL2;correct_arg2=true;}
+       if (strcmp(argv[2], "3")==0) {profile.Volume=PROFILE_VOLUME_LEVEL3;correct_arg2=true;}
+       if (strcmp(argv[2], "4")==0) {profile.Volume=PROFILE_VOLUME_LEVEL4;correct_arg2=true;}
+       if (strcmp(argv[2], "5")==0) {profile.Volume=PROFILE_VOLUME_LEVEL5;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"volume\" are 0|1|2|3|4|5 !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "keypad")==0 || strcmp(argv[1], "keypadtone")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.KeypadTone=PROFILE_KEYPAD_OFF;correct_arg2=true;}
+       if (strcmp(argv[2], "1")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL1;correct_arg2=true;}
+       if (strcmp(argv[2], "2")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL2;correct_arg2=true;}
+       if (strcmp(argv[2], "3")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL3;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"keypad|keypadtone\" are off|0|1|2|3 !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "messagetone")==0 || strcmp(argv[1], "smstone")==0 || strcmp(argv[1], "sms")==0 || strcmp(argv[1], "message")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.MessageTone=PROFILE_MESSAGE_NOTONE;correct_arg2=true;}
+       if (strcmp(argv[2], "standard")==0) {profile.MessageTone=PROFILE_MESSAGE_STANDARD;correct_arg2=true;}
+       if (strcmp(argv[2], "special")==0) {profile.MessageTone=PROFILE_MESSAGE_SPECIAL;correct_arg2=true;}
+       if (strcmp(argv[2], "beeponce")==0 || strcmp(argv[2], "once")==0) {profile.MessageTone=PROFILE_MESSAGE_BEEPONCE;correct_arg2=true;}
+       if (strcmp(argv[2], "ascending")==0) {profile.MessageTone=PROFILE_MESSAGE_ASCENDING;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"messagetone|smstone|message|sms\" are 0|off|standard|special|beeponce|once|ascending !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "warningtone")==0 || strcmp(argv[1], "warning")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.WarningTone=PROFILE_WARNING_OFF;correct_arg2=true;}
+       if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.WarningTone=PROFILE_WARNING_ON;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"warningtone|warning\" are 0|off|1|on !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "vibra")==0 || strcmp(argv[1], "vibration")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.Vibration=PROFILE_VIBRATION_OFF;correct_arg2=true;}
+       if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.Vibration=PROFILE_VIBRATION_ON;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"vibration|vibra\" are 0|off|1|on !\n"));
+         GSM->Terminate();
+         return -1;
+        }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "lights")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.Lights=-1;correct_arg2=true;}
+       if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.Lights=0;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"lights\" are 0|off|1|on !\n"));
+         GSM->Terminate();
+         return -1;
+       }
+       if (profile.Number!=(max_profiles-2))
+       {
+         profile2.Number=max_profiles-2;
+        if (GSM->GetProfile(&profile2)==GE_NONE)
+        {
+           fprintf(stdout, _("Warning: \"Lights\" feature is ignored in this profile (only setting it for \"%s\" profile get some results) !\n"), profile2.Name);
+        }
+       }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "answer")==0)
+    {
+       if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.AutomaticAnswer=-1;correct_arg2=true;}
+       if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.AutomaticAnswer=0;correct_arg2=true;}
+       if (!correct_arg2)
+       {
+        fprintf(stderr, _("Correct parameters for profile feature \"answer\" are 0|off|1|on !\n"));
+         GSM->Terminate();
+         return -1;
+       }
+       if (profile.Number<(max_profiles-2))
+       {
+         profile2.Number=max_profiles-2;
+        if (GSM->GetProfile(&profile2)==GE_NONE)
+        {
+          profile3.Number=max_profiles-1;
+          if (GSM->GetProfile(&profile3)==GE_NONE)
+          {
+             fprintf(stdout, _("Warning: \"Automatic Answer\" feature is ignored in this profile (only setting it for \"%s\" and \"%s\" profiles get some results) !\n"), profile2.Name, profile3.Name);
+          }
+        }
+       }
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "name")==0)
+    {
+       strcpy(profile.Name,argv[2]);
+       /*Ignored by N5110*/
+       /*FIX ME: it's ignored by N5130 and 3210 too*/
+       if (max_profiles==3) fprintf(stdout, _("Warning: this phone model doesn't allow to change profile name !\n"));
+       correct_arg1=true;
+    }
+    if (strcmp(argv[1], "ringtone")==0)
+    {
+      profile.Ringtone=atoi(argv[2]);
+      if (profile.Ringtone<1)
+      {
+        /*With value 0 results are interesting in N5110, but can't be used for anything*/
+        fprintf(stderr, _("Ringtone number must be higher than 0 !\n"));
+        GSM->Terminate();
+        return -1; 
+      } else
+      {
+        if (profile.Ringtone>NumberOfRingtones())
+       {
+          fprintf(stderr, _("Ringtone number too high (max %i) !\n"),NumberOfRingtones());
+          GSM->Terminate();
+          return -1;
+        }  
+       profile.Ringtone=RingingToneCode(profile.Ringtone);
+       if (profile.Ringtone==0)
+       {
+          fprintf(stderr, _("Warning: we don't know ringtones codes for this model ! Can you contact with gnokii authors to add it into source ?\n"));
+          GSM->Terminate();
+          return -1;
+       }
+       if (max_profiles==3) fprintf(stdout, _("Warning: ringtone is changed for all profiles. You must reset phone or select profile in phone againg to see result.\n"));
+      }
+      correct_arg1=true;
+    }
+    if (strcmp(argv[1], "groups")==0)
+    {
+       /*Ignored by N5110*/
+       /*FIX ME: it's ignored by N5130 and 3210 too*/
+       if (max_profiles==3) fprintf(stdout, _("Warning: this phone model doesn't allow to change caller group name !\n"));
+       profile.CallerGroups=atoi(argv[2]);
+       correct_arg1=true;
+    }
+
+    if (!correct_arg1)
+    {
+      fprintf(stderr, _("Correct profile feature names are callalert|volume|keypad|keypadtone|messagetone|smstone|message|sms|warningtone|warning|vibra|vibration|lights|answer|name|groups !\n"));
+      GSM->Terminate();
+      return -1;
+    }
+    
+    GSM->SetProfile(&profile);
+    
+  } else {
+    if (error == GE_NOTIMPLEMENTED) {
+       fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+       GSM->Terminate();
+       return -1;
+    } else
+    {
+      fprintf(stderr, _("Unspecified error\n"));
+      GSM->Terminate();
+      return -1;
+    }
+  }
+  GSM->Terminate();
+
+  return 0;
+
+}
+
+/* Get requested range of memory storage entries and output to stdout in
+   easy-to-parse format */
+
+int getmemory(int argc, char *argv[])
+{
+
+  GSM_PhonebookEntry entry;
+  int count;
+  register int i;
+  GSM_Error error;
+  GSM_Bitmap bitmap;
+  char memory_type_string[20];
+  int start_entry;
+  int end_entry;
+  int i_used = 0, n_used=0;
+  int do_all;
+  char *output_opt = NULL;
+  bool wasdate=false;
+  char az_group_name[5][MAX_BITMAP_TEXT_LENGTH];
+  bool formatdone=false;
+  char buf[64];
+
+  /* group names init */
+  for(i=0;i<5;i++) az_group_name[i][0]='\0';
+
+  /* Handle command line args that set type, start and end locations. */
+  if (!GetMemoryTypeID(argv[0], &entry.MemoryType))
+  {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+    return (-1);
+  }
+  GetMemoryTypeString(memory_type_string, &entry.MemoryType);
+
+  if (argv[argc-1][0] == '-')
+    output_opt = argv[--argc];
+
+  /* Do generic initialisation routine */
+
+  fbusinit(NULL);
+
+  while ((error = GSM->GetModel(buf)) != GE_NONE && i++ < 15)
+    sleep(1);
+
+  if (argc > 1) {
+    do_all = 0;
+    start_entry = atoi (argv[1]);
+    end_entry = argc > 2 ? atoi( argv[2]) : start_entry;
+  } else {
+    GSM_MemoryStatus stats = {entry.MemoryType, 0, 0};
+
+    do_all = 1;
+    start_entry = 1;
+    if (GSM->GetMemoryStatus( &stats) != GE_NONE) {
+      fprintf( stderr, _("Error reading memory status.\n"));
+      GSM->Terminate();
+      return -1;
+    }
+    n_used = stats.Used;
+    end_entry = stats.Used + stats.Free;
+  }
+    
+
+  /* Now retrieve the requested entries. */
+
+  for (count = start_entry;
+       count <= end_entry && (!do_all || i_used < n_used);
+       count++) {
+
+    entry.Location=count;
+    
+    error=GSM->GetMemoryLocation(&entry);
+
+    switch (error) {
+    case GE_NONE:
+      if (entry.SubEntriesCount || strcmp( entry.Number, ""))
+       i_used++;
+      else if (do_all)
+       break;
+      if (output_opt && !strcmp( output_opt,"-v30")) {
+       semicolon_pipe_substitution( &entry, 0 );
+        fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,30));
+       formatdone=true;
+      } 
+      if (output_opt && !strcmp(output_opt,"-v21")) {
+       semicolon_pipe_substitution( &entry, 0 );
+        fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,21));
+       formatdone=true;
+      } 
+      if (output_opt && !strcmp(output_opt,"-v")) {
+       semicolon_pipe_substitution( &entry, 0 );
+        fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,10));
+       formatdone=true;
+      } 
+      if (output_opt && !strcmp(output_opt,"-short")) {
+        semicolon_pipe_substitution( &entry, 0 );
+        fprintf(stdout, "%s;%s;%s;%d;%d;", entry.Name, entry.Number, memory_type_string, entry.Location, entry.Group);
+        for( i = 0; i <  entry.SubEntriesCount; i++ )
+        {
+          if( entry.SubEntries[i].EntryType == GSM_Date )
+            fprintf(stdout,_("%u;%u;%u;%02u.%02u.%04u;%02u:%02u:%02u;"),
+                entry.SubEntries[i].EntryType,
+                entry.SubEntries[i].NumberType,
+                entry.SubEntries[i].BlockNumber,
+                entry.SubEntries[i].data.Date.Day,
+                entry.SubEntries[i].data.Date.Month,
+                entry.SubEntries[i].data.Date.Year,
+                entry.SubEntries[i].data.Date.Hour,
+                entry.SubEntries[i].data.Date.Minute,
+                entry.SubEntries[i].data.Date.Second );
+          else
+            fprintf(stdout,_("%u;%u;%u;%s;"),
+                entry.SubEntries[i].EntryType,
+                entry.SubEntries[i].NumberType,
+                entry.SubEntries[i].BlockNumber,
+                entry.SubEntries[i].data.Number );
+        }
+        fprintf(stdout,_("\n"));
+       formatdone=true;
+      }
+      if (!formatdone) {
+         char z_gtype[12];
+          wasdate=false;
+          fprintf(stdout, "Memory %s, location %d\n",memory_type_string, entry.Location);
+
+         // check if some info in subentries 
+          for( i = 0; i <  entry.SubEntriesCount; i++ )
+                 if( entry.SubEntries[i].EntryType != GSM_Date &&
+                         strcmp(entry.SubEntries[i].data.Number,"") )
+                     break;
+
+          if (strcmp(entry.Number,"") || i <  entry.SubEntriesCount) {
+           if (strcmp(entry.Name,"")) fprintf(stdout,_("   Name: %s\n"),entry.Name);
+           if (strcmp(entry.Number,"")) fprintf(stdout,_("   Number: %s\n"),entry.Number);
+           bitmap.type=GSM_CallerLogo;
+            bitmap.number=entry.Group;
+            strcpy(z_gtype,"unknown");
+           if (entry.Group==5) strcpy(z_gtype,"No group");
+           if (entry.Group<5 && entry.Group>=0) {
+              if (!strcmp(az_group_name[entry.Group],"")) {
+               if (GetModelFeature (FN_CALLERGROUPS)!=0) {
+                  if (GSM->GetBitmap(&bitmap)==GE_NONE)
+                    strcpy( az_group_name[entry.Group], bitmap.text );
+               }
+               if ((!strcmp(az_group_name[entry.Group],""))) {
+                 switch(entry.Group) {
+                   case 0:strcpy(az_group_name[entry.Group],"Family");break;
+                   case 1:strcpy(az_group_name[entry.Group],"VIP");break;
+                   case 2:strcpy(az_group_name[entry.Group],"Friends");break;
+                   case 3:strcpy(az_group_name[entry.Group],"Colleagues");break;
+                   case 4:strcpy(az_group_name[entry.Group],"Other");break;
+                   default:break;
+                 }
+               }
+             }
+             strcpy(z_gtype,az_group_name[entry.Group]);
+            }
+           fprintf(stdout,_("   Group: %d (%s)\n"),entry.Group+1,z_gtype);
+            for( i = 0; i <  entry.SubEntriesCount; i++ )
+            {
+              if( entry.SubEntries[i].EntryType == GSM_Date ) {
+                 fprintf(stdout, "   Date and time: %s %02u.%02u.%04u %02u:%02u:%02u\n", 
+                   DayOfWeek(entry.SubEntries[i].data.Date.Year,
+                       entry.SubEntries[i].data.Date.Month,
+                       entry.SubEntries[i].data.Date.Day),
+                   entry.SubEntries[i].data.Date.Day,
+                   entry.SubEntries[i].data.Date.Month,
+                   entry.SubEntries[i].data.Date.Year,
+                   entry.SubEntries[i].data.Date.Hour,
+                   entry.SubEntries[i].data.Date.Minute,
+                   entry.SubEntries[i].data.Date.Second);
+                wasdate=true;
+             } else {
+                if( strcmp(entry.SubEntries[i].data.Number,"") ) {
+                   char z_etype[19];
+                   switch( entry.SubEntries[i].EntryType ) {
+                     case GSM_Number:
+                       switch( entry.SubEntries[i].NumberType ) {
+                         case GSM_General: strcpy(z_etype,"General "); break;
+                         case GSM_Home: strcpy(z_etype,"Home "); break;
+                         case GSM_Mobile: strcpy(z_etype,"Mobile "); break;
+                         case GSM_Work: strcpy(z_etype,"Work "); break;
+                         case GSM_Fax: strcpy(z_etype,"Fax "); break;
+                         default: strcpy(z_etype,""); break;
+                       }
+                       strcat(z_etype,"Number"); break;
+                     case GSM_Note:
+                       strcpy(z_etype,"Note"); break;
+                     case GSM_Postal:
+                       strcpy(z_etype,"Postal"); break;
+                     case GSM_Email:
+                       strcpy(z_etype,"E-Mail"); break;
+                     default:
+                       strcpy(z_etype,"unknown data"); break;
+                   }
+#ifdef DEBUG
+                   fprintf(stdout,_("   ---> Subentry: %u\n"),i+1);
+                   fprintf(stdout,_("   Entry type: %u (%s)\n"),entry.SubEntries[i].EntryType,z_etype);
+                   fprintf(stdout,_("   Number type: %u\n"),entry.SubEntries[i].NumberType);
+                   fprintf(stdout,_("   Block Number: %u\n"),entry.SubEntries[i].BlockNumber);
+#endif
+                   fprintf(stdout,_("   %s: %s\n"),z_etype,entry.SubEntries[i].data.Number);
+                 }
+             }
+           }
+            if ((entry.MemoryType==GMT_DC ||
+                entry.MemoryType==GMT_RC ||
+                entry.MemoryType==GMT_MC) && !wasdate)
+             fprintf(stdout,_("   Date and time not available\n"));        
+         } else
+           fprintf(stdout,_("   Location empty\n"));
+      }
+      break;
+    case GE_NOTIMPLEMENTED:
+      fprintf( stderr, _("Function not implemented in %s model!\n"), model);
+      GSM->Terminate();
+      return -1;
+    case GE_INVALIDMEMORYTYPE:
+      fprintf( stderr, _("Memory type %s not supported!\n"),
+              memory_type_string);
+      GSM->Terminate();
+      return -1;
+    default:
+      fprintf(stdout, _("%s|%d|Bad location or other error!(%d)\n"),
+             memory_type_string, count, error);
+    }
+  }
+       
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Read data from stdin, parse and write to phone.  The parsing is relatively
+   crude and doesn't allow for much variation from the stipulated format. */
+
+int writephonebook(int argc, char *args[])
+{
+
+  GSM_PhonebookEntry entry;
+  GSM_Error error;
+  char *memory_type_string;
+  int line_count=0,current,i;
+  int subentry;
+
+  char *Line, OLine[1024], BackLine[1024];
+  char *ptr;
+
+  /* Check argument */
+  if (argc) {
+    if (strcmp("-i", args[0])) {
+      usage();
+      return 0;
+    }
+  }
+  /* Initialise fbus code */
+
+  fbusinit(NULL);
+
+  Line = OLine;
+
+  /* Go through data from stdin. */
+
+  while (GetLine(stdin, Line, sizeof(OLine))!=-1) {
+
+    current=0;BackLine[current++]=Line[0];
+    for (i=1;i<strlen(Line);i++) {
+      if (Line[i-1]==';' && Line[i]==';') BackLine[current++]=' ';
+      BackLine[current++]=Line[i];
+    }
+    BackLine[current++]=0;
+
+    strcpy(Line,BackLine);
+
+    line_count++;
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+    ptr=strtok(Line, ";"); if (ptr) strcpy(entry.Name, ptr);
+
+    entry.Number[0]=0;
+    ptr=strtok(NULL, ";"); if (ptr && ptr[0]!=' ') strcpy(entry.Number, ptr);
+
+    ptr=strtok(NULL, ";");
+#else
+    ptr=strsep(&Line, ";"); if (ptr) strcpy(entry.Name, ptr);
+
+    entry.Number[0]=0;
+    ptr=strsep(&Line, ";"); if (ptr && ptr[0]!=' ') strcpy(entry.Number, ptr);
+
+    ptr=strsep(&Line, ";");
+#endif
+
+    if (!ptr) {
+      fprintf(stderr, _("Format problem on line %d [%s] 1\n"), line_count, BackLine);
+      Line = OLine;
+      continue;
+    }
+
+    if (!strncmp(ptr,"ME", 2))
+    {
+      memory_type_string = "int";
+      entry.MemoryType = GMT_ME;
+    }
+    else if (!strncmp(ptr,"SM", 2))
+    {
+        memory_type_string = "sim";
+        entry.MemoryType = GMT_SM;
+    }
+    else
+    {
+      fprintf(stderr, _("Format problem on line %d [%s] 2: %s\n"),
+        line_count, BackLine,ptr);
+      break;
+    }
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+    ptr=strtok(NULL, ";"); if (ptr) entry.Location=atoi(ptr);
+
+    ptr=strtok(NULL, ";"); if (ptr) entry.Group=atoi(ptr);
+#else
+    ptr=strsep(&Line, ";"); if (ptr) entry.Location=atoi(ptr);
+
+    ptr=strsep(&Line, ";"); if (ptr) entry.Group=atoi(ptr);
+#endif
+
+    if (!ptr) {
+      fprintf(stderr, _("Format problem on line %d [%s] 3\n"),
+        line_count, BackLine);
+      continue;
+    }
+
+    for( subentry = 0; ; subentry++ )
+    {
+#if defined(__svr4__) || defined(__FreeBSD__)
+      ptr=strtok(NULL, ";");
+#else
+      ptr=strsep(&Line, ";");
+#endif
+      if( ptr &&  *ptr != 0 )
+        entry.SubEntries[subentry].EntryType=atoi(ptr);
+      else
+        break;
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+      ptr=strtok(NULL, ";");
+#else
+      ptr=strsep(&Line, ";");
+#endif
+      if(ptr)
+        entry.SubEntries[subentry].NumberType=atoi(ptr);
+      // Phone Numbers need to have a number type.
+      if(!ptr && entry.SubEntries[subentry].EntryType == GSM_Number)
+      {
+        fprintf(stderr, _("Missing phone number type on line %d"
+          " entry %d [%s]\n"), line_count, subentry, BackLine);
+        subentry--;
+        break;
+      }
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+      ptr=strtok(NULL, ";");
+#else
+      ptr=strsep(&Line, ";");
+#endif
+      if(ptr)
+        entry.SubEntries[subentry].BlockNumber=atoi(ptr);
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+      ptr=strtok(NULL, ";");
+#else
+      ptr=strsep(&Line, ";");
+#endif
+      // 0x13 Date Type; it is only for Dailed Numbers, etc.
+      // we don't store to this memories so it's an error to use it.
+      if(!ptr || entry.SubEntries[subentry].EntryType == GSM_Date) 
+      {
+        fprintf(stderr, _("Is not a phone number on line %d entry %d [%s]\n"),
+          line_count, subentry, BackLine);
+        subentry--;
+        break;
+      }
+      else
+        strcpy( entry.SubEntries[subentry].data.Number, ptr );
+    }
+
+    entry.SubEntriesCount = subentry;
+
+
+    /* This is to send other exports (like from 6110) to 7110 */
+    if (!entry.SubEntriesCount) {
+       entry.SubEntriesCount = 1;
+       entry.SubEntries[subentry].EntryType   = GSM_Number;
+       entry.SubEntries[subentry].NumberType  = GSM_General;
+       entry.SubEntries[subentry].BlockNumber = 2;
+       strcpy(entry.SubEntries[subentry].data.Number, entry.Number);
+    }
+
+    Line = OLine;
+
+    if (argc) {
+      GSM_PhonebookEntry tmp_entry;
+
+      memcpy(&tmp_entry, &entry, sizeof(GSM_PhonebookEntry) );
+      error = GSM->GetMemoryLocation(&tmp_entry);
+      if (error == GE_NONE) {
+        if (!tmp_entry.Empty) {
+          int confirm = -1;
+          char ans[8];
+         FILE *input_flow; //for reading from console, even when input redir.
+                               
+         input_flow = fopen(DEV_CONSOLE, "r");
+
+         if (!input_flow) {
+               fprintf(stderr, _("Can't open \"%s\" for input !\n"),DEV_CONSOLE);
+               return(-1);
+         }
+         
+          fprintf(stderr, _("Location busy. "));
+          while (confirm < 0) {
+            fprintf(stderr, _("Overwrite? (yes/no) "));
+            GetLine(input_flow, ans, 7);
+            if (!strcmp(ans, "yes")) confirm = 1;
+            else if (!strcmp(ans, "no")) confirm = 0;
+          }
+          if (!confirm) continue;
+        }
+      } else {
+        fprintf(stderr, _("Unknown error (%d)\n"), error);
+        GSM->Terminate();
+        return 0;
+      }
+    }
+
+    /* Do write and report success/failure. */
+    semicolon_pipe_substitution( &entry, 1 );
+
+    error = GSM->WritePhonebookLocation(&entry);
+
+    if (error == GE_NONE)
+      fprintf (stdout, _("Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"), memory_type_string, entry.Location, entry.Name, entry.Number);
+    else
+      fprintf (stdout, _("Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"), error, memory_type_string, entry.Location, entry.Name, entry.Number);
+
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Getting speed dials. */
+
+int getspeeddial(char *Number) {
+
+  GSM_SpeedDial entry;
+  GSM_Error error;
+  GSM_PhonebookEntry pbentry;
+
+  entry.Number = atoi(Number);
+
+  fbusinit(NULL);
+
+  if (GSM->GetSpeedDial(&entry)==GE_NONE) {
+        pbentry.Location=entry.Location;
+        if (pbentry.Location==0) pbentry.Location=entry.Number;
+        pbentry.MemoryType=entry.MemoryType;
+
+        error=GSM->GetMemoryLocation(&pbentry);
+
+        if (error == GE_NONE)
+        {
+          fprintf(stdout, _("SpeedDial nr. %d: %d:%d (%s)\n"), entry.Number, entry.MemoryType, entry.Location,pbentry.Name);
+        } else
+          fprintf(stdout, _("Error\n"));
+  } else {
+    fprintf(stdout, _("Error\n"));
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Setting speed dials. */
+
+int setspeeddial(char *argv[]) {
+
+  GSM_SpeedDial entry;
+
+  char *memory_type_string;
+
+  /* Handle command line args that set type, start and end locations. */
+
+  if (strcmp(argv[1], "ME") == 0) {
+    entry.MemoryType = GMT_ME;
+    memory_type_string = "ME";
+  }
+  else if (strcmp(argv[1], "SM") == 0) {
+    entry.MemoryType = GMT_SM;
+    memory_type_string = "SM";
+  }
+  else {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[1]);
+
+    return -1;
+  }
+  
+  entry.Number = atoi(argv[0]);
+  entry.Location = atoi(argv[2]);
+
+  fbusinit(NULL);
+
+  if (GSM->SetSpeedDial(&entry) == GE_NONE) {
+    fprintf(stdout, _("Succesfully written!\n"));
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Getting the status of the display. */
+
+int getdisplaystatus()
+{ 
+
+  int Status;
+
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  if (GSM->GetDisplayStatus(&Status)==GE_NONE) {
+
+    printf(_("Call in progress: %s\n"), Status & (1<<DS_Call_In_Progress)?_("on"):_("off"));
+    printf(_("Unknown: %s\n"),          Status & (1<<DS_Unknown)?_("on"):_("off"));
+    printf(_("Unread SMS: %s\n"),       Status & (1<<DS_Unread_SMS)?_("on"):_("off"));
+    printf(_("Voice call: %s\n"),       Status & (1<<DS_Voice_Call)?_("on"):_("off"));
+    printf(_("Fax call active: %s\n"),  Status & (1<<DS_Fax_Call)?_("on"):_("off"));
+    printf(_("Data call active: %s\n"), Status & (1<<DS_Data_Call)?_("on"):_("off"));
+    printf(_("Keyboard lock: %s\n"),    Status & (1<<DS_Keyboard_Lock)?_("on"):_("off"));
+    printf(_("SMS storage full: %s\n"), Status & (1<<DS_SMS_Storage_Full)?_("on"):_("off"));
+
+  } else {
+    printf(_("Error\n"));
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+int netmonitor(char *Mode)
+{
+
+  unsigned char mode=atoi(Mode);
+  char Screen[NM_MAX_SCREEN_WIDTH];
+  int i;
+
+  fbusinit(NULL);
+
+  if (!strcmp(Mode,"reset"))     mode=0xf0;
+  else if (!strcmp(Mode,"off"))  mode=0xf1;
+  else if (!strcmp(Mode,"field"))mode=0xf2;
+  else if (!strcmp(Mode,"devel"))mode=0xf3;
+  else if (!strcmp(Mode,"next")) mode=0x00;
+
+  /* We clear it */
+  for (i=0;i<NM_MAX_SCREEN_WIDTH;i++) Screen[i]=0;
+
+  GSM->NetMonitor(mode, Screen);
+
+  if (Screen)
+    printf("%s\n", Screen);
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int identify( void )
+{
+  /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+  char imei[64], model[64], rev[64], manufacturer[64];
+
+  fbusinit(NULL);
+
+  while (GSM->GetIMEI(imei)    != GE_NONE) sleep(1);
+  while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+  while (GSM->GetModel(model)  != GE_NONE) sleep(1);
+
+  strcpy(manufacturer, "(unknown)");
+  GSM->GetManufacturer(manufacturer);
+
+  fprintf(stdout, _("IMEI:     %s\n"), imei);
+  fprintf(stdout, _("Model:    %s %s (%s)\n"), manufacturer, GetModelName (model), model);
+  fprintf(stdout, _("Revision: %s\n"), rev);
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int senddtmf(char *String)
+{
+
+  fbusinit(NULL);
+
+  if (GSM->SendDTMF(String)!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Resets the phone */
+int reset(int argc, char *argv[])
+{
+
+  unsigned char _type=0x03;
+
+  if (argc>0) {
+    _type=0x10;
+
+    if (!strcmp(argv[0],"soft")) _type = 0x03;
+    
+    /* Doesn't work with 5110 */
+    if (!strcmp(argv[0],"hard")) _type = 0x04;
+
+    if (_type==0x10) {
+      fprintf(stderr, _("What kind of reset do you want (second parameter can be \"soft\" or \"hard\") ?\n"));
+      return -1;
+    }
+  }
+
+  fbusinit(NULL);
+
+  GSM->Reset(_type);
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* This is a "convenience" function to allow quick test of new API stuff which
+   doesn't warrant a "proper" command line function. */
+
+int foogle(char *argv[])
+{
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  // Fill in what you would like to test here...
+
+  sleep(5);
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+int phonetests()
+{
+  /* Initialise the code for the GSM interface. */     
+
+  fbusinit(NULL);
+
+  if (GSM->PhoneTests()!=GE_NONE) fprintf(stderr,_("Error\n"));
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* pmon allows fbus code to run in a passive state - it doesn't worry about
+   whether comms are established with the phone.  A debugging/development
+   tool. */
+
+int pmon()
+{ 
+
+  GSM_Error error;
+  GSM_ConnectionType connection=GCT_FBUS;
+
+  /* Initialise the code for the GSM interface. */     
+
+  error = GSM_Initialise(model, Port, Initlength, connection, RLP_DisplayF96Frame, SynchronizeTime);
+
+  if (error != GE_NONE) {
+    fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+    return -1;
+  }
+
+
+  while (1) {
+    usleep(50000);
+  }
+
+  return 0;
+}
+
+int setringtone(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+  GSM_BinRingtone binringtone,binringtone2;
+
+  GSM_Error error;
+
+  int current=0; //number of packed notes or location
+  int i;
+
+  char model[64];
+
+  /* If not binary ringtone */
+  if (GSM_ReadBinRingtoneFile(argv[0],&binringtone2)!=GE_NONE) {
+    fprintf(stdout,_("Not binary ringtone, trying RTTL\n"));
+
+    if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+    ringtone.location=1;
+    if (argc>1) ringtone.location=atoi(argv[1]);
+
+    ringtone.allnotesscale=false;
+  
+    /* Initialise the GSM interface. */
+    fbusinit(NULL);
+
+    while (GSM->GetModel(model)  != GE_NONE)
+      sleep(1);
+
+    /* For Nokia 6110/6130/6150/6210 we use different method of uploading.
+       Phone will display menu, when received it */
+    if ( !strcmp(model,"NSE-3") || !strcmp(model,"NSK-3") ||
+         !strcmp(model,"NSM-1") || !strcmp(model,"NPE-3") ) {
+      if (argc==1) ringtone.location=255;
+    }
+
+    error=GSM->SetRingtone(&ringtone,&current);
+  
+    if (current!=ringtone.NrNotes) {
+      if (current>FB61_MAX_RINGTONE_NOTES) {
+        fprintf(stderr,_("Warning: due to phone limitation"));
+      } else {
+        fprintf(stderr,_("Warning: ringtone was too long to be saved into frame,"));
+      }
+      fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+    }
+
+    if (error==GE_NONE) 
+      fprintf(stdout, _("Set succeeded!\n"));
+    else
+      fprintf(stdout, _("Setting failed\n"));
+
+  } else { /* This IS binary ringtone */
+    fprintf(stdout,_("Binary ringtone format\n"));
+
+    if (argc==3) {
+      binringtone.frame[current++]=0x00;
+      binringtone.frame[current++]=0x00;
+      binringtone.frame[current++]=0x0c;
+      binringtone.frame[current++]=0x01;
+      binringtone.frame[current++]=0x2c;
+    
+      //copy new name
+      memcpy(binringtone.frame+current,argv[2],strlen(argv[2]));
+      current=current+strlen(argv[2]);
+
+      /*don't use old*/
+      i=2;
+      while(binringtone2.frame[i]!=0x00) {
+        if (i==binringtone.length) break;
+        i++;
+      }
+    
+      //copy binringtone
+      memcpy(binringtone.frame+current,binringtone2.frame+i,binringtone2.length-i);
+      binringtone.length=binringtone2.length-i+current;    
+    } else
+    {
+      memcpy(binringtone.frame+current,binringtone2.frame,binringtone2.length);
+      binringtone.length=binringtone2.length;
+    }
+  
+    binringtone.location=1;
+    if (argc>1) binringtone.location=atoi(argv[1]);
+  
+    /* Initialise the GSM interface. */
+    fbusinit(NULL);
+
+    error=GSM->SetBinRingtone(&binringtone);
+
+    switch (error) {
+      case GE_NONE:
+        fprintf(stdout, _("Set succeeded!\n"));
+        break;
+      case GE_INVALIDRINGLOCATION:
+        fprintf(stdout, _("Invalid location %i!\n"),binringtone.location);
+        break;
+      case GE_UNKNOWNMODEL:
+        fprintf(stdout, _("Mygnokii doesn't know format for this model!\n"));
+        break;
+      case GE_NOTIMPLEMENTED:
+        fprintf(stdout, _("Not implemented for this model!\n"));
+        break;
+      default:
+        fprintf(stdout, _("Not supported by this model!\n"));
+        break;
+    }
+  }
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+int ringtoneconvert(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+
+  if (!strcmp(argv[0],argv[1]))
+  {
+    fprintf(stderr, _("Files can't have the same names !\n"));
+    return -1;  
+  }
+  
+  if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+  ringtone.allnotesscale=false;
+
+  GSM_SaveRingtoneFileOnConsole(argv[1], &ringtone);
+  
+  return 0;
+}
+
+int playringtone(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+
+  GSM_BinRingtone binringtone;
+  
+  int i,j,z;
+  int Hz;
+  bool isok;
+
+//{ "c", "c#", "d", "d#", "e",  "f", "f#", "g", "g#", "a", "a#", "h" };
+  int binary_notes[12] =
+  { 0,    1,    2,   3,    4,   6,   7,    8,   9,    10,  11 ,   12};
+
+  if (GSM_ReadBinRingtoneFile(argv[0],&binringtone)!=GE_NONE) {
+    fprintf(stdout,_("Not binary ringtone, trying RTTL\n"));
+
+    if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+    /* Initialise the GSM interface. */
+    fbusinit(NULL);
+
+    fprintf(stdout,_("Playing \"%s\" (%i notes)\n"),ringtone.name,ringtone.NrNotes);
+  
+    GSM_PlayRingtoneOnConsole(&ringtone);
+
+  } else {
+
+    fprintf(stdout,_("Binary ringtone format\n"));  
+
+    /* Initialise the GSM interface. */
+    fbusinit(NULL);
+
+    i=5;
+    while (true) { //skipping name
+      if (binringtone.frame[i]==0) break;
+      i++;
+    }
+
+    i=i+5;j=0;z=0;
+    while (true) {
+      if (binringtone.frame[i]!=j) {
+        if (j!=0) {
+//#ifdef DEBUG
+          fprintf(stdout,_("Block in binary ringtone %i %i\n"),j,z);
+//#endif
+          isok=false;
+          if (j==64) {
+           j=255;//Pause
+            isok=true;
+         }
+         if (!isok && j>=114 && j<=125) {
+           j=14*3+binary_notes[j-114];
+           isok=true;
+         }
+         if (!isok && j>=126 && j<=137) {
+           j=14*1+binary_notes[j-126];
+           isok=true;
+         }
+         if (!isok && j>=138 && j<=149) {
+           j=14*2+binary_notes[j-138];
+           isok=true;
+          }
+         if (!isok && j>=150 && j<=161) {
+           j=14*4+binary_notes[j-150];
+           isok=true;
+         }
+         if (!isok) {
+//#ifdef DEBUG
+           fprintf(stdout,_("Unknown block in binary ringtone %i %i\n"),j,z);
+//#endif
+          } else {
+           Hz=GSM_GetFrequency(j);
+           if (GSM->PlayTone(Hz,5)!=GE_NONE) fprintf(stdout,_("error during playing\n"));
+           usleep(z*5000);
+         }
+        }
+        j=binringtone.frame[i];
+        z=binringtone.frame[i+1];
+      } else {
+        z=z+binringtone.frame[i+1];
+      }
+      i=i+2;
+      if (i>=binringtone.length) break;
+    }
+  
+    GSM->PlayTone(0,0);
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+}
+
+int composer(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+  int i;
+  bool unknown;
+  int oldnoteslen=4,nownoteslen,oldnoteslen2;
+  int oldnotesscale=1,nownotesscale;  
+  bool firstnote=true;
+  int DefNoteTempo=63;
+  
+  if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+  if (ringtone.NrNotes!=0)
+    DefNoteTempo=ringtone.notes[0].tempo;
+
+  fprintf(stdout,_("Ringtone \"%s\" (tempo = %i Beats Per Minute)\n\n"),ringtone.name,GSM_GetTempo(DefNoteTempo));
+  
+  for (i=0;i<ringtone.NrNotes;i++) {    
+    if (DefNoteTempo!=ringtone.notes[i].tempo) {
+      fprintf(stdout,_("WARNING: IN FACT RINGTONE HAS DIFFERENT TEMPO FOR DIFFERENT NOTES AND THAT'S WHY YOU CAN'T ENTER IT ALL IN THE COMPOSITOR\n\n"));
+      break;
+    }
+  }
+    
+  for (i=0;i<ringtone.NrNotes;i++) {
+
+    if (firstnote) {
+      if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+        firstnote=false;
+    }
+    
+    if (!firstnote) {
+      break;
+    }
+    
+  }
+
+  if ((ringtone.NrNotes-i)>50)
+    fprintf(stdout,_("WARNING: LENGTH=%i, BUT YOU WILL ENTER ONLY FIRST 50 TONES. TO ENTER FULL RINGTONE MUST SEND IT (--sendringtone) OR DOWNLOAD (--setringtone)\n\n"),ringtone.NrNotes-i);
+
+  fprintf(stdout,_("This ringtone in Nokia Composer in phone should look: "));  
+
+  firstnote=true;
+    
+  for (i=0;i<ringtone.NrNotes;i++) {
+
+    if (firstnote) {
+      if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+        firstnote=false;
+    }
+    
+    if (!firstnote) {
+    
+      switch (ringtone.notes[i].duration) {
+        case 192:fprintf(stdout,_("1."));break; //192=128*1.5
+        case 128:fprintf(stdout,_("1"));break;
+        case 96 :fprintf(stdout,_("2."));break; //96=64*1.5
+        case 64 :fprintf(stdout,_("2"));break;
+        case 48 :fprintf(stdout,_("4."));break; //48=32*1.5
+        case 32 :fprintf(stdout,_("4"));break;
+        case 24 :fprintf(stdout,_("8."));break; //24=16*1.5
+        case 16 :fprintf(stdout,_("8"));break;
+        case 12 :fprintf(stdout,_("16."));break; //12=8*1.5
+        case 8  :fprintf(stdout,_("16"));break;
+        case 6  :fprintf(stdout,_("32."));break; //6=4*1.5
+        case 4  :fprintf(stdout,_("32"));break;
+      }
+    
+    unknown=false;
+    
+    /* What note here ? */
+    switch (GSM_GetNote(ringtone.notes[i].note)) {
+      case Note_C  :fprintf(stdout,_("c"));break;
+      case Note_Cis:fprintf(stdout,_("#c"));break;
+      case Note_D  :fprintf(stdout,_("d"));break;
+      case Note_Dis:fprintf(stdout,_("#d"));break;
+      case Note_E  :fprintf(stdout,_("e"));break;
+      case Note_F  :fprintf(stdout,_("f"));break;
+      case Note_Fis:fprintf(stdout,_("#f"));break;
+      case Note_G  :fprintf(stdout,_("g"));break;
+      case Note_Gis:fprintf(stdout,_("#g"));break;
+      case Note_A  :fprintf(stdout,_("a"));break;
+      case Note_Ais:fprintf(stdout,_("#a"));break;
+      case Note_H  :fprintf(stdout,_("h"));break;
+      default      :fprintf(stdout,_("-"));unknown=true;break; //Pause ?
+    }
+
+    if (!unknown)
+      fprintf(stdout,_("%i"),ringtone.notes[i].note/14);
+    
+    /* And separator before next note */
+    if (i!=ringtone.NrNotes-1)
+      fprintf(stdout,_(" "));
+      
+    }
+
+  }
+
+  fprintf(stdout,_("\n\nTo enter it please press: "));  
+  
+  firstnote=true;
+  
+  for (i=0;i<ringtone.NrNotes;i++) {
+
+    if (firstnote) {
+      if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+        firstnote=false;
+    }
+    
+    if (!firstnote) {
+
+    unknown=false;
+    
+    /* What note here ? */
+    switch (GSM_GetNote(ringtone.notes[i].note)) {
+      case Note_C  :fprintf(stdout,_("1"));break;
+      case Note_Cis:fprintf(stdout,_("1"));break;
+      case Note_D  :fprintf(stdout,_("2"));break;
+      case Note_Dis:fprintf(stdout,_("2"));break;
+      case Note_E  :fprintf(stdout,_("3"));break;
+      case Note_F  :fprintf(stdout,_("4"));break;
+      case Note_Fis:fprintf(stdout,_("4"));break;
+      case Note_G  :fprintf(stdout,_("5"));break;
+      case Note_Gis:fprintf(stdout,_("5"));break;
+      case Note_A  :fprintf(stdout,_("6"));break;
+      case Note_Ais:fprintf(stdout,_("6"));break;
+      case Note_H  :fprintf(stdout,_("7"));break;
+      default      :fprintf(stdout,_("0"));unknown=true;break;
+    }
+
+      switch (ringtone.notes[i].duration) {
+        case 192:fprintf(stdout,_("(longer)"));break; //192=128*1.5
+        case 96 :fprintf(stdout,_("(longer)"));break; //96=64*1.5
+        case 48 :fprintf(stdout,_("(longer)"));break; //48=32*1.5
+        case 24 :fprintf(stdout,_("(longer)"));break; //24=16*1.5
+        case 12 :fprintf(stdout,_("(longer)"));break; //12=8*1.5
+        case 6  :fprintf(stdout,_("(longer)"));break; //6=4*1.5
+        default:break;
+      }
+
+    /* What note here ? */
+    switch (GSM_GetNote(ringtone.notes[i].note)) {
+      case Note_Cis:fprintf(stdout,_("#"));break;
+      case Note_Dis:fprintf(stdout,_("#"));break;
+      case Note_Fis:fprintf(stdout,_("#"));break;
+      case Note_Gis:fprintf(stdout,_("#"));break;
+      case Note_Ais:fprintf(stdout,_("#"));break;
+      default      :break;
+    }
+
+    if (!unknown)
+    {
+      nownotesscale=ringtone.notes[i].note/14;
+
+      if (nownotesscale!=oldnotesscale) {
+        switch (nownotesscale) {
+         case 1:
+           switch (oldnotesscale) {
+             case 2:fprintf(stdout,_("**"));break;
+             case 3:fprintf(stdout,_("*"));break;
+           }
+           break;
+         case 2:
+           switch (oldnotesscale) {
+             case 1:fprintf(stdout,_("*"));break;
+             case 3:fprintf(stdout,_("**"));break;
+           }
+           break;
+         case 3:
+           switch (oldnotesscale) {
+             case 1:fprintf(stdout,_("**"));break;
+             case 2:fprintf(stdout,_("*"));break;
+           }
+           break;
+       }
+      }
+      
+      oldnotesscale=nownotesscale;
+    }
+
+     nownoteslen=0;
+     oldnoteslen2=oldnoteslen;
+     
+      switch (ringtone.notes[i].duration) {
+        case 192:nownoteslen=1;break; //192=128*1.5
+        case 128:nownoteslen=1;break;
+        case 96 :nownoteslen=2;break; //96=64*1.5
+        case 64 :nownoteslen=2;break;
+        case 48 :nownoteslen=4;break; //48=32*1.5
+        case 32 :nownoteslen=4;break;
+        case 24 :nownoteslen=8;break; //24=16*1.5
+        case 16 :nownoteslen=8;break;
+        case 12 :nownoteslen=16;break; //12=8*1.5
+        case 8  :nownoteslen=16;break;
+        case 6  :nownoteslen=32;break; //6=4*1.5
+        case 4  :nownoteslen=32;break;
+      }    
+      
+      if (nownoteslen>oldnoteslen) {
+        while (oldnoteslen!=nownoteslen) {
+         fprintf(stdout,_("8"));
+         oldnoteslen=oldnoteslen*2;
+       }
+      }
+
+      if (nownoteslen<oldnoteslen) {
+        while (oldnoteslen!=nownoteslen) {
+         fprintf(stdout,_("9"));
+         oldnoteslen=oldnoteslen/2;
+       }
+      }      
+
+    if (GSM_GetNote(ringtone.notes[i].note)==Note_Pause)
+      oldnoteslen=oldnoteslen2;
+      
+    /* And separator before next note */
+    if (i!=ringtone.NrNotes-1)
+      fprintf(stdout,_("  "));
+
+  }
+  }  
+
+  fprintf(stdout,_("\n"));
+
+  return 0;
+
+}
+
+int sendringtone(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+  GSM_MultiSMSMessage SMS;
+  int current,i;
+  bool ProfileStyle=false; /* If we use profile style available in new Nokia models */
+
+  if (GSM_ReadRingtoneFileOnConsole(argv[1], &ringtone)!=GE_NONE) return(-1);
+
+  ringtone.allnotesscale=false;
+
+  for (i=0;i<argc;i++) {
+    if (!strcmp(argv[i],"--profilestyle")) ProfileStyle=true;
+    if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+  }
+
+  current=GSM_SaveRingtoneToSMS(&SMS,&ringtone,ProfileStyle);
+
+  if (current!=ringtone.NrNotes) {
+    if (current>FB61_MAX_RINGTONE_NOTES) {
+      fprintf(stderr,_("Warning: due to phone limitation"));
+    } else {
+      fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+    }
+    fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+  }
+
+  for (i=0;i<SMS.number;i++) {
+    strcpy(SMS.SMS[i].Destination,argv[0]);
+  }
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  GSM_SendMultiPartSMSOnConsole(&SMS, 2,argc,argv,false,true,true);
+
+  return 0;
+}
+
+int saveringtone(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+  GSM_MultiSMSMessage SMS;
+  int current,i;
+  bool ProfileStyle=false; /* If we use profile style available in new Nokia models */
+
+  if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+  ringtone.allnotesscale=false;
+
+  for (i=0;i<argc;i++) {
+    if (!strcmp(argv[i],"--profilestyle")) ProfileStyle=true;
+    if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+  }
+
+  current=GSM_SaveRingtoneToSMS(&SMS,&ringtone,ProfileStyle);
+
+  if (current!=ringtone.NrNotes) {
+    if (current>FB61_MAX_RINGTONE_NOTES) {
+      fprintf(stderr,_("Warning: due to phone limitation"));
+    } else {
+      fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+    }
+    fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+  }
+
+  for (i=0;i<SMS.number;i++) {
+    /* Only 11 chars could be here */
+    strncpy(SMS.SMS[i].Destination,ringtone.name,11);
+  }
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  GSM_SaveMultiPartSMSOnConsole(&SMS,1,argc,argv,false,false,true,true);
+
+  return 0;
+}
+
+/* Converts logo files. */
+
+int bitmapconvert(int argc, char *argv[])
+{
+  GSM_Bitmap bitmap;
+  GSM_NetworkInfo NetworkInfo;
+  bool doit;
+  int num;
+  
+  if (!strcmp(argv[0],argv[1]))
+  {
+    fprintf(stderr, _("Files can't have the same names !\n"));
+    return -1;  
+  }
+  
+  if (GSM_ReadBitmapFileOnConsole(argv[0], &bitmap)!=GE_NONE) return(-1);
+
+  if (argc>2)
+  {
+    doit=false;
+    if (!strcmp(argv[2],"op"))
+    {
+      doit=false;
+      if (argc<4) doit=true;
+      if (argc<4 && bitmap.type!=GSM_OperatorLogo) doit=true;
+      if (doit)
+      {
+        fbusinit(NULL);
+        if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+        GSM->Terminate();
+      }
+      GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+      if (argc==4)
+      {
+        strncpy(bitmap.netcode,argv[3],7);
+       if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+       {
+         fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+         return -1;
+        }
+      }
+      doit=true;
+    }
+    if (!strcmp(argv[2],"7110op"))
+    {
+      doit=false;
+      if (argc<4) doit=true;
+      if (argc<4 && bitmap.type!=GSM_7110OperatorLogo) doit=true;
+      if (doit)
+      {
+        fbusinit(NULL);
+        if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+        GSM->Terminate();
+      }
+      GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+      if (argc==4)
+      {
+        strncpy(bitmap.netcode,argv[3],7);
+       if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+       {
+         fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+         return -1;
+        }
+      }
+      doit=true;
+    }
+    if (!strcmp(argv[2],"caller"))
+    {
+      GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+      if (argc>3)
+      {
+        num=argv[3][0]-'0';
+        if ((num<0)||(num>9)) num=0;
+       bitmap.number=num;
+      } else
+      {
+        bitmap.number=0;
+      }
+      doit=true;
+    }
+    if (!strcmp(argv[2],"startup"))
+    {
+      GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+      doit=true;
+    }
+    if (!strcmp(argv[2],"7110startup"))
+    {
+      GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+      doit=true;
+    }
+    if (!strcmp(argv[2],"6210startup"))
+    {
+      GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+      doit=true;
+    }
+    if (!strcmp(argv[2],"picture"))
+    {
+      GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+      doit=true;
+    }
+    if (!doit)
+    {
+      fprintf(stderr,"Unknown type of logo: %s !\n",argv[2]);
+      return -1;
+    }
+  }
+    
+  if (GSM_SaveBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return(-1);
+  
+  return 0;
+}
+
+int getphoneprofile()
+{
+  GSM_PPS PPS;
+  GSM_Error error;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  PPS.Name=PPS_ALS;
+  error=GSM->GetProductProfileSetting(&PPS);
+  if (error!=GE_NONE) {
+    fprintf(stdout,_("Error!\n"));
+    GSM->Terminate();    
+    return -1;
+  }
+  fprintf(stdout,_("ALS           : "));
+  if (PPS.bool_value) fprintf(stdout,_("on\n"));
+                 else fprintf(stdout,_("off\n"));
+
+  PPS.Name=PPS_VibraMenu;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("Vibra menu    : "));
+  if (PPS.bool_value) fprintf(stdout,_("on\n"));
+                 else fprintf(stdout,_("off\n"));
+
+  PPS.Name=PPS_GamesMenu;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("Games menu    : "));
+  if (PPS.bool_value) fprintf(stdout,_("on\n"));
+                 else fprintf(stdout,_("off\n"));
+
+  PPS.Name=PPS_HRData;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("HR Data       : "));
+  if (PPS.bool_value) fprintf(stdout,_("on\n"));
+                 else fprintf(stdout,_("off\n"));
+
+  PPS.Name=PPS_14400Data;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("14400 Data    : "));
+  if (PPS.bool_value) fprintf(stdout,_("on\n"));
+                 else fprintf(stdout,_("off\n"));
+
+  PPS.Name=PPS_LCDContrast;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("LCD Contrast  : %i%%\n"),PPS.int_value);
+
+  PPS.Name=PPS_EFR;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("EFR           : "));
+  switch (PPS.int_value) {
+    case 0: fprintf(stdout,_("off\n"));   break;
+    case 1: fprintf(stdout,_("last\n"));  break;
+    case 2: fprintf(stdout,_("second\n"));break;
+    case 3: fprintf(stdout,_("first\n")); break;
+  }
+
+  PPS.Name=PPS_FR;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("FR            : "));
+  switch (PPS.int_value) {
+    case 0: fprintf(stdout,_("off\n"));   break;
+    case 1: fprintf(stdout,_("last\n"));  break;
+    case 2: fprintf(stdout,_("second\n"));break;
+    case 3: fprintf(stdout,_("first\n")); break;
+  }
+
+  PPS.Name=PPS_HR;
+  GSM->GetProductProfileSetting(&PPS);
+  fprintf(stdout,_("HR            : "));
+  switch (PPS.int_value) {
+    case 0: fprintf(stdout,_("off\n"));   break;
+    case 1: fprintf(stdout,_("last\n"));  break;
+    case 2: fprintf(stdout,_("second\n"));break;
+    case 3: fprintf(stdout,_("first\n")); break;
+  }
+    
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int setphoneprofile(int argc, char *argv[])
+{
+  GSM_PPS PPS;
+  GSM_Error error;
+  bool correct_arg1=false, correct_arg2=false;
+
+  if (!strcmp(argv[0],"ALS")) {
+    PPS.Name=PPS_ALS;
+    correct_arg1=true;
+    if (!strcmp(argv[1],"1")) {
+      PPS.bool_value=true;
+      correct_arg2=true;
+    }
+    if (!strcmp(argv[1],"0")) {
+      PPS.bool_value=false;
+      correct_arg2=true;
+    }
+    if (!correct_arg2) {
+      fprintf(stdout,_("Settings for ALS parameter can be \"0\" or \"1\" !\n"));
+      return -1;
+    }
+  }
+  if (!strcmp(argv[0],"HRData")) {
+    PPS.Name=PPS_HRData;
+    correct_arg1=true;
+    if (!strcmp(argv[1],"1")) {
+      PPS.bool_value=true;
+      correct_arg2=true;
+    }
+    if (!strcmp(argv[1],"0")) {
+      PPS.bool_value=false;
+      correct_arg2=true;
+    }
+    if (!correct_arg2) {
+      fprintf(stdout,_("Settings for HRData parameter can be \"0\" or \"1\" !\n"));
+      return -1;
+    }
+  }  
+  if (!correct_arg1) {
+    fprintf(stdout,_("First parameter can be \"ALS\" or \"HRData\" only !\n"));
+    return -1;
+  }
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->SetProductProfileSetting(&PPS);
+
+  if (error!=GE_NONE) {
+    fprintf(stdout,_("Error!\n"));
+    GSM->Terminate();    
+    return -1;
+  }
+
+  GSM->Reset(0x03);
+  
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int getoperatorname()
+{
+
+  GSM_Network network;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  if (GSM->GetOperatorName(&network)==GE_NONE)
+  {
+    if (!strcmp(network.Name,"")) {
+      fprintf(stdout,_("Phone doesn't have downloaded operator name\n"));
+    } else {
+      fprintf(stdout,_("Phone has downloaded operator name (\"%s\") for \"%s\" (\"%s\") network\n"),
+              network.Name,network.Code,GSM_GetNetworkName(network.Code));
+    }
+  }
+  
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int setoperatorname(int argc, char *argv[])
+{
+
+  GSM_Network network;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  if (argc==2) {
+    strncpy(network.Code,argv[0],7);
+    strncpy(network.Name,argv[1],50);
+  } else {
+    strcpy(network.Code,"000 00\0");
+    strcpy(network.Name,"\0");
+  }
+  
+  if (GSM->SetOperatorName(&network)==GE_NONE) {
+    if (GSM->GetOperatorName(&network)==GE_NONE) {
+      if (!strcmp(network.Name,"")) {
+        fprintf(stdout,_("Downloaded operator name is removed\n"));
+      } else {
+        fprintf(stdout,_("Downloaded operator name changed for \"%s\" network (\"%s\") to \"%s\"\n"),
+                network.Code,GSM_GetNetworkName(network.Code),network.Name);
+      }
+    }
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int getvoicemailbox()
+{
+  GSM_PhonebookEntry entry;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+  
+  if (GSM->GetVoiceMailbox(&entry)==GE_NONE) {
+    fprintf(stdout,_("Voice mailbox number is "));
+    if (!strcmp(entry.Number,""))
+      fprintf(stdout,_("not set\n"));
+    else
+      fprintf(stdout,_("\"%s\"\n"),entry.Number);
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// flow diagram of netmonitordata():
+///////////////////////////////////////////////////////////////////////////////
+//
+//             get command line argument
+//                     |                       
+//                     v       
+//
+//             if specific phone model
+//                 use that model
+//             else
+//                 identify-phone:     (((((((( TO DO )))))))))))))
+//
+//                     |
+//                     v
+//             get_mon_param_info()    get phone netmonitor parameters name
+//                                     specifically to a 'model'
+//                     |
+//                     v
+//             parse_check()           check command line arguments
+//                     |               if all OK, go on else stop.
+//                     |               because we can have a input file
+//                     v               containing multiple
+//             parse_process()         command lines, we process each at once
+//                                     so we can exit early on errors.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// private functions, see netmonitordata()
+void free_nm_info(PARAM_INFO_MON *info)
+{
+       PARAM_INFO_MON *tmp;    // pointer, iterator on info
+
+       // go to end of list
+
+       while (info->next != NULL)
+       {       tmp = info->next;
+               free(info->name);
+               free(info->mname);
+               free(info);
+               info = tmp;
+       }
+       free(info);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// this func retrieve parameters info from a file
+// and load it in a dynamic array, NULL terminated,
+// if 2rd parameter is not NULL, it load also description of screen
+// return (PARAM_INFO_MON *start) if all is OK, else NULL
+///////////////////////////////////////////////////////////////////////////////
+// start->->next->next->next-> ...->next->NULL
+//   |      |     |     |           |
+//   V      V     V     V           V
+//        par0  par1  par2        parN
+///////////////////////////////////////////////////////////////////////////////
+// this should be de-allocated from calling function,
+// also, screen_name should be deallocated from calling function
+///////////////////////////////////////////////////////////////////////////////
+
+PARAM_INFO_MON *get_mon_param_info(char *f_name, char *screen_name[NM_MAX_SCREEN+1])
+{
+       PARAM_INFO_MON *start;  // pointer to netmonitor parameters info
+       PARAM_INFO_MON *info;   // pointer, iterator on info
+       PARAM_INFO_MON *check;  // pointer, iterator on info, for check usage
+
+       FILE *f_info;
+
+       char buf[256];
+       char *param;
+       char *param_name;
+       char *tmp;
+
+       char tmp_mname[55];             // very larger, but if netmon bug ...
+       int x, y, len, s, t;            // x & y coord, len, screen nr, type
+       int i;
+
+       if (screen_name != NULL)
+               for (i = 0; i <= NM_MAX_SCREEN; i++)
+                       screen_name[i] = NULL;
+               
+
+       if ((f_info = fopen(f_name, "r")) == NULL)
+       {       fprintf(stderr, "Can' t open file parameter info: <%s>\n", f_name);
+               return(NULL);
+       }
+       
+       if ((start = malloc(sizeof(PARAM_INFO_MON))) == NULL)
+       {       fprintf(stderr, "no mem\n");
+               return(NULL);
+       }
+       else
+       {       start->next = NULL;
+       }
+
+       info = start;
+       while (fgets(buf, 256, f_info) != NULL)
+       {
+               param = buf;
+
+               // Truncate from '#' at right of comments
+               if ((tmp = strchr(param, '#')) != NULL)
+                       *tmp = '\0';
+
+               // Strip leading, trailing whitespace
+               while(isspace((int) *param))
+                       param++;
+
+               while((strlen(param) > 0) && isspace((int) param[strlen(param) - 1]))
+                       param[strlen(param) - 1] = '\0';
+       
+               // Ignore blank lines
+               if ((*param == '\n') || (*param == '\0'))
+                       continue;
+
+
+#ifdef DEBUG
+               fprintf(stderr, "%s: info line: <%s>\n", f_name, param);
+#endif
+               // check for param name
+               if ((param_name = strtok(param, "=\t\n")) == NULL)
+                       continue;
+
+               // check if screen name
+               if (strncmp("SCREEN", param_name, 6) == 0)
+               {       
+                       // if we do not want screen names ...
+                       if (screen_name == NULL)
+                               continue;
+
+// FIXME check for screen nr
+                       if ((tmp = strtok(NULL, ":\n")) == NULL)
+                               continue;
+       
+                       i = atoi(tmp);
+// FIXME: check if already defined screen
+
+                       if ((i <= 0) || (i > NM_MAX_SCREEN))
+                               continue;
+                       // check for screen name
+                       if ((tmp = strtok(NULL, ":\n")) == NULL)
+                               continue;
+
+                       screen_name[i] = strdup(tmp);
+               }
+               else 
+               {
+                       // parameter
+
+// FIXME: check for NM_MAX_FIELDS
+
+                       // check for x coord
+                       if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+                               continue;
+                       x = atoi(tmp);
+
+                       // check for y coord
+                       if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+                               continue;
+                       y = atoi(tmp);
+
+                       // check for len
+                       if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+                               continue;
+                       len = atoi(tmp);
+       
+                       // check for screen
+                       if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+                               continue;
+                       s = atoi(tmp);
+
+                       // check for netmon manual name
+                       if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+                       {       fprintf(stderr,
+                                       "%s: PARAMETER <%s> in screen <%d>, not have netmon manual reference\n",
+                                       f_name, param_name, s);
+                               free_nm_info(start);
+                               return(NULL);
+                       }
+                       strcpy(tmp_mname, tmp);
+
+                       // check for data type (optional)
+                       if ((tmp = strtok(NULL, ":\t\n")) != NULL)      
+                               t = *tmp;
+                       else
+                               t = '\0';
+
+                       // check len, here, so we print parameter name
+                       if (len == 0)
+                       {       fprintf(stderr,
+                                       "%s: PARAMETER <%s> in screen <%d>, has invalid data lenght\n",
+                                       f_name, param_name, s);
+                               free_nm_info(start);
+                               return(NULL);
+                       }
+
+                       // check if already defined same param_name
+                       check = start;
+                       while (check->next != NULL)
+                       {       check = check->next;
+                               if (strcmp(param_name, check->name) == 0)
+                               {
+                                       fprintf(stderr,
+                                       "%s: PARAMETER <%s> in screen <%d> already defined as in screen <%d>\n",
+                                       f_name, param_name, s, check->s_nr);
+                                       free_nm_info(start);
+                                       return(NULL);
+                               }
+                       }
+
+                       // make space, and add parameter
+                       if ((info->next = malloc(sizeof(PARAM_INFO_MON))) != NULL)
+                       {
+                               info = info->next;
+                               info->name = strdup(param_name);
+                               info->x = x;
+                               info->y = y;
+                               info->len = len;
+                               info->s_nr = s;
+                               info->mname = strdup(tmp_mname);
+                               info->type = t;
+
+                               info->next = NULL;      // mark end
+                       }
+                       else
+                       {
+                               fprintf(stderr, "no mem");
+                               free_nm_info(start);
+                               return(NULL);
+                       }
+
+               }
+       
+       }
+
+       fclose(f_info);
+       
+#ifdef DEBUG
+       info = start;
+       while (info->next != NULL)
+       {
+               info = info->next;
+               fprintf(stderr, "info name %s\n", info->name);
+       }
+#endif
+       return(start);
+}
+
+// 2, parse the arguments and check command(s) line 
+// command line, phone spec input, and output are complex,
+// so we exit printing info about error instead of std help
+///////////////////////////////////////////////////////////////////////////////
+
+int parse_check(int argc, char *argv[], PARAM_INFO_MON *start, char *f_name, int line)
+{
+       int ctr;
+       int i;
+       int time_spec;
+       int found_data;
+       char *p;
+       char *tmp;
+       char *o;
+       PARAM_INFO_MON *info;                   // iterator on this list
+
+#ifdef DEBUG
+       for (i = 0; i < argc; i++)
+               fprintf(stderr, "argv[%d] = <%s>\n",i, argv[i]);
+#endif
+
+       time_spec = 0;
+       ctr = 0; 
+       i = 0;
+       while (i < argc)
+       {
+               p = argv[i];
+               if (*p == '-')
+               {                       // should be one of the short option
+                       if (strcmp(argv[i], "-fs") == 0)
+                       {               // field separator, next arg should be a string
+                               if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+                               {       i++;
+                                       // arg OK, do nothing
+                               }
+                               else
+                               {       if (line)
+                                               fprintf(stderr,
+                                                       "-fs: Invalid field separator in <%s> at line %d\n",
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-fs: Invalid field separator\n");
+                                       return(-1);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-ls") == 0) 
+                       {               // line separator, next arg should be a string
+                               if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+                               {       i++;
+                                       // arg OK, do nothing
+                               }
+                               else
+                               {       if (line)
+                                               fprintf(stderr,
+                                                       "-ls: Invalid line separator in <%s> at line %d\n",
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-ls: Invalid line separator\n");
+                                       return(-1);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-tm") == 0) 
+                       {               // time separator, next arg should be a millisecond (200-10000)
+                               if (time_spec)
+                               {       if (line)
+                                               fprintf(stderr,
+                                               "-tm, -ts, are mutually exclusive in <%s> at line %d\n",
+                                               f_name, line);
+                                       else
+                                               fprintf(stderr, "-tm, -ts, are mutually exclusive\n");
+                                       return(-1);
+                               }
+
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 200) && (atoi(argv[i+1]) <= 10000))
+                               {       i++;
+                                       time_spec = 1;
+                                       // arg OK, do nothing
+                               }
+                               else
+                               {       if (line)
+                                               fprintf(stderr,
+                       "-tm: Invalid argument (200-10000 milliseconds), in <%s> at line %d\n",
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-tm: Invalid argument (200-10000 milliseconds)\n");
+                                       return(-1);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-ts") == 0) 
+                       {               // time separator, next arg should be a seconds (1-3600)
+                               if (time_spec)
+                               {       if (line)
+                                               fprintf(stderr,
+                                               "-tm, -ts, are mutually exclusive, in <%s> at line %d\n",
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-tm, -ts, are mutually exclusive\n");
+                                       return(-1);
+                               }
+
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 3600))
+                               {       i++;
+                                       time_spec = 1;
+                                       // arg OK, do nothing
+                               }
+                               else
+                               {       if (line)
+                                               fprintf(stderr,
+                                       "-ts: Invalid argument (1-3600 seconds) in <%s> at line %d\n",  
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-ts: Invalid argument (1-3600 seconds)\n");
+                                       return(-1);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-n") == 0) 
+                       {               // nr of data pump, before stop collection,
+                                       // next arg should be a int > 0
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 99999))
+                               {       i++;
+                                       // arg OK, do nothing
+                               }
+                               else
+                               {       if (line)
+                                               fprintf(stderr,
+                                               "-n: Invalid argument (1-99999 times) in <%s> at line %d\n",
+                                                       f_name, line);
+                                       else
+                                               fprintf(stderr, "-n: Invalid argument (1-99999 times)\n");
+                                       return(-1);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-h") == 0) 
+                       {               // we do NOT want header (default with header)
+                                       // arg OK, do nothing
+                       }
+                       else if (strcmp(argv[i], "-S") == 0) 
+                       {               // we have used use specs from a file instead of standard info,
+                                       // next arg is an existing readable filename
+                                       // as already parsed correctly, we skip here.
+                               i++;
+                       }
+                       else if (strcmp(argv[i], "-I") == 0) 
+                       {               // we have used input from a file instead of command line
+                                       // next arg is an existing readable filename
+                                       // as already parsed correctly, we skip here.
+                               i++;
+                       }       
+                       else
+                       {       
+                               if (line)
+                                       fprintf(stderr, "Unrecognized option %s in <%s> at line %d\n",
+                                               argv[i], f_name, line);
+                                       else
+                                               fprintf(stderr, "Unrecognized option %s\n", argv[i]);
+                               return(-1);
+                       }
+               }
+               else
+               {                       // should be required data
+                       tmp = strdup(argv[i]);
+                       p = strtok(tmp, ":\t\n");
+                       while (p != NULL)
+                       {
+                               // check if there is an output format specification
+                               o = p;
+                               while (*o)
+                               {
+                                       o++;
+                                       if (*o == '-')
+                                       {       *o = '\0';
+                                               o++;
+                                               if (strlen(o) == 0)
+                                               {
+                                                       // we have 'minus', so, probably forget format ...
+
+                                                       if (line)
+                                                               fprintf(stderr,
+                                        "Required data <%s->, without format specifiers in <%s> at line %d\n",
+                                                                       p, f_name, line);
+                                                       else
+                                                               fprintf(stderr,
+                                        "Required data <%s->, without format specifiers\n", p);
+                                                       return(-1);
+                                               }
+                                       }
+                               }
+                       
+                                                               // we check for params
+                               found_data = 0;
+                               info = start;
+                               while (info->next != NULL)
+                               {       
+                                       info = info->next;
+                                       if (strcmp(p, info->name) == 0)
+                                       {
+                                               if (ctr > NM_MAX_FIELDS)
+                                               {
+                                                       if (line)
+                                                               fprintf(stderr,
+                                               "too much data field ... in file <%s> at line %d\n",
+                                                                       f_name, line);
+                                                       else
+                                               fprintf(stderr, "too much data field ...\n");
+                                                       return (-1);
+                                               }
+/*
+                                               data[ctr] = info;
+                                               out_f[ctr] = *o;
+*/
+                                               found_data = 1;
+                                               ctr++;
+                                               break;
+                                       }
+                               }
+                       
+                               if (found_data == 0)
+                               {
+                                       if (line)
+                                               fprintf(stderr,
+                       "Required data <%s>, not found in info-mon specifications in <%s> at line %d\n",
+                                                       p, f_name, line);
+                                       else
+                                               fprintf(stderr,
+                       "Required data <%s>, not found in info-mon specifications\n", p);
+                                       return(-1);
+                               }
+       
+                               p = strtok(NULL, ":\t\n");
+
+                       } // end while strtok
+
+               } // end else '-' (short options)
+               
+               i++;
+
+       } // end while
+       
+       if (ctr == 0)
+       {
+               if (line)
+                       fprintf(stderr, "no required data! in <%s> at line %d\n", f_name, line);
+               else
+                       fprintf(stderr, "no required data!\n");
+               return(-1);
+       }
+
+       return 0;
+}
+                                                         
+// 2, parse the arguments and process the command line
+// no checks are needed here, because already do in parse_check
+// it return a pointer to info needed for make output, or NULL if errors
+///////////////////////////////////////////////////////////////////////////////
+OUT_INFO_MON *parse_process(int argc, char *argv[], PARAM_INFO_MON *start)
+{
+       int ctr;
+       int i;
+       int time_spec;
+       int found_data;
+       int req_tm;
+       int req_ts;
+       char *p;
+       char *tmp;
+       char *o;
+       PARAM_INFO_MON *info;                   // iterator on this list
+       OUT_INFO_MON *out_param;                // iterator on this list
+
+       if ((out_param = malloc(sizeof(OUT_INFO_MON))) == NULL)
+       {       fprintf(stderr, "no mem\n");
+               return(NULL);
+       }
+
+#ifdef DEBUG
+       fprintf(stderr, "parse_process: argc = %d\n", argc);
+               for (i = 0; i < argc; i++)
+                       fprintf(stderr, "argv[%d] = <%s>\n",i, argv[i]);
+#endif
+
+       for (i = 0; i < NM_MAX_FIELDS; i++)
+               out_param->data[i] = NULL;
+
+       strcpy(out_param->req_fs, " ");
+#ifdef WIN32
+       strcpy(out_param->req_ls, "\n\r");
+#else
+       strcpy(out_param->req_ls, "\n");
+#endif
+       time_spec = 0;
+       out_param->req_n = 0;
+       out_param->req_header = 1;
+
+       time_spec = 0;
+       req_tm = 200;                   /* default wait */
+       req_ts = 0;     
+       
+       ctr = 0; 
+       i = 0;
+       while (i < argc)
+       {
+               p = argv[i];
+               if (*p == '-')
+               {                       // should be one of the short option
+                       if (strcmp(argv[i], "-fs") == 0)
+                       {               // field separator, next arg should be a string
+                               if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+                               {       i++;
+                                       strcpy(out_param->req_fs, argv[i]);
+                               }
+                               else
+                               {       fprintf(stderr, "NEVER BE:-fs: Invalid field separator\n");
+                                       return(NULL);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-ls") == 0) 
+                       {               // line separator, next arg should be a string
+                               if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+                               {       i++;
+                                       strcpy(out_param->req_ls, argv[i]);
+                               }
+                               else
+                               {       fprintf(stderr, "NEVER BE:-ls: Invalid line separator\n");
+                                       return(NULL);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-tm") == 0) 
+                       {               // time separator, next arg should be a millisecond (200-10000)
+                               if (time_spec)
+                               {       fprintf(stderr, "NEVER BE:-tm, -ts, are mutually exclusive");
+                                       return(NULL);
+                               }
+
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 200) && (atoi(argv[i+1]) <= 10000))
+                               {       i++;
+                                       req_tm = atoi(argv[i]);
+                                       time_spec = 1;
+                               }
+                               else
+                               {       fprintf(stderr, "NEVER BE:-tm: Invalid argument (200-10000 milliseconds)\n");
+                                       return(NULL);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-ts") == 0) 
+                       {               // time separator, next arg should be a seconds (1-3600)
+                               if (time_spec)
+                               {       fprintf(stderr, "NEVER BE:-tm, -ts, are mutually exclusive");
+                                       return(NULL);
+                               }
+
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 3600))
+                               {       i++;
+                                       req_ts = atoi(argv[i]);
+                                       time_spec = 1;
+
+                                       // delete default
+                                       req_tm = 0;
+                               }
+                               else
+                               {       fprintf(stderr, "NEVER BE:-ts: Invalid argument (1-3600 seconds)\n");
+                                       return(NULL);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-n") == 0) 
+                       {               // nr of data pump, before stop collection,
+                                       // next arg should be a int > 0
+                               if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 99999))
+                               {       i++;
+                                       out_param->req_n = atoi(argv[i]);
+                               }
+                               else
+                               {       fprintf(stderr, "NEVER BE:-n: Invalid argument (1-99999 times)\n");
+                                       return(NULL);
+                               }
+                       }
+                       else if (strcmp(argv[i], "-h") == 0) 
+                       {               // we do NOT want header (default with header)
+                               out_param->req_header = 0;
+                       }
+                       else if (strcmp(argv[i], "-S") == 0) 
+                       {               // we have used use specs from a file instead of standard info,
+                                       // next arg is an existing readable filename
+                                       // as already parsed correctly, we skip here.
+                               i++;
+                       }
+                       else if (strcmp(argv[i], "-I") == 0) 
+                       {               // we have used input from a file instead of command line
+                                       // next arg is an existing readable filename
+                                       // as already parsed correctly, we skip here.
+                               i++;
+                       }       
+                       else
+                       {       
+                               fprintf(stderr, "NEVER BE:Unrecognized option %s\n", argv[i]);
+                               return(NULL);
+                       }
+               }
+               else
+               {                       // should be required data
+                       tmp = strdup(argv[i]);
+                       p = strtok(tmp, ":\t\n");
+                       while (p != NULL)
+                       {
+                               // check if there is an output format specification
+                               o = p;
+                               while (*o)
+                               {
+                                       o++;
+                                       if (*o == '-')
+                                       {       *o = '\0';
+                                               o++;
+                                               if (strlen(o) == 0)
+                                               {
+                                                       // we have 'minus', so, probably forget format ...
+
+                                                       fprintf(stderr,
+                                                        "NEVER BE:Required data <%s->, without format specifiers\n", p);
+                                                       return(NULL);
+                                               }
+                                       }
+                               }
+                       
+                                                       // we check for params
+                               found_data = 0;
+                               info = start;
+                               while (info->next != NULL)
+                               {       
+                                       info = info->next;
+                                       if (strcmp(p, info->name) == 0)
+                                       {
+                                               if (ctr > NM_MAX_FIELDS)
+                                               {
+                                                       fprintf(stderr, "NEVER BE:too much data field ...");
+                                                       return(NULL);
+                                               }
+                                               out_param->data[ctr] = info;
+                                               out_param->out_f[ctr] = *o;
+                                               found_data = 1;
+                                               ctr++;
+                                               break;
+                                       }
+                               }
+                               
+                               if (found_data == 0)
+                               {
+                                       fprintf(stderr,
+                                               "NEVER BE:Required data <%s>, not found in info-mon specifications\n", p);
+                                       return(NULL);
+                               }
+       
+
+                               p = strtok(NULL, ":\t\n");
+
+                       } // end while strtok
+
+                       // here, we have an array of pointers to required data
+                       // and an array of output specifiers, from 0 to [ctr-1]
+
+               } // end else '-' (short options)
+               
+               i++;
+
+       } // end while
+       
+       if (ctr == 0)
+       {
+               fprintf(stderr, "NEVER BE:no required data!\n");
+               return(NULL);
+       }
+       
+       // now, what netmon screen we need to retrieve ?
+       // we need somewhat were checking is faster, as our goal is lower cicle time
+
+       // we can have NM_MAX_SCREEN=254 screens, so we use an array, of unsigned char,
+       // each char contain number of needed screen, 255 is list terminator
+       
+       for (i = 0; i <= NM_MAX_SCREEN; i++)
+               out_param->req_screen[i] = 255;
+
+       ctr = 0;
+#ifdef DEBUG
+fprintf(stderr, "Start Required data %s screen %d\n", out_param->data[ctr]->name, out_param->data[ctr]->s_nr);
+#endif
+       while (out_param->data[ctr] != NULL)
+       {
+#ifdef DEBUG
+fprintf(stderr, "Required data %s screen %d\n", out_param->data[ctr]->name, out_param->data[ctr]->s_nr);
+#endif
+               // check if screen already in 
+               found_data = 0;
+               i = 0;
+               while (out_param->req_screen[i] != 255)
+               {
+                       if (out_param->req_screen[i] == out_param->data[ctr]->s_nr)
+                       {               // already load, skip
+                               found_data = 1;
+                               break;
+                       }
+                       i++;
+               }
+
+               if (found_data == 0)
+               {       
+#ifdef DEBUG
+fprintf(stderr, "i = %d, out_param->req_screen[%d] = %d\n", i, i, out_param->data[ctr]->s_nr);
+#endif
+                       out_param->req_screen[i] = out_param->data[ctr]->s_nr;
+                       i++;
+               }
+
+               ctr++;
+       }
+
+#ifdef DEBUG
+i = 0;
+while (out_param->req_screen[i] != 255)
+{
+       fprintf(stderr, "Required screen %d\n", out_param->req_screen[i]);
+       i++;
+}
+#endif
+       
+       if (req_tm)
+               out_param->req_wait = req_tm * 1000;
+       else if (req_ts)
+               out_param->req_wait = req_ts * 1000000;
+       else
+               out_param->req_wait = req_tm * 1000;
+       
+
+       return(out_param);
+}
+
+int nmd_output(OUT_INFO_MON *out_param)
+{
+       int d;
+       int len;
+       int ctr;
+       int i;
+       int nr_line;
+       char *p;
+       int nr_chr;
+       int n;
+       char Screen[NM_MAX_SCREEN_WIDTH];
+       time_t sec;
+       struct tm *date_time;
+
+       if (out_param->req_header)
+       {
+// print phone help header
+               d = 0;
+               while (out_param->data[d] != NULL)
+               {       len = out_param->data[d]->len;
+                       if (strlen(out_param->data[d]->name) > len)
+                               len = strlen(out_param->data[d]->name);
+                       if (strlen(out_param->data[d]->mname) > len)
+                               len = strlen(out_param->data[d]->mname);
+                       printf("%*.*s%s", len, len, out_param->data[d]->name, out_param->req_fs);
+                       d++;
+               }
+               printf("%s", out_param->req_ls);
+
+// print netmon manual header
+               d = 0;
+               while (out_param->data[d] != NULL)
+               {       len = out_param->data[d]->len;
+                       if (strlen(out_param->data[d]->name) > len)
+                               len = strlen(out_param->data[d]->name);
+                       if (strlen(out_param->data[d]->mname) > len)
+                               len = strlen(out_param->data[d]->mname);
+                       printf("%*.*s%s", len, len, out_param->data[d]->mname, out_param->req_fs);
+                       d++;
+               }
+               printf("%s", out_param->req_ls);
+               printf("%s", out_param->req_ls);
+       }
+
+       ctr = 0;
+       while (!bshutdown)
+       {
+// stop after n data punp
+
+               ctr++;
+               if ((out_param->req_n) && (ctr > out_param->req_n))
+                       break;
+
+//             datapump: for each screen, for each required data, load data info->value
+
+               i = 0;
+               while(out_param->req_screen[i] != 255)
+               {       
+                       if (out_param->req_screen[i] == 0)
+                       {       
+                               sec = time(0);
+                               date_time = localtime(&sec);
+                               sprintf(Screen, "%02d-%02d-%04d\n%02d:%02d:%02d\n",
+                                       date_time->tm_mday,
+                                       date_time->tm_mon+1,
+                                       date_time->tm_year+1900,
+                                       date_time->tm_hour,
+                                       date_time->tm_min,
+                                       date_time->tm_sec);
+#ifdef DEBUG
+                               fprintf(stderr, "%02d-%02d-%04d\n%02d:%02d:%02d\n",
+                                       date_time->tm_mday,
+                                       date_time->tm_mon+1,
+                                       date_time->tm_year+1900,
+                                       date_time->tm_hour,
+                                       date_time->tm_min,
+                                       date_time->tm_sec);
+#endif
+                       }
+                       else
+                       {
+                               GSM->NetMonitor(out_param->req_screen[i], Screen);
+                       }
+
+// we have one screen of data, load those required
+
+                       d = 0;
+                       while (out_param->data[d] != NULL)
+                       {       
+                               if (out_param->data[d]->s_nr == out_param->req_screen[i])
+                               {
+                                       p = Screen;
+// goto req y          
+                                       nr_line = out_param->data[d]->y;
+                                       while ((*p) && (nr_line))
+                                       {       
+                                               if (*p == '\n')
+                                               {       nr_line--;
+                                               }
+                                               p++;
+                                       }
+#ifdef DEBUG
+fprintf(stderr, "\nthis line: %s\n\n", p);
+#endif
+
+// goto req x
+                                       nr_chr = out_param->data[d]->x;
+                                       while ((*p) && (nr_chr))
+                                       {       p++;
+                                               nr_chr--;
+                                       }
+// this the start of data
+                                       n = 0;
+                                       len = out_param->data[d]->len;
+                                       while ((*p) && (len))
+                                       {       out_param->data[d]->value[n] = *p;
+                                               p++;
+                                               n++;
+                                               len--;
+                                       }
+// pad with space if shorter than presumed
+                                       while ((*p) && (len))
+                                       {       out_param->data[d]->value[n] = ' ';
+                                               n++;
+                                               len--;
+                                       }
+
+                                       out_param->data[d]->value[n] = '\0';
+                               }
+
+                               d++;    // next screen
+                       }
+
+                       i++;            // next screen
+               }
+
+// print row of data
+               d = 0;
+               while (out_param->data[d] != NULL)
+               {       
+                       len = out_param->data[d]->len;
+                       if (out_param->req_header)
+                       {       if (strlen(out_param->data[d]->name) > len)
+                                       len = strlen(out_param->data[d]->name);
+                               if (strlen(out_param->data[d]->mname) > len)
+                                       len = strlen(out_param->data[d]->mname);
+                       }
+// FIXME check format
+                       printf("%*.*s%s", len, len, out_param->data[d]->value, out_param->req_fs);
+                       d++;
+               }
+               printf("%s", out_param->req_ls);
+
+               usleep(out_param->req_wait);
+               
+       }
+
+       printf("%s%s", out_param->req_ls, out_param->req_ls);
+
+       return(0);
+}
+
+// main func
+///////////////////////////////////////////////////////////////////////////////
+int netmonitordata(int argc, char *argv[])
+{
+       char *loc_info = NULL;                  // path to --netmonitordata directory
+       char *f_name;                           // absolute path of phone info-file
+       int flag_phone_spec = 0;                // flags, set if used -S option
+
+       char model[20] = "phonepar";            // TO DO: PHONE AUTODETECTION
+//     char phver[20] = "";
+
+       PARAM_INFO_MON *start;                  // pointer to list of parsed phone params
+       OUT_INFO_MON *out_param;                // pointer to struct of output data
+
+       char *f_commands = NULL;                // file containings input line arguments
+       FILE *commands;                         // Handle for this file
+       char buf[1024];                         // buffer
+       char *f_argv[NM_MAX_FIELDS+30];         // space for parameters and cmdline options
+       int f_argc;
+       char *p, *tmp;                          // various counter, flags, tmp area ...
+       int i;
+       int line;
+       
+
+       fbusinit(NULL);
+
+       signal(SIGINT, interrupted);
+       
+// FIXME model, phone_version
+
+       // before parsing phone-info-file, we check for user specified phone-info-file
+
+       i = 0;
+       while (i < argc)
+       {
+               if (strcmp(argv[i], "-S") == 0)
+               {
+                       if ((i+1) < argc)
+                       {
+                               flag_phone_spec = 1;
+                               loc_info = strdup(argv[i+1]);
+                               break;
+                       }
+                       else
+                       {       fprintf(stderr, "option -S require an argument ...\n");
+                               return -1;
+                       }
+               }
+
+               i++;
+       }
+       
+       if (loc_info != NULL)
+       {       f_name = strdup(loc_info);
+       }
+       else                            // we use standard file specification
+       {
+               if ((tmp = getenv("INFOMONPATH")) == NULL)
+               {       loc_info = strdup(".");
+               }
+               else
+               {       loc_info = strdup(tmp);
+               }
+
+               f_name = malloc(strlen(loc_info)+strlen(model)+10); 
+               sprintf(f_name, "%s/%s", loc_info, model);
+       }
+
+
+#ifdef DEBUG
+//     fprintf(stderr, "Loc_info <%s> model <%s> version <%s>\n", loc_info, model, phver);
+       fprintf(stderr, "Info file: <%s>\n", f_name);
+#endif
+       if ((start = get_mon_param_info(f_name, NULL)) == NULL)
+               return(-1);             
+
+       // option -I give us the possibility of specify a filename,
+       // containing a "sequence" of command line args.
+       // if you specify this option, you can use (on command line) only -S option.
+       // other options may be specified inside the input-file.
+       // contents of this file as the same sintax as the command line,
+       // except it must not contain "--netmonitordata" or "-I" or "-S" options 
+        ///////////////////////////////////////////////////////////////////////
+
+       i = 0;
+       while (i < argc)
+       {
+               if (strcmp(argv[i], "-I") == 0)
+               {
+                       if ((i+1) < argc)
+                       {
+                               if ((argc == 2) || ((argc == 4) && flag_phone_spec == 1))
+                               {       f_commands = strdup(argv[i+1]);
+                               }
+                               else
+                               {       fprintf(stderr, "option -I accept only additional -S option.\n");
+                                       return -1;
+                               }
+
+                               break;
+                       }
+                       else
+                       {       fprintf(stderr, "option -I require an argument ...\n");
+                               return -1;
+                       }
+               }
+
+               i++;
+       }
+       
+       // before all, we check all command line
+       
+       if (f_commands != NULL)
+       {       
+#ifdef DEBUG
+               fprintf(stderr, "netmonitordata(check): commands from <%s>\n", f_commands);
+#endif
+               // for each line
+               // do
+               //      read line, make array f_argv, and counter f_argc
+               //      parse & check args, so errors are checked before real processing
+               //                             (-I option here is ignored)
+               //                             (-S option can be here, and it is used)
+               // done
+
+               if ((commands = fopen(f_commands, "r")) == NULL)
+               {       fprintf(stderr, "Can' t open file commands input :<%s>n", f_commands);
+                       return(-1);
+               }
+       
+// FIXME line may be be splitted
+               line = 0;
+               while (fgets(buf, 1024, commands) != NULL)
+               {       
+                       p = buf;
+                       line++;
+
+                       // Truncate from '#' at right of comments
+                       if ((tmp = strchr(p, '#')) != NULL)
+                               *tmp = '\0';
+
+                       // Strip leading, trailing whitespace
+                       while(isspace((int) *p))
+                               p++;
+
+                       while((strlen(p) > 0) && isspace((int) p[strlen(p) - 1]))
+                               p[strlen(p) - 1] = '\0';
+       
+                       // Ignore blank lines
+                       if ((*p == '\n') || (*p == '\0'))
+                               continue;
+                       
+#ifdef DEBUG
+fprintf(stderr, "netmonitordata(check): row <%s>\n", p);
+#endif
+                       // make args
+                       f_argc = 0;
+
+                       p = strtok(p, " \t");
+                       do
+                       {       f_argv[f_argc++] = strdup(p);
+#ifdef DEBUG
+fprintf(stderr, "netmonitordata(check): token <%s>\n", p);
+#endif
+                               p = strtok(NULL, " \t");                // OK p,  (NULL)
+                       }
+                       while ((p != NULL) && (*p));
+       
+                       // here we have f_argc, f_argv, this line is OK
+               
+                       if (parse_check(f_argc, f_argv, start, f_commands, line) != 0)
+                       {       free_nm_info(start);
+                               return(-1);
+                       }
+               }
+       
+               fclose(commands);
+       }
+       else    // as above, but we have only command line, argv, argc.
+       {
+               if (parse_check(argc, argv, start, NULL, 0) != 0)
+               {       free_nm_info(start);
+                       return(-1);
+               }
+       }
+       
+       // here, all commands line are checked, and are correct
+
+       if (f_commands != NULL)
+       {       
+#ifdef DEBUG
+               fprintf(stderr, "netmonitordata(process): commands from <%s>\n", f_commands);
+#endif
+
+               // for each line
+               // do
+               //      read line, make array f_argv, and counter f_argc
+               //      parse_process argument,   (-I option here is ignored)
+               //                                (-S option can be here, and it is used)
+               //      (make header                    // these are in nmd_output();
+               //       loop
+               //              get net-mon-info 
+               //              make output
+               //       done)
+               // done
+
+               if ((commands = fopen(f_commands, "r")) == NULL)
+               {       fprintf(stderr, "Can' t open file commands input :<%s>n", f_commands);
+                       return(-1);
+               }
+       
+// FIXME line may be be splitted
+               while (fgets(buf, 1024, commands) != NULL)
+               {       
+                       p = buf;
+
+                       // Truncate from '#' at right of comments
+                       if ((tmp = strchr(p, '#')) != NULL)
+                               *tmp = '\0';
+
+                       // Strip leading, trailing whitespace
+                       while(isspace((int) *p))
+                               p++;
+
+                       while((strlen(p) > 0) && isspace((int) p[strlen(p) - 1]))
+                               p[strlen(p) - 1] = '\0';
+       
+                       // Ignore blank lines
+                       if ((*p == '\n') || (*p == '\0'))
+                               continue;
+                       
+                       // make args
+
+                       f_argc = 0;
+                       p = strtok(p, " \t");
+                       do
+                       {       f_argv[f_argc++] = strdup(p);
+                               p = strtok(NULL, " \t");                // OK p,  (NULL)
+                       }
+                       while ((p != NULL) && (*p));
+       
+                       // here we have f_argc, f_argv, this line is OK
+               
+                       if ((out_param = parse_process(f_argc, f_argv, start)) == NULL)
+                       {       free_nm_info(start);
+                               return(-1);     /* NEVER BE */
+                       }
+               
+                       // here, command line has no error ...
+
+                       nmd_output(out_param);
+
+                       free(out_param);
+               }
+       
+               fclose(commands);
+       }
+       else    // as above, but we have only command line, argv, argc.
+       {
+               if ((out_param = parse_process(argc, argv, start)) == NULL)
+               {       free_nm_info(start);
+                       return(-1);     /* NEVER BE */
+               }
+               nmd_output(out_param);
+
+               free(out_param);
+       }
+       GSM->Terminate();
+
+       free(loc_info);
+       free(f_name);
+
+/* I analised this source and this should be done. But when compile with VC6 */
+/* I have error. So, commented... MW */
+#ifndef VC6
+       free_nm_info(start);
+#endif
+
+       return(0);
+}
+
+
+// used by nm_collect()
+///////////////////////////////////////////////////////////////////////////////
+char *rowScreen(char *s)
+{
+       char *p;
+       
+       // make Screen in one row
+       p = s;
+       while(*p)
+       {
+           if (*p == '\n')
+                       *p = ' ';
+           p++;
+       }
+
+       return(s);
+}
+
+void printtime(void)
+{
+
+  struct mydate {
+    int Year;          /* The complete year specification - e.g. 1999. Y2K :-) */
+    int Month;         /* January = 1 */
+    int Day;
+    int Hour;
+    int Minute;
+    int Second;
+    int Timezone;      /* The difference between local time and GMT */
+  } Date;
+
+  struct tm *now;
+  time_t nowh;
+  nowh=time(NULL);
+  now=localtime(&nowh);
+
+  Date.Year = now->tm_year;
+  Date.Month = now->tm_mon+1;
+  Date.Day = now->tm_mday;
+  Date.Hour = now->tm_hour;
+  Date.Minute = now->tm_min;
+  Date.Second = now->tm_sec;
+
+  /* I have 100 (for 2000) Year now :-) */
+  if (Date.Year>99 && Date.Year<1900) {
+    Date.Year=Date.Year+1900;
+  }
+
+  printf("%d:%d:%d:%d:%d:%d      ",Date.Day,Date.Month,Date.Year,Date.Hour,Date.Minute,Date.Second);
+
+}
+
+// like netmonitor(), but print in one row, 1, 2 or 3 screen, every ~0.3 s
+///////////////////////////////////////////////////////////////////////////////
+int nm_collect(int argc, char *argv[])
+{
+       int mode[MAX_NM_COLLECT];
+       char Screen[NM_MAX_SCREEN_WIDTH];
+       int i;
+
+       for (i=0;i<argc;i++) {
+           argc > i ? (mode[i] = atoi(argv[i])): (mode[i] = 0);
+       }
+
+       for (i=0;i<argc;i++) {
+           if (mode[i]==0 && strcmp(argv[i],"-d")) {
+               fprintf(stderr, "Wrong %i parameter (not number and not -d)\n",i);
+               return(-1);
+           }
+       }
+
+       signal(SIGINT, interrupted);
+
+       fbusinit(NULL);
+
+       // end on CTRL-C
+       while (!bshutdown) 
+       {
+               for (i=0;i<argc;i++) {
+                 if (!strcmp(argv[i],"-d")) {
+                    printtime();
+                    break;
+                 }
+               }
+               
+               for (i=0;i<argc;i++) {
+                 if (mode[i]!=0)
+                 {
+                       GSM->NetMonitor(mode[i], Screen);
+                       printf("%s::", rowScreen(Screen));
+                 }
+               }
+               
+               printf("\n\n");
+
+               usleep(150000);
+       }
+
+       GSM->Terminate();
+
+       return 0;
+}
+
+#ifdef DEBUG
+int sniff(int argc, char *argv[])
+{
+  /* base model comes from gnokiirc */
+  strcat(model,"sniff");
+  
+  if (argc>0) strcpy(Port,argv[0]);
+    
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  /* Loop here indefinitely - allows you to see messages from GSM code in
+     response to unknown messages etc. The loops ends after pressing the
+     Ctrl+C. */
+  while (!bshutdown) {
+    sleep(1);
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int decodefile(int argc, char *argv[])
+{
+ FILE *infile;
+ unsigned char in_buffer[255];
+ int nr_read = 0;
+ int i = 0;
+
+  /* base model comes from gnokiirc */
+  strcat(model,"decode");
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ printf ("open InPutFile: %s\n", argv[0]);
+ if ( (infile = fopen( argv[0], "rb")) == NULL ) {
+   printf ("Failed to open InPutFile: %s\n", argv[0]);
+   exit (1); }
+
+ while ( (nr_read = fread(in_buffer, 1, 16, infile)) > 0 ) {
+  for (i=0; i < nr_read; i++)
+     Protocol->StateMachine(in_buffer[i]);
+  }
+
+   return 0;
+}
+
+#endif
+
+int getringtone(int argc, char *argv[])
+{
+  GSM_BinRingtone ringtone;
+  GSM_Error error;
+  GSM_Ringtone SMringtone;
+
+  int i;
+  
+  char model[64];
+
+  FILE *file;
+
+  ringtone.location=1;
+  if (argc>1) ringtone.location=atoi(argv[1]);
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetBinRingtone(&ringtone);
+
+  while (GSM->GetModel(model)  != GE_NONE)
+    sleep(1);
+
+  GSM->Terminate();
+
+  fprintf(stdout, _("Downloaded ringtone, location %i: "),ringtone.location);
+  
+  switch (error) {
+    case GE_NONE:
+      fprintf(stdout, _("get succeeded!\n"));
+      fprintf(stdout, _("Name: %s (binary format)\n"),ringtone.name);
+      break;
+    case GE_INVALIDRINGLOCATION:
+      fprintf(stdout, _("invalid location %i!\n"),ringtone.location);
+      break;
+    case GE_UNKNOWNMODEL:
+    
+      /* In 3310 we have normal "Smart Messaging" format */
+      if (GetModelFeature (FN_RINGTONES)==F_RING_SM) {
+      
+        i=7;
+       if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8;
+       ringtone.frame[i]=0x02;
+       
+        GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i);
+
+        fprintf(stdout, _("Name: %s (normal format)\n"),SMringtone.name);
+
+        GSM_SaveRingtoneFileOnConsole(argv[0], &SMringtone);
+       
+       return 0;
+      }
+
+      fprintf(stdout, _("mygnokii doesn't know format for this model!\n"));
+      break;
+    case GE_NOTIMPLEMENTED:
+      fprintf(stdout, _("not implemented for this model!\n"));
+      break;
+    default:
+      fprintf(stdout, _("not supported by this model!\n"));
+      break;
+  }
+  
+  if (error!=GE_NONE)
+    return(-1);
+  
+  file = fopen(argv[0], "wb");
+      
+  if (!file)
+    return(GE_CANTOPENFILE);
+
+  fwrite(ringtone.frame, 1, ringtone.length, file);    
+  
+  fclose(file);
+  
+  return 0;
+
+}
+
+int binringtoneconvert(int argc, char *argv[])
+{
+  GSM_BinRingtone ringtone;
+  
+  int i,j,z;
+  bool isok;
+  int deflen=7,m,w;
+  bool pause;
+
+  FILE *file;
+  
+//{ "c", "c#", "d", "d#", "e",  "f", "f#", "g", "g#", "a", "a#", "h" };
+  int binary_notes[12] =
+  { 0,    1,    2,   3,    4,   6,   7,    8,   9,    10,  11 ,   12};
+
+  if (GSM_ReadBinRingtoneFile(argv[0],&ringtone)!=GE_NONE) {
+    fprintf(stdout,_("Failed to read %s file!\n"),argv[0]);
+    return -1;
+  }
+
+  file = fopen(argv[1], "wb");
+      
+  if (!file)
+    return(GE_CANTOPENFILE);
+
+  i=5;
+  while (true) {
+    if (ringtone.frame[i]==0) break;
+    fprintf(file,_("%c"),ringtone.frame[i]);
+    i++;
+  }
+
+  fprintf(file,_(":d=32,o=5,b=300:"));
+    
+  i=i+5;j=0;z=0;
+  while (true) {
+    if (ringtone.frame[i]!=j) {
+      if (j!=0) {
+        isok=false;
+       if (j==64) {
+         j=255;//Pause
+         isok=true;
+       }
+       if (!isok && j>=114 && j<=125) {
+         j=14*3+binary_notes[j-114];
+         isok=true;
+       }
+       if (!isok && j>=126 && j<=137) {
+         j=14*1+binary_notes[j-126];
+         isok=true;
+       }
+       if (!isok && j>=138 && j<=149) {
+         j=14*2+binary_notes[j-138];
+         isok=true;
+       }
+       if (!isok && j>=150 && j<=161) {
+         j=14*4+binary_notes[j-150];
+         isok=true;
+       }
+       if (!isok) {
+         if (j!=10) { 
+           fprintf(stdout,_("Unknown block in binary ringtone %i %i\n"),j,z);
+         }
+       } else {
+         w=deflen;
+         for (m=0;m<6;m++) {
+           w=w*2;
+           if (w>z && (w/2)<=z) {
+             switch (m) {
+               case 1:fprintf(file,_("16"));break;\r
+               case 2:fprintf(file,_("8"));break;\r
+               case 3:fprintf(file,_("4"));break;\r
+               case 4:fprintf(file,_("2"));break;\r
+               case 5:fprintf(file,_("1"));break;\r
+             }
+             break;
+           }
+         }
+         if (z>w) fprintf(file,_("1"));
+         pause=false;
+          switch (GSM_GetNote(j)) {\r
+            case Note_C  :fprintf(file,_("c"));break;\r
+            case Note_Cis:fprintf(file,_("c#"));break;\r
+            case Note_D  :fprintf(file,_("d"));break;\r
+            case Note_Dis:fprintf(file,_("d#"));break;\r
+            case Note_E  :fprintf(file,_("e"));break;\r
+            case Note_F  :fprintf(file,_("f"));break;\r
+            case Note_Fis:fprintf(file,_("f#"));break;\r
+            case Note_G  :fprintf(file,_("g"));break;\r
+            case Note_Gis:fprintf(file,_("g#"));break;\r
+            case Note_A  :fprintf(file,_("a"));break;\r
+            case Note_Ais:fprintf(file,_("a#"));break;\r
+            case Note_H  :fprintf(file,_("h"));break;\r
+            default      :pause=true;fprintf(file,_("p"));break; //Pause ?\r
+          }\r
+         w=deflen*1.5;
+         for (m=0;m<6;m++) {
+           w=w*2;
+           if (w>z && (w/2)<=z) {
+             fprintf(file,_("."));
+             break;
+           }
+         }
+         if ((j/14)!=1 && !pause) fprintf(file,_("%i"),j/14);
+         fprintf(file,_(","));
+       }
+      }
+      j=ringtone.frame[i];
+      z=ringtone.frame[i+1];
+    } else {
+      z=z+ringtone.frame[i+1];
+    }
+    i=i+2;
+    if (i>=ringtone.length) break;
+  }
+
+  fclose(file);
+  
+  return 0;
+
+}
+
+int renamesmsc(int argc, char *argv[])
+{
+  GSM_MessageCenter MessageCenter;
+
+  MessageCenter.No=atoi(argv[0]);
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  if (GSM->GetSMSCenter(&MessageCenter) == GE_NONE) {
+    fprintf(stdout,_("SMSC number %i get OK\n"),MessageCenter.No);  
+  } else {
+    GSM->Terminate();
+    fprintf(stdout,_("Error getting SMSC number %i\n"),MessageCenter.No);
+    return 0;  
+  }
+
+  strncpy(MessageCenter.Name,argv[1],10);
+
+  if (GSM->SetSMSCenter(&MessageCenter) == GE_NONE) {
+    fprintf(stdout,_("SMSC number %i set OK (renamed to \"%s\")\n"),MessageCenter.No,MessageCenter.Name);
+  } else {
+    GSM->Terminate();
+    fprintf(stdout,_("Error setting SMSC number %i\n"),MessageCenter.No);
+    return 0;  
+  }
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/*
+ * Returns number of sostituited characters.
+ * ... may be useful one day ??
+ */
+int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction )
+       /* direction = 0 : after reading phone memory (
+        *             1 : writing phone memory
+        */
+{
+       register int i;
+       register int count=0;
+       char charfrom, charto;
+
+       charfrom= (direction==0) ? ';' : '|';
+       charto  = (direction==0) ? '|' : ';';
+
+       count+=str_substch(pentry->Name, charfrom, charto );
+       count+=str_substch(pentry->Number, charfrom, charto );
+
+       for( i = 0; i < pentry->SubEntriesCount; i++ )
+       {
+               if( pentry->SubEntries[i].EntryType != GSM_Date )
+                               count+=str_substch(pentry->SubEntries[i].data.Number ,charfrom,charto);
+       }
+
+       return( count );
+}
+
+int str_substch( char *str, const char toric, const char sost )
+{
+       unsigned int ct;
+       int i_sost=0;
+        
+               for( ct = 0; ct < strlen(str); ct++ )
+                       if( str[ct] == (unsigned char) toric )
+                       { str[ct] = sost; i_sost++; }
+                
+       return( i_sost );
+}                                                                               
+
+/* Allows to set simlock state.
+   With older phone (older 51xx, 61xx) can open them, with older
+   and newer should be able to close them */
+/* DO NOT TRY, IF DON'T WANT, WHAT YOU DO !!!!!!!!!! */
+int setsimlock()
+{
+  GSM_AllSimlocks siml;
+
+  unsigned char closebuffer[20]=
+                             { 0x00, 0x01, 0x82, 0x01,
+                              0x00,                         /* which simlock */
+                              0x00, 0x00,
+                              0x00, 0x00, 0x00,             /* lock 1 info */
+                              0x00, 0x00, 0x00, 0x00, 0x00, /* lock 4 info */
+                              0x00, 0x00,                   /* lock 2 info */
+                              0x00, 0x00,                   /* lock 3 info */
+                              0x00};
+  unsigned char openbuffer[10]= { 0x00, 0x01, 0x81, 0x01,
+                                  0x00, /* lock number */
+                                 0x10, 0x10, 0x10, 0x10, 0x10 };
+  unsigned char openbuffer0[10]= {0x00, 0x01, 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00 };
+
+  unsigned char info[120];
+  int i,j;
+  
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+  if (strstr(GSM_Info->FBUSModels, "3310") == NULL)
+  {
+    fprintf(stderr,("Not supported\n"));
+    GSM->Terminate();
+    return -1;
+  }
+  N6110_EnableExtendedCommands(0x02);
+  /* Initial info */
+  if (GSM->SimlockInfo(&siml)!=GE_NONE) {
+    fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1;
+  }
+  /* Opening all locks (we must check, if we can open them) */
+  NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer0);
+  openbuffer[4]=1;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=2;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=4;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=8;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  if (GSM->SimlockInfo(&siml)!=GE_NONE) {
+    fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1;
+  }
+  for (i=0;i<4;i++) {
+    if (siml.simlocks[i].enabled) {
+      fprintf(stderr,_("Can not open simlock %i\n"),i+1);GSM->Terminate();return -1;
+    }
+  }
+  /* Making frame for closing simlocks */
+  strcpy(info,"00101");
+  j=0;i=7;
+  while (j!=strlen(info)) {
+    if (j+2<=strlen(info)) {
+      closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+    } else {
+      closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+    }i++;
+  }
+  strcpy(info,"0000");j=0;i=15;
+  while (j!=strlen(info)) {
+    if (j+2<=strlen(info)) {
+      closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+    } else {
+      closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+    }i++;
+  }
+  strcpy(info,"0000");j=0;i=17;
+  while (j!=strlen(info)) {
+    if (j+2<=strlen(info)) {
+      closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+    } else {
+      closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+    }i++;
+  }
+  strcpy(info,"0000000001");j=0;i=9;
+  while (j!=strlen(info)) {
+    if (j+2<=strlen(info)) {
+      if (j==0) {
+        closebuffer[i]=closebuffer[i] | (info[j] & 0x0f);j++;
+      } else {
+        closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+      }
+    } else {
+      closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+    }i++;
+  }  
+  /* Closing simlock with given values */
+  closebuffer[4]=1+2+4+8;
+  NULL_SendMessageSequence\r(50, &CurrentMagicError, 20, 0x40,closebuffer);  
+  /* Opening all locks */
+  NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer0);
+  openbuffer[4]=1;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=2;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=4;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  openbuffer[4]=8;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+  GSM->Reset(0x03);
+  GSM->Terminate();
+  return 0;
+}
+
+int simlockinfo()
+{
+  GSM_AllSimlocks siml;
+  char s[7];
+
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  if (GSM->SimlockInfo(&siml)!=GE_NONE) fprintf(stderr,_("Error\n"));
+
+  fprintf(stdout,_("MCC + MNC : %s      ("),siml.simlocks[0].data);
+  if (siml.simlocks[0].enabled) fprintf(stdout,_("CLOSED"));
+                           else fprintf(stdout,_("opened"));
+  if (siml.simlocks[0].factory) fprintf(stdout,_(") (factory"));
+                           else fprintf(stdout,_(")    (user"));
+  fprintf(stdout,_(") (counter %i"),siml.simlocks[0].counter);
+
+  s[0]=siml.simlocks[0].data[0];
+  s[1]=siml.simlocks[0].data[1];
+  s[2]=siml.simlocks[0].data[2];
+  s[3]=' ';
+  s[4]=siml.simlocks[0].data[3];
+  s[5]=siml.simlocks[0].data[4];
+  s[6]=0;
+
+  if (strcmp(GSM_GetNetworkName(s),"unknown"))
+    fprintf(stdout,_(") (network \"%s\""),GSM_GetNetworkName(s));
+
+  fprintf(stdout,_(")\n"));
+
+  fprintf(stdout,_("GID1      : %s       ("),siml.simlocks[1].data);
+  if (siml.simlocks[1].enabled) fprintf(stdout,_("CLOSED"));
+                           else fprintf(stdout,_("opened"));
+  if (siml.simlocks[1].factory) fprintf(stdout,_(") (factory"));
+                           else fprintf(stdout,_(")    (user"));
+  fprintf(stdout,_(") (counter %i"),siml.simlocks[1].counter);
+  fprintf(stdout,_(")\n"));
+
+  fprintf(stdout,_("GID2      : %s       ("),siml.simlocks[2].data);
+  if (siml.simlocks[2].enabled) fprintf(stdout,_("CLOSED"));
+                           else fprintf(stdout,_("opened"));
+  if (siml.simlocks[2].factory) fprintf(stdout,_(") (factory"));
+                           else fprintf(stdout,_(")    (user"));
+  fprintf(stdout,_(") (counter %i"),siml.simlocks[2].counter);
+  fprintf(stdout,_(")\n"));
+
+  fprintf(stdout,_("MSIN      : %s ("),siml.simlocks[3].data);
+  if (siml.simlocks[3].enabled) fprintf(stdout,_("CLOSED"));
+                           else fprintf(stdout,_("opened"));
+  if (siml.simlocks[3].factory) fprintf(stdout,_(") (factory"));
+                           else fprintf(stdout,_(")    (user"));
+  fprintf(stdout,_(") (counter %i"),siml.simlocks[3].counter);
+  fprintf(stdout,_(")\n"));
+
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Getting EEPROM from older phones */
+/* Tested with N5110 5.07, 6150 5.22 */
+int geteeprom()
+{
+  int i=0x40;
+
+  unsigned char buffer[1000]={ 0x00, 0x01, 0xd4, 0x02, 0x00, 0xa0, 
+                               0x00, 0x00, /* location Lo and Hi */
+                              0x10 };     /* how many bytes */
+
+  strcpy(Connection,"mbus");
+  fprintf(stderr,_("Switching connection type to MBUS\n"));
+
+  strcpy(model,"5110");  
+  
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  if (strstr(GSM_Info->FBUSModels, "3310") == NULL)
+  {
+    fprintf(stderr,("Not supported\n"));
+    GSM->Terminate();
+    return -1;
+  }
+
+  for (i=0;i<64;i++) {
+    fprintf(stdout,_("%c"),0xff);
+  }
+  
+  while (i<300000) {
+    buffer[6] = i/256;
+    buffer[7] = i%256;
+    
+    if ((i/256)!=((i-1)/256)) fprintf(stderr,_("."));
+    
+    if (NULL_SendMessageSequence(50, &CurrentMagicError, 9, 0x40,buffer)!=GE_NONE)\r      break;
+
+    i=i+0x10;
+  }
+
+  fprintf(stderr,_("\n"));
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+int getsmsfolders()
+{
+  GSM_SMSFolders folders;
+  GSM_Error error;
+
+  int i;
+    
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  folders.number = 0;
+
+  error=GSM->GetSMSFolders(&folders);
+  
+  GSM->Terminate();
+
+  if (error!=GE_NONE && !folders.number) {
+    fprintf(stdout,_("Error!\n"));
+    return -1;
+  }
+  
+  for (i=0;i<folders.number;i++) {
+      fprintf(stdout,_("%i. %s\n"),i+1,folders.Folder[i].Name);
+  }
+  
+  return 0;
+}
+
+int resetphonesettings()
+{
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  GSM->ResetPhoneSettings();
+
+  GSM->Reset(0x03);  
+  
+  GSM->Terminate();
+
+  return 0;
+}
+
+/* Checked on 3310 4.02 and doesn't work.
+   Possible reasons: SMSC has problems (possible), bug in phone firmware
+   (very possible) or here in code.
+   I quess, that the second is the most possible - 3310 treat only 3 SMS
+   as linked (the most often profile needs 4 - 2 and few bytes in 3'th
+   for screen saver, few bytes for profile name and 1 or 2 sms for ringtone).
+   When send separate ringtone (see --sendringtone with --profilestyle)
+   and screen saver (--sendlogo screensaver...), it's received OK.
+   It's for checking in higher firmware. */
+int sendprofile(int argc, char *argv[])
+{
+  GSM_Ringtone ringtone;
+  GSM_Bitmap bitmap;
+  GSM_MultiSMSMessage MultiSMS;
+
+  int current=0,i,j;
+
+  u8 MessageBuffer[140*4];
+  u16 MessageLength=0;
+  
+  char profilename[10+1];
+  
+  if (GSM_ReadRingtoneFileOnConsole(argv[2], &ringtone)!=GE_NONE) return(-1);
+
+  ringtone.allnotesscale=false;
+  for (i=0;i<argc;i++)
+    if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+
+  /* The fourth argument is the bitmap file. */
+  if (GSM_ReadBitmapFileOnConsole(argv[3], &bitmap)!=GE_NONE) return -1;
+
+  GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+  strncpy(profilename,argv[1],10);
+
+  MessageBuffer[MessageLength++]=0x30;               //SM version. Here 3.0
+
+  MessageBuffer[MessageLength++]=SM30_PROFILENAME;   //ID for profile name
+  MessageBuffer[MessageLength++]=0x00;               //length hi  
+  MessageBuffer[MessageLength++]=strlen(profilename);//length lo
+  
+  EncodeUnicode (MessageBuffer+MessageLength,profilename ,strlen(profilename));
+  MessageLength=MessageLength+2*strlen(profilename);
+
+  MessageBuffer[MessageLength++]=SM30_RINGTONE; //ID for ringtone
+  i=MessageLength;
+  MessageBuffer[MessageLength++]=0x01;          //length hi
+  MessageBuffer[MessageLength++]=0x00;          //length lo
+
+  j=SM30_MAX_RINGTONE_FRAME_LENGTH;
+  current=GSM_PackRingtone(&ringtone, MessageBuffer+MessageLength, &j);
+  MessageLength=MessageLength+j;
+
+  if (current!=ringtone.NrNotes) {
+    if (current>FB61_MAX_RINGTONE_NOTES) {
+      fprintf(stderr,_("Warning: due to phone limitation"));
+    } else {
+      fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+    }
+    fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+  }
+    
+  MessageBuffer[i]=(j)/256;
+  MessageBuffer[i+1]=(j)%256;
+
+  MessageBuffer[MessageLength++]=SM30_SCREENSAVER; //ID for OTA screen saver
+  MessageBuffer[MessageLength++]=0x01;             //length hi
+  MessageBuffer[MessageLength++]=0x00;             //length lo
+  MessageBuffer[MessageLength++]=0x00;
+  MessageBuffer[MessageLength++]=bitmap.width;
+  MessageBuffer[MessageLength++]=bitmap.height;          
+  MessageBuffer[MessageLength++]=0x01;   
+
+  memcpy(MessageBuffer+MessageLength,bitmap.bitmap,bitmap.size);
+  MessageLength=MessageLength+bitmap.size;
+
+  GSM_MakeMultiPartSMS2(&MultiSMS,MessageBuffer,MessageLength, GSM_ProfileUDH, GSM_Coding_Default);
+
+  optind = 4;
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  for (i=0;i<MultiSMS.number;i++)
+    strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+  return GSM_SaveMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,false,false,false,false);
+}
+
+int showbitmap(int argc, char *argv[])
+{
+  GSM_Bitmap bitmap;
+
+  if (GSM_ReadBitmapFileOnConsole(argv[0], &bitmap)!=GE_NONE) return(-1);
+
+  GSM_PrintBitmap(&bitmap);
+
+  return 0;
+}
+
+int getwapsettings(int argc, char *argv[])
+{
+  GSM_WAPSettings settings;
+  GSM_Error error;
+
+  settings.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPSettings(&settings);
+  
+  switch (error) {
+    case GE_NONE:
+      fprintf(stdout,_("%s."),argv[0]);
+      if (!(strcmp(settings.title,""))) fprintf(stdout,_("Set %s\n"),argv[0]);
+                                   else fprintf(stdout,_("%s\n"),settings.title);
+      fprintf(stdout,_("Homepage: %s\n"),settings.homepage);
+      if (settings.iscontinuous) fprintf(stdout,_("Connection type: continuous\n"));
+                            else fprintf(stdout,_("Connection type: temporary\n"));
+      if (settings.issecurity) fprintf(stdout,_("Connection security: on\n"));
+                          else fprintf(stdout,_("Connection security: off\n"));
+      switch (settings.bearer) {
+        case WAPSETTINGS_BEARER_SMS:
+          fprintf(stdout,_("Bearer: SMS\n"));
+          fprintf(stdout,_("Server number: %s\n"),settings.server);
+          fprintf(stdout,_("Service number: %s\n"),settings.service);
+         break;
+        case WAPSETTINGS_BEARER_DATA:
+          fprintf(stdout,_("Bearer: Data (CSD)\n"));
+         fprintf(stdout,_("Dial-up number: %s\n"),settings.dialup);
+          fprintf(stdout,_("IP address: %s\n"),settings.ipaddress);
+          if (settings.isnormalauthentication) fprintf(stdout,_("Authentication type: normal\n"));
+                                          else fprintf(stdout,_("Authentication type: secure\n"));  
+          if (settings.isISDNcall) fprintf(stdout,_("Data call type: ISDN\n"));
+                              else fprintf(stdout,_("Data call type: analogue\n"));  
+          if (settings.isspeed14400) fprintf(stdout,_("Data call speed: 14400\n"));
+                                else fprintf(stdout,_("Data call speed: 9600\n"));  
+          fprintf(stdout,_("User name: %s\n"),settings.user);
+          fprintf(stdout,_("Password: %s\n"),settings.password);
+         break;
+        case WAPSETTINGS_BEARER_USSD:
+          fprintf(stdout,_("Bearer: USSD\n"));
+         fprintf(stdout,_("Service code: %s\n"),settings.code);
+         if (settings.isIP) fprintf(stdout,_("Address type: IP address\nIPaddress: %s\n"),settings.service);
+                       else fprintf(stdout,_("Address type: service number\nService number: %s\n"),settings.service);
+         break;
+      }
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+/* Not full done now */
+int savewapsettings(int argc, char *argv[])
+{
+  GSM_WAPSettings settings;
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_Error error;
+  int w;
+
+  settings.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPSettings(&settings);
+//  strcpy(settings.homepage,"http://OtherSites/");
+//  strcpy(settings.title,"Orange");
+
+  error=GE_NONE;
+  
+  switch (error) {
+    case GE_NONE:
+      /* Put settings into SMS structure */
+      GSM_SaveWAPSettingsToSMS(&MultiSMS,&settings);
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,"WAPSettings");
+
+      GSM_SaveMultiPartSMSOnConsole(&MultiSMS,1,argc,argv,false,false,false,false);
+      return 0;
+
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+}
+
+int sendwapsettings(int argc, char *argv[])
+{
+  GSM_WAPSettings settings;
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_Error error;
+  int w;
+
+  settings.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPSettings(&settings);
+//  strcpy(settings.homepage,"http://OtherSites/");
+//  strcpy(settings.title,"Orange");
+
+  error=GE_NONE;
+  
+  switch (error) {
+    case GE_NONE:
+      /* Put settings into SMS structure */
+      GSM_SaveWAPSettingsToSMS(&MultiSMS,&settings);
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,argv[1]);
+
+      GSM_SendMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false);
+
+      return 0;
+
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+}
+
+int getwapbookmark(int argc, char *argv[])
+{
+  GSM_WAPBookmark bookmark;
+  GSM_Error error;
+
+  bookmark.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPBookmark(&bookmark);
+  
+  switch (error) {
+    case GE_NONE:
+      if (bookmark.address[0]==0) {
+        fprintf(stdout,_("Empty bookmark location\n"));
+      } else {
+        fprintf(stdout,_("Address: \"%s\"\n"),bookmark.address);
+        if (bookmark.title[0]==0)
+          fprintf(stdout,_("Title: \"%s\"\n"),bookmark.address);
+        else
+          fprintf(stdout,_("Title: \"%s\"\n"),bookmark.title);
+      }
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int setwapbookmark(int argc, char *argv[])
+{
+  GSM_WAPBookmark bookmark;
+  GSM_Error error;
+
+  if (argc == 3)       /* if location given, use it */
+    bookmark.location=atoi(argv[2]);
+  else                 /* else use first empty location */
+    bookmark.location=0xffff;
+
+  strcpy(bookmark.title, argv[0]);
+  strcpy(bookmark.address, argv[1]);
+
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->SetWAPBookmark(&bookmark);
+  
+  switch (error) {
+    case GE_NONE:
+      fprintf(stdout,_("No errors\n"));
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int savewapbookmark(int argc, char *argv[])
+{
+  GSM_WAPBookmark bookmark;
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_Error error;
+  int w;
+
+  bookmark.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPBookmark(&bookmark);
+
+//  strcpy(bookmark.title,"tytulagagagagagagagagagagagagagagagagagagagagagend");
+//  strcpy(bookmark.address,"http://jajajajajajajajajajajajagagagagagagagagagagagagagagagagagagagagagpapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap¥papapapapapapapapagagagagagagagagagagagagagagagagagagagagagagagagagadadadadadadadajdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdstp");  
+  error=GE_NONE;
+
+  switch (error) {
+    case GE_NONE:
+
+      if (bookmark.address[0]==0) {
+        fprintf(stdout,_("Empty bookmark location\n"));
+        GSM->Terminate();   
+        return 1;
+      }
+
+      /* Put bookmark into SMS structure */
+      GSM_SaveWAPBookmarkToSMS(&MultiSMS,&bookmark);
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,"WAPBookmark");
+
+      GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 1,argc,argv,false,false,false,false);
+      return 0;
+
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int sendwapbookmark(int argc, char *argv[])
+{
+  GSM_WAPBookmark bookmark;
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_Error error;
+  int w;
+
+  bookmark.location=atoi(argv[0]);
+  
+  /* Initialise the GSM interface. */
+  fbusinit(NULL);
+
+  error=GSM->GetWAPBookmark(&bookmark);
+  
+  switch (error) {
+    case GE_NONE:
+
+      if (bookmark.address[0]==0) {
+        fprintf(stdout,_("Empty bookmark location\n"));
+        GSM->Terminate();   
+        return 1;
+      }
+
+      /* Put bookmark into SMS structure */
+      GSM_SaveWAPBookmarkToSMS(&MultiSMS,&bookmark);
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,argv[1]);
+
+      GSM_SendMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false);
+      return 0;
+
+      break;
+    default:
+      fprintf(stderr,_("%s\n"),print_error(error));
+  }
+
+  GSM->Terminate();    
+
+  return 0;
+
+}
+
+int savecalendarnote(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  int w;
+  GSM_CalendarNote CalendarNote;
+  int number;
+
+  number=atoi(argv[1]);
+  
+  if (number<1) {
+    fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+    return -1;
+  }
+  
+  switch ( GSM_ReadVCalendarFile(argv[0], &CalendarNote, &number) ) {
+    case GE_NONE:
+      break;
+    case GE_CANTOPENFILE:
+      fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[0]);
+      return -1;
+    case GE_TOOSHORT:
+      fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+      return(-1);
+    default:
+      fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[0]);
+      return -1;    
+  }
+
+  fbusinit(NULL);
+
+  /* Put note into SMS structure */
+  GSM_SaveCalendarNoteToSMS(&MultiSMS,&CalendarNote);
+
+  for (w=0;w<MultiSMS.number;w++)
+    strcpy(MultiSMS.SMS[w].Destination,"Calendar");
+
+  GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false,false);
+
+  return 0;
+}
+
+int sendcalendarnote(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  int w;
+  GSM_CalendarNote CalendarNote;
+  int number;
+
+  number=atoi(argv[2]);
+  
+  if (number<1) {
+    fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+    return -1;
+  }
+  
+  switch ( GSM_ReadVCalendarFile(argv[1], &CalendarNote, &number) ) {
+    case GE_NONE:
+      break;
+    case GE_CANTOPENFILE:
+      fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[1]);
+      return -1;
+    case GE_TOOSHORT:
+      fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+      return(-1);
+    default:
+      fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[1]);
+      return -1;    
+  }
+
+  fbusinit(NULL);
+
+  /* Put note into SMS structure */
+  GSM_SaveCalendarNoteToSMS(&MultiSMS,&CalendarNote);
+
+  for (w=0;w<MultiSMS.number;w++)
+    strcpy(MultiSMS.SMS[w].Destination,argv[0]);
+
+  GSM_SendMultiPartSMSOnConsole(&MultiSMS, 3,argc,argv,false,false,false);
+
+  return 0;
+}
+
+/* Example function for continuous receiving SMS */
+/* When phone receives SMS, it's read by mygnokii, ID number is created
+   and SMS is saved to file. After it it's deleted
+   Checking many errors is also done */   
+int receivesms(int argc, char *argv[])
+{
+  char Dir[500];
+
+  GSM_SMSStatus SMSStatus = {0, 0};
+  GSM_SMSMessage SMS;
+  int read, location, number;
+  unsigned char name[50],filename[400];
+  char nowdate[12]="", nowtime[12]="";
+  FILE *file;
+  FILE *logfile;
+  struct CFG_Header *cfg_info;
+
+  /* We do not want to monitor serial line forever - press Ctrl+C to stop the
+     monitoring mode. */
+
+  signal(SIGINT, interrupted);
+
+  fprintf (stderr, _("Entering monitor mode (press CTRL+C to break)...\n"));
+
+  cfg_info=CFG_FindGnokiirc();
+
+  strcpy(Dir,"");
+  if (cfg_info!=NULL) {        
+    if (CFG_Get(cfg_info, "receivesms", "path")) {
+      strcpy(Dir,CFG_Get(cfg_info, "receivesms", "path"));
+    }
+  }
+
+  fprintf(stderr,_("Path for sms files is \"%s\"\n"),Dir);
+
+  fprintf (stderr, _("Initialising GSM interface..."));
+
+  /* Initialise the code for the GSM interface. */     
+  fbusinit(NULL);
+
+  fprintf (stderr, _("done\n"));
+
+  sleep(1);
+
+  /* Loop here indefinitely - allows you to see messages from GSM code in
+     response to unknown messages etc. The loops ends after pressing the
+     Ctrl+C. */
+  while (!bshutdown) {
+    if (GSM->GetSMSStatus(&SMSStatus) == GE_NONE) {
+      if (SMSStatus.Number!=0) {
+
+        GetMachineDateTime(nowdate, nowtime );
+        logfile = fopen("log", "a");
+        if (logfile) {
+          fprintf(logfile, _("%s %s SMS Messages: UnRead %d, Number %d\n"),
+             nowdate, nowtime, SMSStatus.UnRead, SMSStatus.Number);
+          fclose(logfile);
+        }
+
+        read=0;
+        location=1;
+
+        while (!bshutdown) {
+
+          SMS.Location=location;
+          if (GSM->GetSMSMessage(&SMS)==GE_NONE) {
+            if (SMS.folder==0 || SMS.folder==0x08) { //GST_7110_INBOX
+
+              GetMachineDateTime(nowdate, nowtime );
+              logfile = fopen("log", "a");
+              if (logfile) {
+                fprintf(logfile,_("%s %s SMS on location %i\n"),
+                  nowdate,nowtime,SMS.MessageNumber);
+                fclose(logfile);
+              }
+
+              number=             16*(SMS.MessageText[2] >> 4)+      (SMS.MessageText[2] & 0x0f);
+              number=number+  256*16*(SMS.MessageText[1] >> 4)+  256*(SMS.MessageText[1] & 0x0f);
+              number=number+65536*16*(SMS.MessageText[0] >> 4)+65536*(SMS.MessageText[0] & 0x0f);
+
+              sprintf( name, "%07i_%02d%02d%02d_%02d%02d%02d.sms", number,
+                 SMS.Time.Year, SMS.Time.Month, SMS.Time.Day,
+                 SMS.Time.Hour, SMS.Time.Minute, SMS.Time.Second);
+
+              strcpy(filename,Dir);
+              strcat(filename,name);
+
+              logfile = fopen("log", "a");
+              if (logfile) {
+                fprintf(logfile,_("%s %s Name is \"%s\"\n"),nowdate,nowtime,filename);
+                fclose(logfile);
+              }
+
+              file = fopen(filename, "rb");
+              if (!file) {
+                file = fopen(filename, "wb");
+                if (!file) {
+                  GetMachineDateTime(nowdate, nowtime );
+                  fprintf(stderr,_("%s %s ERROR: opening file \"%s\" failed !\n"),nowdate,nowtime,filename);
+                  logfile = fopen("log", "a");
+                  if (logfile) {
+                    fprintf(logfile,_("%s %s ERROR: opening file \"%s\" failed !\n"),nowdate,nowtime,filename);
+                    fclose(logfile);
+                  }
+                } else {
+                  fwrite(SMS.MessageText,1,SMS.Length,file);
+                  fclose(file);
+                }
+              } else {
+                fclose(file);
+  
+                GetMachineDateTime(nowdate, nowtime );
+                fprintf(stderr,_("%s %s ERROR: file \"%s\" already exist !\n"),nowdate,nowtime,filename);
+                logfile = fopen("log", "a");
+                if (logfile) { 
+                  fprintf(logfile,_("%s %s ERROR: file \"%s\" already exist !\n"),nowdate,nowtime,filename);
+                  fclose(logfile);
+                }
+              }
+  
+              SMS.Location=SMS.MessageNumber;
+              if (GSM->DeleteSMSMessage(&SMS)!=GE_NONE) {
+                GetMachineDateTime(nowdate, nowtime );
+                fprintf(stderr,_("%s %s ERROR: Deleting SMS location %i failed !\n"),nowdate,nowtime,SMS.MessageNumber);
+                logfile = fopen("log", "a");
+                if (logfile) {
+                  fprintf(logfile,_("%s %s ERROR: Deleting SMS location %i failed !\n"),nowdate,nowtime,SMS.MessageNumber);
+                  fclose(logfile);
+                }
+              }
+            }
+            read++;
+          }
+          location++;
+          if (read==SMSStatus.Number) break;
+        }
+      }
+    } else {
+      GetMachineDateTime(nowdate, nowtime );
+      fprintf(stderr,_("%s %s ERROR: Can't get SMS status !\n"),nowdate,nowtime);
+      logfile = fopen("log", "a");
+      if (logfile) {
+        fprintf(logfile,_("%s %s ERROR: Can't get SMS status !\n"),nowdate,nowtime);
+        fclose(logfile);
+      }
+    }
+
+    sleep(1);
+  }
+
+  fprintf (stderr, _("Leaving monitor mode...\n"));
+
+  GSM->Terminate();
+  
+  return 0;
+}
+
+int divert(int argc, char *argv[])
+{
+       GSM_CallDivert cd;
+       GSM_Error error;
+
+       memset(&cd, 0, sizeof(GSM_CallDivert));
+
+            if (!strcmp("register", argv[0])){cd.Operation = GSM_CDV_Register ;} 
+        else if (!strcmp("enable"  , argv[0])){cd.Operation = GSM_CDV_Enable   ;} 
+        else if (!strcmp("disable" , argv[0])){cd.Operation = GSM_CDV_Disable  ;}
+        else if (!strcmp("erasure" , argv[0])){cd.Operation = GSM_CDV_Erasure  ;}
+       else if (!strcmp("query"   , argv[0])){cd.Operation = GSM_CDV_Query    ;}
+        else {
+               usage();
+               exit(-1);
+       }
+
+            if (!strcmp("all"       , argv[1])) {cd.DType = GSM_CDV_AllTypes  ;}
+       else if (!strcmp("busy"      , argv[1])) {cd.DType = GSM_CDV_Busy      ;}
+       else if (!strcmp("noans"     , argv[1])) {cd.DType = GSM_CDV_NoAnswer  ;}
+       else if (!strcmp("outofreach", argv[1])) {cd.DType = GSM_CDV_OutOfReach;}
+       else {
+               usage();
+               exit(-1);
+       }
+
+            if (!strcmp("all"  , argv[2])) {cd.CType = GSM_CDV_AllCalls  ;}
+       else if (!strcmp("voice", argv[2])) {cd.CType = GSM_CDV_VoiceCalls;}
+       else if (!strcmp("fax"  , argv[2])) {cd.CType = GSM_CDV_FaxCalls  ;}
+       else if (!strcmp("data" , argv[2])) {cd.CType = GSM_CDV_DataCalls ;}
+       else {
+               usage();
+               exit(-1);
+       }
+
+       if (argc>3) strcpy(cd.Number, argv[3]);
+
+       if (argc>4) cd.Timeout = atoi(argv[4]);
+
+       /* Initialise the code for the GSM interface. */     
+       fbusinit(NULL);
+
+       error=GSM->CallDivert(&cd);
+
+       if (error == GE_NONE) {
+          switch (cd.Operation)
+          {
+            case GSM_CDV_Query:
+             fprintf(stdout, _("Divert type: "));
+             switch (cd.DType) {
+               case GSM_CDV_Busy      :fprintf(stdout, _("when busy"));break;
+               case GSM_CDV_NoAnswer  :fprintf(stdout, _("when not answered"));break;
+               case GSM_CDV_OutOfReach:fprintf(stdout, _("when phone off or no coverage"));break;
+                case GSM_CDV_AllTypes  :fprintf(stdout, _("all call diverts"));break; //?
+                default:                fprintf(stdout, _("unknown %i"),cd.DType);break;
+              }
+
+              fprintf(stdout, _("\nCalls type : "));
+              switch (cd.CType) {
+                case GSM_CDV_VoiceCalls: fprintf(stdout, _("voice"));break;
+                case GSM_CDV_FaxCalls  : fprintf(stdout, _("fax"));break;
+                case GSM_CDV_DataCalls : fprintf(stdout, _("data"));break;
+                case GSM_CDV_AllCalls  : fprintf(stdout, _("voice, fax & data"));break;
+                default:   fprintf(stdout, _("unknown %i"),cd.CType);break;
+              }
+              fprintf(stdout, _("\n"));
+
+              if (cd.Enabled) {
+                fprintf(stdout, _("Status     : active\n"));
+                fprintf(stdout, _("Timeout    : %i seconds\n"),cd.Timeout);
+                fprintf(stdout, _("Number     : %s\n"),cd.Number);
+              } else {
+                fprintf(stdout, _("Status     : deactivated\n"));
+              }
+
+              break;
+            default:
+              fprintf(stdout,_("Divert done\n"));
+          }
+        } else 
+          fprintf(stderr,_("%s\n"),print_error(error));
+
+       GSM->Terminate();
+
+       return 0;
+}
+
+int savephonebookentry(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_PhonebookEntry entry;
+  GSM_Error error;
+  int w;
+
+  fbusinit(NULL);
+
+  /* Handle command line args that set type, start and end locations. */
+  if (!GetMemoryTypeID(argv[0], &entry.MemoryType))
+  {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+    return (-1);
+  }
+
+  entry.Location=atoi(argv[1]);
+
+  fbusinit(NULL);
+
+  error=GSM->GetMemoryLocation(&entry);
+
+  switch (error) {
+    case GE_NONE:
+
+      /* Put entry into SMS structure */
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+        GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21);
+      } else {
+        GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10);
+      }
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,"Phonebook");
+
+      GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false,false);
+      break;
+
+    default:
+      fprintf(stdout,_("Error\n"));break;
+  }
+
+  return 0;
+}
+
+int sendphonebookentry(int argc, char *argv[])
+{
+  GSM_MultiSMSMessage MultiSMS;
+  GSM_PhonebookEntry entry;
+  GSM_Error error;
+  int w;
+
+  fbusinit(NULL);
+
+  /* Handle command line args that set type, start and end locations. */
+  if (!GetMemoryTypeID(argv[1], &entry.MemoryType))
+  {
+    fprintf(stderr, _("Unknown memory type %s!\n"), argv[1]);
+    return (-1);
+  }
+
+  entry.Location=atoi(argv[2]);
+
+  fbusinit(NULL);
+
+  error=GSM->GetMemoryLocation(&entry);
+
+  switch (error) {
+    case GE_NONE:
+
+      /* Put entry into SMS structure */
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+        GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21);
+      } else {
+        GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10);
+      }
+
+      for (w=0;w<MultiSMS.number;w++)
+        strcpy(MultiSMS.SMS[w].Destination,argv[0]);
+
+      GSM_SendMultiPartSMSOnConsole(&MultiSMS, 3,argc,argv,false,false,false);
+
+      break;
+
+    default:
+      fprintf(stdout,_("Error\n"));break;
+  }
+
+  return 0;
+}
diff --git a/gnokiid/Makefile b/gnokiid/Makefile
new file mode 100644 (file)
index 0000000..fde8ac2
--- /dev/null
@@ -0,0 +1,72 @@
+
+#
+# Makefile for the GNOKII tool suite.
+#
+# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+#               2000 Karel Zak
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+CFLAGS += $(PTHREAD_CFLAGS)
+LDFLAGS += $(PTHREAD_LIBS)
+
+OBJS = gnokiid.o
+
+all: gnokiid
+
+gnokiid: $(OBJS) $(TOPDIR)/common/COMMON.o $(TOPDIR)/common/DATA.o
+
+$(TOPDIR)/common/COMMON.o: 
+       $(MAKE) -C $(TOPDIR)/common COMMON.o
+
+$(TOPDIR)/common/DATA.o:
+       $(MAKE) -C $(TOPDIR)/common DATA.o
+
+$(TOPDIR)/common/libmygnokii.so:
+       $(MAKE) -C $(TOPDIR)/common makelib
+
+makelib: $(OBJS) $(TOPDIR)/common/libmygnokii.so
+       $(CC) $(LDFLAGS) -L$(TOPDIR)/common -lmygnokii $(OBJS) -o gnokiidlib
+
+clean:
+       $(RM) $(OBJS) *~ depend gnokiid gnokiidlib *.exe core *.bak
+
+install: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) gnokiid $(sbindir)
+       $(INSTALL) gnokiidlib $(sbindir)/gnokiid
+
+install-strip: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -s gnokiid $(sbindir)
+       $(INSTALL) -s gnokiidlib $(sbindir)/gnokiid
+       @echo "done"
+
+install-suid: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 gnokiid $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 gnokiidlib $(sbindir)/gnokiid
+       @echo "done"
+
+install-ss: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 -s gnokiid $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 -s gnokiidlib $(sbindir)/gnokiid
+       @echo "done"
+
+depend dep:
+       $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+.PHONY: all install clean dep depend
diff --git a/gnokiid/gnokiid.c b/gnokiid/gnokiid.c
new file mode 100644 (file)
index 0000000..0b589ae
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Mainline code for gnokiid daemon. Handles command line parsing and
+  various daemon functions.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <string.h>
+
+#include "misc.h"
+#include "files/cfgreader.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/virtmodem.h"
+
+/* Global variables */
+bool           DebugMode;      /* When true, run in debug mode */
+char           *Model;         /* Model from .gnokiirc file. */
+char           *Port;          /* Port from .gnokiirc file */
+char           *Initlength;    /* Init length from .gnokiirc file */
+char           *Connection;    /* Connection type from .gnokiirc file */
+char            *SynchronizeTime;
+char           *BinDir;        /* Directory of the mgnokiidev command */
+
+bool  TerminateThread;
+
+void version(void)
+{
+
+  fprintf(stdout, _("gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, Model, Port);
+}
+
+/* The function usage is only informative - it prints this program's usage and
+   command-line options.*/
+
+void usage(void)
+{
+
+  fprintf(stdout, _("   usage: gnokiid {--help|--version}\n"
+"          --help            display usage information."
+"          --version         displays version and copyright information."
+"          --debug           uses stdin/stdout for virtual modem comms.\n"));
+}
+
+/* Main function - handles command line arguments, passes them to separate
+   functions accordingly. */
+
+int main(int argc, char *argv[])
+{
+
+    GSM_ConnectionType connection;
+
+               /* For GNU gettext */
+
+       #ifdef USE_NLS
+               textdomain("gnokii");
+       #endif
+
+#ifndef WIN32
+       if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+         fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of gnokiid (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+        if (CFG_ReadConfig(&Model, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,true) < 0) {
+                exit(-1);
+        }
+
+               /* Handle command line arguments. */
+
+       if (argc >= 2 && strcmp(argv[1], "--help") == 0) {
+               usage();
+       exit(0);
+       }
+
+               /* Display version, copyright and build information. */
+
+       if (argc >= 2 && strcmp(argv[1], "--version") == 0) {
+       version();
+           exit(0);
+       }
+
+       if (argc >= 2 && strcmp(argv[1], "--debug") == 0) {
+               DebugMode = true;       
+       }
+       else {
+               DebugMode = false;      
+       }
+
+        connection=GetConnectionTypeFromString(Connection);
+       
+       /* MBUS wasn't tested */
+       if (connection!=GCT_FBUS && connection!=GCT_MBUS &&
+           connection!=GCT_Infrared && connection!=GCT_Tekram) {
+         fprintf(stdout,_("Incorrect connection type!\n"));    
+         exit(0);
+       }
+       
+       TerminateThread=false;
+
+       if (VM_Initialise(Model, Port, Initlength, connection, BinDir, DebugMode, true, SynchronizeTime) == false) 
+         exit (-1);
+
+       while (1) {
+         if (TerminateThread==true) {
+           VM_Terminate();
+           exit(1);
+         }
+         sleep (1);
+       }
+       exit (0);
+}
diff --git a/include/config.h.in.in b/include/config.h.in.in
new file mode 100644 (file)
index 0000000..a5dae23
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+/* DO NOT EDIT MANUALLY !!! */
+
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+
+#define VERSION    "@VERSION@"
+#define XVERSION   "@XVERSION@"
+#define XGNOKIIDIR "@XGNOKIIDIR@/@XPACKAGE@"
+
+/* Define if you have timersub() */
+#undef HAVE_TIMEOPS
+
+/* Define if you have tm_gmtoff field in tm structure */
+#undef HAVE_TM_GMTON
+
+/* Define if you have cfsetspeed, cfsetispeed, cfsetospeed, c_ispeed and c_ospeed in struct termios */
+#undef HAVE_CFSETSPEED
+#undef HAVE_CFSETISPEED
+#undef HAVE_CFSETOSPEED
+#undef HAVE_TERMIOS_CSPEED
+
+/* Define if you have snprintf */
+#undef HAVE_SNPRINTF
+
+/* Define debug level */
+#undef DEBUG
+#undef XDEBUG
+#undef RLP_DEBUG
+
+/* Decide if you want security options enabled */
+#undef SECURITY
+
+/* Define if you have XPM components */
+#undef XPM
+
+/* Define if you want NLS */
+#undef USE_NLS
+
+/* Define if you want to use Unix98 PTYs */
+#undef USE_UNIX98PTYS
+
+/* Define if you compile for M$ Windows */
+#undef WIN32
+
+#endif /* __CONFIG_H__ */
diff --git a/include/data/at-emulator.h b/include/data/at-emulator.h
new file mode 100644 (file)
index 0000000..3f95297
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Header file for AT emulator code.
+
+*/
+
+#ifndef __data_at_emulator_h
+#define __data_at_emulator_h
+
+       /* Prototypes */
+bool   ATEM_Initialise(int read_fd, int write_fd, char *model, char *port);
+void   ATEM_HandleIncomingData(char *buffer, int length);
+void   ATEM_InitRegisters(void);
+void   ATEM_StringOut(char *buffer);
+void   ATEM_ParseAT(char *cmd_buffer);
+void   ATEM_ParseSMS(char *cmd_buffer);
+void   ATEM_ParseDIR(char *cmd_buffer);
+bool   ATEM_CommandPlusC(char **buf);
+bool   ATEM_CommandPlusG(char **buf);
+int            ATEM_GetNum(char **p);
+void   ATEM_ModemResult(int code);
+void    ATEM_CallPassup(char c);
+
+       /* Global variables */
+bool   ATEM_Initialised;
+
+       /* Definition of modem result codes - these are returned to "terminal"
+       numerically or as a string depending on the setting of S12 */
+
+       /* FIX ME - Numeric values for everything except OK and ERROR 
+          are guesses as I've not got an AT reference handy.   HAB */
+
+#define        MR_OK                   (0)
+#define                MR_ERROR                (4)
+#define                MR_NOCARRIER    (5)
+#define                MR_CARRIER              (2)
+#define                MR_CONNECT              (3)
+#define         MR_RING                 (6)
+
+       /* All defines and prototypes from here down are specific to 
+          the at-emulator code and so are #ifdef out if __at_emulator_c isn't 
+          defined. */
+#ifdef __data_at_emulator_c
+
+
+#define        MAX_CMD_BUFFERS (2)
+#define        CMD_BUFFER_LENGTH (100)
+
+       /* Definition of some special Registers of AT-Emulator, pinched in
+          part from ISDN driver in Linux kernel */
+#define REG_RINGATA   0
+#define REG_RINGCNT   1
+#define REG_ESC       2
+#define REG_CR        3
+#define REG_LF        4
+#define REG_BS        5
+#define S35           6
+
+#define REG_RESP     12
+#define BIT_RESP      1
+#define REG_RESPNUM  12
+#define BIT_RESPNUM   2
+#define REG_ECHO     12
+#define BIT_ECHO      4
+#define REG_DCD      12
+#define BIT_DCD       8
+#define REG_CTS      12
+#define BIT_CTS      16
+#define REG_DTRR     12
+#define BIT_DTRR     32
+#define REG_DSR      12
+#define BIT_DSR      64
+#define REG_CPPP     12
+#define BIT_CPPP    128
+
+
+#define        MAX_MODEM_REGISTERS     20
+
+/* Message format definitions */
+#define PDU_MODE      0
+#define TEXT_MODE     1
+#define INTERACT_MODE 2
+
+#endif /* __data_at_emulator_c */
+
+#endif /* __data_at_emulator_h */
+
+
+
diff --git a/include/data/datapump.h b/include/data/datapump.h
new file mode 100644 (file)
index 0000000..c1e48d1
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Header file for data pump code.
+       
+*/
+
+#ifndef __data_datapump_h
+#define __data_datapump_h 
+
+       /* Prototypes */
+
+void    DP_CallFinished(void);
+bool   DP_Initialise(int read_fd, int write_fd);
+int     DP_CallBack(RLP_UserInds ind, u8 *buffer, int length);
+void    DP_CallPassup(char c);
+
+       /* All defines and prototypes from here down are specific to 
+          the datapump code and so are #ifdef out if __datapump_c isn't 
+          defined. */
+#ifdef __data_datapump_c
+
+
+
+
+
+
+
+#endif /* __data_datapump_c */
+
+#endif /* __data_datapump_h */
diff --git a/include/data/rlp-common.h b/include/data/rlp-common.h
new file mode 100644 (file)
index 0000000..a03a497
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  The development of RLP protocol is sponsored by SuSE CR, s.r.o. (Pavel use
+  the SIM card from SuSE for testing purposes).
+
+  Header file for RLP protocol.
+
+*/
+
+#ifndef __data_rlp_common_h
+#define __data_rlp_common_h
+
+#ifndef __misc_h
+  #include "misc.h"
+#endif
+
+/* Global variables */
+
+/* Defines */
+
+/* Data types */
+
+/* Typedef for frame type - they are the same for RLP version 0, 1 and 2. */
+
+typedef enum {
+  RLPFT_X, /* Unknown. */
+  RLPFT_U, /* Unnumbered frame. */
+  RLPFT_S, /* Supervisory frame. */
+  RLPFT_IS /* Information plus Supervisory (I+S) frame. */
+} RLP_FrameType;
+
+/* Define the various Unnumbered frame types. Numbering is bit reversed
+   relative to ETSI GSM 04.22 for easy parsing. */
+
+typedef enum {
+  RLPU_SABM  = 0x07, /* Set Asynchronous Balanced Mode. */
+  RLPU_UA    = 0x0c, /* Unnumbered Acknowledge. */
+  RLPU_DISC  = 0x08, /* Disconnect. */
+  RLPU_DM    = 0x03, /* Disconnected Mode. */
+  RLPU_NULL  = 0x0f, /* Null information. */
+  RLPU_UI    = 0x00, /* Unnumbered Information. */
+  RLPU_XID   = 0x17, /* Exchange Identification. */
+  RLPU_TEST  = 0x1c, /* Test. */
+  RLPU_REMAP = 0x11  /* Remap. */
+} RLP_UFrameType;
+
+/* Define supervisory frame field. */
+
+typedef enum {
+  RLPS_RR   = 0x00, /* Receive Ready. */
+  RLPS_REJ  = 0x02, /* Reject. */
+  RLPS_RNR  = 0x01, /* Receive Not Ready. */
+  RLPS_SREJ = 0x03  /* Selective Reject. */
+} RLP_SFrameField;
+
+/* Used for CurrentFrameType. */
+
+typedef enum {
+  RLPFT_U_SABM = 0x00,
+  RLPFT_U_UA,
+  RLPFT_U_DISC,
+  RLPFT_U_DM,
+  RLPFT_U_NULL,
+  RLPFT_U_UI,
+  RLPFT_U_XID,
+  RLPFT_U_TEST,
+  RLPFT_U_REMAP,
+  RLPFT_S_RR,
+  RLPFT_S_REJ,
+  RLPFT_S_RNR,
+  RLPFT_S_SREJ,
+  RLPFT_SI_RR,
+  RLPFT_SI_REJ,
+  RLPFT_SI_RNR,
+  RLPFT_SI_SREJ,
+  RLPFT_BAD
+} RLP_FrameTypes;
+
+/* Frame definition for TCH/F9.6 frame. */
+
+typedef struct {
+  u8 Header[2];
+  u8 Data[25];    
+  u8 FCS[3];
+} RLP_F96Frame;   
+
+/* Header data "split up" for TCH/F9.6 frame. */
+
+typedef struct {
+  u8            Ns;   /* Send sequence number. */
+  u8            Nr;   /* Receive sequence number. */
+  u8            M;    /* Unumbered frame type. */
+  u8            S;    /* Status. */
+  bool          PF;   /* Poll/Final. */
+  bool          CR;   /* Command/Response. */
+  RLP_FrameType Type; /* Frame type. */
+} RLP_F96Header;
+
+
+/* RLP User requests */
+
+typedef struct {
+  bool Conn_Req;
+  bool Attach_Req;
+  bool Conn_Req_Neg;
+  bool Reset_Resp;
+  bool Disc_Req;
+} RLP_UserRequestStore;
+
+typedef enum {
+  Conn_Req,
+  Attach_Req,
+  Conn_Req_Neg,
+  Reset_Resp,
+  Disc_Req
+} RLP_UserRequests;
+
+typedef enum {
+  Conn_Ind,
+  Conn_Conf,
+  Disc_Ind,
+  Reset_Ind,
+  Data,                /* FIXME: This should really be called RLP_Data, otherwise it hogs name "Data"! */
+  StatusChange,
+  GetData
+} RLP_UserInds;
+
+/* RLP (main) states. See GSM specification 04.22 Annex A, Section A.1.1. */
+
+typedef enum {
+  RLP_S0, /* ADM and Detached */
+  RLP_S1, /* ADM and Attached */
+  RLP_S2, /* Pending Connect Request */
+  RLP_S3, /* Pending Connect Indication */
+  RLP_S4, /* ABM and Connection Established */
+  RLP_S5, /* Disconnect Initiated */
+  RLP_S6, /* Pending Reset Request */
+  RLP_S7, /* Pending Reset Indication */
+  RLP_S8  /* Error */
+} RLP_State;
+
+/* RLP specification defines several states in which variables can be. */
+
+typedef enum {
+  _idle=0,
+  _send,
+  _wait,
+  _rcvd,
+  _ackn,
+  _rej,
+  _srej
+} RLP_StateVariable;
+
+
+/* RLP Data */
+
+typedef struct { 
+  u8 Data[25];
+  RLP_StateVariable State;
+} RLP_Data;
+
+
+
+/* Prototypes for functions. */
+
+void RLP_DisplayF96Frame(RLP_F96Frame *frame);
+void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header);
+void RLP_DisplayXID(u8 *frame);
+void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length));
+void RLP_Init_link_vars(void);
+void RLP_SetUserRequest(RLP_UserRequests type, bool value);
+void RLP_Send(char *buffer, int length);
+
+#endif /* __data_rlp_common_h */
diff --git a/include/data/rlp-crc24.h b/include/data/rlp-crc24.h
new file mode 100644 (file)
index 0000000..6789510
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Header file for CRC24 (aka FCS) implementation in RLP.
+
+*/
+
+#ifndef __data_rlp_crc24_h
+#define __data_rlp_crc24_h
+
+#ifndef __misc_h
+  #include    "misc.h"
+#endif
+
+/* Prototypes for functions */
+
+void RLP_CalculateCRC24Checksum(u8 *data, int length, u8 *crc);
+bool RLP_CheckCRC24FCS(u8 *data, int length);
+
+#endif
diff --git a/include/data/virtmodem.h b/include/data/virtmodem.h
new file mode 100644 (file)
index 0000000..6fe838d
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Header file for virtmodem code in virtmodem.c
+
+*/
+
+#ifndef __virtmodem_h
+#define __virtmodem_h
+
+/* Prototypes */
+
+bool VM_Initialise(char *model,
+                  char *port,
+                  char *initlength,
+                  GSM_ConnectionType connection,
+                  char *bindir,
+                  bool debug_mode,
+                  bool GSM_Init,
+                  char *synchronizetime);
+int  VM_PtySetup(char *bindir);
+void VM_ThreadLoop(void);
+void VM_CharHandler(void);
+int  VM_GetMasterPty(char **name);
+void VM_Terminate(void);
+GSM_Error VM_GSMInitialise(char *model,
+                          char *port,
+                          char *initlength,
+                          GSM_ConnectionType connection,
+                          char *synchronizetime);
+
+#endif /* __virtmodem_h */
diff --git a/include/devices/tekram.h b/include/devices/tekram.h
new file mode 100644 (file)
index 0000000..36dfaf0
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * $Id$
+ *
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef __devices_tekram_h
+#define __devices_tekram_h
+
+#ifdef WIN32
+  #include <stddef.h>
+  /* FIXME: this should be solved in config.h in 0.4.0 */
+  #define __const const
+  typedef void * __ptr_t;
+#else
+  #include <unistd.h>
+#endif /* WIN32 */
+
+#include "misc.h"
+
+
+#define TEKRAM_B115200 0x00
+#define TEKRAM_B57600  0x01
+#define TEKRAM_B38400  0x02
+#define TEKRAM_B19200  0x03
+#define TEKRAM_B9600   0x04
+
+#define TEKRAM_PW      0x10 /* Pulse select bit */
+
+
+int tekram_open(__const char *__file);
+void tekram_close(int __fd);
+
+void tekram_setdtrrts(int __fd, int __dtr, int __rts);
+void tekram_changespeed(int __fd, int __speed);
+
+size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes);
+size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n);
+
+int tekram_select(int fd, struct timeval *timeout);
+
+#endif  /* __devices_tekram_h */
+
+
+
+
diff --git a/include/devices/unixirda.h b/include/devices/unixirda.h
new file mode 100644 (file)
index 0000000..a852f39
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+
+#include "linuxirda.h"
+#include "misc.h"
+
+int irda_open(void);
+int irda_close(int fd);
+int irda_write(int __fd, __const __ptr_t __bytes, int __size);
+int irda_read(int __fd, __ptr_t __bytes, int __size);
+int irda_select(int fd, struct timeval *timeout);
diff --git a/include/devices/unixserial.h b/include/devices/unixserial.h
new file mode 100644 (file)
index 0000000..b044d43
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+
+  $Id$
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef __devices_unixserial_h
+#define __devices_unixserial_h
+
+#ifdef WIN32
+  #include <stddef.h>
+  /* FIXME: this should be solved in config.h in 0.4.0 */
+  #define __const const
+  typedef void * __ptr_t;
+#else
+  #include <unistd.h>
+#endif /* WIN32 */
+
+#include "misc.h"
+
+int serial_open(__const char *__file, int __oflag);
+int serial_close(int __fd);
+
+int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake);
+
+void serial_setdtrrts(int __fd, int __dtr, int __rts);
+void serial_changespeed(int __fd, int __speed);
+
+size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes);
+size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n);
+
+int serial_select(int fd, struct timeval *timeout);
+
+#endif  /* __devices_unixserial_h */
+
+
+
+
diff --git a/include/gsm-api.h b/include/gsm-api.h
new file mode 100644 (file)
index 0000000..0ab7718
--- /dev/null
@@ -0,0 +1,542 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Header file for the various functions, definitions etc. used to implement
+  the handset interface.  See gsm-api.c for more details.
+
+*/
+
+#ifndef __gsm_api_h
+#define __gsm_api_h
+#include "misc.h"
+#include "gsm-common.h"
+#include "data/rlp-common.h"
+#include "devices/device.h"
+#include "gsm-phonebook.h"
+#include "gsm-networks.h"
+#include "gsm-bitmaps.h"
+#include "gsm-datetime.h"
+#include "gsm-calendar.h"
+#include "gsm-sms.h"
+#include "gsm-ringtones.h"
+#include "gsm-wap.h"
+
+/* Undefined functions in fbus/mbus files */
+extern GSM_Error Unimplemented(void);
+#define UNIMPLEMENTED (void *) Unimplemented
+extern GSM_Error NotSupported(void);
+#define NOTSUPPORTED (void *) NotSupported
+
+/* Define the structure used to hold pointers to the various API functions.
+   This is in effect the master list of functions provided by the gnokii API.
+   Modules containing the model specific code each contain one of these
+   structures which is "filled in" with the corresponding function within the
+   model specific code.  If a function is not supported or not implemented, a
+   generic not implemented function is used to return a GE_NOTIMPLEMENTED
+   error code. */
+
+typedef struct {
+
+  /* FIXME: comment this. */
+
+  GSM_Error (*Initialise)( char *port_device, char *initlength,
+                           GSM_ConnectionType connection,
+                           void (*rlp_callback)(RLP_F96Frame *frame));
+
+  void      (*DispatchMessage) (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); 
+
+  void      (*Terminate)(void);        
+
+  void      (*KeepAlive)(void);
+  
+  GSM_Error (*GetMemoryLocation)( GSM_PhonebookEntry *entry );
+
+  GSM_Error (*WritePhonebookLocation)( GSM_PhonebookEntry *entry );
+
+  GSM_Error (*GetSpeedDial)( GSM_SpeedDial *entry);
+
+  GSM_Error (*SetSpeedDial)( GSM_SpeedDial *entry);
+
+  GSM_Error (*GetMemoryStatus)( GSM_MemoryStatus *Status);
+
+  GSM_Error (*GetSMSStatus)( GSM_SMSStatus *Status);
+
+  GSM_Error (*GetSMSCenter)( GSM_MessageCenter *MessageCenter );
+
+  GSM_Error (*SetSMSCenter)( GSM_MessageCenter *MessageCenter );
+
+  GSM_Error (*GetSMSMessage)( GSM_SMSMessage *Message );
+
+  GSM_Error (*DeleteSMSMessage)( GSM_SMSMessage *Message );
+
+  GSM_Error (*SendSMSMessage)( GSM_SMSMessage *Message);
+
+  GSM_Error (*SaveSMSMessage)( GSM_SMSMessage *Message);
+
+    /* If units is set to a valid GSM_RFUnits value, the code
+       will return level in these units if it is able.  Otherwise
+       value will be returned as GRF_Arbitary.  If phone doesn't
+       support GetRFLevel, function returns GE_NOTSUPPORTED */
+  GSM_Error (*GetRFLevel)( GSM_RFUnits *units, float *level );
+
+    /* Works the same as GetRFLevel, except returns battery
+       level if known. */
+  GSM_Error (*GetBatteryLevel)( GSM_BatteryUnits *units, float *level );
+
+  GSM_Error (*GetPowerSource)( GSM_PowerSource *source);
+
+  GSM_Error (*GetDisplayStatus)( int *Status);
+
+  GSM_Error (*EnterSecurityCode)( GSM_SecurityCode Code);
+
+  GSM_Error (*GetSecurityCodeStatus)( int *Status );
+
+  GSM_Error (*GetSecurityCode)( GSM_SecurityCode *Code);
+  
+  GSM_Error (*GetIMEI)( char *imei );
+
+  GSM_Error (*GetRevision)( char *revision );
+
+  GSM_Error (*GetModel)( char *model );
+
+  GSM_Error (*GetDateTime)( GSM_DateTime *date_time);
+
+  GSM_Error (*SetDateTime)( GSM_DateTime *date_time);
+
+  GSM_Error (*GetAlarm)( int alarm_number, GSM_DateTime *date_time );
+
+  GSM_Error (*SetAlarm)( int alarm_number, GSM_DateTime *date_time );
+
+  GSM_Error (*DialVoice)( char *Number);
+
+  GSM_Error (*DialData)( char *Number, char type, void (* callpassup)(char c));
+
+  GSM_Error (*GetIncomingCallNr)( char *Number );
+
+  GSM_Error (*GetNetworkInfo) ( GSM_NetworkInfo *NetworkInfo );
+
+  GSM_Error (*GetCalendarNote) ( GSM_CalendarNote *CalendarNote);
+
+  GSM_Error (*WriteCalendarNote) ( GSM_CalendarNote *CalendarNote);
+
+  GSM_Error (*DeleteCalendarNote) ( GSM_CalendarNote *CalendarNote);
+
+  GSM_Error (*NetMonitor) ( unsigned char mode, char *Screen );
+
+  GSM_Error (*SendDTMF) ( char *String );
+
+  GSM_Error (*GetBitmap) ( GSM_Bitmap *Bitmap );
+  
+  GSM_Error (*SetBitmap) ( GSM_Bitmap *Bitmap );
+
+  GSM_Error (*SetRingtone) ( GSM_Ringtone *ringtone , int *maxlength);
+
+  GSM_Error (*SetBinRingtone) ( GSM_BinRingtone *ringtone);
+  
+  GSM_Error (*GetBinRingtone) ( GSM_BinRingtone *ringtone);
+  
+  GSM_Error (*Reset) ( unsigned char type );
+
+  GSM_Error (*GetProfile) ( GSM_Profile *Profile );
+
+  GSM_Error (*SetProfile) ( GSM_Profile *Profile );
+  
+  bool      (*SendRLPFrame) ( RLP_F96Frame *frame, bool out_dtx );
+
+  GSM_Error (*CancelCall) ();
+     
+  GSM_Error (*PressKey) (int key, int event);
+  
+  GSM_Error (*EnableDisplayOutput) ();
+  
+  GSM_Error (*DisableDisplayOutput) ();
+  GSM_Error (*EnableCellBroadcast) ();
+
+  GSM_Error (*DisableCellBroadcast) ();
+
+  GSM_Error (*ReadCellBroadcast) ( GSM_CBMessage *Message );
+
+  GSM_Error (*PlayTone) (int Herz, u8 Volume);
+
+  GSM_Error (*GetProductProfileSetting) ( GSM_PPS *PPS);
+
+  GSM_Error (*SetProductProfileSetting) ( GSM_PPS *PPS);
+
+  GSM_Error (*GetOperatorName) ( GSM_Network *operator);  
+
+  GSM_Error (*SetOperatorName) ( GSM_Network *operator);    
+
+  GSM_Error (*GetVoiceMailbox) ( GSM_PhonebookEntry *entry);  
+
+  GSM_Error (*PhoneTests) ();    
+
+  GSM_Error (*SimlockInfo) ( GSM_AllSimlocks *siml);    
+
+  GSM_Error (*GetCalendarNotesInfo) (GSM_NotesInfo *NotesInfo);
+
+  GSM_Error (*GetSMSFolders) ( GSM_SMSFolders *folders);      
+
+  GSM_Error (*ResetPhoneSettings) ();      
+
+  GSM_Error (*GetWAPBookmark) ( GSM_WAPBookmark *bookmark);      
+
+  GSM_Error (*SetWAPBookmark) ( GSM_WAPBookmark *bookmark);      
+
+  GSM_Error (*GetWAPSettings) ( GSM_WAPSettings *settings);      
+
+  GSM_Error (*CallDivert) ( GSM_CallDivert *cd );      
+
+  GSM_Error (*AnswerCall) (char s);
+
+  GSM_Error (*GetManufacturer)( char *manufacturer );
+
+} GSM_Functions;
+
+typedef struct {
+
+  /* FIXME: comment this. */
+
+  GSM_Error (*Initialise)( char *port_device, char *initlength,
+                           GSM_ConnectionType connection,
+                           void (*rlp_callback)(RLP_F96Frame *frame));
+
+  int (*SendMessage) (u16 message_length, u8 message_type, u8 *buffer);
+
+  int (*SendFrame)   (u16 message_length, u8 message_type, u8 *buffer); 
+
+  int (*WritePhone)  (u16 length, u8 *buffer); 
+
+  void (*Terminate)(void);     
+
+  void (*StateMachine)(unsigned char rx_byte);
+
+} GSM_Protocol;
+
+/* This structure is provided to allow common information about the particular
+   model to be looked up in a model independant way. Some of the values here
+   define minimum and maximum levels for values retrieved by the various Get
+   functions for example battery level. They are not defined as constants to
+   allow model specific code to set them during initialisation */
+
+typedef struct {
+               
+  char *FBUSModels; /* Models covered by this type, pipe '|' delimited. */
+  
+  char *MBUSModels; /* Models covered by this type, pipe '|' delimited. */
+
+  char *InfraredModels; /* Models covered by this type, pipe '|' delimited. */
+  
+  char *DLR3Models; /* Models covered by this type, pipe '|' delimited. */
+
+  char *ATModels; /* Models covered by this type, pipe '|' delimited. */
+
+  char *IrdaModels; /* Models covered by this type, pipe '|' delimited. */
+
+  char *TekramModels; /* Models covered by this type, pipe '|' delimited. */  
+  
+/* Minimum and maximum levels for RF signal strength. Units are as per the
+   setting of RFLevelUnits.  The setting of RFLevelUnits indicates the 
+   default or "native" units used.  In the case of the 3110 and 6110 series
+   these are arbitrary, ranging from 0 to 4. */
+
+  float MaxRFLevel;
+  float MinRFLevel;
+  GSM_RFUnits RFLevelUnits;
+
+/* Minimum and maximum levels for battery level. Again, units are as per the
+   setting of GSM_BatteryLevelUnits.  The value that BatteryLevelUnits is set
+   to indicates the "native" or default value that the phone supports.  In the
+   case of the 3110 and 6110 series these are arbitrary, ranging from 0 to 4. */
+
+  float MaxBatteryLevel;
+  float MinBatteryLevel;
+  GSM_BatteryUnits BatteryLevelUnits;
+
+/* Information about date, time and alarm support. In case of alarm
+   information we provide value for the number of alarms supported. */
+
+  GSM_DateTimeSupport DateTimeSupport;
+  GSM_DateTimeSupport AlarmSupport;
+  int MaximumAlarms;
+} GSM_Information;
+
+void NULL_Terminate(void);
+void NULL_KeepAlive();
+bool NULL_WritePhone (u16 length, u8 *buffer);
+void NULL_TX_DisplayMessage(u16 MessageLength, u8 *MessageBuffer);
+
+GSM_Error NULL_WaitUntil (int time, GSM_Error *value);
+GSM_Error NULL_SendMessageSequence (int time, GSM_Error *value,
+               u16 message_length, u8 message_type, u8 *buffer);
+
+GSM_ConnectionType GetConnectionTypeFromString(char *Connection);
+
+bool GetMemoryTypeString(char *memorytext, GSM_MemoryType *type);
+bool GetMemoryTypeID(char *memorytext, GSM_MemoryType *type);
+
+/* Define these as externs so that app code can pick them up. */
+
+extern bool *GSM_LinkOK;
+extern GSM_Information *GSM_Info;
+extern GSM_Functions *GSM;
+extern GSM_Protocol *Protocol;
+
+GSM_PhonebookEntry *CurrentPhonebookEntry;
+GSM_Error          CurrentPhonebookError;
+
+GSM_SpeedDial      *CurrentSpeedDialEntry;
+GSM_Error          CurrentSpeedDialError;
+
+unsigned char      Current_IMEI[GSM_MAX_IMEI_LENGTH];
+unsigned char      Current_Revision[GSM_MAX_REVISION_LENGTH];
+unsigned char      Current_Model[GSM_MAX_MODEL_LENGTH];
+
+GSM_SMSMessage     *CurrentSMSMessage;
+GSM_Error          CurrentSMSMessageError;
+int                CurrentSMSPointer;
+
+GSM_SMSFolders      *CurrentSMSFolders;
+GSM_Error          CurrentSMSFoldersError;
+int                CurrentSMSFoldersCount;
+
+GSM_OneSMSFolder   CurrentSMSFolder;
+GSM_Error          CurrentSMSFolderError;
+int                CurrentSMSFolderID;
+
+GSM_MemoryStatus   *CurrentMemoryStatus;
+GSM_Error          CurrentMemoryStatusError;
+
+GSM_NetworkInfo    *CurrentNetworkInfo;
+GSM_Error          CurrentNetworkInfoError;
+
+GSM_SMSStatus      *CurrentSMSStatus;
+GSM_Error          CurrentSMSStatusError;
+
+GSM_MessageCenter  *CurrentMessageCenter;
+GSM_Error          CurrentMessageCenterError;
+
+int                *CurrentSecurityCodeStatus;
+GSM_Error          CurrentSecurityCodeError;
+GSM_SecurityCode   *CurrentSecurityCode;
+
+GSM_DateTime       *CurrentDateTime;
+GSM_Error          CurrentDateTimeError;
+
+GSM_Error          CurrentResetPhoneSettingsError;
+
+GSM_DateTime       *CurrentAlarm;
+GSM_Error          CurrentAlarmError;
+
+GSM_CalendarNote   *CurrentCalendarNote;
+GSM_Error          CurrentCalendarNoteError;
+
+GSM_NotesInfo      CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2;
+GSM_Error          CurrentCalendarNotesInfoError;
+
+int                *CurrentFirstCalendarFreePos;
+GSM_Error          CurrentFirstCalendarFreePosError;
+
+GSM_Error          CurrentSetDateTimeError;
+GSM_Error          CurrentSetAlarmError;
+
+GSM_Error          CurrentEnableExtendedCommandsError;
+
+int                CurrentRFLevel,
+                   CurrentBatteryLevel,
+                   CurrentPowerSource;
+
+int                CurrentDisplayStatus;
+GSM_Error          CurrentDisplayStatusError;
+
+char               *CurrentNetmonitor;
+GSM_Error          CurrentNetmonitorError;
+
+GSM_Bitmap         *CurrentGetBitmap;
+GSM_Error          CurrentGetBitmapError;
+
+GSM_Error          CurrentSetBitmapError;
+
+GSM_Error          CurrentSendDTMFError;
+
+GSM_Profile        *CurrentProfile;
+GSM_Error          CurrentProfileError;
+
+GSM_Error          CurrentDisplayOutputError;
+
+GSM_CBMessage      *CurrentCBMessage;
+GSM_Error          CurrentCBError;
+
+int                CurrentPressKeyEvent;
+GSM_Error          CurrentPressKeyError;
+
+GSM_Error          CurrentPlayToneError;
+
+GSM_Error          CurrentDialVoiceError;
+
+GSM_Error          CurrentGetOperatorNameError;
+GSM_Network        *CurrentGetOperatorNameNetwork;
+GSM_Error          CurrentSetOperatorNameError;
+
+GSM_Error          CurrentGetIMEIError;
+
+GSM_Error          CurrentGetHWError;
+
+unsigned char      CurrentPPS[4];
+GSM_Error          CurrentProductProfileSettingsError;
+
+char               CurrentIncomingCall[20];
+
+GSM_Error          CurrentBinRingtoneError;
+GSM_BinRingtone    *CurrentGetBinRingtone;
+
+GSM_Error          CurrentRingtoneError; 
+
+GSM_Error          CurrentMagicError;
+
+GSM_Error          CurrentSimlockInfoError;
+GSM_AllSimlocks    *CurrentSimLock;
+
+GSM_Error          CurrentGetWAPBookmarkError;
+GSM_Error          CurrentSetWAPBookmarkError;
+GSM_WAPBookmark    *WAPBookmark;
+
+GSM_Error          CurrentGetWAPSettingsError;
+GSM_WAPSettings    *WAPSettings;
+
+GSM_Error          CurrentCallDivertError;
+GSM_CallDivert    *CurrentCallDivert;
+
+char              *CurrentManufacturer;
+
+/* This is the connection type used in gnokii. */
+GSM_ConnectionType CurrentConnectionType;
+
+/* Pointer to a callback function used to return changes to a calls status */
+/* This saves unreliable polling */
+void (*CurrentCallPassup)(char c);
+
+/* Pointer to callback function in user code to be called when RLP frames
+   are received. */
+void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame);
+
+/* Used to disconnect the call */
+u8 CurrentCallSequenceNumber;
+
+bool CurrentLinkOK;
+
+bool CurrentRequestTerminate;
+
+bool CurrentDisableKeepAlive;
+
+/* Prototype for the functions actually provided by gsm-api.c. */
+
+GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime);
+
+bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection);
+
+char *GetMygnokiiVersion();
+
+typedef enum {
+  F_CAL61=0,/*Calendar in 6110 style - 4 types,...*/
+  F_CAL33,  /*Calendar in 3310 style - 10 reminders, Unicode, 3 coding types*/
+  F_CAL71,  /*Calendar in 7110 style - 4 types, recurrance, etc.*/
+
+  F_PBK33,  /*Phonebook in Unicode. 3310 style - name and entry*/
+  F_PBK71,  /*Extended phonebook - multiple numbers,Unicode.Like in 7110*/
+
+  F_DATA61, /*We can make data calls using gnokiid. Like in 6110*/
+  F_DATA71, /*Datacalls using AT commands*/
+
+  F_SMS,    /*SMS with Inbox, Outbox*/
+  F_SMS71,  /*SMS with SMS folders like in 7110*/
+
+  F_AUTH,   /*We can make authentication and have "Accessory connected" like in 6110*/
+  F_NETMON, /*Netmonitor available*/ /*10*/
+  F_CALER61,/*Caller groups in 6110 style - 5 groups with members*/
+  F_KEYB,   /*We can press keys*/
+  F_SMSCDEF,/*SMSC can have default recipient*/
+  F_SPEED,  /*We can handle speed dials*/
+  F_SCRSAV, /*We have screen savers*/
+  F_DTMF,   /*We can handle DTMF sequences*/
+  F_NOPOWER,/*We must get power/battery info from netmonitor*/
+
+  F_STANIM, /*Startup logo animated or static*/
+  F_STA   , /*Startup logo static*/
+  F_STA62 , /*Startup logo static size 6210*/ /*20*/
+  F_STA71 , /*Startup logo static size 7110*/
+
+  F_PROF61, /*Profiles numbered like in N6110*/
+  F_PROF51, /*Profiles numbered like in N5110*/
+  F_PROF33, /*Profiles numbered like in N3310.Unicode names*/
+
+  F_RING_SM,/*Binary ringtone in Smart Messaging*/
+  F_RINGBIN,/*Binary ringtone in binary format*/
+
+  F_WAP     /*WAP functions available*/
+} feat_index;
+
+typedef enum {
+  FN_CALENDAR=0,
+  FN_NETMONITOR,
+  FN_CALLERGROUPS,
+  FN_PHONEBOOK,
+  FN_AUTHENTICATION,
+  FN_DATACALLS,
+  FN_KEYPRESS,
+  FN_SMSCDEFAULT,
+  FN_SPEEDDIAL,
+  FN_SCREENSAVER,
+  FN_DTMF, /*10*/
+  FN_SMS,
+  FN_NOPOWERFRAME,
+  FN_STARTUP,
+  FN_PROFILES,
+  FN_RINGTONES,
+  FN_WAP
+} featnum_index;
+
+/* For models table */
+typedef struct {
+  char *model;
+  char *number;
+  feat_index features[17];  
+} OnePhoneModel;
+
+extern char *GetModelName ();
+int GetModelFeature (featnum_index num);
+
+extern bool AppendLog(u8 *buffer, int length,bool format);
+extern bool AppendLogText(u8 *buffer,bool format);
+
+typedef struct {
+  int                SIMPhonebookUsed;
+  int                SIMPhonebookSize;
+  GSM_PhonebookEntry SIMPhonebook[250];
+
+  int                PhonePhonebookUsed;
+  int                PhonePhonebookSize;
+  GSM_PhonebookEntry PhonePhonebook[500];
+
+  bool               CallerAvailable;
+  GSM_Bitmap         CallerGroups[5];
+
+  bool               SpeedAvailable;
+  GSM_SpeedDial      SpeedDials[8];
+
+  bool               OperatorLogoAvailable;
+  GSM_Bitmap         OperatorLogo;
+
+  bool               StartupLogoAvailable;
+  GSM_Bitmap         StartupLogo;
+
+  GSM_Bitmap         StartupText;
+} GSM_Backup;
+
+#endif /* __gsm_api_h */
diff --git a/include/gsm-bitmaps.h b/include/gsm-bitmaps.h
new file mode 100644 (file)
index 0000000..f65acc2
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+  
+  Functions for manipulating bitmaps
+
+*/
+
+#ifndef __gsm_bitmaps_h
+#define __gsm_bitmaps_h
+
+#include "gsm-sms.h"
+
+/* Bitmap types. */
+typedef enum {
+  GSM_None=0,
+  GSM_StartupLogo,      /*size 84*48*/
+  GSM_OperatorLogo,     /*size 72*14*/
+  GSM_CallerLogo,       /*size 72*14*/
+  GSM_PictureImage,     /*size 72*28*/
+  GSM_7110OperatorLogo, /*size 78*21*/
+  GSM_7110StartupLogo,  /*size 96*65*/
+  GSM_6210StartupLogo,  /*size 96*60*/
+  GSM_WelcomeNoteText,
+  GSM_DealerNoteText
+} GSM_Bitmap_Types;
+
+#define MAX_BITMAP_TEXT_LENGTH 256
+
+/* Structure to hold incoming/outgoing bitmaps (and welcome-notes). */
+typedef struct {
+  u8 height;                /* Bitmap height (pixels) */
+  u8 width;                 /* Bitmap width (pixels) */
+  u16 size;                 /* Bitmap size (bytes) */
+  GSM_Bitmap_Types type;    /* Bitmap type */
+  char netcode[7];          /* Network operator code */
+  char text[MAX_BITMAP_TEXT_LENGTH];   /* Text used for (dealer) welcome-note
+                                          or callergroup name or Picture Image text */
+  unsigned char bitmap[864];           /* Actual Bitmap ((65+7)/8*96=864) */ 
+  unsigned char number;                /* Caller group number */
+  char ringtone;                       /* Ringtone no sent with caller group */
+  bool enabled;                        /* With caller logos = displayed or not */
+  char Sender[GSM_MAX_SENDER_LENGTH+1];/* For Picture Images - number of sender */
+} GSM_Bitmap;
+
+void GSM_SetPointBitmap(GSM_Bitmap *bmp, int x, int y);
+void GSM_ClearPointBitmap(GSM_Bitmap *bmp, int x, int y);
+bool GSM_IsPointBitmap(GSM_Bitmap *bmp, int x, int y);
+void GSM_ClearBitmap(GSM_Bitmap *bmp);
+void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target);
+void GSM_PrintBitmap(GSM_Bitmap *bitmap);
+GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap);
+int GSM_SaveBitmapToSMS(GSM_MultiSMSMessage *SMS, GSM_Bitmap *bitmap,bool ScreenSaver, bool UnicodeText);
+
+#endif
diff --git a/include/gsm-common.h b/include/gsm-common.h
new file mode 100644 (file)
index 0000000..2ae6974
--- /dev/null
@@ -0,0 +1,327 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Header file for the definitions, enums etc. that are used by all models of
+  handset.
+
+*/
+
+#ifndef __gsm_common_h
+#define __gsm_common_h
+
+#include "misc.h"
+
+#define MYGNOKII
+
+/* Maximum length of SMS center name */
+#define GSM_MAX_SMS_CENTER_NAME_LENGTH (20)
+
+/* Limits of SMS messages. */
+#define GSM_MAX_SMS_CENTER_LENGTH  (40)
+#define GSM_MAX_RECIPIENT_LENGTH   (40)
+#define GSM_MAX_SENDER_LENGTH      (40)
+#define GSM_MAX_DESTINATION_LENGTH (40)
+#define GSM_MAX_SMS_LENGTH         (160)
+#define GSM_MAX_SMS_8_BIT_LENGTH   (140)
+#define GSM_MAX_USER_DATA_HEADER_LENGTH (140)
+/* The maximum length of an uncompressed concatenated short message is
+   255 * 153 = 39015 default alphabet characters */
+#define GSM_MAX_CONCATENATED_SMS_LENGTH        (39015)
+
+#define GSM_MAX_CB_MESSAGE         (160)
+
+/* Correct for phones in fbus-6110.c */
+/* For other translation could be required */
+#define PHONEKEY_1              0x01
+#define PHONEKEY_2              0x02
+#define PHONEKEY_3              0x03
+#define PHONEKEY_4              0x04
+#define PHONEKEY_5              0x05
+#define PHONEKEY_6              0x06
+#define PHONEKEY_7              0x07
+#define PHONEKEY_8              0x08
+#define PHONEKEY_9              0x09
+#define PHONEKEY_0              0x0a
+#define PHONEKEY_HASH           0x0b /* # */
+#define PHONEKEY_ASTERISK       0x0c /* * */
+#define PHONEKEY_POWER          0x0d
+#define PHONEKEY_INCREASEVOLUME 0x10 /* doesn't available in some phones as separate button: ie. N5110 */
+#define PHONEKEY_DECREASEVOLUME 0x11 /* doesn't available in some phones as separate button: ie. N5110 */
+#define PHONEKEY_UP             0x17   
+#define PHONEKEY_DOWN           0x18 
+#define PHONEKEY_MENU           0x19
+#define PHONEKEY_NAMES          0x1a /* doesn't available in some phone: ie. N5110 */
+#define PHONEKEY_GREEN          0x0e /* in some phone ie. N5110 sometimes works identical to POWER */
+#define PHONEKEY_RED            0x0f /* (c) key in some phone: ie. N5110 */
+
+/* Correct for phones in fbus-6110.c */
+/* For other translation could be required */
+#define PRESSPHONEKEY   0x01
+#define RELEASEPHONEKEY 0x02
+
+/* Limits for IMEI, Revision and Model string storage. */
+#define GSM_MAX_IMEI_LENGTH     (20)
+#define GSM_MAX_REVISION_LENGTH (20)
+#define GSM_MAX_MODEL_LENGTH    (10)
+
+/* In 6210 test 57 there seems to be 75 chars */\r
+#define NM_MAX_SCREEN_WIDTH 75\r
+
+/* Power source types */
+typedef enum {
+  GPS_ACDC=1, /* AC/DC powered (charging) */
+  GPS_BATTERY /* Internal battery */
+} GSM_PowerSource;
+
+/* Definition of security codes. */
+typedef enum {
+  GSCT_SecurityCode = 0x01, /* Security code. */
+  GSCT_Pin,                 /* PIN. */
+  GSCT_Pin2,                /* PIN 2. */
+  GSCT_Puk,                 /* PUK. */
+  GSCT_Puk2,                /* PUK 2. */
+  GSCT_None                 /* Code not needed. */
+} GSM_SecurityCodeType;
+
+/* Security code definition. */
+typedef struct {
+  GSM_SecurityCodeType Type; /* Type of the code. */
+  char Code[10];             /* Actual code. */
+} GSM_SecurityCode;
+
+/* Define an enum for specifying memory types for retrieving phonebook
+   entries, SMS messages etc. This type is not mobile specific - the model
+   code should take care of translation to mobile specific numbers - see 6110
+   code.
+   01/07/99:  Two letter codes follow GSM 07.07 release 6.2.0
+*/
+typedef enum {
+  GMT_ME, /* Internal memory of the mobile equipment */
+  GMT_SM, /* SIM card memory */
+  GMT_FD, /* Fixed dial numbers */
+  GMT_ON, /* Own numbers */
+  GMT_EN, /* Emergency numbers */
+  GMT_DC, /* Dialled numbers */
+  GMT_RC, /* Received numbers */
+  GMT_MC, /* Missed numbers */
+  GMT_LD, /* Last dialed */
+  GMT_MT, /* combined ME and SIM phonebook */
+  GMT_TA, /* for compatibility only: TA=computer memory */
+  GMT_CB, /* Currently selected memory */
+  GMT_CG, /* Caller groups */
+  GMT_XX = 0xff        /* Error code for unknown memory type (returned by fbus-xxxx functions. */
+} GSM_MemoryType;
+
+/* This define speed dialing entries. */
+typedef struct {
+  int Number;                /* Which number is used to dialing? */
+  GSM_MemoryType MemoryType; /* Memory type of the number. */
+  int Location;              /* Location of the number in MemoryType. */
+} GSM_SpeedDial;
+
+/* Define enums for Battery units. */
+typedef enum {
+  GBU_Arbitrary,
+  GBU_Volts,
+  GBU_Minutes,
+  GBU_Percentage
+} GSM_BatteryUnits;
+
+/* This enum is used for display status. */
+
+typedef enum {
+  DS_Call_In_Progress, /* Call in progress. */
+  DS_Unknown,          /* The meaning is unknown now :-( */
+  DS_Unread_SMS,       /* There is Unread SMS. */
+  DS_Voice_Call,       /* Voice call active. */
+  DS_Fax_Call,         /* Fax call active. */
+  DS_Data_Call,        /* Data call active. */
+  DS_Keyboard_Lock,    /* Keyboard lock status. */
+  DS_SMS_Storage_Full  /* Full SMS Memory. */
+} DisplayStatusEntity;
+
+/* Constants for Profiles. */
+
+#define PROFILE_MESSAGE_NOTONE     0x00
+#define PROFILE_MESSAGE_STANDARD   0x01
+#define PROFILE_MESSAGE_SPECIAL    0x02
+#define PROFILE_MESSAGE_BEEPONCE   0x03
+#define PROFILE_MESSAGE_ASCENDING  0x04
+
+#define PROFILE_WARNING_OFF  0xff
+#define PROFILE_WARNING_ON   0x04
+
+#define PROFILE_CALLALERT_RINGING       0x01
+#define PROFILE_CALLALERT_BEEPONCE      0x02
+#define PROFILE_CALLALERT_OFF           0x04
+#define PROFILE_CALLALERT_RINGONCE      0x05
+#define PROFILE_CALLALERT_ASCENDING     0x06
+#define PROFILE_CALLALERT_CALLERGROUPS  0x07
+
+#define PROFILE_KEYPAD_OFF     0xff
+#define PROFILE_KEYPAD_LEVEL1  0x00
+#define PROFILE_KEYPAD_LEVEL2  0x01
+#define PROFILE_KEYPAD_LEVEL3  0x02
+//in 5110 I had also once 0x03
+
+#define PROFILE_VOLUME_LEVEL1  0x06
+#define PROFILE_VOLUME_LEVEL2  0x07
+#define PROFILE_VOLUME_LEVEL3  0x08
+#define PROFILE_VOLUME_LEVEL4  0x09
+#define PROFILE_VOLUME_LEVEL5  0x0a
+
+#define PROFILE_CALLERGROUPS_ALL         0xff
+#define PROFILE_CALLERGROUPS_FAMILY      0x01
+#define PROFILE_CALLERGROUPS_VIP         0x02
+#define PROFILE_CALLERGROUPS_FRIENDS     0x04
+#define PROFILE_CALLERGROUPS_COLLEAGUES  0x08
+#define PROFILE_CALLERGROUPS_OTHERS      0x10
+
+#define PROFILE_VIBRATION_OFF 0x00
+#define PROFILE_VIBRATION_ON  0x01
+#define PROFILE_VIBRATION_FIRST  0x02
+
+/* Structure to hold profile entries. */
+
+typedef struct {
+  int Number;          /* The number of the profile. */
+  char Name[40];       /* The name of the profile. */
+  int DefaultName;     /* 0-6, when default name is used, -1, when not */
+  int KeypadTone;      /* Volumen level for keypad tones. */
+  int Lights;          /* Lights on/off. */
+  int CallAlert;       /* Incoming call alert. */
+  int Ringtone;        /* Ringtone for incoming call alert. */
+  int Volume;          /* Volume of the ringing. */
+  int MessageTone;     /* The tone for message indication. */
+  int WarningTone;     /* The tone for warning messages. */
+  int Vibration;       /* Vibration? */
+  int CallerGroups;    /* CallerGroups. */
+  int ScreenSaver;     /* ScreenSaver */
+  int AutomaticAnswer; /* Does the phone auto-answer incoming call? */
+} GSM_Profile;
+
+typedef enum {
+  PPS_ALS=0,
+  PPS_HRData,
+  PPS_14400Data,
+  PPS_LCDContrast,
+  PPS_EFR,
+  PPS_FR,
+  PPS_HR,
+  PPS_GamesMenu,   /* N3210 5.26 and higher */
+  PPS_VibraMenu    /* N3210 */
+} GSM_PPS_Settings;
+
+typedef struct {
+  GSM_PPS_Settings Name;
+  bool bool_value;
+  int int_value;
+} GSM_PPS;
+
+typedef struct {
+    char data[10+1];//detailed info about this simlock
+    bool enabled;   //is enabled or not ?
+    int counter;    //how many times user tried to disable simlock using keypad
+    bool factory;   //is factory simlock ?
+} GSM_OneSimlock;
+
+typedef struct {
+    GSM_OneSimlock simlocks[4];
+} GSM_AllSimlocks;
+
+/* Data structures for the call divert */
+typedef enum {
+       GSM_CDV_Busy = 0x01,     /* Divert when busy */ 
+       GSM_CDV_NoAnswer,        /* Divert when not answered */
+       GSM_CDV_OutOfReach,      /* Divert when phone off or no coverage */
+       GSM_CDV_AllTypes         /* Divert all calls without ringing */
+} GSM_CDV_DivertTypes;
+
+typedef enum {
+       GSM_CDV_VoiceCalls = 0x01,
+       GSM_CDV_FaxCalls,
+       GSM_CDV_DataCalls,
+       GSM_CDV_AllCalls
+} GSM_CDV_CallTypes;
+
+/* See GSM 02.82 for diverts types */
+typedef enum {
+       GSM_CDV_Disable  = 0x00,
+       GSM_CDV_Enable   = 0x01,
+       GSM_CDV_Query    = 0x02, /* Is concrete divert enabled ? */
+       GSM_CDV_Register = 0x03, /* Sets divert */
+       GSM_CDV_Erasure  = 0x04  /* Erase concrete divert */
+} GSM_CDV_Opers;
+
+typedef struct {
+       GSM_CDV_DivertTypes DType;
+       GSM_CDV_CallTypes   CType;
+       GSM_CDV_Opers       Operation;
+        char                Number[GSM_MAX_SENDER_LENGTH + 1];
+       unsigned int        Timeout;
+       bool                Enabled;
+} GSM_CallDivert;
+
+/* Define standard GSM error/return code values. These codes are also used for
+   some internal functions such as SIM read/write in the model specific code. */
+
+typedef enum {
+  GE_NONE = 0,              /* No error. */
+  GE_DEVICEOPENFAILED,     /* Couldn't open specified serial device. */
+  GE_UNKNOWNMODEL,          /* Model specified isn't known/supported. */
+  GE_NOTSUPPORTED,          /* We are sure, that function not supported by phone model */
+  GE_NOLINK,                /* Couldn't establish link with phone. */
+  GE_TIMEOUT,               /* Command timed out. */
+  GE_TRYAGAIN,              /* Try again. */
+  GE_INVALIDSECURITYCODE,   /* Invalid Security code. */
+  GE_NOTIMPLEMENTED,        /* Command called isn't implemented in model. */
+  GE_INVALIDSMSLOCATION,    /* Invalid SMS location. */
+  GE_INVALIDPHBOOKLOCATION, /* Invalid phonebook location. */ /*10*/
+  GE_INVALIDMEMORYTYPE,     /* Invalid type of memory. */
+  GE_INVALIDSPEEDDIALLOCATION, /* Invalid speed dial location. */
+  GE_INVALIDCALNOTELOCATION,/* Invalid calendar note location. */
+  GE_INVALIDDATETIME,       /* Invalid date, time or alarm specification. */
+  GE_EMPTYSMSLOCATION,      /* SMS location is empty. */
+  GE_PHBOOKNAMETOOLONG,     /* Phonebook name is too long. */
+  GE_PHBOOKNUMBERTOOLONG,   /* Phonebook number is too long. */
+  GE_PHBOOKWRITEFAILED,     /* Phonebook write failed. */
+  GE_SMSSENDOK,             /* SMS was send correctly. */
+  GE_SMSSENDFAILED,         /* SMS send fail. */ /*20*/
+  GE_SMSWAITING,            /* Waiting for the next part of SMS. */
+  GE_SMSTOOLONG,            /* SMS message too long. */
+  GE_NONEWCBRECEIVED,       /* Attempt to read CB when no new CB received */
+  GE_INTERNALERROR,         /* Problem occured internal to model specific code. */
+  GE_CANTOPENFILE,          /* Can't open file with bitmap/ringtone */
+  GE_WRONGNUMBEROFCOLORS,   /* Wrong number of colors in specified bitmap file */
+  GE_WRONGCOLORS,           /* Wrong colors in bitmap file */
+  GE_INVALIDFILEFORMAT,     /* Invalid format of file */
+  GE_SUBFORMATNOTSUPPORTED, /* Subformat of file not supported */
+  GE_TOOSHORT,              /* Too short file, structure, etc. to read */
+  GE_TOOLONG,               /* Too long file, structure, etc. to read */
+  GE_INVALIDIMAGESIZE,      /* Invalid size of bitmap (in file, etc.) */
+  GE_BUSY,                  /* Command is still being executed. */
+  GE_UNKNOWN,               /* Unknown error - well better than nothing!! */
+  GE_NOACCESS,
+  GE_USERCANCELED,
+  GE_MEMORYFULL,
+  GE_INVALIDRINGLOCATION,
+  GE_INSIDEBOOKMARKSMENU,
+  GE_INVALIDBOOKMARKLOCATION,
+  GE_INSIDESETTINGSMENU,
+  GE_INVALIDSETTINGSLOCATION,
+  
+  /* The following are here in anticipation of data call requirements. */
+
+  GE_LINEBUSY,              /* Outgoing call requested reported line busy */
+  GE_NOCARRIER,             /* No Carrier error during data call setup ? */
+  GE_SMSSAVEFAILED,        /* save sms failed */
+  GE_SMSISINMEM,           /* sms is already in memory */
+  GE_BUSYSMSLOCATION       /* there is a sms at the requested sms location */
+} GSM_Error;
+
+#endif /* __gsm_common_h */
diff --git a/include/gsm-networks.h b/include/gsm-networks.h
new file mode 100644 (file)
index 0000000..367a964
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+       
+  Header file for GSM networks.
+
+*/
+
+#ifndef __gsm_networks_h
+#define __gsm_networks_h
+
+/* Define enums for RF units.  GRF_CSQ asks for units in form used
+   in AT+CSQ command as defined by GSM 07.07 */
+typedef enum {
+  GRF_Arbitrary,
+  GRF_dBm,
+  GRF_mV,
+  GRF_uV,
+  GRF_CSQ,
+  GRF_Percentage
+} GSM_RFUnits;
+
+/* This structure is used to get the current network status */
+
+typedef struct {
+  char NetworkCode[10]; /* GSM network code */
+  char CellID[10];      /* CellID */
+  char LAC[10];         /* LAC */
+} GSM_NetworkInfo;
+
+/* This type is used to hold information about various GSM networks. */
+
+typedef struct {
+  char Code[9+1]; /* GSM network code */
+  char Name[50]; /* GSM network name */
+} GSM_Network;
+
+/* This type is used to hold information about various GSM countries. */
+
+typedef struct {
+  char *Code; /* GSM country code */
+  char *Name; /* GSM country name */
+} GSM_Country;
+
+/* These functions are used to search the structure defined above.*/
+char *GSM_GetNetworkName(char *NetworkCode);
+char *GSM_GetNetworkCode(char *NetworkName);
+
+char *GSM_GetCountryName(char *CountryCode);
+char *GSM_GetCountryCode(char *CountryName);
+
+void EncodeNetworkCode(unsigned char* buffer, unsigned char* output);
+void DecodeNetworkCode(unsigned char* buffer, unsigned char* output);
+
+#endif /* __gsm_networks_h */
diff --git a/include/gsm-ringtones.h b/include/gsm-ringtones.h
new file mode 100644 (file)
index 0000000..92e439e
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This file provides definitions of macros from the Smart Messaging
+  Specification. It is mainly rewrite of the spec to C :-) Viva Nokia!
+
+*/
+
+#ifndef __gsm_ringtones_h
+#define __gsm_ringtones_h
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-sms.h"
+
+#define MAX_RINGTONE_NOTES 255
+
+/* Structure to hold note of ringtone. */
+/* NoteValue is encoded as octave(scale)*14 + note */
+/* where for note: c=0, d=2, e=4 .... */
+/* ie. c#=1 and 5 and 13 are invalid */
+/* note=255 means a pause */
+typedef struct {
+  u8 duration;
+  u8 note;
+  int tempo;
+  u8 style;
+} GSM_RingtoneNote;
+
+/* Structure to hold ringtones. */
+typedef struct {
+  char name[20];
+  unsigned char Loop;
+  u8 NrNotes;
+  GSM_RingtoneNote notes[256];
+  bool allnotesscale; /* Some Nokia phones doesn't receive correctly some
+                         ringtones without it. N3310 4.02 */
+  int location;
+} GSM_Ringtone;
+  
+/* Structure to hold binary ringtones. */
+
+typedef struct {
+  char name[20];
+  unsigned char frame[1000];
+  int length;
+  int location;
+} GSM_BinRingtone;
+
+#define GetBit(Stream,BitNr) Stream[(BitNr)/8] & 1<<(7-((BitNr)%8))
+#define SetBit(Stream,BitNr) Stream[(BitNr)/8] |= 1<<(7-((BitNr)%8))
+#define ClearBit(Stream,BitNr) Stream[(BitNr)/8] &= 255 - (1 << (7-((BitNr)%8)))
+
+/* These values are from Smart Messaging Specification Revision 2.0.0 pages
+   3-23, ..., 3-29 */
+
+/* Command-Part Encoding */
+
+#define CancelCommand          (0x05<<1) /* binary 0000 101 */
+#define RingingToneProgramming (0x25<<1) /* binary 0100 101 */
+#define Sound                  (0x1d<<1) /* binary 0011 101 */
+/* MW: I didn't find phone, which can unpack ringtone with Unicode
+   command. Tested 3310, 6150 */
+#define Unicode                (0x22<<1) /* binary 0100 010 */
+
+/* Song-Type Encoding */
+
+#define BasicSongType     (0x01<<5) /* binary 001 */
+#define TemporarySongType (0x02<<5) /* binary 010 */
+#define MidiSongType      (0x03<<5) /* binary 011 */
+#define DigitizedSongType (0x04<<5) /* binary 100 */
+
+/* Instruction ID Encoding */
+
+#define PatternHeaderId      (0x00<<5) /* binary 000 */
+#define NoteInstructionId    (0x01<<5) /* binary 001 */
+#define ScaleInstructionId   (0x02<<5) /* binary 010 */
+#define StyleInstructionId   (0x03<<5) /* binary 011 */
+#define TempoInstructionId   (0x04<<5) /* binary 100 */
+#define VolumeInstructionId  (0x05<<5) /* binary 101 */
+
+/* Style-Value Encoding*/
+
+#define NaturalStyle    (0x00<<6) /* binary 00 */
+#define ContinuousStyle (0x01<<6) /* binary 01 */
+#define StaccatoStyle   (0x02<<6) /* binary 10 */
+
+/* Note-Scale Encoding  */
+
+#define Scale1 (0x00<<6) /* binary 00 */
+#define Scale2 (0x01<<6) /* binary 01 */
+#define Scale3 (0x02<<6) /* binary 10 */
+#define Scale4 (0x03<<6) /* binary 11 */
+
+/* Note-Value Encoding */
+
+#define Note_Pause (0x00<<4) /* binary 0000 */
+#define Note_C     (0x01<<4) /* binary 0001 */
+#define Note_Cis   (0x02<<4) /* binary 0010 */
+#define Note_D     (0x03<<4) /* binary 0011 */
+#define Note_Dis   (0x04<<4) /* binary 0100 */
+#define Note_E     (0x05<<4) /* binary 0101 */
+#define Note_F     (0x06<<4) /* binary 0110 */
+#define Note_Fis   (0x07<<4) /* binary 0111 */
+#define Note_G     (0x08<<4) /* binary 1000 */
+#define Note_Gis   (0x09<<4) /* binary 1001 */
+#define Note_A     (0x0a<<4) /* binary 1010 */
+#define Note_Ais   (0x0b<<4) /* binary 1011 */
+#define Note_H     (0x0c<<4) /* binary 1100 */
+
+/* Note-Duration Encoding */
+
+#define Duration_Full (0x00<<5) /* binary 000 */
+#define Duration_1_2  (0x01<<5) /* binary 001 */
+#define Duration_1_4  (0x02<<5) /* binary 010 */
+#define Duration_1_8  (0x03<<5) /* binary 011 */
+#define Duration_1_16 (0x04<<5) /* binary 100 */
+#define Duration_1_32 (0x05<<5) /* binary 101 */
+
+/* Note-Duration-Specifier Encoding */
+
+#define NoSpecialDuration (0x00<<6) /* binary 00 */
+#define DottedNote        (0x01<<6) /* binary 01 */
+#define DoubleDottedNote  (0x02<<6) /* binary 10 */
+#define Length_2_3        (0x03<<6) /* binary 11 */
+
+/* Pattern ID Encoding */
+#define A_part (0x00<<6) /* binary 00 */
+#define B_part (0x01<<6) /* binary 01 */
+#define C_part (0x02<<6) /* binary 10 */
+#define D_part (0x03<<6) /* binary 11 */
+
+/* Command-End */
+#define CommandEnd (0x00) /* binary 00000000 */
+
+u8 GSM_PackRingtone(GSM_Ringtone *ringtone, unsigned char *package, int *maxlength);
+GSM_Error GSM_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength);
+
+int GSM_GetDuration(int number, unsigned char *spec);
+int GSM_GetNote(int number);
+int GSM_GetScale(int number);
+int GSM_GetTempo(int Beats);
+
+void GSM_PlayOneNote (GSM_RingtoneNote note);
+void GSM_PlayRingtone (GSM_Ringtone *ringtone);
+
+int GSM_GetFrequency(int number);
+
+GSM_Error GSM_ReadRingtone(GSM_SMSMessage *message, GSM_Ringtone *ringtone);
+
+int GSM_SaveRingtoneToSMS(GSM_MultiSMSMessage *SMS,
+                          GSM_Ringtone *ringtone,bool profilestyle);
+
+/* FIXME: For each phone probaby different */
+#define FB61_MAX_RINGTONE_FRAME_LENGTH 200
+
+/* Smart Messaging 3.0 says: 16*9=144 bytes,
+   but on 3310 4.02 it was possible to save about 196 chars (without cutting) */
+#define SM30_MAX_RINGTONE_FRAME_LENGTH 196
+
+/* Like PC Composer help say */
+#define FB61_MAX_RINGTONE_NOTES 130
+
+/* Nokia ringtones codes. */
+
+struct OneRingtone {
+  char name[30];
+  int menu;
+  int code;
+};
+
+void PrepareRingingTones(char model[64], char rev[64]);
+
+/* returns names from code or number in menu */
+char *RingingToneName(int code, int menu);
+
+/* returns code from number in menu */
+int RingingToneCode(int menu);
+
+/* returns number in menu from code */
+int RingingToneMenu(int code);
+
+int NumberOfRingtones();
+
+#endif /* __gsm_ringtones_h */
diff --git a/include/gsm-sms.h b/include/gsm-sms.h
new file mode 100644 (file)
index 0000000..fac18b9
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef __gsm_sms_h
+#define __gsm_sms_h
+
+#include "gsm-common.h"
+#include "gsm-datetime.h"
+
+/* This data-type is used to specify the type of the number. See the official
+   GSM specification 03.40, version 5.3.0, section 9.1.2.5, page 33. */
+typedef enum {
+  GNT_UNKNOWN=0x81,       /* Unknown number */
+  GNT_INTERNATIONAL=0x91, /* International number */
+  GNT_ALPHANUMERIC=0xD0   /* Alphanumeric number */
+} GSM_NumberType;
+
+/* For folder table */
+typedef struct {
+  int smsnum;
+  u8 folder;
+  int location;
+//future use  GSM_SMSMessage *message;
+} GSM_SMS2Foldertable;
+
+/* This data type is used to hold the current SMS status. */
+typedef struct {
+  int UnRead;                           /* The number of unread messages */
+  int Number;                           /* The number of messages */
+  GSM_SMS2Foldertable foldertable[255]; /* for 6210/7110 */
+} GSM_SMSStatus;
+
+/* Define datatype for SMS Message Type */
+typedef enum {
+  GST_SMS,
+  GST_DR, /* Delivery Report */
+  GST_UN  /* Unknown */
+} GSM_SMSMessageType;
+
+#define GST_INBOX       0;    /* Mobile Terminated (MT) message - Inbox message  */
+#define GST_OUTBOX      1;    /* Mobile Originated (MO) message - Outbox message */
+#define GST_7110_INBOX  0x08; /* Inbox in 6210/7110 */
+#define GST_7110_OUTBOX 0x10; /* Outbox in 6210/7110 */
+
+/* Datatype for SMS status */
+typedef enum {
+  GSS_SENTREAD       = 0x01, /* Sent or read message */
+  GSS_NOTSENTREAD    = 0x03, /* Not sent or not read message */
+  GSS_UNKNOWN       = 0x05, /* RTH FIXME: ? */
+  GSS_TEMPLATE      = 0x07  /* Template ? */
+} GSM_SMSMessageStatus;
+
+/* SMS Messages sent as... */
+typedef enum {
+  GSMF_Text   = 0x00, /* Plain text message. */
+  GSMF_Fax    = 0x22, /* Fax message. */
+  GSMF_Voice  = 0x24, /* Voice mail message. */
+  GSMF_ERMES  = 0x25, /* ERMES message. */
+  GSMF_Paging = 0x26, /* Paging. */
+  GSMF_UCI    = 0x2d, /* Email message in 8110i. */
+  GSMF_Email  = 0x32, /* Email message. */
+  GSMF_X400   = 0x31  /* X.400 message. */
+} GSM_SMSMessageFormat;
+
+/* Validity of SMS Messages. */
+/* Ready values for TP-VP. Don't give them for function packing SMS validity
+   (creating TP-VP from validity value in minutes) */
+typedef enum {
+  GSMV_1_Hour   = 0x0b,
+  GSMV_6_Hours  = 0x47,
+  GSMV_24_Hours = 0xa7,
+  GSMV_72_Hours = 0xa9,
+  GSMV_1_Week   = 0xad,
+  GSMV_Max_Time = 0xff
+} GSM_SMSMessageValidity;
+
+/* 7 bit SMS Coding type */
+typedef enum {
+  GSM_Coding_Unicode = 0x01,
+  GSM_Coding_Default = 0x02,
+  GSM_Coding_8bit    = 0x03
+} GSM_Coding_Type;
+
+/* Define datatype for SMS Message Center */
+typedef struct {
+  int No;                                          /* Number of the SMSC in the phone memory. */
+  char Name[GSM_MAX_SMS_CENTER_NAME_LENGTH];       /* Name of the SMSC. */
+  GSM_SMSMessageFormat Format;                     /* SMS is sent as text/fax/paging/email. */
+  GSM_SMSMessageValidity Validity;                 /* Validity of SMS Message. */
+  char Number[GSM_MAX_SMS_CENTER_LENGTH];          /* Number of the SMSC. */
+  char DefaultRecipient[GSM_MAX_RECIPIENT_LENGTH]; /* Number of default recipient */
+} GSM_MessageCenter;
+
+/* Define datatype for Cell Broadcast message */
+typedef struct {
+  int Channel;                                      /* channel number */
+  char Message[GSM_MAX_CB_MESSAGE + 1];
+  int New;
+} GSM_CBMessage;
+
+/* types of User Data Header */
+typedef enum {
+  GSM_NoUDH,
+  GSM_ConcatenatedMessages,
+  GSM_OpLogo,
+  GSM_CallerIDLogo,
+  GSM_RingtoneUDH,
+  GSM_EnableVoice,
+  GSM_DisableVoice,
+  GSM_EnableEmail,
+  GSM_DisableEmail,
+  GSM_EnableFax,
+  GSM_DisableFax,
+  GSM_VoidSMS,
+  GSM_HangSMS,
+  GSM_BugSMS,
+  GSM_UnknownUDH, //Gnokii doesn't know this UDH
+  GSM_WAPBookmarkUDH,
+  GSM_WAPBookmarkUDHLong,
+  GSM_WAPSettingsUDH,
+  GSM_CalendarNoteUDH,
+  GSM_CalendarNoteUDH2,
+  GSM_PhonebookUDH,
+  GSM_ProfileUDH,
+} GSM_UDH;
+
+/* Define datatype for SMS messages, used for getting SMS messages from the
+   phones memory. */
+typedef struct {
+  GSM_Coding_Type Coding;
+  GSM_DateTime Time;                            /* Date of reception/response of messages. */
+  GSM_DateTime SMSCTime;                        /* Date of SMSC response if DeliveryReport messages. */
+  int Length;                                    /* Length of the SMS message. */
+  int Validity;                                  /* Validity Period of the SMS message. */
+  GSM_UDH UDHType;                               /* If UDH is present - type of UDH */
+  unsigned char UDH[GSM_MAX_USER_DATA_HEADER_LENGTH]; /* If UDH is present - content of UDH */
+  unsigned char MessageText[GSM_MAX_SMS_LENGTH + 1];  /* Room for null term. */
+  GSM_MessageCenter MessageCenter;               /* SMS Center. */
+  char Sender[GSM_MAX_SENDER_LENGTH + 1];        /* Sender of the SMS message. */
+  char Destination[GSM_MAX_DESTINATION_LENGTH+1];/* Destination of the message. */
+  int MessageNumber;                             /* Location in the memory, where SMS is saved */
+  GSM_MemoryType MemoryType;                     /* Type of memory message is stored in. */
+  GSM_SMSMessageType Type;                       /* Type of the SMS message */
+  GSM_SMSMessageStatus Status;                   /* Status of the SMS message */
+  int Class;                                     /* Class Message: 0, 1, 2, 3 or none; see GSM 03.38 */
+  bool Compression;                              /* Indicates whether SMS contains compressed data */
+  int Location;                                  /* Location in the memory, when save SMS */
+  bool ReplyViaSameSMSC;                         /* Indicates whether "Reply via same center" is set */
+  int folder;                                    /* Folder: 0-Inbox,1-Outbox, etc. */
+  bool SMSData;                                 /* if folder contains sender, SMSC number and sending date */
+  unsigned char Name[25+1];                      /* Name in Nokia 6210/7110, etc. Ignored in other */
+} GSM_SMSMessage;
+
+typedef struct {
+  int number;
+  GSM_SMSMessage SMS[6];
+} GSM_MultiSMSMessage;
+
+/* Maximal number of SMS folders */
+/* #define MAX_SMS_FOLDERS 10 */
+#define MAX_SMS_FOLDERS 24
+
+typedef struct {
+  char Name[15];     /* Name for SMS folder */
+  u8 locations[160]; /* locations of SMS messages in that folder (6210 specific) */
+  u8 number;         /* number of SMS messages in that folder*/
+} GSM_OneSMSFolder;
+
+typedef struct {
+  GSM_OneSMSFolder Folder[MAX_SMS_FOLDERS];
+  u8 FoldersID[MAX_SMS_FOLDERS]; // ID specific for this folder and phone.
+                                // Used in internal functions. Do not use it.
+  u8 number; //number of SMS folders
+} GSM_SMSFolders;
+
+/* Identifiers for Smart Messaging 3.0 multipart SMS */
+#define SM30_ISOTEXT      0 // ISO 8859-1 text
+#define SM30_UNICODETEXT  1
+#define SM30_OTA          2
+#define SM30_RINGTONE     3                     
+#define SM30_PROFILENAME  4
+#define SM30_SCREENSAVER  6
+
+/* TP-Message-Type-Indicator */
+/* See GSM 03.40 version 6.1.0 Release 1997 Section 9.2.3.1 */
+typedef enum {                 
+       SMS_Deliver = 0x00, /* when we save SMS in Inbox */
+       SMS_Deliver_Report, 
+       SMS_Status_Report,  /* Delivery Report received by phone */
+       SMS_Command,
+       SMS_Submit,         /* when we send SMS or save it in Outbox */
+       SMS_Submit_Report  
+} SMS_MessageType;
+
+/* Structure to hold UDH Header */
+typedef struct {
+  GSM_UDH UDHType;     /* Type */
+  int Length;          /* Length */
+  unsigned char *Text; /* Text */
+} GSM_UDHHeader;
+
+typedef struct {
+  unsigned char MessageText[GSM_MAX_SMS_LENGTH + 1];
+    /* TP-User-Data. See GSM 03.40 section 9.2.3.24. Room for null term. */
+
+  unsigned char Number[GSM_MAX_SENDER_LENGTH + 1];
+ /*In SMS-Deliver       TP-Originating-Address.See GSM 03.40 section 9.2.3.7 */
+ /*In SMS-Submit        TP-Destination-Address.See GSM 03.40 section 9.2.3.8 */
+ /*In SMS-Status-Report TP-Recipient-Address.  See GSM 03.40 section 9.2.3.14*/
+
+  unsigned char SMSCNumber[GSM_MAX_SMS_CENTER_LENGTH];
+    /* SMSC number */
+
+  unsigned char TPPID;
+    /* TP-Protocol-Identifier. See GSM 03.40 section 9.2.3.9 */
+
+  unsigned char TPDCS;
+    /* TP-Data-Coding-Scheme. See GSM 03.40 section 9.2.3.10 */
+
+  unsigned char DeliveryDateTime[7];
+ /* For SMS-Submit        TP-Validity-Period. See GSM 03.40 section 9.2.3.12 */
+ /* For SMS-Status-Report TP-Discharge Time.  See GSM 03.40 section 9.2.3.13 */
+
+  unsigned char SMSCDateTime[7];
+    /* TP-Service-Centre-Time-Stamp in SMS-Status-Report.
+       See GSM 03.40 section 9.2.3.11 */
+
+  unsigned char TPStatus;
+    /* TP-Status in SMS-Status-Report. See GSM 03.40 section 9.2.3.15 */
+
+  unsigned char TPUDL;
+    /* TP-User-Data-Length. See GSM 03.40 section 9.2.3.16 */
+
+  unsigned char TPVP;
+    /* TP-Validity Period in SMS-Submit. See GSM 03.40 section 9.2.3.12 */
+
+  unsigned char TPMR;
+    /* TP-Message Reference in SMS-Submit. See GSM 03.40 section 9.2.3.6 */
+
+  unsigned char firstbyte;
+    /* Byte contains in SMS-Deliver:
+       TP-Message-Type-Indicator     (2 bits) See GSM 03.40 section 9.2.3.1
+
+       TP-More-Messages-To-Send      (1 bit). See GSM 03.40 section 9.2.3.2
+
+       TP-Reply-Path                 (1 bit). See GSM 03.40 section 9.2.3.17
+       TP-User-Data-Header-Indicator (1 bit). See GSM 03.40 section 9.2.3.23
+       TP-Status-Report-Indicator    (1 bit). See GSM 03.40 section 9.2.3.4
+
+       Byte contains in SMS-Submit:
+
+       TP-Message-Type-Indicator     (2 bits) See GSM 03.40 section 9.2.3.1
+
+       TP-Reject-Duplicates          (1 bit). See GSM 03.40 section
+       TP-Validity-Period-Format     (2 bits).See GSM 03.40 section 9.2.3.3
+
+       TP-Reply-Path                 (1 bit). See GSM 03.40 section 9.2.3.17
+       TP-User-Data-Header-Indicator (1 bit). See GSM 03.40 section 9.2.3.23
+       TP-Status-Report-Request      (1 bit). See GSM 03.40 section 9.2.3.5 */
+} GSM_ETSISMSMessage;
+
+int   GSM_PackSemiOctetNumber  (u8 *Number, u8 *Output, bool semioctet);
+char *GSM_UnpackSemiOctetNumber(u8 *Number, bool semioctet);
+
+int GSM_UnpackEightBitsToSeven(int fillbits, int in_length, int out_length, unsigned char *input, unsigned char *output);
+int GSM_PackSevenBitsToEight  (int offset, unsigned char *input, unsigned char *output);
+
+GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length);
+GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI);
+
+GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req);
+
+GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI);
+
+GSM_Error GSM_DecodeETSISMSStatusReportData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI);
+
+void GSM_SetDefaultSMSData(GSM_SMSMessage *SMS);
+GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType);
+
+int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS,
+    unsigned char *MessageBuffer,int cur, GSM_UDH UDHType, GSM_Coding_Type Coding);
+void GSM_MakeMultiPartSMS2(GSM_MultiSMSMessage *SMS,
+    unsigned char *MessageBuffer,int MessageLength, GSM_UDH UDHType, GSM_Coding_Type Coding);
+
+#endif /* __gsm_sms_h */
diff --git a/include/misc.h b/include/misc.h
new file mode 100644 (file)
index 0000000..2a16e51
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Header file for miscellaneous defines, typedefs etc.
+
+*/
+
+#ifndef __misc_h
+#define __misc_h    
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef VC6
+  #include "config.h"
+
+  /* Use gsprintf instead of sprintf and sprintf */
+  #ifdef HAVE_SNPRINTF
+  # define gsprintf(a, b, c...) snprintf(a, b, c)
+  #else
+  # define gsprintf(a, b, c...) sprintf(a, c)
+  #endif
+
+#endif
+
+/* Some general defines. */
+
+#ifndef false
+  #define false (0)
+#endif
+
+#ifndef true
+  #define true (!false)
+#endif
+
+#ifndef bool    
+  #define bool int
+#endif
+
+/* This one is for NLS. */
+
+#ifdef USE_NLS
+
+  #ifndef VC6
+    #include <libintl.h>
+    #define _(x) gettext(x)
+  #else
+    #define _(x) (x)
+  #endif
+
+#else
+  #define _(x) (x)
+#endif /* USE_NLS */
+
+/* Definitions for u8, u16, u32 and u64, borrowed from
+   /usr/src/linux/include/asm-i38/types.h */
+
+#ifndef u8
+  typedef unsigned char u8;
+#endif
+
+#ifndef u16
+  typedef unsigned short u16;
+#endif
+
+#ifndef u32
+  typedef unsigned int u32;
+#endif
+
+#ifndef s32
+  typedef int s32;
+#endif
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+  #ifndef u64
+    typedef unsigned long long u64;
+  #endif
+
+  #ifndef s64
+    typedef signed long long s64;
+  #endif
+#endif 
+
+/* This one is for FreeBSD and similar systems without __ptr_t_ */
+/* FIXME: autoconf should take care of this. */
+
+#ifndef __ptr_t
+  typedef void * __ptr_t;
+#endif /* __ptr_t */
+
+
+/* Add here any timer operations which are not supported by libc5 */
+
+#ifndef HAVE_TIMEOPS
+#include <sys/time.h>
+
+#ifndef timersub
+#define timersub(a, b, result)                                                \
+  do {                                                                        \
+    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                             \
+    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                          \
+    if ((result)->tv_usec < 0) {                                              \
+      --(result)->tv_sec;                                                     \
+      (result)->tv_usec += 1000000;                                           \
+    }                                                                         \
+  } while (0)
+#endif
+
+#endif /* HAVE_TIMEOPS */
+
+#include <stdio.h>
+
+extern int GetLine(FILE *File, char *Line, int count);
+
+int mem_to_int(const char str[], int len);
+
+void hexdump(u16 MessageLength, u8 *MessageBuffer);
+void txhexdump(u16 MessageLength, u8 *MessageBuffer);
+
+#endif /* __misc_h */
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100644 (file)
index 0000000..6b3b5fc
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp"
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/packaging/Debian/README.debian b/packaging/Debian/README.debian
new file mode 100644 (file)
index 0000000..97e2238
--- /dev/null
@@ -0,0 +1,6 @@
+Gnokii for DEBIAN
+-------------------
+
+This package was debianized by Karel Zak <zakkr@zf.jcu.cz>
+
+
diff --git a/packaging/Debian/conffiles b/packaging/Debian/conffiles
new file mode 100644 (file)
index 0000000..6a3dcd4
--- /dev/null
@@ -0,0 +1 @@
+/etc/gnokiirc
diff --git a/packaging/Debian/control b/packaging/Debian/control
new file mode 100644 (file)
index 0000000..7414d1f
--- /dev/null
@@ -0,0 +1,11 @@
+Source: gnokii
+Section: comm
+Priority: optional
+Maintainer: Karel Zak <zakkr@zf.jcu.cz>
+Standards-Version: 2.4.0.0
+
+Package: gnokii
+Architecture: any
+Depends: ${shlibs:Depends}
+Description:  Gnokii is a Linux/Unix tool suite and (eventually) 
+ modem/fax driver for Nokia mobile phones, released under the GPL.
\ No newline at end of file
diff --git a/packaging/Debian/copyright b/packaging/Debian/copyright
new file mode 100644 (file)
index 0000000..5b582e7
--- /dev/null
@@ -0,0 +1,16 @@
+* Copyright (C) 1999-2000 Hugh Blemings & Pavel Janík ml.
+
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
diff --git a/packaging/Debian/docs b/packaging/Debian/docs
new file mode 100644 (file)
index 0000000..8290213
--- /dev/null
@@ -0,0 +1,20 @@
+Docs/CREDITS 
+Docs/README
+Docs/README-3810
+Docs/README-6110
+Docs/README-2110
+Docs/README-WIN32
+Docs/sample/gnokiirc
+Docs/sample/options
+Docs/sample/pap-secrets
+Docs/sample/ppp-gnokii
+Docs/sample/ppp-on
+Docs/DataCalls-QuickStart 
+Docs/gettext-howto 
+Docs/gnokii-ir-howto 
+Docs/packaging-howto
+Docs/gnokii.nol 
+Docs/FAQ
+COPYING 
+INSTALL
+TODO
diff --git a/packaging/Debian/menu b/packaging/Debian/menu
new file mode 100644 (file)
index 0000000..51ae09d
--- /dev/null
@@ -0,0 +1 @@
+?package(gnokii):needs=text section="Apps/Comm" title="XGnokii" command="/usr/bin/xgnokii"
diff --git a/packaging/Debian/postinst b/packaging/Debian/postinst
new file mode 100644 (file)
index 0000000..785ba4e
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+
+/usr/sbin/groupdel gnokii
diff --git a/packaging/Debian/preinst b/packaging/Debian/preinst
new file mode 100644 (file)
index 0000000..593bbc7
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+
+/usr/sbin/groupadd gnokii 
+
diff --git a/packaging/Debian/rules b/packaging/Debian/rules
new file mode 100755 (executable)
index 0000000..b48eee8
--- /dev/null
@@ -0,0 +1,64 @@
+#!/usr/bin/make -f
+
+#export DH_VERBOSE=1
+
+build: build-stamp
+build-stamp:
+       dh_testdir
+       ./configure --prefix=/usr --with-x
+       make
+
+clean:
+       dh_testdir
+       dh_testroot
+       make clean
+       dh_clean
+
+# Build architecture-independent files here.
+binary-indep:  build
+
+# There are no architecture-independent files to be uploaded
+# generated by this package.  If there were any they would be
+# made here.
+
+binary-arch:   build
+#      dh_testversion
+       dh_testdir
+       dh_testroot
+       dh_installdirs
+       make install prefix=`pwd`/debian/tmp/usr
+       mkdir -p `pwd`/debian/tmp/etc/
+       sed 's#/usr/local/sbin/#/usr/sbin/#' < Docs/sample/gnokiirc > `pwd`/debian/tmp/etc/gnokiirc
+#      dh_installdebconf       
+#      dh_installexamples
+       dh_installdocs
+       dh_installmenu
+#      dh_installemacsen
+#      dh_installpam
+#      dh_installinit
+#      dh_installcron
+#      dh_installmanpages
+       dh_installinfo
+#      dh_undocumented
+       dh_installchangelogs
+       dh_link
+       dh_strip
+       dh_compress
+       dh_fixperms
+       # You may want to make some executables suid here.
+       dh_suidregister
+#      dh_makeshlibs
+       dh_installdeb
+#      dh_perl
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+
+source diff:
+       @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
+
diff --git a/packaging/RedHat/gnokii.spec.in b/packaging/RedHat/gnokii.spec.in
new file mode 100644 (file)
index 0000000..2d80a62
--- /dev/null
@@ -0,0 +1,136 @@
+%define name @PACKAGE@
+%define version @VERSION@
+%define release 1
+
+Summary: Linux/Unix tool suite for Nokia mobile phones
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Copyright: GPL
+Packager: Pavel Janik ml. <Pavel.Janik@linux.cz>, Jan Derfinak <ja@mail.upjs.sk>
+Group: Applications/Communications
+Source: ftp://multivac.fatburen.org/pub/gnokii/%{name}-%{version}.tar.gz
+BuildRoot: /var/tmp/%{name}-%{version}-root
+
+%description
+Gnokii is a Linux/Unix tool suite and (eventually) modem/fax driver for
+Nokia's mobile phones, released under the GPL.
+
+%package xgnokii
+Summary: Graphical Linux/Unix tool suite for Nokia mobile phones.
+Group: X11/Applications
+%description xgnokii
+Xgnokii is graphical Linux/Unix tool suite for Nokia's mobile phones. It
+allows you to edit your contacts book, send/read SMS's from/in
+computer and more other features.
+
+%prep
+
+%setup -q
+
+%build
+./configure --prefix=/usr --with-x --enable-nls #--enable-debug --enable-rlpdebug
+make
+
+%install
+rm -rf ${RPM_BUILD_ROOT}
+
+make prefix=${RPM_BUILD_ROOT}/usr install
+
+mkdir -p ${RPM_BUILD_ROOT}/etc/
+
+sed 's#/usr/local/sbin/#/usr/sbin/#' <Docs/sample/gnokiirc >${RPM_BUILD_ROOT}/etc/gnokiirc
+
+%pre
+/usr/sbin/groupadd -r -f gnokii >/dev/null 2>&1
+
+%postun
+/usr/sbin/groupdel gnokii >/dev/null 2>&1
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files
+%defattr(-,root,root)
+%doc Docs/CREDITS Docs/DataCalls-QuickStart Docs/FAQ Docs/README
+%doc Docs/README-3810 Docs/README-6110 Docs/README-2110 Docs/README-WIN32
+%doc Docs/gettext-howto Docs/gnokii.nol Docs/gnokii-ir-howto Docs/packaging-howto
+%doc Docs/sample/gnokiirc Docs/sample/options Docs/sample/pap-secrets
+%doc Docs/sample/ppp-gnokii Docs/sample/ppp-on
+%attr(0750, root, gnokii) /usr/bin/gnokii
+%attr(0750, root, gnokii) /usr/sbin/gnokiid
+%attr(4750, root, gnokii) /usr/sbin/mgnokiidev
+%config /etc/gnokiirc
+
+%files xgnokii
+%defattr(-,root,root)
+/usr/bin/xgnokii
+/usr/bin/xlogos
+/usr/bin/todologo
+/usr/lib/xgnokii
+
+%changelog
+
+* Thu Jan 11 2001 Pawel Kot <pkot@linuxnews.pl>
+- misc updates
+
+* Fri Oct 27 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- todologo added to the package
+
+* Mon May 15 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- proper access rights for gnokiid, gnokii and mgnokiidev
+
+* Sat May 13 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- new doc files added
+
+* Tue Mar 21 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- permission on /usr/sbin fixed
+- correct /etc/gnokiirc file
+
+* Mon Mar 20 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- mkdir of directories in install removed
+- xgnokii package should contain lib/xgnokii directory
+
+* Mon Mar 20 2000 Jan Derfinak <ja@mail.upjs.sk>
+- split package into gnokii and xgnokii
+- added configure
+- correct xgnokii installation
+- installation with make install
+- fixing paths
+
+* Thu Aug  5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- documentation files changed
+
+* Thu Aug  5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- xkeyb and xlogos added to RPM package
+
+* Sat Jul 24 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- stripping of binaries
+
+* Thu Jul 22 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- gnokii.nol added - nice example for logo uploading
+
+* Sun Jul 18 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- mgnokiidev added to RPM package
+- config file in /etc (it is not used now...)
+
+* Sat Jul 10 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- use of ~/.gnokiirc so not magic model stuff
+- new doc files
+
+* Mon Jun 28 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- Nokia auth. protocol is there now
+- xgnokii and gnokiid added to RPM
+
+* Sun May  9 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- included 6110-patch updated to my prepatches
+
+* Thu May  6 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- TODO-6110 file added to documentation files
+
+* Sun Mar 28 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- upgraded to gnokii-0.2.4
+- 6110 version of gnokii added
+
+* Fri Mar  5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- the first SPEC file for gnokii
diff --git a/packaging/Slackware/SlackBuild.in b/packaging/Slackware/SlackBuild.in
new file mode 100644 (file)
index 0000000..d49b081
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+#
+# Script for building GNOKII package
+# Written by Pawe³ Kot <pkot@linuxnews.pl>
+#
+
+ARCH=@ARCH@
+PN=@PACKAGE@
+PV=@VERSION@
+
+DOCS="COPYING ChangeLog VERSION Docs/CREDITS Docs/DataCalls-QuickStart Docs/README*"
+CONF="Docs/sample/gnokiirc"
+
+CWD=`pwd`
+
+# There will be the sources placed
+if [ "$TMP" = "" ]; then
+       TMP=/tmp
+fi
+if [ ! -d $TMP ]; then
+       mkdir -p $TMP
+fi
+
+# The package will be built there
+PKG=$TMP/package-$PN-$PV
+if [ ! -d $PKG ]; then
+       mkdir -p $PKG
+fi
+
+# Untar the sources
+cd $TMP
+tar xzvf $CWD/$PN-$PV.tar.gz
+cd $PN-$PV
+
+# Configure and make package
+./configure --prefix=/usr --with-x --enable-nls $ARCH-slackware-linux || exit 1
+make || exit 1
+make prefix=$PKG/usr install || exit 1
+
+# Copy the docs
+mkdir -p $PKG/usr/doc/$PN-$PV
+cp -a $DOCS $PKG/usr/doc/$PN-$PV
+chmod 644 $PKG/usr/doc/$PN-$PV
+
+# and the configuration
+mkdir -p $PKG/etc
+sed "s|/usr/local/sbin|/usr/sbin|" < $CONF > $PKG/etc/gnokiirc
+
+# Now, add gnokii group, set the permissions
+GROUPADD=`which groupadd`
+cd $PKG
+mkdir install
+cat > install/doinst.sh <<EOF
+$GROUPADD gnokii >/dev/null 2>&1
+chown root.gnokii /usr/bin/gnokii
+chmod 750 /usr/bin/gnokii
+chown root.gnokii /usr/sbin/gnokiid
+chmod 750 /usr/sbin/gnokiid
+chown root.gnokii /usr/sbin/mgnokiidev
+chmod 4750 /usr/sbin/mgnokiidev
+EOF
+
+# and build the package answering "yes" twice
+echo "y
+y" | makepkg $TMP/$PN.tgz
+
+# Cleanup
+rm -rf $TMP/$PN-$PV
+rm -rf $PKG
diff --git a/packaging/Slackware/disk b/packaging/Slackware/disk
new file mode 100644 (file)
index 0000000..b531914
--- /dev/null
@@ -0,0 +1,6 @@
+gnokii:   Linux/Unix tool suite for Nokia mobile phones
+gnokii:
+gnokii:   Gnokii is a Linux/Unix tool suite and (eventually) modem/fax
+gnokii:   driver for Nokia's mobile phones, released under the GPL.
+gnokii:
+gnokii:
diff --git a/packaging/make_dist b/packaging/make_dist
new file mode 100755 (executable)
index 0000000..614d028
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+#
+# This script is used for preparing the tarballs.
+# Do not use it, please.
+#
+
+#
+# DeMorgan rules applied :-) I like math...
+#
+
+if [ "x`whoami`" != xpavel -a "x`whoami`" != xhugh -a "x`whoami`" != xpkot ]
+then
+   echo "No way to test this :-)"
+fi
+
+VERSION=`cat ../VERSION`
+
+rm -rf /tmp/gnokii-${VERSION}
+cp -r ../../gnokii /tmp/gnokii-${VERSION}
+
+# Some files and directories in CVS are useless
+rm -rf /tmp/gnokii-${VERSION}/xkeyb
+
+(
+   cd /tmp/gnokii-${VERSION}
+   autoconf
+   ./configure
+   cp packaging/RedHat/gnokii.spec .
+   make distclean
+   chmod 755 mkinstalldirs
+   cd ..
+   tar cvfz /tmp/gnokii-${VERSION}.tar.gz gnokii-${VERSION} --exclude CVS
+)
+
+rm -rf /tmp/gnokii-${VERSION}
+
+echo "Distribution generated in /tmp/gnokii-${VERSION}.tar.gz"
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..94a1088
--- /dev/null
@@ -0,0 +1,216 @@
+#
+#
+#  Makefile for gnokii I18n, 
+#             based on the Makefile.in.in that comes with gettext
+#
+#  Erwin Dieterich, 20. 1. 1998 Erwin.Dieterich.ED@Bayer-AG.de
+#
+#
+#
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = @SHELL@
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = @LOCALEDIR@
+gnulocaledir = @LOCALEDIR@
+subdir = po
+
+INSTALL = @INSTALL@
+#INSTALL_DATA = @INSTALL_DATA@
+INSTALL_DATA = @INSTALL@ -m 644
+
+CC = @CC@
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = @MSGMERGE@
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. 
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg 
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+all: all-@USE_NLS@
+
+all-yes: $(PACKAGE).pot $(CATALOGS)
+all-no:
+       @echo "No support for NLS requested"
+
+$(PACKAGE).pot: $(POTFILES)
+       if test -n "$(XGETTEXT)"; then \
+               $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(srcdir)/.. \
+                      --keyword=_  --files-from=$(srcdir)/POTFILES.in; \
+               mv $(PACKAGE).po $(PACKAGE).pot; \
+       else \
+               echo "xgettext not available: $(PACKAGE).pot not updated" 1>&2; \
+       fi
+
+makelib: all-@USE_NLS@
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       ${SHELL} $(top_srcdir)/mkinstalldirs $(datadir); \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         case "$$cat" in \
+           *.gmo) destdir=$(gnulocaledir);; \
+           *)     destdir=$(localedir);; \
+         esac; \
+         lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+         dir=$$destdir/$$lang/LC_MESSAGES; \
+         ${SHELL} $(top_srcdir)/mkinstalldirs $$dir; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $(srcdir)/$$cat as" \
+                "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         fi; \
+         if test -r $$cat.m; then \
+           $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+           echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+         else \
+           if test -r $(srcdir)/$$cat.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$cat.m \
+               $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+             echo "installing $(srcdir)/$$cat as" \
+                  "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+       done
+       rm -f $(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox *.old.po *.gmo
+       rm -fr *.o *~
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo *.gmo *.msg *.cat.m $(PACKAGE).pot
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(PACKAGE).pot
+       PATH=`pwd`/../src:$$PATH; \
+       cd $(srcdir); \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+         mv $$lang.po $$lang.old.po; \
+         echo "$$lang:"; \
+         if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+           rm -f $$lang.old.po; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$lang.po; \
+           mv $$lang.old.po $$lang.po; \
+         fi; \
+       done
+
+POTFILES: POTFILES.in
+       ( if test 'x$(srcdir)' != 'x.'; then \
+           posrcprefix='$(top_srcdir)/'; \
+         else \
+           posrcprefix="../"; \
+         fi; \
+         sed -e '/^#/d' -e '/^[        ]*$$/d' \
+             -e "s@.*@ $$posrcprefix& \\\\@" \
+             -e '$$s/\(.*\) \\/\1/' < $(srcdir)/POTFILES.in > POTFILES )
+
+#Makefile: Makefile.in.in ../config.status POTFILES
+#      cd .. \
+#        && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+#             $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..7e766df
--- /dev/null
@@ -0,0 +1,22 @@
+common/protocol/fbus.c
+common/protocol/mbus.c
+common/newmodules/n7110.c
+common/newmodules/n6110.c
+common/files/cfgreader.c
+common/gsm-ringtones.c
+common/gsm-bitmaps.c
+common/data/at-emulator.c
+common/data/rlp-common.c
+common/data/virtmodem.c
+gnokii/gnokii.c
+gnokiid/gnokiid.c
+xgnokii/xgnokii.c
+xgnokii/xgnokii_cfg.c
+xgnokii/xgnokii_common.c
+xgnokii/xgnokii_contacts.c
+xgnokii/xgnokii_dtmf.c
+xgnokii/xgnokii_netmon.c
+xgnokii/xgnokii_sms.c
+xgnokii/xgnokii_speed.c
+xgnokii/xgnokii_xkeyb.c
+xgnokii/xgnokii_logos.c
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..5bf2813
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,2554 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. SMS centrum má jméno %s\n"
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Varování: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid "   Alarm is %s\n"
+msgstr "   Budík je %s\n"
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Èas varování: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Budík: %02d:%02d\n"
+
+#: fbus-6110.c:2993
+msgid "   Battery Level: %d\n"
+msgstr "   Kapacita baterie: %d\n"
+
+#: gnokii.c:1585
+msgid "   Calendar note deleted.\n"
+msgstr "   Poznámka v kalendáøi byla smazána.\n"
+
+#: fbus-6110.c:3217
+msgid "   CellID: %s\n"
+msgstr "   CellID: %s\n"
+
+#: fbus-6110.c:3334
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Datum: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Datum: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid "   Date: %s\n"
+msgstr "   Datum: %s\n"
+
+#: fbus-6110.c:3714
+msgid "   Date: %s GMT"
+msgstr "   Datum: %s GMT"
+
+#: fbus-6110.c:4016
+msgid "   Empty SMS location.\n"
+msgstr "   Pamì»ové místo pro SMS je prázdné.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Pøesný význam doposud není znám :-(\n"
+
+#: fbus-6110.c:4142
+msgid "   Firmware: %s\n"
+msgstr "   Firmware: %s\n"
+
+#: fbus-6110.c:2764
+msgid "   Free: %d\n"
+msgstr "   Volné místo: %d\n"
+
+#: fbus-6110.c:4140
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: fbus-3810.c:2274
+msgid "   IMEI:     %s\n"
+msgstr "   IMEI:     %s\n"
+
+#: fbus-6110.c:4134
+msgid "   IMEI: %s\n"
+msgstr "   IMEI: %s\n"
+
+#: fbus-6110.c:4006
+msgid "   Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid "   Invalid memory type!\n"
+msgstr "   ©patný typ pamìti!\n"
+
+#: fbus-6110.c:3583
+msgid "   Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid "   LAC: %s\n"
+msgstr "   LAC: %s\n"
+
+#: fbus-6110.c:2875
+msgid "   Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Magické bajty: %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2762
+msgid "   Memory Type: %s\n"
+msgstr "   Typ pamìti: %s\n"
+
+#: fbus-6110.c:2876
+msgid "   MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid "   Mode: "
+msgstr "   Mód: "
+
+#: fbus-3810.c:2276
+msgid "   Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid "   Model: %s\n"
+msgstr "   Model: %s\n"
+
+#: fbus-3810.c:2180
+msgid "   Msg Length %d, Msg number %d,  Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr "   Délka zprávy %d, Èíslo zprávy %d,  Neznámé bajty: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid "   Name: "
+msgstr "   Jméno: "
+
+#: fbus-6110.c:3219
+msgid "   Network code: %s\n"
+msgstr "   Kód sítì: %s\n"
+
+#: fbus-6110.c:3220
+msgid "   Network name: %s (%s)\n"
+msgstr "   Jméno sítì: %s (%s)\n"
+
+#: fbus-6110.c:3235
+msgid "   Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid "   Number: "
+msgstr "   Èíslo: "
+
+#: fbus-6110.c:2877
+msgid "   Number: %d\n"
+msgstr "   Èíslo: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid "   Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid "   Power source: "
+msgstr "   Zdroj napájení: "
+
+#: fbus-6110.c:4138
+msgid "   Production Code: %s\n"
+msgstr "   Výrobní èíslo: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid "   Remote number: %s\n"
+msgstr "   Èíslo volajícího: %s\n"
+
+#: fbus-3810.c:2278
+msgid "   Revision: %s\n"
+msgstr "   Revize: %s\n"
+
+#: fbus-6110.c:2548
+msgid "   SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid "   SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid "   SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid "   SMS center number: %s\n"
+msgstr "   Èíslo SMS centra: %s\n"
+
+#: fbus-6110.c:2513
+msgid "   SMS: "
+msgstr "   Text zprávy: "
+
+#: fbus-6110.c:3729
+msgid "   SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Poøadové èíslo hovoru: %d\n"
+
+#: fbus-6110.c:2994
+msgid "   Signal strength: %d\n"
+msgstr "   Úroveò signálu: %d\n"
+
+#: fbus-6110.c:3223
+msgid "   Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid "   Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid "   The number of messages: %d\n"
+msgstr "   Poèet zpráv: %d\n"
+
+#: fbus-6110.c:2622
+msgid "   The request for SMS Center failed.\n"
+msgstr "   Po¾adavek na SMS centrum selhal.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Èas: %02d:%02d:%02d\n"
+
+#: gnokii.c:1476
+msgid "   Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid "   Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid "   Unknown error!\n"
+msgstr "   Neznámá chyba!\n"
+
+#: fbus-6110.c:4041
+msgid "   Unread messages: %d\n"
+msgstr "   Poèet nepøeètených zpráv: %d\n"
+
+#: fbus-6110.c:2763
+msgid "   Used: %d\n"
+msgstr "   Pou¾ito: %d\n"
+
+#: gnokii.c:86
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --sendoplogoviasms destionation logofile [network code]\n"
+"          gnokii --setdatetime [YYYY MM DD HH MM]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+"          gnokii --reset [soft|hard]\n"
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken from\n"
+"                            phone memory from address [message_center_index].\n"
+"                            If this argument is ommited SMSC number is taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --sendoplogoviasms send the logofile to destination as operator\n"
+"                             logo\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid "   usage: gnokiid {--help|--version}"
+msgstr "   pou¾ití: gnokiid {--help|--version}"
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "sí»ový adaptér"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "sí»ový adaptér\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr "Budík: %s\n"
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Kapacita baterie: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr "CAR je %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr ""
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr "CTS je %s.\n"
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr ""
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr ""
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr "DTR je %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr ""
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr ""
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Zapínám monitorovací re¾im...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr ""
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr ""
+
+#: gnokii.c:2150
+msgid "IMEI:     %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr ""
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr ""
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Inicializuji GSM rozhraní...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Opou¹tím monitorovací re¾im...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr ""
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr ""
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr ""
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr ""
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr ""
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr ""
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr ""
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr ""
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr ""
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr ""
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr ""
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr ""
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr ""
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: pou¾ito: %d, volné %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Zdroj napájení: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Úroveò signálu: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr "RTS je %s.\n"
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr "Revize: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: pou¾ito %d, volné %d\n"
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS zprávy: nepøeètené %d, celkem %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr ""
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr ""
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr "Stav sériového portu: \n"
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Navazuji FBUS komunikaci...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr ""
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr ""
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr ""
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Zápis selhal!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr "baterie"
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr "baterie\n"
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr "shozen"
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "znovu startuji.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr "nastaven"
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid "Enter your PIN: "
+# msgstr "Zadejte vá¹ PIN: "
+# 
+# msgid "   %d. SMS Center number is %s\n"
+# msgstr "   %d SMS centrum má èíslo %s\n"
+# 
+# msgid "   Text: "
+# msgstr "   Text: "
+# 
+# msgid "   usage: gnokii {--help|--monitor|--version}"
+# msgstr "   pou¾ití: gnokii {--help|--monitor|--version}"
+# 
+# msgid ""
+# "   Code Error\n"
+# "   You're not my big owner :-)\n"
+# msgstr ""
+# "   PIN nebyl akceptován\n"
+# "   Nejsi mùj vellký majitel :-)\n"
+# 
+# msgid "   Code Accepted\n"
+# msgstr "   PIN byl akceptován\n"
+# 
+# msgid "   Keyboard is %s\n"
+# msgstr "   Klávesnice je %s\n"
+# 
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..b624964
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,3185 @@
+# This is the German locale definition for Gnokii.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Daniel Egger <Daniel.Egger@suse.de>, 1999, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-05-08 21:27+0200\n"
+"PO-Revision-Date: 2000-05-08 18:25:30+0100\n"
+"Last-Translator: Daniel Egger <Daniel.Egger@suse.de>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:525 common/fbus-6110.c:2037
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Sende SMS an %s via SMS-Center %s\n"
+
+#: common/fbus-3810.c:629
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "SMS Sendeversuch fehlgeschlagen, probiere es nochmal (%d von %d)\n"
+
+#: common/fbus-3810.c:1161
+msgid "Couldn't open FB38 device: "
+msgstr "Konnte FB38 Gerät nicht öffnen: "
+
+#: common/fbus-3810.c:1253
+msgid "restarting.\n"
+msgstr "starte neu.\n"
+
+#: common/fbus-3810.c:1309
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT fehlgeschlagen %02x"
+
+#: common/fbus-3810.c:1316 common/mbus-6160.c:689
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "Cs-Fehler %02x != %02x"
+
+#: common/fbus-3810.c:1430
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registrierungs-Antwort 0x%02x\n"
+
+#: common/fbus-3810.c:1446
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 Registrierungs-Antwort 0x%02x\n"
+
+#: common/fbus-3810.c:1447
+msgid "SIM access: %s.\n"
+msgstr "SIM Zugriff: %s\n"
+
+#: common/fbus-3810.c:1523
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS an 0x%02x gespeichert\n"
+
+#: common/fbus-3810.c:1533
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "SMS speichern fehlgeschlagen (Fehler=%d)\n"
+
+#: common/fbus-3810.c:1654
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN wurde (möglicherweise) eingegeben.\n"
+
+#: common/fbus-3810.c:1663
+msgid "Phone powering off..."
+msgstr "Mobilphone schaltet sich ab..."
+
+#: common/fbus-3810.c:1692
+msgid "Standard Ack write failed!"
+msgstr "Senden der Standardbestätigung schlug fehl!"
+
+#: common/fbus-3810.c:1718
+msgid "Unknown: "
+msgstr "Unbekannt: "
+
+#: common/fbus-3810.c:1720
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Nachrichtentyp: %02x"
+
+#: common/fbus-3810.c:1721
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Nachrichtenlänge: %02x"
+
+#: common/fbus-3810.c:1722
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Sequenznummer: %02x"
+
+#: common/fbus-3810.c:1723
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Prüfsumme: %02x \n"
+"   "
+
+#: common/fbus-3810.c:1815 common/fbus-3810.c:1936
+msgid "Set Mem Loc Write failed!"
+msgstr "Schreiben der Speicherzelle schlug fehl!"
+
+#: common/fbus-3810.c:1860
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - schreiben:"
+
+#: common/fbus-3810.c:1875
+msgid "0x4a Write failed!"
+msgstr "0x4a Schreiben erfolglos!"
+
+#: common/fbus-3810.c:1890
+msgid "Explore Write failed!"
+msgstr "Schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:1900
+msgid "0x3f Write failed!"
+msgstr "0x3f Schreiben erfolglos!"
+
+#: common/fbus-3810.c:1960
+msgid "Request Mem Loc Write failed!"
+msgstr "Anforderung zum Schreiben einer Speicherzelle fehlgeschlagen!"
+
+#: common/fbus-3810.c:1973
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "Anforderung IMEI/Revision/Modell schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:2016
+msgid "Send SMS header failed!"
+msgstr "Senden des SMS-Headers erfolglos!"
+
+#: common/fbus-3810.c:2075
+msgid "Store SMS header failed!"
+msgstr "Speichern des SMS-Headers erfolglos!"
+
+#: common/fbus-3810.c:2100
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Senden des SMS-Blocks %d erfolglos!"
+
+#: common/fbus-3810.c:2123
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "Anforderung zum Schreiben einer SMS Speicherzelle fehlgeschlagen!"
+
+#: common/fbus-3810.c:2146
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Löschen von SMS fehlgeschlagen!"
+
+#: common/fbus-3810.c:2165
+msgid "0x15 Write failed!"
+msgstr "0x15 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2182 common/mbus-6160.c:759
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - Nachricht zu lang!\n"
+
+#: common/fbus-3810.c:2208 common/mbus-6160.c:788
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage  - schreiben:"
+
+#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368
+#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530
+#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688
+msgid "Write failed!"
+msgstr "Schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:2235
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Ankommender Anruf - Art: %s. %02x, Nummer %s.\n"
+
+#: common/fbus-3810.c:2262
+msgid "0x27 Write failed!"
+msgstr "0x27 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2310
+msgid "0x4b Write failed!"
+msgstr "0x4b Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2329
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Status: %s. Batterie %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2340
+msgid "0x10 Write failed!"
+msgstr "0x10 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2344
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Anruf von Telefon beendet (0x10 Nachricht).\n"
+
+#: common/fbus-3810.c:2358
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Anruf vom gegnerischen Teilnehmer (oder vom Netz) beendet.\n"
+
+#: common/fbus-3810.c:2372
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Anruf vom Telefon beendet (0x12 Nachricht).\n"
+
+#: common/fbus-3810.c:2386
+msgid "Incoming call answered from phone.\n"
+msgstr "Ankommender Anruf vom Telefon beantwortet.\n"
+
+#: common/fbus-3810.c:2400
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s Anruf aufgebaut Abgehender Statusbytes %02x %02x.\n"
+
+#: common/fbus-3810.c:2417
+msgid "0x2c Write failed!"
+msgstr "0x2c Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2504
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Zeitzone:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2571
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Ankommende SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Absender: %s(Typ %02x) "
+"SMS-Center: %s\n"
+
+#: common/fbus-3810.c:2573
+msgid ""
+"   Msg Length %d, Msg memory %d Msg number %d,  PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+"   Nachrichtenlänge %d, Nachrichtenspeicher %d Nachrichtennummer %d, "
+"PID: %02x DCS: %02x Ünbekannt: %02x\n"
+
+#: common/fbus-3810.c:2666
+msgid "Mobile phone identification received:\n"
+msgstr "Identifikation des Telefons erhalten:\n"
+
+#: common/fbus-3810.c:2667
+#, c-format
+msgid "   IMEI:     %s\n"
+msgstr "   IMEI:     %s\n"
+
+#: common/fbus-3810.c:2669
+#, c-format
+msgid "   Model:    %s\n"
+msgstr "   Model:    %s\n"
+
+#: common/fbus-3810.c:2671
+#, c-format
+msgid "   Revision: %s\n"
+msgstr "   Revision: %s\n"
+
+#: common/fbus-3810.c:2739
+msgid "SMS Message Center Data:\n"
+msgstr "SMS-Center Daten:\n"
+
+#: common/fbus-3810.c:2740
+msgid "Selected memory: 0x%02x\n"
+msgstr "Ausgewählter Speicher 0x%02x\n"
+
+#: common/fbus-3810.c:2741
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Nachrichten im Telefon: 0x%02x Ungelesen: 0x%02x\n"
+
+#: common/fbus-3810.c:2743
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Nachrichten auf SIM: 0x%02x Ungelesen: 0x%02x\n"
+
+#: common/fbus-3810.c:2745
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Antwort über eigenes Center: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2747
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Transportnachrichten: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2749
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Nachrichten geschickt als: 0x%02x\n"
+
+#: common/fbus-3810.c:2750
+msgid "Message validity: 0x%02x\n"
+msgstr "Nachrichtengültigkeit: 0x%02x\n"
+
+#: common/fbus-3810.c:2751
+msgid "Unknown: 0x%02x\n"
+msgstr "Unbekannt: 0x%02x\n"
+
+#: common/fbus-3810.c:2754
+msgid "UnknownNumber field empty."
+msgstr "Unbekanntes leeres Nummernfeld."
+
+#: common/fbus-3810.c:2756
+msgid "UnknownNumber: "
+msgstr "Unbekannte Zahl: "
+
+#: common/fbus-3810.c:2763
+msgid "Number field empty."
+msgstr "Nummernfeld leer."
+
+#: common/fbus-3810.c:2766
+msgid "Number: "
+msgstr "Nummer: "
+
+#: common/fbus-6110-ringtones.c:242
+msgid "File can not be opened!\n"
+msgstr "Datei kann nicht geöffnet werden!\n"
+
+#: common/fbus-6110.c:770
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: common/fbus-6110.c:802
+msgid "Couldn't open FB61 infrared device"
+msgstr "Konnte FB61 Infrarotgerät nicht öffnen"
+
+#: common/fbus-6110.c:870
+msgid "Starting IR mode...!\n"
+msgstr "Starte Infratotmodus...!\n"
+
+#: common/fbus-6110.c:2325
+msgid "Serial flags dump:\n"
+msgstr "Ausgabe der seriellen Zustände:\n"
+
+#: common/fbus-6110.c:2326 common/mbus-640.c:893
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR ist %s.\n"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "up"
+msgstr "aktiv"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "down"
+msgstr "inaktiv"
+
+#: common/fbus-6110.c:2327 common/mbus-640.c:894
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS ist %s.\n"
+
+#: common/fbus-6110.c:2328
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR ist %s.\n"
+
+#: common/fbus-6110.c:2329
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS ist %s.\n"
+
+#: common/fbus-6110.c:2364
+msgid "Setting FBUS communication...\n"
+msgstr "Starte FBUS Verbindung...\n"
+
+#: common/fbus-6110.c:2395
+msgid "Couldn't open FB61 device"
+msgstr "Konnte FB61 Gerät nicht öffnen"
+
+#: common/fbus-6110.c:2521
+msgid "Message: Call message, type 0x03:"
+msgstr "Nachricht: Anrufnachricht, Typ 0x03:"
+
+#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554
+#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620
+#, c-format
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Reihenfolge des Anrufs: %d\n"
+
+#: common/fbus-6110.c:2523 common/fbus-6110.c:2621
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Exakte Bedeutung ist noch unklar :-(\n"
+
+#: common/fbus-6110.c:2536
+msgid "Message: Remote end hang up.\n"
+msgstr "Nachricht: Gegner hat aufgelegt.\n"
+
+#: common/fbus-6110.c:2549
+msgid "Message: Incoming call alert:\n"
+msgstr "Nachricht: Ankommender Anruf:\n"
+
+#: common/fbus-6110.c:2555 common/fbus-6110.c:2835
+msgid "   Number: "
+msgstr "   Nummer: "
+
+#: common/fbus-6110.c:2563 common/fbus-6110.c:2819
+msgid "   Name: "
+msgstr "   Name: "
+
+#: common/fbus-6110.c:2584
+msgid "Message: Call answered.\n"
+msgstr "Nachricht: Anruf angenommen.\n"
+
+#: common/fbus-6110.c:2595
+msgid "Message: Call ended by your phone.\n"
+msgstr "Nachricht: Anruf aufgelegt von Ihnen.\n"
+
+#: common/fbus-6110.c:2619
+msgid "Message: Call message, type 0x0a:"
+msgstr "Nachricht: Anrufnachricht, Typ 0x0a:"
+
+#: common/fbus-6110.c:2631
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x01\n"
+
+#: common/fbus-6110.c:2649
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Nachricht: SMS Nachricht korrekt versendet.\n"
+
+#: common/fbus-6110.c:2660
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Nachricht: SMS Nachricht senden fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:2669
+msgid "Message: SMS Message Received\n"
+msgstr "Nachricht: SMS Nachricht erhalten\n"
+
+#: common/fbus-6110.c:2670 common/fbus-6110.c:3997
+#, c-format
+msgid "   SMS center number: %s\n"
+msgstr "   SMS Zentralennummer: %s\n"
+
+#: common/fbus-6110.c:2674 common/fbus-6110.c:3998
+#, c-format
+msgid "   Remote number: %s\n"
+msgstr "   Gegnernummer: %s\n"
+
+#: common/fbus-6110.c:2675
+#, c-format
+msgid "   Date: %s\n"
+msgstr "   Datum: %s\n"
+
+#: common/fbus-6110.c:2676
+msgid "   SMS: "
+msgstr "   SMS: "
+
+#: common/fbus-6110.c:2691
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Nachricht: SMS Center richtig gesetzt.\n"
+
+#: common/fbus-6110.c:2707
+msgid "Message: SMS Center received:\n"
+msgstr "Nachricht: SMS Center erhalten:\n"
+
+#: common/fbus-6110.c:2708
+#, c-format
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. Die SMS Zentrale heißt %s\n"
+
+#: common/fbus-6110.c:2709
+#, c-format
+msgid "   SMS Center number is %s\n"
+msgstr "   SMS Center Nummer ist %s\n"
+
+#: common/fbus-6110.c:2711
+msgid "   SMS Center message format is "
+msgstr "   SMS Center Nachrichtenformat ist "
+
+#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604
+#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335
+msgid "Text"
+msgstr "Text"
+
+#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608
+#: xgnokii/xgnokii.c:1349
+msgid "Paging"
+msgstr "Pagerruf"
+
+#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612
+#: xgnokii/xgnokii.c:1342
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228
+#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: common/fbus-6110.c:2737
+msgid "   SMS Center message validity is "
+msgstr "   SMS Center Nachrichtengültigkeit ist "
+
+#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084
+msgid "1 hour"
+msgstr "1 Stunde"
+
+#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088
+msgid "6 hours"
+msgstr "6 Stunden"
+
+#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092
+msgid "24 hours"
+msgstr "24 Stunden"
+
+#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096
+msgid "72 hours"
+msgstr "72 Stunden"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656
+#: xgnokii/xgnokii.c:1414
+msgid "1 week"
+msgstr "1 Woche"
+
+#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104
+msgid "Maximum time"
+msgstr "Maximale Zeit"
+
+#: common/fbus-6110.c:2784
+msgid "Message: SMS Center error received:\n"
+msgstr "Nachricht: SMS Center fehler erhalten:\n"
+
+#: common/fbus-6110.c:2785
+msgid "   The request for SMS Center failed.\n"
+msgstr "   Anfrage nach SMS Zentrale fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:2796
+msgid "Unknown message!\n"
+msgstr "Unbekannte Nachricht!\n"
+
+#: common/fbus-6110.c:2818
+msgid "Message: Phonebook entry received:\n"
+msgstr "Nachricht: Telefonbuckeintrag erhalten:\n"
+
+#: common/fbus-6110.c:2855
+msgid "   Date: "
+msgstr "   Datum: "
+
+#: common/fbus-6110.c:2857
+msgid "   Time: "
+msgstr "   Zeit: "
+
+#: common/fbus-6110.c:2870
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Nachricht: Telefonbucheintrag lesen schlug fehl:\n"
+
+#: common/fbus-6110.c:2878
+msgid "   Invalid memory type!\n"
+msgstr "   Falscher Speicertyp!\n"
+
+#: common/fbus-6110.c:2888 common/fbus-6110.c:2926
+msgid "   Unknown error!\n"
+msgstr "   Unbekannter Fehler!\n"
+
+#: common/fbus-6110.c:2899
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Nachricht: Telefonbuch korrekt geschrieben.\n"
+
+#: common/fbus-6110.c:2916
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Nachricht: Telefonbuch nicht geschrieben - Name ist zu lang.\n"
+
+#: common/fbus-6110.c:2937
+msgid "Message: Memory status received:\n"
+msgstr "Nachricht: Speicherstatus erhalten:\n"
+
+#: common/fbus-6110.c:2939
+#, c-format
+msgid "   Memory Type: %s\n"
+msgstr "   Speicherart: %s\n"
+
+#: common/fbus-6110.c:2940
+#, c-format
+msgid "   Used: %d\n"
+msgstr "   Benutzt: %d\n"
+
+#: common/fbus-6110.c:2941
+#, c-format
+msgid "   Free: %d\n"
+msgstr "   Frei: %d\n"
+
+#: common/fbus-6110.c:2956
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+"Nachricht: Speicherstatusfehler, Telefon ist vermutlich ausgeschaltet.\n"
+
+#: common/fbus-6110.c:2963
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Nachricht: Speicherstatusfehler, Speicherart wird von Model nicht "
+"unterstützt.\n"
+
+#: common/fbus-6110.c:2970
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:2977
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Nachricht: Unbekannter Speicherstatusfehler, Untertyp (Messagebuffer[4] = "
+"%02x\n"
+
+#: common/fbus-6110.c:2994
+msgid "Message: Caller group logo etc.\n"
+msgstr "Nachricht: Gruppenlogo etc.\n"
+
+#: common/fbus-6110.c:2995
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Gruppenname: %s\n"
+
+#: common/fbus-6110.c:3015
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Nachricht: Gruppendaten erhalten aber nicht angefordert!\n"
+
+#: common/fbus-6110.c:3025
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Nachricht: Fehler beim Versuch Gruppendaten zu bekommen.\n"
+
+#: common/fbus-6110.c:3033
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Nachricht: Gruppendaten richtig gesetzt.\n"
+
+#: common/fbus-6110.c:3041
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Nachricht: Fehler beim Gruppendaten einstellen.\n"
+
+#: common/fbus-6110.c:3052
+msgid "Message: Speed dial entry received:\n"
+msgstr "Nachricht: Kurzwahl erhalten:\n"
+
+#: common/fbus-6110.c:3053
+#, c-format
+msgid "   Location: %d\n"
+msgstr "   Ort: %d\n"
+
+#: common/fbus-6110.c:3054
+#, c-format
+msgid "   MemoryType: %s\n"
+msgstr "   Speichertyp: %s\n"
+
+#: common/fbus-6110.c:3055
+#, c-format
+msgid "   Number: %d\n"
+msgstr "   Nummer: %d\n"
+
+#: common/fbus-6110.c:3065
+msgid "Message: Speed dial entry error\n"
+msgstr "Nachricht: Kurzwahleintrag Fehler\n"
+
+#: common/fbus-6110.c:3075
+msgid "Message: Speed dial entry set.\n"
+msgstr "Nachricht: Kurzwahleintrag gesetzt.\n"
+
+#: common/fbus-6110.c:3085
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Nachricht: Fehler beim Kurzwahleintrag setzen.\n"
+
+#: common/fbus-6110.c:3095
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x03\n"
+
+#: common/fbus-6110.c:3111
+msgid "Message: Phone status received:\n"
+msgstr "Nachricht: Telefonstatus erhalten:\n"
+
+#: common/fbus-6110.c:3112
+msgid "   Mode: "
+msgstr "   Modus: "
+
+#: common/fbus-6110.c:3118
+msgid "registered within the network\n"
+msgstr "am Netzwerk angemeldet\n"
+
+#: common/fbus-6110.c:3127
+msgid "call in progress\n"
+msgstr "Anruf in Bearbeitung\n"
+
+#: common/fbus-6110.c:3133
+msgid "waiting for security code\n"
+msgstr "warte auf Sicherheitscode\n"
+
+#: common/fbus-6110.c:3139
+msgid "powered off\n"
+msgstr "ausgeschaltet\n"
+
+#: common/fbus-6110.c:3145 common/fbus-6110.c:3167
+msgid "unknown\n"
+msgstr "unbekannt\n"
+
+#: common/fbus-6110.c:3149
+msgid "   Power source: "
+msgstr "   Stromquelle: "
+
+#: common/fbus-6110.c:3155
+msgid "AC/DC\n"
+msgstr "Gleichspannung\n"
+
+#: common/fbus-6110.c:3161
+msgid "battery\n"
+msgstr "Batterie\n"
+
+#: common/fbus-6110.c:3171
+#, c-format
+msgid "   Battery Level: %d\n"
+msgstr "   Batteriezustand: %d\n"
+
+#: common/fbus-6110.c:3172
+#, c-format
+msgid "   Signal strength: %d\n"
+msgstr "   Signalstärke: %d\n"
+
+#: common/fbus-6110.c:3184
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x04\n"
+
+#: common/fbus-6110.c:3257
+msgid "Message: Startup Logo received.\n"
+msgstr "Nachricht: Einschaltlogo erhalten.\n"
+
+#: common/fbus-6110.c:3274
+#, c-format
+msgid "Startup Text: %s\n"
+msgstr "Einschalttext: %s\n"
+
+#: common/fbus-6110.c:3286
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3295
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3329
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3338
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3348
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3365
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3374
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3392
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537
+msgid "Unknown!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3440
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3450
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: common/fbus-6110.c:3477
+msgid "Message: Network informations:\n"
+msgstr "Nachricht: Netzwerkinformationen\n"
+
+#: common/fbus-6110.c:3479
+#, c-format
+msgid "   CellID: %s\n"
+msgstr "   Zellnummer: %s\n"
+
+#: common/fbus-6110.c:3480
+#, c-format
+msgid "   LAC: %s\n"
+msgstr "   LAC: %s\n"
+
+#: common/fbus-6110.c:3481
+#, c-format
+msgid "   Network code: %s\n"
+msgstr "   Netzwerknummer: %s\n"
+
+#: common/fbus-6110.c:3482
+#, c-format
+msgid "   Network name: %s (%s)\n"
+msgstr "   Netzwerkname: %s (%s)\n"
+
+#: common/fbus-6110.c:3485
+msgid "   Status: "
+msgstr "   Status: "
+
+#: common/fbus-6110.c:3488
+msgid "home network selected"
+msgstr "Heimnetz ausgewählt:"
+
+#: common/fbus-6110.c:3489
+msgid "roaming network"
+msgstr ""
+
+#: common/fbus-6110.c:3490
+msgid "requesting network"
+msgstr ""
+
+#: common/fbus-6110.c:3491
+msgid "not registered in the network"
+msgstr ""
+
+#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199
+#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219
+msgid "unknown"
+msgstr "unbekannt"
+
+#: common/fbus-6110.c:3497
+#, c-format
+msgid "   Network selection: %s\n"
+msgstr "   Netzwerkauswahl: %s\n"
+
+#: common/fbus-6110.c:3497
+msgid "manual"
+msgstr "von Hand"
+
+#: common/fbus-6110.c:3497
+msgid "automatic"
+msgstr "automatisch"
+
+#: common/fbus-6110.c:3507
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: common/fbus-6110.c:3545
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3564
+msgid "Message: Date and time set correctly\n"
+msgstr "Nachricht: Datum und Zeit richtig gesetzt\n"
+
+#: common/fbus-6110.c:3574 common/fbus-6110.c:3620
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3594
+msgid "Message: Date and time\n"
+msgstr "Nachricht: Datum und Zeit\n"
+
+#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863
+#, c-format
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Zeit: %02d:x02d:x02d\n"
+
+#: common/fbus-6110.c:3596
+#, c-format
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Datum: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3610
+msgid "Message: Alarm set correctly\n"
+msgstr "Nachricht: Alarm erfolgreich gesetzt\n"
+
+#: common/fbus-6110.c:3632
+msgid "Message: Alarm\n"
+msgstr "Nachricht: Alarm\n"
+
+#: common/fbus-6110.c:3633
+#, c-format
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Alarm: %02d:%02d\n"
+
+#: common/fbus-6110.c:3634
+#, c-format
+msgid "   Alarm is %s\n"
+msgstr "   Der Alarm ist %s\n"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "on"
+msgstr "an"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "off"
+msgstr "out"
+
+#: common/fbus-6110.c:3650
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x11\n"
+
+#: common/fbus-6110.c:3673
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3683 common/fbus-6110.c:3693
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3702
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: common/fbus-6110.c:3742
+msgid "Message: Calendar note received.\n"
+msgstr "Nachricht: Kalendarbenachrichtingung erhalten.\n"
+
+#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859
+#, c-format
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Datum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868
+#, c-format
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Alarmdatum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872
+#, c-format
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Alarmzeit: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3764
+#, c-format
+msgid "   Type: %d\n"
+msgstr "   Typ: %d\n"
+
+#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877
+#, c-format
+msgid "   Text: %s\n"
+msgstr "   Text: %s\n"
+
+#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880
+#, c-format
+msgid "   Phone: %s\n"
+msgstr "   Telefon: %s\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: common/fbus-6110.c:3788
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3810
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: common/fbus-6110.c:3821
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: common/fbus-6110.c:3831
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: common/fbus-6110.c:3848
+#, c-format
+msgid "   Item number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3856
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x13\n"
+
+#: common/fbus-6110.c:3919
+msgid "Concatenated message!!!\n"
+msgstr "Zusammengefügte Nachricht!!!\n"
+
+#: common/fbus-6110.c:3940
+#, c-format
+msgid "Number: %d\n"
+msgstr "Nummer: %d\n"
+
+#: common/fbus-6110.c:3945
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Nachtricht: Ausgehende Nachricht (zum Mobiltelefon)\n"
+
+#: common/fbus-6110.c:3948
+msgid "Sent\n"
+msgstr "Gesendet\n"
+
+#: common/fbus-6110.c:3950
+msgid "Not sent\n"
+msgstr "Nicht gesendet\n"
+
+#: common/fbus-6110.c:3954
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Nachricht: SMS erhalten\n"
+
+#: common/fbus-6110.c:3957
+msgid "Delivery Report\n"
+msgstr "Auslieferreport\n"
+
+#: common/fbus-6110.c:3959
+msgid "Unknown type\n"
+msgstr "Unbekannter Typ\n"
+
+#: common/fbus-6110.c:3962
+msgid "Read\n"
+msgstr "Gelesen\n"
+
+#: common/fbus-6110.c:3964
+msgid "Not read\n"
+msgstr "Nicht gelesen\n"
+
+#: common/fbus-6110.c:3966
+msgid "   Date: %s "
+msgstr "   Datum: %s "
+
+#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241
+#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:3981
+msgid "   SMSC response date: %s "
+msgstr "   SMSC Antwortdatum: %s "
+
+#: common/fbus-6110.c:4074
+msgid "Delivered"
+msgstr "Versandt"
+
+#: common/fbus-6110.c:4079
+msgid "SM received by the SME"
+msgstr "SM von SME erhalten"
+
+#: common/fbus-6110.c:4082
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4085
+msgid "SM replaced by the SC"
+msgstr "SM durch SC ersetzt"
+
+#: common/fbus-6110.c:4093
+msgid "Failed"
+msgstr "Fehlgeschlagen"
+
+#: common/fbus-6110.c:4100
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4105 common/fbus-6110.c:4198
+msgid "Congestion"
+msgstr "Stau"
+
+#: common/fbus-6110.c:4109 common/fbus-6110.c:4202
+msgid "SME busy"
+msgstr ""
+
+#: common/fbus-6110.c:4113 common/fbus-6110.c:4206
+msgid "No response from SME"
+msgstr ""
+
+#: common/fbus-6110.c:4117 common/fbus-6110.c:4210
+msgid "Service rejected"
+msgstr "Service abgelehnt"
+
+#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214
+msgid "Quality of service not aviable"
+msgstr "QoS nicht verfügbar"
+
+#: common/fbus-6110.c:4125 common/fbus-6110.c:4218
+msgid "Error in SME"
+msgstr "Fehler in SME"
+
+#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222
+#: common/fbus-6110.c:4232
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4136
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4141
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4145
+msgid "Incompatibile destination"
+msgstr "Inkompatibles Ziel"
+
+#: common/fbus-6110.c:4149
+msgid "Connection rejected by SME"
+msgstr "Verbindung durch SME abgelehnt"
+
+#: common/fbus-6110.c:4153
+msgid "Not obtainable"
+msgstr "Nicht verfügbar"
+
+#: common/fbus-6110.c:4161
+msgid "No internetworking available"
+msgstr "Keine Zwischenverbindung verfügbar"
+
+#: common/fbus-6110.c:4165
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4169
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4173
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4177
+msgid "SM does not exist"
+msgstr "SM existiert nicht"
+
+#: common/fbus-6110.c:4190
+msgid "Pending"
+msgstr "Warte"
+
+#: common/fbus-6110.c:4194
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: common/fbus-6110.c:4260
+msgid "Message: SMS reading failed.\n"
+msgstr "Nachricht: SMS lesen fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:4268
+msgid "   Invalid location!\n"
+msgstr "   Ungültiger Ort!\n"
+
+#: common/fbus-6110.c:4278
+msgid "   Empty SMS location.\n"
+msgstr "   Leerer SMS Platz.\n"
+
+#: common/fbus-6110.c:4291
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Nachricht: SMS erfolgreich gelöscht.\n"
+
+#: common/fbus-6110.c:4301
+msgid "Message: SMS Status Received\n"
+msgstr "Nachricht: SMS Status erhalten\n"
+
+#: common/fbus-6110.c:4302
+#, c-format
+msgid "   The number of messages: %d\n"
+msgstr "   Anzahl der Nachrichten: %d\n"
+
+#: common/fbus-6110.c:4303
+#, c-format
+msgid "   Unread messages: %d\n"
+msgstr "   Ungelesene Nachrichten: %d\n"
+
+#: common/fbus-6110.c:4315
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+"Nachricht: SMS Status fehler, möglichweise nicht über PIN authorisiert\n"
+
+#: common/fbus-6110.c:4346
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Nachricht: Netzmonitor richtig gesetzt.\n"
+
+#: common/fbus-6110.c:4356
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Nachricht: Netzmonitor Menü %d erhalten:\n"
+
+#: common/fbus-6110.c:4372
+msgid "Unknown message of type 0x40.\n"
+msgstr "Unbekannte Nachricht vom Typ 0x40.\n"
+
+#: common/fbus-6110.c:4394
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Nachricht: Mobiltelefonidentifikation erhalten:\n"
+
+#: common/fbus-6110.c:4395
+#, c-format
+msgid "   IMEI: %s\n"
+msgstr "   IMEI: %s\n"
+
+#: common/fbus-6110.c:4397
+#, c-format
+msgid "   Model: %s\n"
+msgstr "   Model: %s\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid "   Production Code: %s\n"
+msgstr "   Produktionszahl: %s\n"
+
+#: common/fbus-6110.c:4401
+#, c-format
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: common/fbus-6110.c:4403
+#, c-format
+msgid "   Firmware: %s\n"
+msgstr "   Firmware: %s\n"
+
+#: common/fbus-6110.c:4409
+#, c-format
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Magische Zahlen: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4429
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Erhielt Bestätigung vom Typ %02x, Seq: %2x]\n"
+
+#: common/fbus-6110.c:4447
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 1.\n"
+
+#: common/fbus-6110.c:4471
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 2.\n"
+
+#: common/fbus-6110.c:4487
+msgid "Message: Unknown message.\n"
+msgstr "Nachricht: Unbekannte Nachricht.\n"
+
+#: common/fbus-6110.c:4564
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4565
+msgid "Please report it ...\n"
+msgstr "Bitte melden sie das ...\n"
+
+#: common/fbus-6110.c:4624
+msgid "Bad checksum!\n"
+msgstr "Falsche Prüfsumme!\n"
+
+#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:4684
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4702
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Nachricht Ziel: %s\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Nachrichtquelle: %s\n"
+
+#: common/fbus-6110.c:4705
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Nachrichtart: %02x\n"
+
+#: common/fbus-6110.c:4707
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Nachricht unbekannt: %02x\n"
+
+#: common/fbus-6110.c:4708
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Nachrichtlänge: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:4779
+msgid "PC: "
+msgstr "PC: "
+
+#: common/fbus-6110.c:4853
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Sende Bestätigung vom Typ %02x, Seq: %x]\n"
+
+#: common/mbus-6160.c:719
+msgid "Couldn't open MB61 device: "
+msgstr "Konnte MB61-Gerät nicht öffnen: "
+
+#: common/mbus-640.c:786
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:816 common/mbus-640.c:916
+msgid "PC   : "
+msgstr "PC   : "
+
+#: common/mbus-640.c:826 common/mbus-640.c:929
+msgid "Write error!\n"
+msgstr "Schreibfehler!\n"
+
+#: common/mbus-640.c:853
+msgid "Setting MBUS communication...\n"
+msgstr "Starte MBUS Verbindung...\n"
+
+#: common/rlp-common.c:706
+msgid "Unknown!!! "
+msgstr "Unbekannt!!! "
+
+#: common/rlp-common.c:771
+msgid "BAD"
+msgstr "FALSCH"
+
+#: common/rlp-common.c:893
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: common/rlp-common.c:1006
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1007
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1371
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1408
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1473
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1507
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1564
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1622
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1732
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1791
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1821
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1863
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:207
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii/gnokii.c:221
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index [-v]\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+"          gnokii --sendringtone destionation rtttlfile\n"
+"          gnokii --reset [soft|hard]\n"
+msgstr ""
+
+#: gnokii/gnokii.c:255
+msgid ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+msgstr ""
+
+#: gnokii/gnokii.c:260
+msgid ""
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output "
+"of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken "
+"from\n"
+"                            phone memory from address "
+"[message_center_index].\n"
+"                            If this argument is ommited SMSC number is "
+"taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"                             [--long n] - send no more then n characters,\n"
+"                                          default is 160\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number index from calendar.\n"
+"                             [-v] - output in vCalendar 1.0 format\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --sendlogo        send the logofile to destination as operator\n"
+"                            or CLI logo\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --sendringtone    send the rtttlfile to destination as ringtone\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:344
+msgid ""
+"          --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+"          --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282
+#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS Init fehlgeschlagen (Unbekanntes Model?). Beende.\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende.\n"
+
+#: gnokii/gnokii.c:636
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:815
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:825
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: gnokii/gnokii.c:897 gnokii/gnokii.c:955
+msgid "Input too long!\n"
+msgstr "Eingabe zu lang!\n"
+
+#: gnokii/gnokii.c:950
+msgid "Couldn't read from stdin!\n"
+msgstr "Konnte nicht von stdin lesen!\n"
+
+#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692
+msgid "Send succeeded!\n"
+msgstr "Senden erfolgreich!\n"
+
+#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "SMS senden fehlgeschlagen (Fehler=%d)\n"
+
+#: gnokii/gnokii.c:1042
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1044
+msgid "Messages sent as "
+msgstr "Nachricht gesendet als "
+
+#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1079
+msgid "Message validity is "
+msgstr "Nachrichtgültigkeit ist "
+
+#: gnokii/gnokii.c:1115
+msgid "SMS center can not be found :-(\n"
+msgstr "SMS Center konnte nicht gefunden werden :-(\n"
+
+#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225
+#: gnokii/gnokii.c:2392
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Unbekannter Speichertyp %s!\n"
+
+#: gnokii/gnokii.c:1214
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Ausgehende Nachricht "
+
+#: gnokii/gnokii.c:1217
+msgid "(sent)\n"
+msgstr "(geschickt)\n"
+
+#: gnokii/gnokii.c:1219
+msgid "(not sent)\n"
+msgstr "(nicht geschickt)\n"
+
+#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1227
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Auslieferreport "
+
+#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269
+msgid "(read)\n"
+msgstr "(gelesen)\n"
+
+#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271
+msgid "(not read)\n"
+msgstr "(nicht gelesen)\n"
+
+#: gnokii/gnokii.c:1233
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Sendedatum/-zeit: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1246
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr ""
+
+#: gnokii/gnokii.c:1259
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Eingehende Nachricht "
+
+#: gnokii/gnokii.c:1273
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Datum/Zeit: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1285
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Absender: %s SMS Center: %s\n"
+
+#: gnokii/gnokii.c:1291
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Verbunden (%d/%d):\n"
+
+#: gnokii/gnokii.c:1297
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483
+#: gnokii/gnokii.c:2252
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funktion nicht implementiert für Modell %s!\n"
+
+#: gnokii/gnokii.c:1312
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1318
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS Ort %s %d leer.\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d fehlgeschlagen!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1414
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d gelöscht\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"SMS löschen %s %d fehlgeschlagen!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1472
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii/gnokii.c:1479
+msgid "Error: invalid code.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1481
+msgid "Code ok.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1485
+msgid "Other error.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1501
+msgid "Security code status: "
+msgstr ""
+
+#: gnokii/gnokii.c:1603
+msgid "Sending operator logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1607
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1609
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1628
+msgid "Operator code: %s\n"
+msgstr "Netzwerkcode: %s\n"
+
+#: gnokii/gnokii.c:1706
+msgid "Getting Logo.\n"
+msgstr "Hole Logo.\n"
+
+#: gnokii/gnokii.c:1752
+msgid "Logo file error.\n"
+msgstr "Logodatei Fehler.\n"
+
+#: gnokii/gnokii.c:1758
+msgid "Sending Logo.\n"
+msgstr "Schicke Logo.\n"
+
+#: gnokii/gnokii.c:1800
+msgid "BEGIN:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1801
+msgid "VERSION:1.0\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1802
+msgid "BEGIN:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1803
+msgid "CATEGORIES:"
+msgstr ""
+
+#: gnokii/gnokii.c:1806
+msgid "MISCELLANEOUS\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1809
+msgid "PHONE CALL\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1812
+msgid "MEETING\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1815
+msgid "SPECIAL OCCASION\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1818
+msgid "UNKNOWN\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1821
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1822
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1826
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1830
+msgid "END:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1831
+msgid "END:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1834
+msgid "   Type of the note: "
+msgstr "   Art der Notiz: "
+
+#: gnokii/gnokii.c:1839
+msgid "Reminder\n"
+msgstr "Erinnerung\n"
+
+#: gnokii/gnokii.c:1843
+msgid "Call\n"
+msgstr "Anruf\n"
+
+#: gnokii/gnokii.c:1847
+msgid "Meeting\n"
+msgstr "Treffen\n"
+
+#: gnokii/gnokii.c:1851
+msgid "Birthday\n"
+msgstr "Geburtstag\n"
+
+#: gnokii/gnokii.c:1855
+msgid "Unknown\n"
+msgstr "Unbekannt\n"
+
+#: gnokii/gnokii.c:1884
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403
+msgid "Succesfully written!\n"
+msgstr "Erfolgreich geschrieben!\n"
+
+#: gnokii/gnokii.c:1943
+msgid "   Calendar note deleted.\n"
+msgstr "   Kalendereintrag gelöscht.\n"
+
+#: gnokii/gnokii.c:1946
+msgid "The calendar note can not be deleted\n"
+msgstr "Der Kalendereintrag kann nicht gelöscht werden\n"
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Datum: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2016
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Zeit: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2052
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Alarm: %s\n"
+
+#: gnokii/gnokii.c:2053
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Zeit: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2094
+msgid "Entering monitor mode...\n"
+msgstr "Betrete Monitormodus...\n"
+
+#: gnokii/gnokii.c:2095
+msgid "Initialising GSM interface...\n"
+msgstr "Initialisiere GSM-Schnittstelle...\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Empfangsstärke: %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batterie: %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Stromquelle: %s\n"
+
+#: gnokii/gnokii.c:2112
+msgid "AC/DC"
+msgstr "Gleichspannung"
+
+#: gnokii/gnokii.c:2112
+msgid "battery"
+msgstr "Batterie"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2127
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2130
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2133
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Benutzt  %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2136
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2139
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2142
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS Nachrichten: Ungelesen %d, Anzahl %d\n"
+
+#: gnokii/gnokii.c:2145
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Ankommender Anruf: %s\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Netzwerk: %s (%s), LAC: %s, Zellnummer: %s\n"
+
+#: gnokii/gnokii.c:2153
+msgid "Leaving monitor mode...\n"
+msgstr "Verlasse Monitormodus...\n"
+
+#: gnokii/gnokii.c:2257
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Speichertyp %s nicht unterstützt!\n"
+
+#: gnokii/gnokii.c:2262
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Falscher Ort oder anderer Fehler!(%d)\n"
+
+#: gnokii/gnokii.c:2329
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Formatproblem in Zeile %d [%s]\n"
+
+#: gnokii/gnokii.c:2343
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Schreiben erfolgreich: Speicherart: %s, Ort: %d, Name: %s, Nummer: %s\n"
+
+#: gnokii/gnokii.c:2345
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Schreiben fehlgeschlagen(%d): Speichertyp: %s, Ort: %d, Name: %s, Nummer: "
+"%s\n"
+
+#: gnokii/gnokii.c:2365
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "Fehler beim Öffnen von %s, benutze Standardkonfiguration\n"
+
+#: gnokii/gnokii.c:2466
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Anruf in Arbeit: %s\n"
+
+#: gnokii/gnokii.c:2467
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Unbekannt: %s\n"
+
+#: gnokii/gnokii.c:2468
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Ungelesene SMS: %s\n"
+
+#: gnokii/gnokii.c:2469
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Sprachanruf: %s\n"
+
+#: gnokii/gnokii.c:2470
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Aktiver Faxanruf: %s\n"
+
+#: gnokii/gnokii.c:2471
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Aktiver Datenanruf: %s\n"
+
+#: gnokii/gnokii.c:2472
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Tastatursperre: %s\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "SMS Speicher voll: %s\n"
+
+#: gnokii/gnokii.c:2525
+#, c-format
+msgid "IMEI:     %s\n"
+msgstr "IMEI:     %s\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "Model:    %s\n"
+msgstr "Model:    %s\n"
+
+#: gnokii/gnokii.c:2527
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revision: %s\n"
+
+#: gnokii/gnokii.c:2559
+msgid "What kind of reset do you want??\n"
+msgstr "Welche Art Reset wünschen sie??\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid Version %s"
+
+#: gnokiid/gnokiid.c:70
+msgid "   usage: gnokiid {--help|--version}"
+msgstr "   Benutzung: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:85
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:93
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:212
+msgid "Couldn't open pty!\n"
+msgstr "Konnte pty nicht öffnen!\n"
+
+#: gnokiid/virtmodem.c:220
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid sollte als setuid root installiert werden!\n"
+
+#: gnokiid/virtmodem.c:224
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Unter-pty ist %s, benutzte %s um /dev/gnokii zu erstellen.\n"
+
+#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende. \n"
+
+#: xgnokii/xgnokii.c:175
+msgid "/help/index.html"
+msgstr "/help/index.html"
+
+#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973
+msgid "Familly"
+msgstr "Familie"
+
+#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991
+msgid "Friends"
+msgstr "Freunde"
+
+#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000
+msgid "Colleagues"
+msgstr "Kollegen"
+
+#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009
+msgid "Other"
+msgstr "Andere"
+
+#: xgnokii/xgnokii.c:244
+msgid "No group"
+msgstr "Keine Gruppe"
+
+#: xgnokii/xgnokii.c:383
+msgid "Short Message received"
+msgstr "Kurznachricht erhalten"
+
+#: xgnokii/xgnokii.c:398
+msgid "Call in progress"
+msgstr "Anruf in Bearbeitung"
+
+#: xgnokii/xgnokii.c:411
+msgid "Hide"
+msgstr "Verstecken"
+
+#: xgnokii/xgnokii.c:539
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr "Ankommender Anruf von: %s\n"
+"Zeit: %s"
+
+#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Setze %d"
+
+#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:629
+msgid "Voice"
+msgstr "Sprache"
+
+#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386
+msgid "1 h"
+msgstr "1 Stunde"
+
+#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393
+msgid "6 h"
+msgstr "6 Stunden"
+
+#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400
+msgid "24 h"
+msgstr "24 Stunden"
+
+#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407
+msgid "72 h"
+msgstr "72 Stunden"
+
+#: xgnokii/xgnokii.c:660
+msgid "Max. time"
+msgstr "Maximale Zeit"
+
+#: xgnokii/xgnokii.c:962
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1020
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572
+msgid "Contacts"
+msgstr "Kontakte"
+
+#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1044
+msgid "DTMF"
+msgstr "Tonwahl"
+
+#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487
+msgid "Speed Dial"
+msgstr "Kurzwahl"
+
+#: xgnokii/xgnokii.c:1057
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr "Netzmonitor"
+
+#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518
+msgid "Options"
+msgstr "Optionen"
+
+#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042
+msgid "Help"
+msgstr "Hilfe"
+
+#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103
+msgid "About"
+msgstr "Über"
+
+#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280
+#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914
+#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428
+#: xgnokii/xgnokii_sms.c:470
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1120
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1274
+msgid "Edit SMS Setting"
+msgstr "Bearbeite SMS Einstellungen"
+
+#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148
+#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788
+#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145
+#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270
+#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435
+#: xgnokii/xgnokii_sms.c:478
+msgid "Cancel"
+msgstr "Abrechen"
+
+#: xgnokii/xgnokii.c:1301
+msgid "Set name:"
+msgstr "Schreibe Namen:"
+
+#: xgnokii/xgnokii.c:1314
+msgid "Center:"
+msgstr "Center:"
+
+#: xgnokii/xgnokii.c:1327
+msgid "Sending Format:"
+msgstr "Sendeformat:"
+
+#: xgnokii/xgnokii.c:1371
+msgid "Validity Period:"
+msgstr "Gültigkeitsperiode:"
+
+#: xgnokii/xgnokii.c:1379
+msgid "Max. Time"
+msgstr "Maximale Zeit"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Set name"
+msgstr "Schreibe Namen:"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Center number"
+msgstr "Centernummer"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Format"
+msgstr "Format"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Validity"
+msgstr "Gültigkeit"
+
+#: xgnokii/xgnokii.c:1523
+msgid "Apply"
+msgstr "Anwenden"
+
+#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510
+#: xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr "Sichern"
+
+#: xgnokii/xgnokii.c:1539
+msgid "Close"
+msgstr "Schließen"
+
+#: xgnokii/xgnokii.c:1554
+msgid "Phone and connection type"
+msgstr "Telefon und Verbindungsart"
+
+#: xgnokii/xgnokii.c:1561
+msgid "Connection"
+msgstr "Verbindung"
+
+#: xgnokii/xgnokii.c:1568
+msgid "Port:"
+msgstr "Anschluß:"
+
+#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1598
+msgid "Init length:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1613
+msgid "Bindir:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1628
+msgid "Connection:"
+msgstr "Verbindung:"
+
+#: xgnokii/xgnokii.c:1632
+msgid "infrared"
+msgstr "infrarot"
+
+#: xgnokii/xgnokii.c:1636
+msgid "serial"
+msgstr "seriell"
+
+#: xgnokii/xgnokii.c:1641
+msgid "Phone information"
+msgstr "Telefoninformationen"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Version:"
+msgstr "Version:"
+
+#: xgnokii/xgnokii.c:1685
+msgid "Revision:"
+msgstr "Revision:"
+
+#: xgnokii/xgnokii.c:1700
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1715
+msgid "Alarm setting"
+msgstr "Alarmeinstellung"
+
+#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729
+msgid "Alarm"
+msgstr "Alarm"
+
+#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318
+msgid "Short Message Service"
+msgstr "Kurznachrichtendienst"
+
+#: xgnokii/xgnokii.c:1789
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: xgnokii/xgnokii.c:1803
+msgid "Business Card"
+msgstr "Visitenkarte"
+
+#: xgnokii/xgnokii.c:1810
+msgid "User"
+msgstr "Benutzer"
+
+#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801
+msgid "Name:"
+msgstr "Name:"
+
+#: xgnokii/xgnokii.c:1854
+msgid "Title:"
+msgstr "Titel:"
+
+#: xgnokii/xgnokii.c:1880
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1906
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1931
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1956
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:1982
+msgid "Address:"
+msgstr "Adresse:"
+
+#: xgnokii/xgnokii.c:2006
+msgid "Caller groups names"
+msgstr "Gruppenname"
+
+#: xgnokii/xgnokii.c:2013
+msgid "Groups"
+msgstr "Gruppen"
+
+#: xgnokii/xgnokii.c:2022
+#, c-format
+msgid "Group %d:"
+msgstr "Gruppe %d:"
+
+#: xgnokii/xgnokii.c:2035
+msgid "Help viewer"
+msgstr "Hilfeanzeiger"
+
+#: xgnokii/xgnokii.c:2049
+msgid "Viewer:"
+msgstr "Anzeiger:"
+
+#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:154
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:166
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:184
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:141
+msgid "Error"
+msgstr "Fehler"
+
+#: xgnokii/xgnokii_common.c:187
+msgid "Yes"
+msgstr "Ja"
+
+#: xgnokii/xgnokii_common.c:196
+msgid "No"
+msgstr "Nein"
+
+#: xgnokii/xgnokii_common.c:281
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Kann %s nicht ausführen\n"
+
+#: xgnokii/xgnokii_contacts.c:88
+msgid "/help/contacts.html"
+msgstr "/help/contacts.html"
+
+#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243
+#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429
+#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584
+msgid "Can't change memory type!"
+msgstr "Kann Speichertyp nicht ändern!"
+
+#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:674
+msgid "Can't find pattern!"
+msgstr "Kann Muster nicht finden!"
+
+#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279
+msgid "Number:"
+msgstr "Nummer:"
+
+#: xgnokii/xgnokii_contacts.c:827
+msgid "Memory:"
+msgstr "Speicher:"
+
+#: xgnokii/xgnokii_contacts.c:831
+msgid "phone"
+msgstr "Telefon"
+
+#: xgnokii/xgnokii_contacts.c:846
+msgid "Caller group:"
+msgstr "Gruppe:"
+
+#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633
+#: xgnokii/xgnokii_speed.c:540
+msgid "Edit entry"
+msgstr "Eintrag bearbeiten"
+
+#: xgnokii/xgnokii_contacts.c:907
+msgid "Delete entries"
+msgstr "Einträge löschen"
+
+#: xgnokii/xgnokii_contacts.c:939
+msgid "Do you want delete selected entries?"
+msgstr "Wollen sie die gewählten Einträge löschen?"
+
+#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625
+msgid "New entry"
+msgstr "Neuer Eintrag"
+
+#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629
+msgid "Duplicate entry"
+msgstr "Eintrag duplizieren"
+
+#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062
+#: xgnokii/xgnokii_contacts.c:1087
+msgid "Can't find free memory."
+msgstr "Kann keinen freien Speicher finden."
+
+#: xgnokii/xgnokii_contacts.c:1128
+msgid "Changing memory type"
+msgstr "Wechlse Speicherart"
+
+#: xgnokii/xgnokii_contacts.c:1136
+msgid "Continue"
+msgstr "Fortfahren"
+
+#: xgnokii/xgnokii_contacts.c:1156
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181
+msgid "Find"
+msgstr "Suchen"
+
+#: xgnokii/xgnokii_contacts.c:1203
+msgid "Pattern:"
+msgstr "Muster:"
+
+#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Name"
+msgstr "Name"
+
+#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Number"
+msgstr "Nummer"
+
+#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644
+msgid "Dial voice"
+msgstr "Sprachanruf"
+
+#: xgnokii/xgnokii_contacts.c:1385
+msgid "Phone memory..."
+msgstr "Telefonspeicher..."
+
+#: xgnokii/xgnokii_contacts.c:1396
+msgid "SIM memory..."
+msgstr "Kartenspeicher..."
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Saving entries"
+msgstr "Sichere Einträge"
+
+#: xgnokii/xgnokii_contacts.c:1448
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1481
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid "Save changes?"
+msgstr "Sichere Änderungen"
+
+#: xgnokii/xgnokii_contacts.c:1519
+msgid "Don't save"
+msgstr "Nicht sichern"
+
+#: xgnokii/xgnokii_contacts.c:1543
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1641
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1665
+msgid "Getting entries"
+msgstr "Hole Einträge"
+
+#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719
+#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691
+#, c-format
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736
+#, c-format
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110
+#: xgnokii/xgnokii_speed.c:378
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142
+#: xgnokii/xgnokii_speed.c:418
+msgid "Overwrite file?"
+msgstr "Datei überschreiben?"
+
+#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143
+#: xgnokii/xgnokii_speed.c:419
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436
+msgid "Export"
+msgstr "Exportieren"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74
+#: xgnokii/xgnokii_speed.c:280
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2130
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357
+msgid "Import"
+msgstr "Importieren"
+
+#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036
+msgid "Select contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673
+#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Memory"
+msgstr "Speicher"
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Group"
+msgstr "Gruppe"
+
+#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518
+msgid "Read from phone"
+msgstr "Aus Telefon auslesen"
+
+#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522
+msgid "Save to phone"
+msgstr "In Telefon schreiben"
+
+#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529
+msgid "Import from file"
+msgstr "Aus Datei importieren"
+
+#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533
+msgid "Export to file"
+msgstr "In Datei exportieren"
+
+#: xgnokii/xgnokii_contacts.c:2637
+msgid "Delete entry"
+msgstr "Eintrag löscehn"
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr "/help/dtmf.html"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr "Öffnen"
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr "Wählton"
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr "/help/netmon.html"
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr "Aktive Zelle"
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:83
+msgid "/help/sms.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:88
+msgid "/help/sms_send.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "report"
+msgstr "Report"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "read"
+msgstr "gelesen"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "unread"
+msgstr "ungelesen"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "gesendet"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "nicht gesendet"
+
+#: xgnokii/xgnokii_sms.c:380
+msgid "From: "
+msgstr "Von: "
+
+#: xgnokii/xgnokii_sms.c:388
+msgid "Date: "
+msgstr "Datum: "
+
+#: xgnokii/xgnokii_sms.c:438
+msgid "Function not implemented!"
+msgstr "Funktion nicht implementiert!" 
+
+#: xgnokii/xgnokii_sms.c:443
+msgid "Delete SMS failed!"
+msgstr "SMS löschen fehlgeschlagen!"
+
+#: xgnokii/xgnokii_sms.c:463
+msgid "Delete SMS"
+msgstr "SMS löschen"
+
+#: xgnokii/xgnokii_sms.c:495
+msgid "Do you want delete selected SMS?"
+msgstr "Wollen sie die ausgewählte SMS löschen?"
+
+#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817
+msgid "Address line contains illegal address!"
+msgstr "Addresszeile enthält eine falsche Adresse!"
+
+#: xgnokii/xgnokii_sms.c:791
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr "SMS senden zu %s fehlgeschlagen\n"
+"(Fehler=%d)"
+
+#: xgnokii/xgnokii_sms.c:988
+msgid "Send message"
+msgstr "Schicke Nachricht"
+
+#: xgnokii/xgnokii_sms.c:992
+msgid "Save message to outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:999
+msgid "Check names"
+msgstr "Überprüfe Namen"
+
+#: xgnokii/xgnokii_sms.c:1012
+msgid "To:"
+msgstr "An:"
+
+#: xgnokii/xgnokii_sms.c:1084
+msgid "Delivery report"
+msgstr "Auslieferreport"
+
+#: xgnokii/xgnokii_sms.c:1088
+msgid "Send as Long SMS"
+msgstr "Schicke als lange SMS"
+
+#: xgnokii/xgnokii_sms.c:1092
+msgid "SMS Center:"
+msgstr "SMS Center:"
+
+#: xgnokii/xgnokii_sms.c:1110
+msgid "New Message"
+msgstr "Neue Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352
+msgid "Forward Message"
+msgstr "Nachricht weiterleiten"
+
+#: xgnokii/xgnokii_sms.c:1177
+msgid "Reply Message"
+msgstr "Nachricht beantworten"
+
+#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361
+msgid "Bussiness Card"
+msgstr "Visitenkarte"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Status"
+msgstr "Status"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Date / Time"
+msgstr "Datum / Zeit"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Sender"
+msgstr "Sender"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Message"
+msgstr "Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1348
+msgid "New message"
+msgstr "Neue Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1356
+msgid "Reply message"
+msgstr "Nachricht beantworten"
+
+#: xgnokii/xgnokii_sms.c:1368
+msgid "Delete message"
+msgstr "Nachricht löschen"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "SMS's"
+msgstr "SMS's"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1408
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:42
+msgid "/help/speeddial.html"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Cannot allocate memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:226
+#, c-format
+msgid ""
+"Error writing speed\n"
+"dial for key %d!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:298
+msgid "Cannot allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338
+msgid "Error reading file!"
+msgstr "Fehler beim Datei lesen!"
+
+#: xgnokii/xgnokii_speed.c:484
+msgid "Key"
+msgstr "Schöüssel"
+
+#: xgnokii/xgnokii_xkeyb.c:90
+msgid "/help/xkeyb.html"
+msgstr "/help/xkeyb.html"
+
+#: xgnokii/xgnokii_xkeyb.c:149
+msgid "Cannot load background pixmap!"
+msgstr "Kann Hintergrundbild nicht öffnen!"
+
+#: xgnokii/xgnokii_xkeyb.c:201
+msgid "/_File"
+msgstr "/_Datei"
+
+#: xgnokii/xgnokii_xkeyb.c:202
+msgid "/File/_Close"
+msgstr "/Datei/_Schließen"
+
+#: xgnokii/xgnokii_xkeyb.c:203
+msgid "/_Help"
+msgstr "/_Hilfe"
+
+#: xgnokii/xgnokii_xkeyb.c:204
+msgid "/Help/_Help"
+msgstr "/Hilfe/_Hilfe"
+
+#: xgnokii/xgnokii_xkeyb.c:205
+msgid "/Help/_About"
+msgstr "/Hilfe/_Über"
+
+#: xgnokii/xgnokii_xkeyb.c:218
+msgid "XGnokii Keyboard"
+msgstr "XGnokii Tastatur"
diff --git a/po/et.po b/po/et.po
new file mode 100644 (file)
index 0000000..9df54cb
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,3791 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-09-09 23:32+0200\n"
+"PO-Revision-Date: 2000-09-11 06:20:00+0200\n"
+"Last-Translator: Hans Mõtshärg <hans.motsharg@mail.ee>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:521 common/fbus-6110.c:2186
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Saadan SMS'i %s kasutades saatekeskust %s\n"
+
+#: common/fbus-3810.c:625
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "SMS saatmine ebaõnnestus, proovin veel (katse %d %d-st)\n"
+
+#: common/fbus-3810.c:1196
+msgid "Couldn't open FB38 device: "
+msgstr "Ei suuda avada FB38 seadet: "
+
+#: common/fbus-3810.c:1288
+msgid "restarting.\n"
+msgstr "käivitun uuesti.\n"
+
+#: common/fbus-3810.c:1344
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT Viga %02x"
+
+#: common/fbus-3810.c:1351 common/mbus-6160.c:1202
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS Viga %02x != %02x"
+
+#: common/fbus-3810.c:1465
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registreerimise vastus 0x%02x\n"
+
+#: common/fbus-3810.c:1481
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x15 Registreerimise vastus 0x%02x\n"
+
+#: common/fbus-3810.c:1482
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr ""
+
+#: common/fbus-3810.c:1558
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS salvestatud 0x%02x\n"
+
+#: common/fbus-3810.c:1568
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "SMS salvestamine 0x%02x ebaõnnestus\n"
+
+#: common/fbus-3810.c:1689
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [tõenäoliselt] sisestatud.\n"
+
+#: common/fbus-3810.c:1698
+msgid "Phone powering off..."
+msgstr "Telefon lülitub välja"
+
+#: common/fbus-3810.c:1727 common/mbus-6160.c:809
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1753
+msgid "Unknown: "
+msgstr "Tundmatu: "
+
+#: common/fbus-3810.c:1755
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Msg Tüüp: %02x "
+
+#: common/fbus-3810.c:1756
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Msg pikkus: %02x"
+
+#: common/fbus-3810.c:1757
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Järjenumber: %02x "
+
+#: common/fbus-3810.c:1758
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Kontrollsumma: %02x \n"
+"   "
+
+#: common/fbus-3810.c:1850 common/fbus-3810.c:1980
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1895
+msgid "TX_SendRLPFrame - write:"
+msgstr ""
+
+#: common/fbus-3810.c:1907
+msgid "Request HangupMessage Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1919
+msgid "0x4a Write failed!"
+msgstr "0x4a Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:1934
+msgid "Explore Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1944
+msgid "0x3f Write failed!"
+msgstr "0x3f Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2004
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2017
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2060
+msgid "Send SMS header failed!"
+msgstr "SMS päise saatmine ebaõnnestus!"
+
+#: common/fbus-3810.c:2119
+msgid "Store SMS header failed!"
+msgstr "SMS päise salvestamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2144
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2167
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2190
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "SMS kustutamine mälupesast ebaõnnestus!"
+
+#: common/fbus-3810.c:2209
+msgid "0x15 Write failed!"
+msgstr "0x15 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2226 common/mbus-6160.c:1280
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - sõnum on liiga pikk!\n"
+
+#: common/fbus-3810.c:2252 common/mbus-6160.c:1083 common/mbus-6160.c:1312
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - kirjuta:"
+
+#: common/fbus-3810.c:2265 common/fbus-3810.c:2398 common/fbus-3810.c:2412
+#: common/fbus-3810.c:2426 common/fbus-3810.c:2440 common/fbus-3810.c:2574
+#: common/fbus-3810.c:2635 common/fbus-3810.c:2694 common/fbus-3810.c:2732
+msgid "Write failed!"
+msgstr "Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2279
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Saabuv kõne - Tüüp: %s. %02x, Number %s.\n"
+
+#: common/fbus-3810.c:2306
+msgid "0x27 Write failed!"
+msgstr "0x27 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2354
+msgid "0x4b Write failed!"
+msgstr "0x4b Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2373
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Olek: %s Batt %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2384
+msgid "0x10 Write failed!"
+msgstr "0x10 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2388
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Kõne telefonilt katkestatud (0x10 teade).\n"
+
+#: common/fbus-3810.c:2402
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Kõne katkestatud vastuvõtja või võrgu poolt.\n"
+
+#: common/fbus-3810.c:2416
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Väljuv kõne katkestatud (0x12 teade).\n"
+
+#: common/fbus-3810.c:2430
+msgid "Incoming call answered from phone.\n"
+msgstr "Saabuv kõne vastatud.\n"
+
+#: common/fbus-3810.c:2444
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s kõne moodustatud - staatuse bitid %02x %02x.\n"
+
+#: common/fbus-3810.c:2461
+msgid "0x2c Write failed!"
+msgstr "0x2c Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2548
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Ajavöönd:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2615
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Saabuv SMS sõnum %d/%d/%d %d:%02d:%02d AV:0x%02x Saatja: %s(%02x tüüpi) Msg "
+"Keskus: %s\n"
+
+#: common/fbus-3810.c:2617
+#, c-format
+msgid ""
+"   Msg Length %d, Msg memory %d Msg number %d,  PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+"   Msg pikkus %d, Msg mälukoht %d Msg number %d, PID: %02x DCS: %02x "
+"Tundmatud baidid: %02x\n"
+
+#: common/fbus-3810.c:2710
+msgid "Mobile phone identification received:\n"
+msgstr "Mobiiltelefeni identifikaator saabus:\n"
+
+#: common/fbus-3810.c:2711
+#, c-format
+msgid "   IMEI:     %s\n"
+msgstr "   IMEI:     %s\n"
+
+#: common/fbus-3810.c:2713
+#, c-format
+msgid "   Model:    %s\n"
+msgstr "   Mudel:    %s\n"
+
+#: common/fbus-3810.c:2715
+#, c-format
+msgid "   Revision: %s\n"
+msgstr "   Versioon: %s\n"
+
+#: common/fbus-3810.c:2783
+msgid "SMS Message Center Data:\n"
+msgstr "SMS Keskuse info: \n"
+
+#: common/fbus-3810.c:2784
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Valitud mälu: 0x%02x\n"
+
+#: common/fbus-3810.c:2785
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Lühisõnumeid Telefonis: 0x%02x Lugemata: 0x%02x\n"
+
+#: common/fbus-3810.c:2787
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Lühisõnumeid SIM kaardil: 0x%02x Lugemata: 0x%02x\n"
+
+#: common/fbus-3810.c:2789
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr ""
+
+#: common/fbus-3810.c:2791
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Saateraport: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2793
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Sõnum saadetud nagu 0x%02x\n"
+
+#: common/fbus-3810.c:2794
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Sõnumi kehtivus on 0x%02x\n"
+
+#: common/fbus-3810.c:2795
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Tundmatu: 0x%02x\n"
+
+#: common/fbus-3810.c:2798
+msgid "UnknownNumber field empty."
+msgstr "TundmatuNumber väli on tühi."
+
+#: common/fbus-3810.c:2800
+msgid "UnknownNumber: "
+msgstr "TundmatuNumber: "
+
+#: common/fbus-3810.c:2807
+msgid "Number field empty."
+msgstr "Numbriväli on tühi."
+
+#: common/fbus-3810.c:2810
+msgid "Number: "
+msgstr "Number: "
+
+#: common/fbus-6110.c:891
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: common/fbus-6110.c:923
+msgid "Couldn't open FB61 infrared device"
+msgstr "Ei suuda avada FB61 IR-seadet"
+
+#: common/fbus-6110.c:991
+msgid "Starting IR mode...!\n"
+msgstr "Alustan IR ühendust...!\n"
+
+#: common/fbus-6110.c:2570 gnokii/gnokii.c:1056 gnokii/gnokii.c:1850
+#: gnokii/gnokii.c:3291 gnokii/gnokii.c:3318
+msgid "Send succeeded!\n"
+msgstr "Saatmine õnnestus!\n"
+
+#: common/fbus-6110.c:2572 gnokii/gnokii.c:1058 gnokii/gnokii.c:1852
+#: gnokii/gnokii.c:3293
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "SMS saatmine ebaõnnestus (viga=%d)\n"
+
+#: common/fbus-6110.c:2603
+msgid "Serial flags dump:\n"
+msgstr "Serialpordi lippude olek:\n"
+
+#: common/fbus-6110.c:2604 common/mbus-640.c:928
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR on %s.\n"
+
+#: common/fbus-6110.c:2604 common/fbus-6110.c:2605 common/fbus-6110.c:2606
+#: common/fbus-6110.c:2607 common/mbus-640.c:928 common/mbus-640.c:929
+msgid "up"
+msgstr "toimib"
+
+#: common/fbus-6110.c:2604 common/fbus-6110.c:2605 common/fbus-6110.c:2606
+#: common/fbus-6110.c:2607 common/mbus-640.c:928 common/mbus-640.c:929
+msgid "down"
+msgstr "maas"
+
+#: common/fbus-6110.c:2605 common/mbus-640.c:929
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS on %s.\n"
+
+#: common/fbus-6110.c:2606
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR on %s.\n"
+
+#: common/fbus-6110.c:2607
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS on %s.\n"
+
+#: common/fbus-6110.c:2642
+msgid "Setting FBUS communication...\n"
+msgstr "Tekitan FBUS ühendust...\n"
+
+#: common/fbus-6110.c:2673
+msgid "Couldn't open FB61 device"
+msgstr "Ei suuda avada FB61 seadet"
+
+#: common/fbus-6110.c:2800
+msgid "Message: Call message, type 0x02:"
+msgstr "Teade: Kõneteade, tüüp 0x02:"
+
+#: common/fbus-6110.c:2801 common/fbus-6110.c:2813 common/fbus-6110.c:2915
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Täpne tagamõte hetkel tundmatu ... :-(\n"
+
+#: common/fbus-6110.c:2811
+msgid "Message: Call message, type 0x03:"
+msgstr "Teade: Kõneteade, tüüp 0x03:"
+
+#: common/fbus-6110.c:2812 common/fbus-6110.c:2828 common/fbus-6110.c:2846
+#: common/fbus-6110.c:2877 common/fbus-6110.c:2888 common/fbus-6110.c:2914
+#, c-format
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Kõne järjenumber: %d\n"
+
+#: common/fbus-6110.c:2827
+msgid "Message: Remote end hang up.\n"
+msgstr "Teade: Teine pool katkestas kõne.\n"
+
+#: common/fbus-6110.c:2841
+msgid "Message: Incoming call alert:\n"
+msgstr "Teade: Saabuva kõne hoiatus:\n"
+
+#: common/fbus-6110.c:2847 common/fbus-6110.c:3130
+msgid "   Number: "
+msgstr "   Number: "
+
+#: common/fbus-6110.c:2855 common/fbus-6110.c:3114
+msgid "   Name: "
+msgstr "   Nimi: "
+
+#: common/fbus-6110.c:2876
+msgid "Message: Call answered.\n"
+msgstr "Sõnum: Kõne vastatud.\n"
+
+#: common/fbus-6110.c:2887
+msgid "Message: Call ended by your phone.\n"
+msgstr "Teade: Kõne lõpetatud oma telefoni poolt.\n"
+
+#: common/fbus-6110.c:2913
+msgid "Message: Call message, type 0x0a:"
+msgstr "Teade: Kõneteade, tüüp 0x0a:"
+
+#: common/fbus-6110.c:2926
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Teade: Tundmatu 0x01 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:2944
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Teade: SMS sõnum korrektselt saadetud.\n"
+
+#: common/fbus-6110.c:2955
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Teade: SMS sõnumi saatmine ebaõnnestus.\n"
+
+#: common/fbus-6110.c:2964
+msgid "Message: SMS Message Received\n"
+msgstr "Teade: SMS sõnum saabus\n"
+
+#: common/fbus-6110.c:2965 common/fbus-6110.c:4407
+#, c-format
+msgid "   SMS center number: %s\n"
+msgstr "   SMS keskuse number: %s\n"
+
+#: common/fbus-6110.c:2969 common/fbus-6110.c:4408
+#, c-format
+msgid "   Remote number: %s\n"
+msgstr "   Teise poole number: %s\n"
+
+#: common/fbus-6110.c:2970
+#, c-format
+msgid "   Date: %s\n"
+msgstr "   Kuupäev: %s\n"
+
+#: common/fbus-6110.c:2971
+msgid "   SMS: "
+msgstr "   SMS: "
+
+#: common/fbus-6110.c:2986
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Teade: SMS keskus korrektselt paigas.\n"
+
+#: common/fbus-6110.c:3002
+msgid "Message: SMS Center received:\n"
+msgstr "Teade: SMS keskus saabus:\n"
+
+#: common/fbus-6110.c:3003
+#, c-format
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. SMS Keskuse nimi on %s\n"
+
+#: common/fbus-6110.c:3004
+#, c-format
+msgid "   SMS Center number is %s\n"
+msgstr "   SMS keskuse number on %s\n"
+
+#: common/fbus-6110.c:3006
+msgid "   SMS Center message format is "
+msgstr "   SMS keskuse teate formaat on "
+
+#: common/fbus-6110.c:3011 gnokii/gnokii.c:1149 xgnokii/xgnokii.c:528
+#: xgnokii/xgnokii.c:557 xgnokii/xgnokii.c:1384
+msgid "Text"
+msgstr "Tekst"
+
+#: common/fbus-6110.c:3015 gnokii/gnokii.c:1153 xgnokii/xgnokii.c:532
+#: xgnokii/xgnokii.c:1398
+msgid "Paging"
+msgstr ""
+
+#: common/fbus-6110.c:3019 gnokii/gnokii.c:1157 xgnokii/xgnokii.c:536
+#: xgnokii/xgnokii.c:1391
+msgid "Fax"
+msgstr "Faks"
+
+#: common/fbus-6110.c:3023 gnokii/gnokii.c:1162
+msgid "Email"
+msgstr ""
+
+#: common/fbus-6110.c:3027 common/fbus-6110.c:3061 common/fbus-6110.c:4629
+#: common/fbus-6110.c:5167 gnokii/gnokii.c:1174 gnokii/gnokii.c:1208
+msgid "Unknown"
+msgstr "Tundmatu"
+
+#: common/fbus-6110.c:3032
+msgid "   SMS Center message validity is "
+msgstr "   SMS keskuse teate kehtivusaeg on "
+
+#: common/fbus-6110.c:3037 gnokii/gnokii.c:1184
+msgid "1 hour"
+msgstr "1 tund"
+
+#: common/fbus-6110.c:3041 gnokii/gnokii.c:1188
+msgid "6 hours"
+msgstr "6 tundi"
+
+#: common/fbus-6110.c:3045 gnokii/gnokii.c:1192
+msgid "24 hours"
+msgstr "24 tundi"
+
+#: common/fbus-6110.c:3049 gnokii/gnokii.c:1196
+msgid "72 hours"
+msgstr "72 tundi"
+
+#: common/fbus-6110.c:3053 gnokii/gnokii.c:1200 xgnokii/xgnokii.c:580
+#: xgnokii/xgnokii.c:1463
+msgid "1 week"
+msgstr "1 nädal"
+
+#: common/fbus-6110.c:3057 gnokii/gnokii.c:1204
+msgid "Maximum time"
+msgstr "Maksimaalne aeg"
+
+#: common/fbus-6110.c:3079
+msgid "Message: SMS Center error received:\n"
+msgstr "Teade: SMS keskuse viga saabus:\n"
+
+#: common/fbus-6110.c:3080
+msgid "   The request for SMS Center failed.\n"
+msgstr "   Sõnumikeskuse päring ebaõnnestus.\n"
+
+#: common/fbus-6110.c:3091
+msgid "Unknown message!\n"
+msgstr "Tundmatu sõnum!\n"
+
+#: common/fbus-6110.c:3113
+msgid "Message: Phonebook entry received:\n"
+msgstr "Teade: Telefoniraamatu kirje saabus:\n"
+
+#: common/fbus-6110.c:3150
+msgid "   Date: "
+msgstr "   Kuupäev: "
+
+#: common/fbus-6110.c:3152
+msgid "   Time: "
+msgstr "  Kellaaeg: "
+
+#: common/fbus-6110.c:3165
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Teade: Telefoniraamatu lugemise viga saabus:\n"
+
+#: common/fbus-6110.c:3173
+msgid "   Invalid memory type!\n"
+msgstr "   Vale mälu tüüp!\n"
+
+#: common/fbus-6110.c:3183 common/fbus-6110.c:3221
+msgid "   Unknown error!\n"
+msgstr "   Tundmatu viga!\n"
+
+#: common/fbus-6110.c:3194
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Teade: Telefoniraamat korrektselt kirjutatud.\n"
+
+#: common/fbus-6110.c:3211
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Teade: Telefoniraamatusse ei kirjutatud - nimi on liiga pikk.\n"
+
+#: common/fbus-6110.c:3232
+msgid "Message: Memory status received:\n"
+msgstr "Teade: Mälu olek saabus:\n"
+
+#: common/fbus-6110.c:3234
+#, c-format
+msgid "   Memory Type: %s\n"
+msgstr "   Mälu tüüp: %s\n"
+
+#: common/fbus-6110.c:3235
+#, c-format
+msgid "   Used: %d\n"
+msgstr "   Kasutatud: %d\n"
+
+#: common/fbus-6110.c:3236
+#, c-format
+msgid "   Free: %d\n"
+msgstr "   Vaba: %d\n"
+
+#: common/fbus-6110.c:3251
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Teade: Mälu oleku viga, telefon on tõenäoliselt väljalülitatud.\n"
+
+#: common/fbus-6110.c:3258
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Teade: Mälu oleku viga, mälu tüüp pole telefoni poolt toetatud.\n"
+
+#: common/fbus-6110.c:3265
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Teade: Mälu oleku viga, ootan turvakoodi.\n"
+
+#: common/fbus-6110.c:3272
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:3289
+msgid "Message: Caller group logo etc.\n"
+msgstr "Teade: Helistaja grupi Logo jms.\n"
+
+#: common/fbus-6110.c:3290
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Helistaja grupi nimi: %s\n"
+
+#: common/fbus-6110.c:3310
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Teade: Helistaja grupi andmed saabusid kuid polnud küsitud!\n"
+
+#: common/fbus-6110.c:3320
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Teade: Helistajagrupi andmete saamise viga.\n"
+
+#: common/fbus-6110.c:3328
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Teade: Helistaja grupi andmed korrektselt seatud.\n"
+
+#: common/fbus-6110.c:3336
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Teade: Helistajagrupi andmete seadmise viga.\n"
+
+#: common/fbus-6110.c:3347
+msgid "Message: Speed dial entry received:\n"
+msgstr "Teade: kiirvalimise kirje saabus:\n"
+
+#: common/fbus-6110.c:3348
+#, c-format
+msgid "   Location: %d\n"
+msgstr "   Asukoht: %d\n"
+
+#: common/fbus-6110.c:3349
+#, c-format
+msgid "   MemoryType: %s\n"
+msgstr "   Mälu tüüp: %s\n"
+
+#: common/fbus-6110.c:3350
+#, c-format
+msgid "   Number: %d\n"
+msgstr "   Number: %d\n"
+
+#: common/fbus-6110.c:3360
+msgid "Message: Speed dial entry error\n"
+msgstr "Teade: kiirvalimise sisestuse viga\n"
+
+#: common/fbus-6110.c:3370
+msgid "Message: Speed dial entry set.\n"
+msgstr "Teade: kiirvalimise kirje seatud.\n"
+
+#: common/fbus-6110.c:3380
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Teade: kiirvalimise kirje seade viga.\n"
+
+#: common/fbus-6110.c:3390
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Teade: Tundmatu 0x03 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3406
+msgid "Message: Phone status received:\n"
+msgstr "Teade: Telefoni olek saabunud:\n"
+
+#: common/fbus-6110.c:3407
+msgid "   Mode: "
+msgstr "   Olek: "
+
+#: common/fbus-6110.c:3413
+msgid "registered within the network\n"
+msgstr "registreeritud võrkku\n"
+
+#: common/fbus-6110.c:3422
+msgid "call in progress\n"
+msgstr "kõne käimas\n"
+
+#: common/fbus-6110.c:3428
+msgid "waiting for security code\n"
+msgstr "ootan turvakoodi.\n"
+
+#: common/fbus-6110.c:3434
+msgid "powered off\n"
+msgstr "toide välja\n"
+
+#: common/fbus-6110.c:3440 common/fbus-6110.c:3462
+msgid "unknown\n"
+msgstr "tundmatu\n"
+
+#: common/fbus-6110.c:3444
+msgid "   Power source: "
+msgstr "   Toiteallikas: "
+
+#: common/fbus-6110.c:3450
+msgid "AC/DC\n"
+msgstr "Vahelduvvool/Alalisvool\n"
+
+#: common/fbus-6110.c:3456
+msgid "battery\n"
+msgstr "aku\n"
+
+#: common/fbus-6110.c:3466
+#, c-format
+msgid "   Battery Level: %d\n"
+msgstr "   Aku laadumus: %d\n"
+
+#: common/fbus-6110.c:3467
+#, c-format
+msgid "   Signal strength: %d\n"
+msgstr "   Signaali väljatugevus: %d\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Teade: Tundmatu 0x04 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3495
+msgid "Message: Profile feature change result.\n"
+msgstr "Teade: Profiili omadus muutis tulemust.\n"
+
+#: common/fbus-6110.c:3553
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr "Teade: Saabusid Startup Logo, Teretere teade ja diileri tervitustede.\n"
+
+#: common/fbus-6110.c:3577
+msgid "Startup logo supported - "
+msgstr "Startup Logo on toetatud - "
+
+#: common/fbus-6110.c:3580
+msgid "currently set\n"
+msgstr "hetkel seatud\n"
+
+#: common/fbus-6110.c:3582 common/fbus-6110.c:3601 common/fbus-6110.c:3621
+#: gnokii/gnokii.c:2017
+msgid "currently empty\n"
+msgstr "hetkel tühi\n"
+
+#: common/fbus-6110.c:3594
+msgid "Startup Text supported - "
+msgstr "Startup Tekst on toetatud - "
+
+#: common/fbus-6110.c:3597 common/fbus-6110.c:3617
+msgid "currently set to \""
+msgstr "hetkel seatud \""
+
+#: common/fbus-6110.c:3598 common/fbus-6110.c:3618 common/fbus-6110.c:4755
+#: common/fbus-6110.c:4759
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: common/fbus-6110.c:3599 common/fbus-6110.c:3619
+msgid "\"\n"
+msgstr ""
+
+#: common/fbus-6110.c:3614
+msgid "Dealer Welcome supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3634
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Teade: Startup logo saabus, kuid pole küsitud!\n"
+
+#: common/fbus-6110.c:3643
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3669
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Teade: Operaatori Logo korrektselt paigas.\n"
+
+#: common/fbus-6110.c:3678
+msgid "Message: Error setting operator logo!\n"
+msgstr "Teade: Viga operaatori logo kehtestamisel!\n"
+
+#: common/fbus-6110.c:3701
+#, c-format
+msgid "Message: Operator Logo for %s (%s) network received.\n"
+msgstr "Teade: Saabus Operaatori Logo võrgule %s (%s).\n"
+
+#: common/fbus-6110.c:3719
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Teade: Operaatori Logo saabunud, kuid mitte küsitud!\n"
+
+#: common/fbus-6110.c:3728
+msgid "Message: Error getting operator logo!\n"
+msgstr "Teade: Viga operaatori logo võtmisel!\n"
+
+#: common/fbus-6110.c:3746
+msgid "Message: Security Code status received: "
+msgstr "Teade: Security koodi olek saabus: "
+
+#: common/fbus-6110.c:3752 gnokii/gnokii.c:1604
+msgid "waiting for Security Code.\n"
+msgstr "ootan Security koodi.\n"
+
+#: common/fbus-6110.c:3757 gnokii/gnokii.c:1609
+msgid "waiting for PIN.\n"
+msgstr "ootan PIN koodi.\n"
+
+#: common/fbus-6110.c:3762 gnokii/gnokii.c:1614
+msgid "waiting for PIN2.\n"
+msgstr "ootan PIN2 koodi.\n"
+
+#: common/fbus-6110.c:3767 gnokii/gnokii.c:1619
+msgid "waiting for PUK.\n"
+msgstr "ootan PUK koodi.\n"
+
+#: common/fbus-6110.c:3772 gnokii/gnokii.c:1624
+msgid "waiting for PUK2.\n"
+msgstr "ootan PUK2 koodi.\n"
+
+#: common/fbus-6110.c:3777 gnokii/gnokii.c:1629
+msgid "nothing to enter.\n"
+msgstr "pole midagi sisestada.\n"
+
+#: common/fbus-6110.c:3782 gnokii/gnokii.c:1634
+msgid "Unknown!\n"
+msgstr "Tundmatu!\n"
+
+#: common/fbus-6110.c:3794
+msgid "Message: Security code accepted.\n"
+msgstr "Teade: Security kood aksepteeritud.\n"
+
+#: common/fbus-6110.c:3804
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Teade: Security kood on vale. Sa pole telefoni õige omanik :-)\n"
+
+#: common/fbus-6110.c:3831
+msgid "Message: Network informations:\n"
+msgstr "Teade: Võrgu informatsioon:\n"
+
+#: common/fbus-6110.c:3833
+#, c-format
+msgid "   CellID: %s\n"
+msgstr "   KärjeID: %s\n"
+
+#: common/fbus-6110.c:3834
+#, c-format
+msgid "   LAC: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3835
+#, c-format
+msgid "   Network code: %s\n"
+msgstr "   Võrgu kood: %s\n"
+
+#: common/fbus-6110.c:3836
+#, c-format
+msgid "   Network name: %s (%s)\n"
+msgstr "   Võrgu nimi: %s (%s)\n"
+
+#: common/fbus-6110.c:3839
+msgid "   Status: "
+msgstr "   Olek: "
+
+#: common/fbus-6110.c:3842
+msgid "home network selected"
+msgstr "koduvõrk valitud"
+
+#: common/fbus-6110.c:3843
+msgid "roaming network"
+msgstr "roaming võrk"
+
+#: common/fbus-6110.c:3844
+msgid "requesting network"
+msgstr "võrgupäring"
+
+#: common/fbus-6110.c:3845
+msgid "not registered in the network"
+msgstr "pole võrkku registreerunud"
+
+#: common/fbus-6110.c:3846
+msgid "unknown"
+msgstr "tundmatu"
+
+#: common/fbus-6110.c:3851
+#, c-format
+msgid "   Network selection: %s\n"
+msgstr "   Võrgu valik: %s\n"
+
+#: common/fbus-6110.c:3851
+msgid "manual"
+msgstr "käsiraamat"
+
+#: common/fbus-6110.c:3851
+msgid "automatic"
+msgstr "automaatne"
+
+#: common/fbus-6110.c:3861
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Teade: Tundmatu 0x0a tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3878
+msgid "Message: Result of key "
+msgstr " "
+
+#: common/fbus-6110.c:3881
+msgid "press\n"
+msgstr "vajuta\n"
+
+#: common/fbus-6110.c:3882
+msgid "release\n"
+msgstr "vabasta\n"
+
+#: common/fbus-6110.c:3883
+msgid "press or release - error\n"
+msgstr "vajuta või vabasta - viga\n"
+
+#: common/fbus-6110.c:3890
+msgid "Message: Unknown message of type 0x0c\n"
+msgstr "Teade: Tundmatu 0x0c tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3925 gnokii/gnokii.c:3119
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Kõne on käimas: %s\n"
+
+#: common/fbus-6110.c:3926 gnokii/gnokii.c:3120
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Tundmatu: %s\n"
+
+#: common/fbus-6110.c:3927 gnokii/gnokii.c:3121
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Lugemata SMS: %s\n"
+
+#: common/fbus-6110.c:3928 gnokii/gnokii.c:3122
+#, c-format
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3929 gnokii/gnokii.c:3123
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Faxi kõne aktiivne: %s\n"
+
+#: common/fbus-6110.c:3930 gnokii/gnokii.c:3124
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Andmekõne aktiivne: %\n"
+
+#: common/fbus-6110.c:3931 gnokii/gnokii.c:3125
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Klaviatuuri lukk: %s\n"
+
+#: common/fbus-6110.c:3932 gnokii/gnokii.c:3126
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "SMS varamu on täis: %s\n"
+
+#: common/fbus-6110.c:3945
+msgid "Display output successfully disabled/enabled.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3955
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Tundmatu 0x0d tüüpi sõnum.\n"
+
+#: common/fbus-6110.c:3974
+msgid "Message: Date and time set correctly\n"
+msgstr "Teade: Kuupäev ja kellaaeg seatud korrektselt\n"
+
+#: common/fbus-6110.c:3984 common/fbus-6110.c:4030
+msgid "Message: Date and time set error\n"
+msgstr "Teade: Kuupäeva ja kellaaja seade viga\n"
+
+#: common/fbus-6110.c:4004
+msgid "Message: Date and time\n"
+msgstr "Teade: Kuupäev ja kellaaeg\n"
+
+#: common/fbus-6110.c:4005 common/fbus-6110.c:4158 gnokii/gnokii.c:2321
+#, c-format
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Kellaaeg: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4006
+#, c-format
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Kuupäev: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:4020
+msgid "Message: Alarm set correctly\n"
+msgstr "Teade: Äratus seatud õieti\n"
+
+#: common/fbus-6110.c:4042
+msgid "Message: Alarm\n"
+msgstr "Teade: Äratus\n"
+
+#: common/fbus-6110.c:4043
+#, c-format
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Äratus: %02d:%02d\n"
+
+#: common/fbus-6110.c:4044
+#, c-format
+msgid "   Alarm is %s\n"
+msgstr "   Äratus on %s\n"
+
+#: common/fbus-6110.c:4044 gnokii/gnokii.c:3119 gnokii/gnokii.c:3120
+#: gnokii/gnokii.c:3121 gnokii/gnokii.c:3122 gnokii/gnokii.c:3123
+#: gnokii/gnokii.c:3124 gnokii/gnokii.c:3125 gnokii/gnokii.c:3126
+msgid "on"
+msgstr "sisse"
+
+#: common/fbus-6110.c:4044 gnokii/gnokii.c:3119 gnokii/gnokii.c:3120
+#: gnokii/gnokii.c:3121 gnokii/gnokii.c:3122 gnokii/gnokii.c:3123
+#: gnokii/gnokii.c:3124 gnokii/gnokii.c:3125 gnokii/gnokii.c:3126
+msgid "off"
+msgstr "välja"
+
+#: common/fbus-6110.c:4060
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Teade: Tundmatu 0x11 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:4083
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Teade: Kalendri teate kirjutamine õnnestus!\n"
+
+#: common/fbus-6110.c:4093 common/fbus-6110.c:4103
+msgid "Message: Calendar note write failed!\n"
+msgstr "Teade: Kalendri teate kirjutamine ebaõnnestus!\n"
+
+#: common/fbus-6110.c:4112
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Tundmatu 0x13 tüüpi ja 0x65 alamtüüpi sõnum.\n"
+
+#: common/fbus-6110.c:4152
+msgid "Message: Calendar note received.\n"
+msgstr "Teade: Kalendri teade saabus\n"
+
+#: common/fbus-6110.c:4154 gnokii/gnokii.c:2317
+#, c-format
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Kuupäev: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4165 gnokii/gnokii.c:2326
+#, c-format
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Äratuse kuupäev: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4169 gnokii/gnokii.c:2330
+#, c-format
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Äratusaeg: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4174
+#, c-format
+msgid "   Type: %d\n"
+msgstr "   Tüüp: %d\n"
+
+#: common/fbus-6110.c:4175 gnokii/gnokii.c:2335
+#, c-format
+msgid "   Text: %s\n"
+msgstr "   Tekst: %s\n"
+
+#: common/fbus-6110.c:4178 gnokii/gnokii.c:2338
+#, c-format
+msgid "   Phone: %s\n"
+msgstr "   Telefon: %s\n"
+
+#: common/fbus-6110.c:4188
+msgid "Message: Calendar note not available\n"
+msgstr "Teade: Kalendri teade pole võimalik\n"
+
+#: common/fbus-6110.c:4198
+msgid "Message: Calendar note error\n"
+msgstr "Teade: Kalendri teate viga\n"
+
+#: common/fbus-6110.c:4220
+msgid "Message: Calendar note deleted\n"
+msgstr "Teade: Kalendri teade kustutatud\n"
+
+#: common/fbus-6110.c:4231
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Teade: Kalendri teadet ei saa kustutada\n"
+
+#: common/fbus-6110.c:4241
+msgid "Message: Calendar note deleting error\n"
+msgstr "Teade: Kalendri teate kustutamise viga\n"
+
+#: common/fbus-6110.c:4257
+msgid "Message: Calendar Alarm active\n"
+msgstr "Teade: Kalendri alarm aktiivne\n"
+
+#: common/fbus-6110.c:4258
+#, c-format
+msgid "   Item number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4266
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Teade: Tundmatu 0x13 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:4329
+msgid "Concatenated message!!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4350
+#, c-format
+msgid "Number: %d\n"
+msgstr "Number: %d\n"
+
+#: common/fbus-6110.c:4355
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4358
+msgid "Sent\n"
+msgstr "Saadetud\n"
+
+#: common/fbus-6110.c:4360
+msgid "Not sent\n"
+msgstr "Saatmata\n"
+
+#: common/fbus-6110.c:4364
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Teade: SMS sõnum saabus (telefon katkestas)\n"
+
+#: common/fbus-6110.c:4367
+msgid "Delivery Report\n"
+msgstr "Saateraport\n"
+
+#: common/fbus-6110.c:4369
+msgid "Unknown type\n"
+msgstr "Tundmatu tüüp\n"
+
+#: common/fbus-6110.c:4372
+msgid "Read\n"
+msgstr "Loe\n"
+
+#: common/fbus-6110.c:4374
+msgid "Not read\n"
+msgstr "Lugemata\n"
+
+#: common/fbus-6110.c:4376
+#, c-format
+msgid "   Date: %s "
+msgstr "   Kuupäev: %s "
+
+#: common/fbus-6110.c:4384 common/fbus-6110.c:4400 gnokii/gnokii.c:1338
+#: gnokii/gnokii.c:1351 gnokii/gnokii.c:1378
+#, c-format
+msgid "%02d00"
+msgstr ""
+
+#: common/fbus-6110.c:4391
+#, c-format
+msgid "   SMSC response date: %s "
+msgstr "   SMSC vastuse kuupäev: %s "
+
+#: common/fbus-6110.c:4475
+msgid "Delivered"
+msgstr "Saadetud"
+
+#: common/fbus-6110.c:4480
+msgid "SM received by the SME"
+msgstr ""
+
+#: common/fbus-6110.c:4483
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4486
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: common/fbus-6110.c:4494
+msgid "Failed"
+msgstr "Ebaõnnestus"
+
+#: common/fbus-6110.c:4501
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "Ajutine viga, SC ei proovi enam uuesti saata\n"
+
+#: common/fbus-6110.c:4506 common/fbus-6110.c:4599
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4510 common/fbus-6110.c:4603
+msgid "SME busy"
+msgstr "SME on hõivatud"
+
+#: common/fbus-6110.c:4514 common/fbus-6110.c:4607
+msgid "No response from SME"
+msgstr "SME ei vasta..."
+
+#: common/fbus-6110.c:4518 common/fbus-6110.c:4611
+msgid "Service rejected"
+msgstr "Teenus tagasilykatud"
+
+#: common/fbus-6110.c:4522 common/fbus-6110.c:4558 common/fbus-6110.c:4615
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: common/fbus-6110.c:4526 common/fbus-6110.c:4619
+msgid "Error in SME"
+msgstr "Viga SME-s"
+
+#: common/fbus-6110.c:4530 common/fbus-6110.c:4582 common/fbus-6110.c:4623
+#: common/fbus-6110.c:4633
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4537
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "Püsiv viga, SC ei proovi enam saatmist korrata\n"
+
+#: common/fbus-6110.c:4542
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4546
+msgid "Incompatibile destination"
+msgstr "Kokkusobimatu sihtpunkt"
+
+#: common/fbus-6110.c:4550
+msgid "Connection rejected by SME"
+msgstr "Ühendusest keelduti SME poolt"
+
+#: common/fbus-6110.c:4554
+msgid "Not obtainable"
+msgstr "Ei saa kätte"
+
+#: common/fbus-6110.c:4562
+msgid "No internetworking available"
+msgstr ""
+
+#: common/fbus-6110.c:4566
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4570
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4574
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4578
+msgid "SM does not exist"
+msgstr ""
+
+#: common/fbus-6110.c:4591
+msgid "Pending"
+msgstr "Ootel"
+
+#: common/fbus-6110.c:4595
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "Ajutine viga, SC püüab ikkagi saata SM'i\n"
+
+#: common/fbus-6110.c:4661
+msgid "Message: SMS reading failed.\n"
+msgstr "Teade: SMS lugemine ebaõnnestus.\n"
+
+#: common/fbus-6110.c:4669
+msgid "   Invalid location!\n"
+msgstr "   Vale asukoht!\n"
+
+#: common/fbus-6110.c:4679
+msgid "   Empty SMS location.\n"
+msgstr "   Tühi SMS mälupesa.\n"
+
+#: common/fbus-6110.c:4692
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Teade: SMS kustutamine õnnestus.\n"
+
+#: common/fbus-6110.c:4702
+msgid "Message: SMS Status Received\n"
+msgstr "Teade: SMS olek saabus\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid "   The number of messages: %d\n"
+msgstr "   Sõnumite arv: %d\n"
+
+#: common/fbus-6110.c:4704
+#, c-format
+msgid "   Unread messages: %d\n"
+msgstr "   Lugemata sõnumeid: %d\n"
+
+#: common/fbus-6110.c:4716
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Teade: SMS oleku viga, tõenäoliselt PIN koodiga autoriseerimata\n"
+
+#: common/fbus-6110.c:4743
+msgid "Message: Security code received: "
+msgstr "Teade: Turvakood saabus: "
+
+#: common/fbus-6110.c:4745 gnokii/gnokii.c:1683
+msgid "Security code"
+msgstr "Turvakood"
+
+#: common/fbus-6110.c:4746 gnokii/gnokii.c:1673 gnokii/gnokii.c:1684
+msgid "PIN"
+msgstr ""
+
+#: common/fbus-6110.c:4747 gnokii/gnokii.c:1674 gnokii/gnokii.c:1685
+msgid "PIN2"
+msgstr ""
+
+#: common/fbus-6110.c:4748 gnokii/gnokii.c:1675 gnokii/gnokii.c:1686
+msgid "PUK"
+msgstr ""
+
+#: common/fbus-6110.c:4749 gnokii/gnokii.c:1676 gnokii/gnokii.c:1687
+msgid "PUK2"
+msgstr ""
+
+#: common/fbus-6110.c:4750
+msgid "unknown !"
+msgstr "tundmatu !"
+
+#: common/fbus-6110.c:4753
+msgid " allowed, value \""
+msgstr ""
+
+#: common/fbus-6110.c:4761
+msgid "\""
+msgstr ""
+
+#: common/fbus-6110.c:4763
+msgid " not allowed"
+msgstr ""
+
+#: common/fbus-6110.c:4765
+msgid "\n"
+msgstr ""
+
+#: common/fbus-6110.c:4792
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Teade: Võrgumonitor korrektselt paigas.\n"
+
+#: common/fbus-6110.c:4802
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Teade: Võrgumonitori menüü %d saabunud:\n"
+
+#: common/fbus-6110.c:4818
+msgid "Unknown message of type 0x40.\n"
+msgstr "Tundmatu 0x40 tüüpi sõnum.\n"
+
+#: common/fbus-6110.c:4840
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Teade: Mobiiltelefoni identiteet saabunud:\n"
+
+#: common/fbus-6110.c:4841
+#, c-format
+msgid "   IMEI: %s\n"
+msgstr "   IMEI: %s\n"
+
+#: common/fbus-6110.c:4843
+#, c-format
+msgid "   Model: %s\n"
+msgstr "   Mudel: %s\n"
+
+#: common/fbus-6110.c:4845
+#, c-format
+msgid "   Production Code: %s\n"
+msgstr "   Valmistuskood: %s\n"
+
+#: common/fbus-6110.c:4847
+#, c-format
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: common/fbus-6110.c:4849
+#, c-format
+msgid "   Firmware: %s\n"
+msgstr "   Riistvara: %s\n"
+
+#: common/fbus-6110.c:4855
+#, c-format
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Maagilised baidid: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4875
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: common/fbus-6110.c:4893
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4917
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4933
+msgid "Message: Unknown message.\n"
+msgstr "Teade: Tundmatu sõnum.\n"
+
+#: common/fbus-6110.c:5031
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5032
+msgid "Please report it ...\n"
+msgstr "Palun teata sellest ... \n"
+
+#: common/fbus-6110.c:5099
+msgid "Bad checksum!\n"
+msgstr "Vale kontrollsumma!\n"
+
+#: common/fbus-6110.c:5161 xgnokii/xgnokii.c:1698
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:5164
+msgid "PC"
+msgstr ""
+
+#: common/fbus-6110.c:5182
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Msg sihtpunkt: %s\n"
+
+#: common/fbus-6110.c:5183
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Msg allikas: %s\n"
+
+#: common/fbus-6110.c:5185
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Msg tüüp: %02x\n"
+
+#: common/fbus-6110.c:5187
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Msg tundmatu: %02x\n"
+
+#: common/fbus-6110.c:5188
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Msg pikkus: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:5259
+msgid "PC: "
+msgstr ""
+
+#: common/fbus-6110.c:5333
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: common/mbus-6160.c:761
+msgid "Standard Ack write (0x40) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:787
+msgid "Standard Ack write (0xd2) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:1232
+msgid "Couldn't open MB61 device: "
+msgstr "Ei suuda avada MB61 seadet: "
+
+#: common/mbus-640.c:821
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:851 common/mbus-640.c:951
+msgid "PC   : "
+msgstr "PC   : "
+
+#: common/mbus-640.c:861 common/mbus-640.c:964
+msgid "Write error!\n"
+msgstr "Kirjutamine ebaõnnestus!\n"
+
+#: common/mbus-640.c:888
+msgid "Setting MBUS communication...\n"
+msgstr "Tekitan MBUS ühendust...\n"
+
+#: common/rlp-common.c:701
+msgid "Unknown!!! "
+msgstr "Tundmatu!!!"
+
+#: common/rlp-common.c:766
+msgid "BAD"
+msgstr ""
+
+#: common/rlp-common.c:888
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "FCS blokk on vigane. Ignoreerin ...\n"
+
+#: common/rlp-common.c:1003
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1004
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1375
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1412
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1477
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1511
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1568
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1626
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1764
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1823
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1853
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1894
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:168
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versioon %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Eestikeelne tõlge Hans Mõtshärg <hans.motsharg@mail.ee>, 2000\n"
+"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n"
+
+#: gnokii/gnokii.c:182
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index [-v]\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --sendlogo {caller|op} destination logofile [network code]\n"
+"          gnokii --setlogo op [logofile] [network code]\n"
+"          gnokii --setlogo startup [logofile]\n"
+"          gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+"          gnokii --setlogo {dealer|text} [text]\n"
+"          gnokii --getlogo op [logofile] [network code]\n"
+"          gnokii --getlogo startup [logofile] [network code]\n"
+"          gnokii --getlogo caller [logofile] [caller group number] [network "
+"code]\n"
+"          gnokii --getlogo {dealer|text}\n"
+"          gnokii --fileconvert source destination\n"
+"          gnokii --fileconvert source destination op [network code]\n"
+"          gnokii --fileconvert source destination caller [caller group "
+"number]\n"
+"          gnokii --fileconvert source destination startup\n"
+"          gnokii --sendringtone destination rtttlfile\n"
+"          gnokii --setringtone rtttlfile\n"
+"          gnokii --presskeysequence sequence\n"
+"          gnokii --reset [soft|hard]\n"
+"          gnokii --getprofile [number]\n"
+"          gnokii --displayoutput\n"
+msgstr ""
+
+#: gnokii/gnokii.c:228
+msgid ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+"          gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode\n"
+msgstr ""
+
+#: gnokii/gnokii.c:234
+msgid ""
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output "
+"of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken "
+"from\n"
+"                            phone memory from address "
+"[message_center_index].\n"
+"                            If this argument is ommited SMSC number is "
+"taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"                             [--long n] - send no more then n characters,\n"
+"                                          default is 160\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number index from calendar.\n"
+"                             [-v] - output in vCalendar 1.0 format\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --sendlogo        send the logofile to destination as operator\n"
+"                            or CLI logo\n"
+"\n"
+"          --setlogo         set caller, startup, operator logo\n"
+"                            or (dealer) welcome note\n"
+"                            If you will not give logofile|text, it will be\n"
+"                            removed from phone\n"
+"                            If you will not give network code, it will be\n"
+"                            set to current\n"
+"                            If you will not give caller group number, it "
+"will be\n"
+"                            set to 0\n"
+"\n"
+"          --getlogo         get caller, startup, operator logo\n"
+"\n"
+"                            or (dealer) welcome note\n"
+"                            If you will give network code and write logo in "
+"NOL\n"
+"                            format, it will be written there\n"
+"                            If you will not specify logofile, gnokii will "
+"show\n"
+"                            info about logo only\n"
+"\n"
+"          --fileconvert     Converts logo files\n"
+"\n"
+"          --sendringtone    send the rtttlfile to destination as ringtone\n"
+"\n"
+"          --setringtone     set the rtttlfile as ringtone (on 6110)\n"
+"\n"
+"          --presskeysequence  presses some keys in phone keyboard\n"
+"                              available keys: 0..9, #, *, m (Menu), n "
+"(Names),\n"
+"                              p (Power), g (Green), r (Red), +, - (Volume "
+"+-),\n"
+"                              u (Up), d (Down)\n"
+"                              w means 2 sec. pause (useful, when you "
+"simulate\n"
+"                              writing SMS)\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+"          --getprofile [number] show settings for selected(all) profile(s)\n"
+"\n"
+"          --displayoutput   show texts displayed in phone's screen\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:343
+msgid ""
+"          --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+"          --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+"          --getsecuritycode gets specified code from phone\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:3263 gnokiid/virtmodem.c:262
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS initsialiseerimine ebaõnnestus! (Tundmatu mudel?). Lõpetan....)\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan.\n"
+
+#: gnokii/gnokii.c:653
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Kasuta '%s --help' kasutusinfo saamiseks.\n"
+
+#: gnokii/gnokii.c:856
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Tundmatu valik: %d\n"
+
+#: gnokii/gnokii.c:866
+msgid "Wrong number of arguments\n"
+msgstr "Vale argumentide kogus\n"
+
+#: gnokii/gnokii.c:937 gnokii/gnokii.c:995
+msgid "Input too long!\n"
+msgstr "Sisend on liiga pikk!\n"
+
+#: gnokii/gnokii.c:990
+msgid "Couldn't read from stdin!\n"
+msgstr "Ei suuda lugeda standard sisendist!\n"
+
+#: gnokii/gnokii.c:1101
+#, c-format
+msgid "Unknown key: %c !\n"
+msgstr "Tundmatu võti: %c !\n"
+
+#: gnokii/gnokii.c:1108
+msgid "Can't press key !\n"
+msgstr "Nuppu ei saa vajutada?! \n"
+
+#: gnokii/gnokii.c:1114
+msgid "Can't release key !\n"
+msgstr "Nuppu ei saa vabastada?! \n"
+
+#: gnokii/gnokii.c:1142
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d. SMS keskuse (%s) number on %s\n"
+
+#: gnokii/gnokii.c:1144
+msgid "Messages sent as "
+msgstr "Sõnum saadetud nagu "
+
+#: gnokii/gnokii.c:1166 xgnokii/xgnokii.c:545
+msgid "ERMES"
+msgstr ""
+
+#: gnokii/gnokii.c:1170 xgnokii/xgnokii.c:549
+msgid "X.400"
+msgstr ""
+
+#: gnokii/gnokii.c:1179
+msgid "Message validity is "
+msgstr "Sõnumi kehtivus on"
+
+#: gnokii/gnokii.c:1215
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1284 gnokii/gnokii.c:1491 gnokii/gnokii.c:2855
+#: gnokii/gnokii.c:3040
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Tundmatu mälu tüüp %s!\n"
+
+#: gnokii/gnokii.c:1311
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Saadetud Sõnumid "
+
+#: gnokii/gnokii.c:1314
+msgid "(sent)\n"
+msgstr "(saadetud)\n"
+
+#: gnokii/gnokii.c:1316
+msgid "(not sent)\n"
+msgstr "(ei saadetud)\n"
+
+#: gnokii/gnokii.c:1318 gnokii/gnokii.c:1357
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Tekst: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Saateraport "
+
+#: gnokii/gnokii.c:1326 gnokii/gnokii.c:1366
+msgid "(read)\n"
+msgstr "(loetud)\n"
+
+#: gnokii/gnokii.c:1328 gnokii/gnokii.c:1368
+msgid "(not read)\n"
+msgstr "(ei loetud)\n"
+
+#: gnokii/gnokii.c:1330
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Saatmise kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1336 gnokii/gnokii.c:1349 gnokii/gnokii.c:1376
+#, c-format
+msgid "+%02d00"
+msgstr ""
+
+#: gnokii/gnokii.c:1343
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Vastuse kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1356
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Saaja: %s Msg keskus: %s\n"
+
+#: gnokii/gnokii.c:1363
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Saabunud Sõnumid "
+
+#: gnokii/gnokii.c:1370
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Kuupäv/kellaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1382
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Saatja: %s Msg kekus: %s\n"
+
+#: gnokii/gnokii.c:1388
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Seotud (%d/%d):\n"
+
+#: gnokii/gnokii.c:1394
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Tekst:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1403 gnokii/gnokii.c:1514 gnokii/gnokii.c:1580
+#: gnokii/gnokii.c:1693 gnokii/gnokii.c:2773 gnokii/gnokii.c:2882
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "%s mudelis pole see funktsioon rakendatud!\n"
+
+#: gnokii/gnokii.c:1409
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Sobimatu asukoht: %s %d\n"
+
+#: gnokii/gnokii.c:1415
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS asukoht %s %d on tühi.\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"LaeSMS %s %d ebõnnestus!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1511
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "Kustutatud SMS %s %d\n"
+
+#: gnokii/gnokii.c:1518
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"KustutaSMS %s %d ei õnnestunud!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1561 gnokii/gnokii.c:1660
+msgid ""
+"Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1569
+msgid "Enter your code: "
+msgstr "Sisesta oma kood: "
+
+#: gnokii/gnokii.c:1576
+msgid "Error: invalid code.\n"
+msgstr "VIGA: Vale kood.\n"
+
+#: gnokii/gnokii.c:1578
+msgid "Code ok.\n"
+msgstr "Kood OK.\n"
+
+#: gnokii/gnokii.c:1582 gnokii/gnokii.c:1696
+msgid "Other error.\n"
+msgstr "Muu viga.\n"
+
+#: gnokii/gnokii.c:1598
+msgid "Security code status: "
+msgstr "Turvakoodi olek:"
+
+#: gnokii/gnokii.c:1670
+msgid "Error: getting "
+msgstr "Viga: võtmisel n"
+
+#: gnokii/gnokii.c:1672
+msgid "security code"
+msgstr "Turvakood"
+
+#: gnokii/gnokii.c:1679
+msgid " not allowed\n"
+msgstr " pole lubatud\n"
+
+#: gnokii/gnokii.c:1690
+#, c-format
+msgid " is %s\n"
+msgstr " on %s\n"
+
+#: gnokii/gnokii.c:1762
+msgid "Sending operator logo.\n"
+msgstr "Saadan operaatori logo.\n"
+
+#: gnokii/gnokii.c:1766
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1768
+msgid "It isn't possible to send startup logo!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1771
+msgid "Sending picture image is not implemented !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1774
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1785 gnokii/gnokii.c:1876 gnokii/gnokii.c:1950
+#: gnokii/gnokii.c:2067 gnokii/gnokii.c:2125
+#, c-format
+msgid "Can't open logofile %s !\n"
+msgstr "Ei suuda logofaili %s avada!\n"
+
+#: gnokii/gnokii.c:1787 gnokii/gnokii.c:1878 gnokii/gnokii.c:2127
+#, c-format
+msgid "Wrong number of colors in %s logofile (accepted only 2-colors files) !\n"
+msgstr "Vale värvide kogus %s logofailis (toetatud on ainult 2 värvi)!\n"
+
+#: gnokii/gnokii.c:1789 gnokii/gnokii.c:1880 gnokii/gnokii.c:2129
+#, c-format
+msgid "Wrong colors in %s logofile !\n"
+msgstr "%s logofailis on valed värvid !\n"
+
+#: gnokii/gnokii.c:1791 gnokii/gnokii.c:1882 gnokii/gnokii.c:2131
+#, c-format
+msgid "Invalid format of %s logofile !\n"
+msgstr "Sobimatu formaat %s logofailile !\n"
+
+#: gnokii/gnokii.c:1793 gnokii/gnokii.c:1884 gnokii/gnokii.c:2133
+#, c-format
+msgid "%s logofile is too short !\n"
+msgstr "% logofail on liiga lühike !\n"
+
+#: gnokii/gnokii.c:1795
+msgid "Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 and 72x28 !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1814
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Operaatori kood: %s\n"
+
+#: gnokii/gnokii.c:1869
+msgid "Files can't have the same names !\n"
+msgstr "Failidel ei saa olla sama nimi !!\n"
+
+#: gnokii/gnokii.c:1886 gnokii/gnokii.c:2135
+msgid "Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 and 72x28!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2000
+msgid "Getting Logo\n"
+msgstr "Võtan logo\n"
+
+#: gnokii/gnokii.c:2009
+msgid "Dealer welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:2010
+msgid "Welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr "hetkel seatud \"%s\"\n"
+
+#: gnokii/gnokii.c:2079
+msgid "Function not implemented !\n"
+msgstr "See funktsioon pole rakendatud!\n"
+
+#: gnokii/gnokii.c:2082
+msgid "This kind of logo is not supported !\n"
+msgstr "Sellist tüüpi logo toetus pole rakendatud !\n"
+
+#: gnokii/gnokii.c:2085
+msgid "Error getting logo !\n"
+msgstr "Viga logo võtmisel !\n"
+
+#: gnokii/gnokii.c:2091
+msgid "What kind of logo do you want to get ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2182
+msgid "Setting Logo.\n"
+msgstr "Määran logo.\n"
+
+#: gnokii/gnokii.c:2196
+msgid "Removing Logo.\n"
+msgstr "Eemaldan logo.\n"
+
+#: gnokii/gnokii.c:2200
+msgid "What kind of logo do you want to set ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2210
+msgid "Done.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2212
+msgid "Function not implemented.\n"
+msgstr "See funktsioon pole rakendatud.\n"
+
+#: gnokii/gnokii.c:2214
+msgid "This kind of logo is not supported.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2216
+msgid "Error !\n"
+msgstr "Viga !\n"
+
+#: gnokii/gnokii.c:2292
+msgid "   Type of the note: "
+msgstr "   Märke tüüp :"
+
+#: gnokii/gnokii.c:2297
+msgid "Reminder\n"
+msgstr "Meeldetuletus\n"
+
+#: gnokii/gnokii.c:2301
+msgid "Call\n"
+msgstr "Kõne\n"
+
+#: gnokii/gnokii.c:2305
+msgid "Meeting\n"
+msgstr "Koosolek\n"
+
+#: gnokii/gnokii.c:2309
+msgid "Birthday\n"
+msgstr "Sünnipäev\n"
+
+#: gnokii/gnokii.c:2313
+msgid "Unknown\n"
+msgstr "Tundmatu\n"
+
+#: gnokii/gnokii.c:2342
+msgid "The calendar note can not be read\n"
+msgstr "Kalendri kirjet ei saa lugeda\n"
+
+#: gnokii/gnokii.c:2381 gnokii/gnokii.c:3051
+msgid "Succesfully written!\n"
+msgstr "Edukalt kirjutatud!\n"
+
+#: gnokii/gnokii.c:2401
+msgid "   Calendar note deleted.\n"
+msgstr "   Kalendri kirje kustutatud.\n"
+
+#: gnokii/gnokii.c:2404
+msgid "The calendar note can not be deleted\n"
+msgstr "Kalendri kirjet ei saa kustutada\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Kuupäev: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2474
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Kellaaeg: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2510
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Äratus: %s\n"
+
+#: gnokii/gnokii.c:2511
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Kellaaeg: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2552
+msgid "Entering monitor mode...\n"
+msgstr "Siirdun monitooringu olekusse...\n"
+
+#: gnokii/gnokii.c:2553
+msgid "Initialising GSM interface...\n"
+msgstr "Initsialiseerin GSM liidest...\n"
+
+#: gnokii/gnokii.c:2564
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Väljatugevus: %d\n"
+
+#: gnokii/gnokii.c:2567
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Aku: %d\n"
+
+#: gnokii/gnokii.c:2570
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Toiteallikas: %s\n"
+
+#: gnokii/gnokii.c:2570
+msgid "AC/DC"
+msgstr "Vahelduvvool/Alalisvool"
+
+#: gnokii/gnokii.c:2570
+msgid "battery"
+msgstr "aku"
+
+#: gnokii/gnokii.c:2573
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2576
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2579
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2582
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2585
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2588
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2591
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2594
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2597
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2600
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Tekstisõnumeid: lugemata %d, number %d\n"
+
+#: gnokii/gnokii.c:2603
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Saabuv kõne: %s\n"
+
+#: gnokii/gnokii.c:2606
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Võrk:  %s (%s), LAC: %s, KärjeID: %s\n"
+
+#: gnokii/gnokii.c:2611
+msgid "Leaving monitor mode...\n"
+msgstr "Lahkun monitooringu olekust...\n"
+
+#: gnokii/gnokii.c:2636
+msgid "Entering display monitoring mode...\n"
+msgstr "Siirdun monitooringu olekusse...\n"
+
+#: gnokii/gnokii.c:2644
+msgid "Leaving display monitor mode...\n"
+msgstr "Lahkun monitooringu olekust...\n"
+
+#: gnokii/gnokii.c:2648 gnokii/gnokii.c:2650
+msgid "Error!\n"
+msgstr "Viga!\n"
+
+#: gnokii/gnokii.c:2699
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2706
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "See telefon toetab ainult %d profiile!\n"
+
+#: gnokii/gnokii.c:2778
+msgid "Unspecified error\n"
+msgstr "Dokumenteerimata viga\n"
+
+#: gnokii/gnokii.c:2887
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Mälu tüüp %s pole toetatud!\n"
+
+#: gnokii/gnokii.c:2892
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Vale asukoht või muu viga!(%d)\n"
+
+#: gnokii/gnokii.c:2969
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Formaadi probleem real %d [%s]\n"
+
+#: gnokii/gnokii.c:2991
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Salvestamine õnnestus: mälu tüüp: %s, asukoht: %d, nimi: %s, number: %s\n"
+
+#: gnokii/gnokii.c:2993
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Salvestamine(%d) EBAÕNNESTUS: mälu tüüp: %s, asukoht: %d, nimi: %s, number: %s\n"
+
+#: gnokii/gnokii.c:3013
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr "Kiirvalik nr. %d: %d:%d\n"
+
+#: gnokii/gnokii.c:3085 gnokiid/gnokiid.c:148
+#, c-format
+msgid "Couldn't open %s or /etc/gnokiirc, using default config\n"
+msgstr "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni vaikeväärtusi!\n"
+
+#: gnokii/gnokii.c:3178
+#, c-format
+msgid "IMEI:     %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3179
+#, c-format
+msgid "Model:    %s\n"
+msgstr "Mudel:    %s\n"
+
+#: gnokii/gnokii.c:3180
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Versioon: %s\n"
+
+#: gnokii/gnokii.c:3213
+msgid ""
+"What kind of reset do you want (second parameter can be \"soft\" or "
+"\"hard\") ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3281 gnokii/gnokii.c:3307
+msgid "Failed to load ringtone.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3320
+msgid "Send failed\n"
+msgstr "Saatmine ebaõnnestus!\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid ""
+"gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versioon %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Eestikeelne tõlge Hans Mõtshärg <hans.motsharg@mail.ee>, 2000\n"
+"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n"
+
+#: gnokiid/gnokiid.c:70
+msgid ""
+"   usage: gnokiid {--help|--version}\n"
+"          --help            display usage information.          --version    "
+"     displays version and copyright information.          --debug           "
+"uses stdin/stdout for virtual modem comms.\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:87
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:94
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:198
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:206
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid ei tohiks root õigustes installerida!\n"
+
+#: gnokiid/virtmodem.c:210
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:274
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan. \n"
+
+#: xgnokii/xgnokii.c:196
+msgid "Reading caller groups names ..."
+msgstr "Loen helistaja grupide nimesid...."
+
+#: xgnokii/xgnokii.c:200 xgnokii/xgnokii.c:993
+msgid "Familly"
+msgstr "Perekond"
+
+#: xgnokii/xgnokii.c:201 xgnokii/xgnokii.c:1005
+msgid "VIP"
+msgstr ""
+
+#: xgnokii/xgnokii.c:202 xgnokii/xgnokii.c:1017
+msgid "Friends"
+msgstr "Sõbrad"
+
+#: xgnokii/xgnokii.c:203 xgnokii/xgnokii.c:1029
+msgid "Colleagues"
+msgstr "Kolleegid"
+
+#: xgnokii/xgnokii.c:204 xgnokii/xgnokii.c:1041
+msgid "Other"
+msgstr "Muud"
+
+#: xgnokii/xgnokii.c:205
+msgid "No group"
+msgstr "Grupita"
+
+#: xgnokii/xgnokii.c:324
+msgid "Short Message received"
+msgstr "Saabus Lühisõnum"
+
+#: xgnokii/xgnokii.c:336
+msgid "Working ..."
+msgstr "Toimetan..."
+
+#: xgnokii/xgnokii.c:353
+msgid "Call in progress"
+msgstr "kõne käimas"
+
+#: xgnokii/xgnokii.c:366
+msgid "Hide"
+msgstr "Peida"
+
+#: xgnokii/xgnokii.c:463
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Kõne on käimas:\n"
+"Aeg: %s"
+
+#: xgnokii/xgnokii.c:466
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Saabuv kõne: %s\n"
+"Kellaaeg: %s"
+
+#: xgnokii/xgnokii.c:519 xgnokii/xgnokii_sms.c:580
+#, c-format
+msgid "Set %d"
+msgstr "Sea %d"
+
+#: xgnokii/xgnokii.c:541 xgnokii/xgnokii.c:1405
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:553
+msgid "Voice"
+msgstr "Kõne"
+
+#: xgnokii/xgnokii.c:564 xgnokii/xgnokii.c:1435
+msgid "1 h"
+msgstr "1 t"
+
+#: xgnokii/xgnokii.c:568 xgnokii/xgnokii.c:1442
+msgid "6 h"
+msgstr "6 t"
+
+#: xgnokii/xgnokii.c:572 xgnokii/xgnokii.c:588 xgnokii/xgnokii.c:1449
+msgid "24 h"
+msgstr "24 t"
+
+#: xgnokii/xgnokii.c:576 xgnokii/xgnokii.c:1456
+msgid "72 h"
+msgstr "72 t"
+
+#: xgnokii/xgnokii.c:584
+msgid "Max. time"
+msgstr "Max. aeg"
+
+#: xgnokii/xgnokii.c:631
+msgid "Reading SMS centers ..."
+msgstr "Laadin SMS keskusi ..."
+
+#: xgnokii/xgnokii.c:984
+msgid "Error saving SMS centers!"
+msgstr "Viga SMS keskuste salvestamisel!"
+
+#: xgnokii/xgnokii.c:1054
+msgid "Error writing configuration file!"
+msgstr "Viga konfiguratsioonifaili salvestamisel!"
+
+#: xgnokii/xgnokii.c:1066 xgnokii/xgnokii_contacts.c:2740
+msgid "Contacts"
+msgstr "Kontaktid"
+
+#: xgnokii/xgnokii.c:1072 xgnokii/xgnokii.c:1808
+msgid "SMS"
+msgstr "Lühisõnumid"
+
+#: xgnokii/xgnokii.c:1077
+msgid "Calendar"
+msgstr "Kalender"
+
+#: xgnokii/xgnokii.c:1082 xgnokii/xgnokii_logos.c:1190
+msgid "Logos"
+msgstr "Logod"
+
+#: xgnokii/xgnokii.c:1088
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1093 xgnokii/xgnokii_speed.c:560
+msgid "Speed Dial"
+msgstr "Kiirvalik"
+
+#: xgnokii/xgnokii.c:1098
+msgid "Keyboard"
+msgstr "Klaviatuur"
+
+#: xgnokii/xgnokii.c:1103 xgnokii/xgnokii_netmon.c:318
+msgid "Net Monitor"
+msgstr "Võrgu Monitor"
+
+#: xgnokii/xgnokii.c:1112 xgnokii/xgnokii.c:1568
+msgid "Options"
+msgstr "Valikud"
+
+#: xgnokii/xgnokii.c:1122 xgnokii/xgnokii.c:2088
+msgid "Help"
+msgstr "Abi"
+
+#: xgnokii/xgnokii.c:1128 xgnokii/xgnokii.c:1145
+msgid "About"
+msgstr "Üldist"
+
+#: xgnokii/xgnokii.c:1149 xgnokii/xgnokii.c:1329
+#: xgnokii/xgnokii_contacts.c:808 xgnokii/xgnokii_contacts.c:938
+#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:2567
+#: xgnokii/xgnokii_sms.c:477
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1162
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+"xgnokii versioon: %s\n"
+"gnokii versioon: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+
+#: xgnokii/xgnokii.c:1323
+msgid "Edit SMS Setting"
+msgstr "Muuda SMS seadeid"
+
+#: xgnokii/xgnokii.c:1337 xgnokii/xgnokii_common.c:247
+#: xgnokii/xgnokii_common.c:333 xgnokii/xgnokii_contacts.c:816
+#: xgnokii/xgnokii_contacts.c:946 xgnokii/xgnokii_contacts.c:1175
+#: xgnokii/xgnokii_contacts.c:1221 xgnokii/xgnokii_contacts.c:1312
+#: xgnokii/xgnokii_contacts.c:1585 xgnokii/xgnokii_contacts.c:2574
+#: xgnokii/xgnokii_sms.c:485
+msgid "Cancel"
+msgstr "Tühista"
+
+#: xgnokii/xgnokii.c:1350
+msgid "Set's name:"
+msgstr "Seade nimi:"
+
+#: xgnokii/xgnokii.c:1363
+msgid "Center:"
+msgstr "Keskus:"
+
+#: xgnokii/xgnokii.c:1376
+msgid "Sending Format:"
+msgstr "Saate Formaat:"
+
+#: xgnokii/xgnokii.c:1420
+msgid "Validity Period:"
+msgstr "Kehtivus periood:"
+
+#: xgnokii/xgnokii.c:1428
+msgid "Max. Time"
+msgstr "Max. Aeg"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Set's name"
+msgstr "Seade nimi"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Center number"
+msgstr "Keskuse number"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Format"
+msgstr "Formaat"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Validity"
+msgstr "Kehtivus"
+
+#: xgnokii/xgnokii.c:1573
+msgid "Apply"
+msgstr "Kehtesta"
+
+#: xgnokii/xgnokii.c:1582 xgnokii/xgnokii_contacts.c:1569
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Salvesta"
+
+#: xgnokii/xgnokii.c:1589
+msgid "Close"
+msgstr "Sulge"
+
+#: xgnokii/xgnokii.c:1604
+msgid "Phone and connection type"
+msgstr "Telefon ja ühenduse tüüp"
+
+#: xgnokii/xgnokii.c:1611
+msgid "Connection"
+msgstr "Ühendus"
+
+#: xgnokii/xgnokii.c:1618
+msgid "Port:"
+msgstr "Pordis:"
+
+#: xgnokii/xgnokii.c:1633 xgnokii/xgnokii.c:1705
+msgid "Model:"
+msgstr "Mudel:"
+
+#: xgnokii/xgnokii.c:1648
+msgid "Init length:"
+msgstr "Init pikkus:"
+
+#: xgnokii/xgnokii.c:1663
+msgid "Bindir:"
+msgstr "BIN kataloog:"
+
+#: xgnokii/xgnokii.c:1678
+msgid "Connection:"
+msgstr "Ühendus:"
+
+#: xgnokii/xgnokii.c:1682
+msgid "infrared"
+msgstr "infrapunane"
+
+#: xgnokii/xgnokii.c:1686
+msgid "serial"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1691
+msgid "Phone information"
+msgstr "Telefoni info"
+
+#: xgnokii/xgnokii.c:1720
+msgid "Version:"
+msgstr "Versioon:"
+
+#: xgnokii/xgnokii.c:1735
+msgid "Revision:"
+msgstr "Revision:"
+
+#: xgnokii/xgnokii.c:1750
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1764
+msgid "Alarm setting"
+msgstr "Äratuse seaded"
+
+#: xgnokii/xgnokii.c:1771 xgnokii/xgnokii.c:1778
+msgid "Alarm"
+msgstr "Äratus"
+
+#: xgnokii/xgnokii.c:1802 xgnokii/xgnokii_sms.c:1433
+msgid "Short Message Service"
+msgstr "Lühisõnumi teenus"
+
+#: xgnokii/xgnokii.c:1836
+msgid "Edit"
+msgstr "Redigeeri"
+
+#: xgnokii/xgnokii.c:1850
+msgid "Business Card"
+msgstr "Visiitkaart"
+
+#: xgnokii/xgnokii.c:1856
+msgid "User"
+msgstr "Kasutaja"
+
+#: xgnokii/xgnokii.c:1874 xgnokii/xgnokii_contacts.c:829
+msgid "Name:"
+msgstr "Nimi:"
+
+#: xgnokii/xgnokii.c:1900
+msgid "Title:"
+msgstr "Amet:"
+
+#: xgnokii/xgnokii.c:1926
+msgid "Company:"
+msgstr "Ettevõte:"
+
+#: xgnokii/xgnokii.c:1952
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1977
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:2002
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2028
+msgid "Address:"
+msgstr "Aadress:"
+
+#: xgnokii/xgnokii.c:2052
+msgid "Caller groups names"
+msgstr "Helistaja grupi nimi"
+
+#: xgnokii/xgnokii.c:2059
+msgid "Groups"
+msgstr "Grupid"
+
+#: xgnokii/xgnokii.c:2068
+#, c-format
+msgid "Group %d:"
+msgstr "Grupp %d:"
+
+#: xgnokii/xgnokii.c:2081
+msgid "Help viewer"
+msgstr "Abi lehitseja"
+
+#: xgnokii/xgnokii.c:2095
+msgid "Viewer:"
+msgstr "Lehitseja:"
+
+#: xgnokii/xgnokii.c:2256 xgnokii/xgnokii_cfg.c:71
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "HOIATUS: Ei leia HOME keskkonnamuutujat!\n"
+
+#: xgnokii/xgnokii.c:2261 xgnokii/xgnokii_cfg.c:77 xgnokii/xgnokii_cfg.c:92
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr "HOIATUS: Ei suuda eraldada mälu konfiguratsiooni lugemiseks!\n"
+
+#: xgnokii/xgnokii.c:2276
+#, c-format
+msgid "Couldn't open %s or /etc/gnokiirc, using default config!\n"
+msgstr "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni vaikeväärtusi!\n"
+
+#: xgnokii/xgnokii_cfg.c:156
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr "VIGA: Ei leia HOME keskkonnamuutujat!\n"
+
+#: xgnokii/xgnokii_cfg.c:162 xgnokii/xgnokii_cfg.c:180
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr "VIGA: Ei suuda eraldada konfiguratsiooni kirjutamiseks mälu!\n"
+
+#: xgnokii/xgnokii_cfg.c:168
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "VIGA: Ei suuda faili %s lugemiseks avada!\n"
+
+#: xgnokii/xgnokii_cfg.c:186
+msgid "ERROR: Can't write config file!\n"
+msgstr "VIGA: Ei saa kirjutada konfiguratsiooni faili!\n"
+
+#: xgnokii/xgnokii_common.c:240
+msgid "Error"
+msgstr "Viga"
+
+#: xgnokii/xgnokii_common.c:279
+msgid "Info"
+msgstr "Hangin Infot ...."
+
+#: xgnokii/xgnokii_common.c:317
+msgid "Yes"
+msgstr "Jah"
+
+#: xgnokii/xgnokii_common.c:326
+msgid "No"
+msgstr "Ei"
+
+#: xgnokii/xgnokii_common.c:413
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Ei saa käivitada %s\n"
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:265
+#: xgnokii/xgnokii_contacts.c:428 xgnokii/xgnokii_contacts.c:453
+#: xgnokii/xgnokii_contacts.c:587 xgnokii/xgnokii_contacts.c:609
+msgid "Can't change memory type!"
+msgstr "Ei saa muuta mälu tüüpi!"
+
+#: xgnokii/xgnokii_contacts.c:276 xgnokii/xgnokii_contacts.c:323
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"SIM kaardile ei mahu nii pikk nimi, \n"
+"lühendan nime, nii et mahuks kaardile!"
+
+#: xgnokii/xgnokii_contacts.c:464 xgnokii/xgnokii_contacts.c:503
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"SIM kaardile ei mahu nii pikk nimi, \n"
+"lühendan nime, nii et mahuks kaardile!"
+
+#: xgnokii/xgnokii_contacts.c:698
+msgid "Can't find pattern!"
+msgstr "Ei leia sobivust!"
+
+#: xgnokii/xgnokii_contacts.c:842 xgnokii/xgnokii_contacts.c:1321
+msgid "Number:"
+msgstr "Number:"
+
+#: xgnokii/xgnokii_contacts.c:854
+msgid "Memory:"
+msgstr "Mälu:"
+
+#: xgnokii/xgnokii_contacts.c:858
+msgid "phone"
+msgstr "telefon"
+
+#: xgnokii/xgnokii_contacts.c:871
+msgid "Caller group:"
+msgstr "Helistajagrupp:"
+
+#: xgnokii/xgnokii_contacts.c:885 xgnokii/xgnokii_contacts.c:2801
+#: xgnokii/xgnokii_speed.c:613
+msgid "Edit entry"
+msgstr "Muuda kirjet"
+
+#: xgnokii/xgnokii_contacts.c:931
+msgid "Delete entries"
+msgstr "Kustuta kirjed"
+
+#: xgnokii/xgnokii_contacts.c:963
+msgid "Do you want to delete selected entries?"
+msgstr "Kas soovid valitud kirje kustutada?"
+
+#: xgnokii/xgnokii_contacts.c:975 xgnokii/xgnokii_contacts.c:2793
+msgid "New entry"
+msgstr "Uus kirje"
+
+#: xgnokii/xgnokii_contacts.c:1014 xgnokii/xgnokii_contacts.c:2797
+msgid "Duplicate entry"
+msgstr "Kopeeri kirjet"
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1090
+#: xgnokii/xgnokii_contacts.c:1115
+msgid "Can't find free memory."
+msgstr "Ei leia vaba mälu."
+
+#: xgnokii/xgnokii_contacts.c:1159
+msgid "Changing memory type"
+msgstr "Muudan mälu tüüpi"
+
+#: xgnokii/xgnokii_contacts.c:1166
+msgid "Continue"
+msgstr "Jätka"
+
+#: xgnokii/xgnokii_contacts.c:1186
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"Kirje muutmisel telefonimälust SIM kaardile\n"
+"võivad mõned kirjed muutuda lühemaks."
+
+#: xgnokii/xgnokii_contacts.c:1206 xgnokii/xgnokii_contacts.c:1212
+msgid "Find"
+msgstr "Otsi"
+
+#: xgnokii/xgnokii_contacts.c:1234
+msgid "Pattern:"
+msgstr "Mask:"
+
+#: xgnokii/xgnokii_contacts.c:1247 xgnokii/xgnokii_contacts.c:2735
+#: xgnokii/xgnokii_speed.c:555
+msgid "Name"
+msgstr "Nimi"
+
+#: xgnokii/xgnokii_contacts.c:1253 xgnokii/xgnokii_contacts.c:2735
+#: xgnokii/xgnokii_speed.c:555
+msgid "Number"
+msgstr "Number"
+
+#: xgnokii/xgnokii_contacts.c:1297 xgnokii/xgnokii_contacts.c:2812
+msgid "Dial voice"
+msgstr "Helista"
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Phone memory..."
+msgstr "Telefoni mälu..."
+
+#: xgnokii/xgnokii_contacts.c:1434
+msgid "SIM memory..."
+msgstr "SIM (kaardi) mälu..."
+
+#: xgnokii/xgnokii_contacts.c:1463
+msgid "Saving entries"
+msgstr "Salvestan kirjeid"
+
+#: xgnokii/xgnokii_contacts.c:1497
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr "%s: rida %d:Ei suuda kirjutada ME mälupessa %d! Viga: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1539
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr "%s: rida %d:Ei suuda kirjutada SM mälupessa %d! Viga: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1562
+msgid "Save changes?"
+msgstr "Salvesta muudatused?"
+
+#: xgnokii/xgnokii_contacts.c:1578
+msgid "Don't save"
+msgstr "Ära salvesta"
+
+#: xgnokii/xgnokii_contacts.c:1602
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Tegid muudatusi\n"
+"kontaktide kataloogis.\n"
+"\n"
+"\n"
+"Kas soovid muudatused telefoni salvestada?\n"
+
+#: xgnokii/xgnokii_contacts.c:1668 xgnokii/xgnokii_contacts.c:1695
+#: xgnokii/xgnokii_contacts.c:2279 xgnokii/xgnokii_contacts.c:2302
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: rida %d: Ei suuda mälu eraldada!\n"
+
+#: xgnokii/xgnokii_contacts.c:1790
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Ei suuda tuvastada SM mälu olekut!\n"
+"\n"
+"oletan max SIM kirjete arvuks 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:1815
+msgid "Getting entries"
+msgstr "Loen kirjeid ...."
+
+#: xgnokii/xgnokii_contacts.c:1948 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:427
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Ei suuda faili %s kirjutamiseks avada!"
+
+#: xgnokii/xgnokii_contacts.c:2020 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_speed.c:469
+msgid "Overwrite file?"
+msgstr "Kas kirjutan faili üle?"
+
+#: xgnokii/xgnokii_contacts.c:2021 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_speed.c:470
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Fail %s on olemas.\n"
+"Kas kirjutan üle?"
+
+#: xgnokii/xgnokii_contacts.c:2039 xgnokii/xgnokii_speed.c:488
+msgid "Export"
+msgstr "Ekspordi"
+
+#: xgnokii/xgnokii_contacts.c:2200 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:327
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Ei suuda faili %s lugemiseks avada!"
+
+#: xgnokii/xgnokii_contacts.c:2254
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Ei suuda tuvastada SM mälu olekut!\n"
+"\n"
+"max SIM kirjete arv on 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2367 xgnokii/xgnokii_speed.c:405
+msgid "Import"
+msgstr "Impordi"
+
+#: xgnokii/xgnokii_contacts.c:2564 xgnokii/xgnokii_sms.c:1126
+msgid "Select contacts"
+msgstr "Vali kontaktid"
+
+#: xgnokii/xgnokii_contacts.c:2597 xgnokii/xgnokii_contacts.c:2841
+#: xgnokii/xgnokii_sms.c:1575 xgnokii/xgnokii_speed.c:638
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "VIGA: %s: rida %d: Ei suuda eraldada mälu!\n"
+
+#: xgnokii/xgnokii_contacts.c:2695 xgnokii/xgnokii_dtmf.c:217
+#: xgnokii/xgnokii_logos.c:1143 xgnokii/xgnokii_netmon.c:260
+#: xgnokii/xgnokii_sms.c:1014 xgnokii/xgnokii_sms.c:1397
+#: xgnokii/xgnokii_speed.c:528 xgnokii/xgnokii_xkeyb.c:242
+msgid "/_File"
+msgstr "/_Fail"
+
+#: xgnokii/xgnokii_contacts.c:2696 xgnokii/xgnokii_speed.c:529
+msgid "/File/_Read from phone"
+msgstr "/Fail/Loe telefonist"
+
+#: xgnokii/xgnokii_contacts.c:2697 xgnokii/xgnokii_speed.c:530
+msgid "/File/_Save to phone"
+msgstr "/Fail/_Salvesta telefoni"
+
+#: xgnokii/xgnokii_contacts.c:2698 xgnokii/xgnokii_dtmf.c:220
+#: xgnokii/xgnokii_logos.c:1147 xgnokii/xgnokii_sms.c:1017
+#: xgnokii/xgnokii_sms.c:1399 xgnokii/xgnokii_speed.c:531
+msgid "/File/Sep1"
+msgstr "/Fail/Sep1"
+
+#: xgnokii/xgnokii_contacts.c:2699 xgnokii/xgnokii_speed.c:532
+msgid "/File/_Import from file"
+msgstr "/Fail/Ava fail"
+
+#: xgnokii/xgnokii_contacts.c:2700 xgnokii/xgnokii_speed.c:533
+msgid "/File/_Export to file"
+msgstr "/Fail/Salvesta faili"
+
+#: xgnokii/xgnokii_contacts.c:2701 xgnokii/xgnokii_logos.c:1151
+#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_speed.c:534
+msgid "/File/Sep2"
+msgstr "/Fail/Sep2"
+
+#: xgnokii/xgnokii_contacts.c:2702 xgnokii/xgnokii_dtmf.c:221
+#: xgnokii/xgnokii_logos.c:1152 xgnokii/xgnokii_netmon.c:261
+#: xgnokii/xgnokii_sms.c:1021 xgnokii/xgnokii_sms.c:1400
+#: xgnokii/xgnokii_speed.c:535 xgnokii/xgnokii_xkeyb.c:243
+msgid "/File/_Close"
+msgstr "/Fail/Sulge"
+
+#: xgnokii/xgnokii_contacts.c:2703 xgnokii/xgnokii_logos.c:1153
+#: xgnokii/xgnokii_speed.c:536
+msgid "/_Edit"
+msgstr "/R_edigeeri"
+
+#: xgnokii/xgnokii_contacts.c:2704
+msgid "/Edit/_New"
+msgstr "/Redigeeri/Uus"
+
+#: xgnokii/xgnokii_contacts.c:2705
+msgid "/Edit/D_uplicate"
+msgstr "/Redigeeri/Palj_unda"
+
+#: xgnokii/xgnokii_contacts.c:2706 xgnokii/xgnokii_speed.c:537
+msgid "/Edit/_Edit"
+msgstr "/Redigeeri/Paranda"
+
+#: xgnokii/xgnokii_contacts.c:2707
+msgid "/Edit/_Delete"
+msgstr "/Redigeeri/Kustuta"
+
+#: xgnokii/xgnokii_contacts.c:2708 xgnokii/xgnokii_logos.c:1156
+msgid "/Edit/Sep3"
+msgstr "/Redigeeri/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2709
+msgid "/Edit/_Change memory type"
+msgstr "/Redigeeri/Muuda mälu tüüp"
+
+#: xgnokii/xgnokii_contacts.c:2710 xgnokii/xgnokii_logos.c:1161
+msgid "/Edit/Sep4"
+msgstr "/Redigeeri/Sep4"
+
+#: xgnokii/xgnokii_contacts.c:2711
+msgid "/Edit/_Find"
+msgstr "/Redigeeri/Leia"
+
+#: xgnokii/xgnokii_contacts.c:2712
+msgid "/Edit/Find ne_xt"
+msgstr "/Redigeeri/Leia järgmine"
+
+#: xgnokii/xgnokii_contacts.c:2713
+msgid "/Edit/Sep5"
+msgstr "/Redigeeri/Sep5"
+
+#: xgnokii/xgnokii_contacts.c:2714
+msgid "/Edit/Select _all"
+msgstr "/Redigeeri/V_ali kõik"
+
+#: xgnokii/xgnokii_contacts.c:2715
+msgid "/_Dial"
+msgstr "/Vali numbri_d"
+
+#: xgnokii/xgnokii_contacts.c:2716
+msgid "/Dial/Dial _voice"
+msgstr "/Vali numbrid/_Vali kõne"
+
+#: xgnokii/xgnokii_contacts.c:2717 xgnokii/xgnokii_dtmf.c:222
+#: xgnokii/xgnokii_netmon.c:265 xgnokii/xgnokii_sms.c:1022
+#: xgnokii/xgnokii_sms.c:1408 xgnokii/xgnokii_speed.c:538
+#: xgnokii/xgnokii_xkeyb.c:244
+msgid "/_Help"
+msgstr "/Abi"
+
+#: xgnokii/xgnokii_contacts.c:2718 xgnokii/xgnokii_dtmf.c:223
+#: xgnokii/xgnokii_netmon.c:266 xgnokii/xgnokii_sms.c:1023
+#: xgnokii/xgnokii_sms.c:1409 xgnokii/xgnokii_speed.c:539
+#: xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_Help"
+msgstr "/Abi/Abi"
+
+#: xgnokii/xgnokii_contacts.c:2719 xgnokii/xgnokii_dtmf.c:224
+#: xgnokii/xgnokii_netmon.c:267 xgnokii/xgnokii_sms.c:1024
+#: xgnokii/xgnokii_sms.c:1410 xgnokii/xgnokii_speed.c:540
+#: xgnokii/xgnokii_xkeyb.c:246
+msgid "/Help/_About"
+msgstr "/Abi/Üldine"
+
+#: xgnokii/xgnokii_contacts.c:2735
+msgid "Memory"
+msgstr "Mälu"
+
+#: xgnokii/xgnokii_contacts.c:2735
+msgid "Group"
+msgstr "Grupp"
+
+#: xgnokii/xgnokii_contacts.c:2771 xgnokii/xgnokii_speed.c:591
+msgid "Read from phone"
+msgstr "Loe telefonist"
+
+#: xgnokii/xgnokii_contacts.c:2775 xgnokii/xgnokii_speed.c:595
+msgid "Save to phone"
+msgstr "Salvesta telefoni"
+
+#: xgnokii/xgnokii_contacts.c:2782 xgnokii/xgnokii_speed.c:602
+msgid "Import from file"
+msgstr "Ava fail"
+
+#: xgnokii/xgnokii_contacts.c:2786 xgnokii/xgnokii_speed.c:606
+msgid "Export to file"
+msgstr "Salvesta fail"
+
+#: xgnokii/xgnokii_contacts.c:2805
+msgid "Delete entry"
+msgstr "Kustuta kirje"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Laadi"
+
+#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1144
+msgid "/File/_Open"
+msgstr "/Fail/Ava"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1145
+#: xgnokii/xgnokii_sms.c:1016 xgnokii/xgnokii_sms.c:1398
+msgid "/File/_Save"
+msgstr "/Fail/_Salvesta"
+
+#: xgnokii/xgnokii_dtmf.c:245
+msgid "Dial Tone"
+msgstr "Vali toon"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/_Tools"
+msgstr "/_Tööriistad"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_n"
+msgstr "/Tööriistad/Võrgu mo_nitor peale"
+
+#: xgnokii/xgnokii_netmon.c:264
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Tööriistad/Võrgu monitor maha"
+
+#: xgnokii/xgnokii_netmon.c:381 xgnokii/xgnokii_netmon.c:384
+msgid "Active cell"
+msgstr "Aktiivne kärg"
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Prefered/Denied networks"
+msgstr "Eelistatud/keelatud v6rgud"
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "System information bits"
+msgstr "Süsteemi informatsiooni bitid"
+
+#: xgnokii/xgnokii_netmon.c:402
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:405
+msgid "Cells info"
+msgstr "Kärje info"
+
+#: xgnokii/xgnokii_netmon.c:408
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:427
+msgid "Accumulator, Charge status"
+msgstr "Aku, laadimise staatus"
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "?Battery full detection"
+msgstr "?Aku laadumuse proov"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Accumulator"
+msgstr "Aku"
+
+#: xgnokii/xgnokii_netmon.c:439
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:442
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:445
+msgid "Cause codes for last connection abortion"
+msgstr "Viimase ühenduse katkestamise põhjuskoodid"
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:476
+msgid "Memory status before reset"
+msgstr "Mälu olek enne resetti"
+
+#: xgnokii/xgnokii_netmon.c:479
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:482
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Neighbourhood measurement"
+msgstr "Keskkonnaparameetrite mõõtmine"
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "Calls"
+msgstr "Kõnesid"
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "Temporary counters of DSP"
+msgstr "DSP ajutised loendurid"
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:504
+msgid "Information about task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:507
+msgid "Information about task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:510
+msgid "Information about task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:513
+msgid "Information about OS_SYSTEM_STACK"
+msgstr "OS_SYSTEM_STACK informatsioon"
+
+#: xgnokii/xgnokii_netmon.c:516
+msgid "Information about current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:519
+msgid "Hardware version"
+msgstr "Riistvara versioon"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:548
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:579
+msgid "Page:"
+msgstr "Leht:"
+
+#: xgnokii/xgnokii_sms.c:233
+msgid "report"
+msgstr "raport"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "read"
+msgstr "loe"
+
+#: xgnokii/xgnokii_sms.c:243
+msgid "unread"
+msgstr "lugemata"
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "sent"
+msgstr "saadetud"
+
+#: xgnokii/xgnokii_sms.c:305
+msgid "unsent"
+msgstr "saatmata"
+
+#: xgnokii/xgnokii_sms.c:373
+msgid "From: "
+msgstr "Saatja: "
+
+#: xgnokii/xgnokii_sms.c:381
+msgid "Date: "
+msgstr "Kuupäev: "
+
+#: xgnokii/xgnokii_sms.c:470
+msgid "Delete SMS"
+msgstr "Kustuta SMS"
+
+#: xgnokii/xgnokii_sms.c:502
+msgid "Do you want to delete selected SMS?"
+msgstr "Kas soovid valitud SMS kustutada?"
+
+#: xgnokii/xgnokii_sms.c:720 xgnokii/xgnokii_sms.c:851
+msgid "Address line contains illegal address!"
+msgstr "Aadressi real on sobimatu aadress!"
+
+#: xgnokii/xgnokii_sms.c:823
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"SMS saatmine %s ebõnnestus!\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_sms.c:913 xgnokii/xgnokii_sms.c:950
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Saadan SMS'i %s (%d/%d) ...\n"
+
+#: xgnokii/xgnokii_sms.c:977
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Saadan SMS'i %s ...\n"
+
+#: xgnokii/xgnokii_sms.c:1015
+msgid "/File/Sen_d"
+msgstr "/Fail/Saa_da"
+
+#: xgnokii/xgnokii_sms.c:1018
+msgid "/File/Check _Names"
+msgstr "/Fail/_Nime kontroll"
+
+#: xgnokii/xgnokii_sms.c:1019
+msgid "/File/C_ontacts"
+msgstr "/Fail/K_ontaktid"
+
+#: xgnokii/xgnokii_sms.c:1078
+msgid "Send message"
+msgstr "Saada sõnum"
+
+#: xgnokii/xgnokii_sms.c:1082
+msgid "Save message to outbox"
+msgstr "Salvesta sõnum outbox'i"
+
+#: xgnokii/xgnokii_sms.c:1089
+msgid "Check names"
+msgstr "Kontrolli nimesid"
+
+#: xgnokii/xgnokii_sms.c:1102
+msgid "To:"
+msgstr "Saaja:"
+
+#: xgnokii/xgnokii_sms.c:1174
+msgid "Delivery report"
+msgstr "Saateraport"
+
+#: xgnokii/xgnokii_sms.c:1178
+msgid "Send as Long SMS"
+msgstr "Saada pika SMS'na"
+
+#: xgnokii/xgnokii_sms.c:1182
+msgid "SMS Center:"
+msgstr "SMS Keskus:"
+
+#: xgnokii/xgnokii_sms.c:1201
+msgid "New Message"
+msgstr "Uus sõnum"
+
+#: xgnokii/xgnokii_sms.c:1228
+msgid "Forward Message"
+msgstr "Edasta sõnum"
+
+#: xgnokii/xgnokii_sms.c:1272
+msgid "Reply Message"
+msgstr "Vasta sõnumile"
+
+#: xgnokii/xgnokii_sms.c:1308 xgnokii/xgnokii_sms.c:1475
+msgid "Bussiness Card"
+msgstr "Visiitkaart"
+
+#: xgnokii/xgnokii_sms.c:1401
+msgid "/_Messages"
+msgstr "/Sõnu_mid"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "/_Messages/_New"
+msgstr "/Sõnu_mid/Uued"
+
+#: xgnokii/xgnokii_sms.c:1403
+msgid "/_Messages/_Forward"
+msgstr "/Sõnu_mid/Edasta _F"
+
+#: xgnokii/xgnokii_sms.c:1404
+msgid "/_Messages/_Reply"
+msgstr "/Sõnu_mid/Vasta _R"
+
+#: xgnokii/xgnokii_sms.c:1405
+msgid "/_Messages/_Delete"
+msgstr "/Sõnu_mid/Kustuta"
+
+#: xgnokii/xgnokii_sms.c:1406
+msgid "/Messages/Sep3"
+msgstr "/Sõnu_mid/Sep3"
+
+#: xgnokii/xgnokii_sms.c:1407
+msgid "/_Messages/_Bussiness card"
+msgstr "/Sõnu_mid/Visiitkaart"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Status"
+msgstr "Olek"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Date / Time"
+msgstr "Kuupäev/Kellaaeg"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Sender"
+msgstr "Saatja"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Message"
+msgstr "Sõnum"
+
+#: xgnokii/xgnokii_sms.c:1462
+msgid "New message"
+msgstr "Uus sõnum"
+
+#: xgnokii/xgnokii_sms.c:1466
+msgid "Forward message"
+msgstr "Saada sõnum edasi"
+
+#: xgnokii/xgnokii_sms.c:1470
+msgid "Reply message"
+msgstr "Vasta sõnumile"
+
+#: xgnokii/xgnokii_sms.c:1482
+msgid "Delete message"
+msgstr "Kustuta sõnum"
+
+#: xgnokii/xgnokii_sms.c:1507
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1516
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1522
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1608
+msgid "couldn't allocate colour"
+msgstr "ei suuda värvi määratleda"
+
+#: xgnokii/xgnokii_speed.c:181
+msgid "Reading data ..."
+msgstr "Loen andmeid ..."
+
+#: xgnokii/xgnokii_speed.c:192 xgnokii/xgnokii_speed.c:198
+#: xgnokii/xgnokii_speed.c:257
+msgid "Cannot allocate memory!"
+msgstr "Ei suuda mälu eraldada!"
+
+#: xgnokii/xgnokii_speed.c:345
+msgid "Cannot allocate memory!\n"
+msgstr "Ei suuda mälu eraldada!\n"
+
+#: xgnokii/xgnokii_speed.c:357 xgnokii/xgnokii_speed.c:385
+msgid "Error reading file!"
+msgstr "Viga faili lugemisel!"
+
+#: xgnokii/xgnokii_speed.c:555
+msgid "Key"
+msgstr "Klahv"
+
+#: xgnokii/xgnokii_xkeyb.c:183
+msgid "Cannot load background pixmap!"
+msgstr "Ei suuda laadida taustapilti!"
+
+#: xgnokii/xgnokii_xkeyb.c:260
+msgid "XGnokii Keyboard"
+msgstr "XGnokii Klaviatuur"
+
+#: xgnokii/xgnokii_logos.c:834
+#, c-format
+msgid ""
+"Error getting network info\n"
+"(error=%d)"
+msgstr ""
+"Viga võrguinfo saamisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:867
+#, c-format
+msgid ""
+"Error getting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Viga bitmap saamisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:912
+#, c-format
+msgid ""
+"Error setting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Viga bitmap seadmisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:1146
+msgid "/File/Save _as ..."
+msgstr "/Fail/Salvest_a nagu ..."
+
+#: xgnokii/xgnokii_logos.c:1148
+msgid "/File/_Get operator"
+msgstr "/Fail/Tuvasta operaator"
+
+#: xgnokii/xgnokii_logos.c:1149
+msgid "/File/Get _logo"
+msgstr "/Fail/Võta _logo"
+
+#: xgnokii/xgnokii_logos.c:1150
+msgid "/File/Se_t logo"
+msgstr "/Fail/Sea logo"
+
+#: xgnokii/xgnokii_logos.c:1154
+msgid "/Edit/_Clear"
+msgstr "/Redigeeri/Tühjenda"
+
+#: xgnokii/xgnokii_logos.c:1155
+msgid "/Edit/_Invert"
+msgstr "/Redigeeri/_Invert"
+
+#: xgnokii/xgnokii_logos.c:1157
+msgid "/Edit/_Up logo"
+msgstr "/Redigeeri/Logo üles"
+
+#: xgnokii/xgnokii_logos.c:1158
+msgid "/Edit/_Down logo"
+msgstr "/Redigeeri/Logo alla"
+
+#: xgnokii/xgnokii_logos.c:1159
+msgid "/Edit/_Left logo"
+msgstr "/Redigeeri/_Logo vasakule"
+
+#: xgnokii/xgnokii_logos.c:1160
+msgid "/Edit/_Right logo"
+msgstr "/Redigeeri/Logo paremale"
+
+#: xgnokii/xgnokii_logos.c:1162
+msgid "/Edit/Flip _horizontal"
+msgstr "/Redigeeri/Pööra _horisontaalis"
+
+#: xgnokii/xgnokii_logos.c:1163
+msgid "/Edit/Flip _vertical"
+msgstr "/Redigeeri/Pööra _vertikaalis"
+
+#: xgnokii/xgnokii_logos.c:1442
+msgid "Load preview pixmap error, feature disabled."
+msgstr ""
+
+#~ msgid "Logo file error.\n"
+#~ msgstr "Logo faili viga.\n"
+
+#~ msgid "Sending Logo.\n"
+#~ msgstr "Saadan Logo.\n"
+
+#~ msgid "   Date: %s GMT"
+#~ msgstr "   Kuupäev: %s GMT"
+
+#~ msgid "   usage: gnokiid {--help|--version}"
+#~ msgstr "   kasutus: gnokiid {--help|--version}"
+
+#~ msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+#~ msgstr "%s: rida %d: Ei saa kätte ME mälu asukoha numbrit %d! %d\n"
+
+#~ msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+#~ msgstr "%s: rida %d: Ei saa kätte SM mälu asukoha numbrit %d! %d\n"
+
+#~ msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+#~ msgstr "0x16 Registreerimise vastus 0x%02x 0x%02x\n"
+
+#~ msgid "Date"
+#~ msgstr "Kuupäev"
+
+#~ msgid "Groups names"
+#~ msgstr "Gruppide nimed"
+
+#~ msgid "Incoming call terminated.\n"
+#~ msgstr "Saabuv kõne katkestatud. \n"
+
+#~ msgid "Message: Startup Logo received.\n"
+#~ msgstr "Teade: Startup Logo saabus.\n"
+
+#~ msgid "Message: the rest of the SMS message received.\n"
+#~ msgstr "Teade: ülejäänud SMS sõnum saabus.\n"
+
+#~ msgid "gnokiid Version %s"
+#~ msgstr "gnokiid Versioon %s"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644 (file)
index 0000000..f86b5fa
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,2559 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n""Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid "   %d. SMS Center name is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Herätyspäivämäärä: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid "   Alarm is %s\n"
+msgstr "   Herätys on %s\n"
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Herätysaika: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Herätys: %02d:%02d\n"
+
+#: fbus-6110.c:2993
+msgid "   Battery Level: %d\n"
+msgstr "   Akun varaus: %d\n"
+
+#: gnokii.c:1585
+msgid "   Calendar note deleted.\n"
+msgstr ""
+
+#: fbus-6110.c:3217
+msgid "   CellID: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3334
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Päivämäärä: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Päivämäärä: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid "   Date: %s\n"
+msgstr "   Päivämäärä: %s\n"
+
+#: fbus-6110.c:3714
+msgid "   Date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:4016
+msgid "   Empty SMS location.\n"
+msgstr "   Tyhjä tekstiviestimuistipaikka.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Tarkoitus toistaiseksi tuntematon :-(\n"
+
+#: fbus-6110.c:4142
+msgid "   Firmware: %s\n"
+msgstr "   Laitteistoversio: %s\n"
+
+#: fbus-6110.c:2764
+msgid "   Free: %d\n"
+msgstr "   Vapaana: %d\n"
+
+#: fbus-6110.c:4140
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: fbus-3810.c:2274
+msgid "   IMEI:     %s\n"
+msgstr ""
+
+#: fbus-6110.c:4134
+msgid "   IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4006
+msgid "   Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid "   Invalid memory type!\n"
+msgstr "   Virheellinen muistityyppi!\n"
+
+#: fbus-6110.c:3583
+msgid "   Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid "   LAC: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2875
+msgid "   Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Maagiset tavut: %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2762
+msgid "   Memory Type: %s\n"
+msgstr "   Muistityyppi: %s\n"
+
+#: fbus-6110.c:2876
+msgid "   MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid "   Mode: "
+msgstr "   Tila: "
+
+#: fbus-3810.c:2276
+msgid "   Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid "   Model: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2180
+msgid "   Msg Length %d, Msg number %d,  Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr "   Viestin pituus %d, Viestin numero %d,  Tuntemattomat tavut: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid "   Name: "
+msgstr "   Nimi: "
+
+#: fbus-6110.c:3219
+msgid "   Network code: %s\n"
+msgstr "   Verkon koodi: %s\n"
+
+#: fbus-6110.c:3220
+msgid "   Network name: %s (%s)\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "   Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid "   Number: "
+msgstr "   Numero: "
+
+#: fbus-6110.c:2877
+msgid "   Number: %d\n"
+msgstr "   Numero: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid "   Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid "   Power source: "
+msgstr "   Virtalähde: "
+
+#: fbus-6110.c:4138
+msgid "   Production Code: %s\n"
+msgstr "   Valmistekoodi: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid "   Remote number: %s\n"
+msgstr "   Vastapuolen numero: %s\n"
+
+#: fbus-3810.c:2278
+msgid "   Revision: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2548
+msgid "   SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid "   SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid "   SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid "   SMS center number: %s\n"
+msgstr "   Viestikeskuksen numero: %s\n"
+
+#: fbus-6110.c:2513
+msgid "   SMS: "
+msgstr "   Tekstiviesti: "
+
+#: fbus-6110.c:3729
+msgid "   SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Puhelun järjestysnumero: %d\n"
+
+#: fbus-6110.c:2994
+msgid "   Signal strength: %d\n"
+msgstr "   Kenttävoimakkuus: %d\n"
+
+#: fbus-6110.c:3223
+msgid "   Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid "   Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid "   The number of messages: %d\n"
+msgstr "   Viestien lukumäärä: %d\n"
+
+#: fbus-6110.c:2622
+msgid "   The request for SMS Center failed.\n"
+msgstr "   Tekstiviestikeskuskutsu epäonnistui.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1476
+msgid "   Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid "   Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid "   Unknown error!\n"
+msgstr "   Tuntematon virhe!\n"
+
+#: fbus-6110.c:4041
+msgid "   Unread messages: %d\n"
+msgstr "   Lukemattomia viestejä: %d\n"
+
+#: fbus-6110.c:2763
+msgid "   Used: %d\n"
+msgstr ""
+
+#: gnokii.c:86
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --sendoplogoviasms destionation logofile [network code]\n"
+"          gnokii --setdatetime [YYYY MM DD HH MM]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+"          gnokii --reset [soft|hard]\n"
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken from\n"
+"                            phone memory from address [message_center_index].\n"
+"                            If this argument is ommited SMSC number is taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --sendoplogoviasms send the logofile to destination as operator\n"
+"                             logo\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid "   usage: gnokiid {--help|--version}"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "Virtalähde"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "Virtalähde\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Akun varaus: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr "CAR on %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr ""
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr "CTS on %s.\n"
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr ""
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr ""
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr "DTR on %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr ""
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr ""
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Siirrytään tarkkailutilaan...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr ""
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr ""
+
+#: gnokii.c:2150
+msgid "IMEI:     %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr ""
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr ""
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Alustetaan GSM-liitäntää...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Lopetetaan tarkkailutila...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr ""
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr ""
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr ""
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr ""
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr ""
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr ""
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr ""
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr ""
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr ""
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr ""
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr ""
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr ""
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr ""
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Puhelin: käytöss: %d, vapaana %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Virtalähde: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Kenttävoimakkuus: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr "RTS on %s.\n"
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: käytössä %d, vapaaana %d\n"
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Tekstiviesejä: lukematon %d, numero %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr ""
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr ""
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr "Sarjaliitännän lippujen tila: \n"
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Asetetaan FBUS-yhteyttä...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr ""
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr ""
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr ""
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Kirjoittaminen epäonnistui!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr "akku"
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr "akku\n"
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr "poissa"
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "käynnistyy uudelleen.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr "päällä"
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid ""
+# "   Code Error\n"
+# "   You're not my big owner :-)\n"
+# msgstr ""
+# "   PIN-koodi virheellinen\n"
+# "   Et ole oikea omistajani :-)\n"
+# 
+# msgid "   Code Accepted\n"
+# msgstr "   PIN-koodi hyväksytty\n"
+# 
+# msgid "Enter your PIN: "
+# msgstr "Anna PIN-koodi: "
+# 
+# msgid "   Text: "
+# msgstr "   Teksti: "
+# 
+# msgid "   Keyboard is %s\n"
+# msgstr "   Näppäimistö on %s\n"
+# 
+# msgid "   LAC: %02x%02x\n"
+# msgstr "   LAC: %02x%02x\n"
+# 
+# msgid "   CellID: %02x%2x\n"
+# msgstr "   Solun tunniste: %02x%2x\n"
+# 
+# msgid "   Network name: %s\n"
+# msgstr "   Verkon nimi: %s\n"
+# 
+# msgid "   Serial No. %s\n"
+# msgstr "   Sarjanumero: %s\n"
+# 
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..c25a92d
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4052 @@
+# This is the Italian locale definition for Gnokii.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Gabriele Stella <gstella@libero.it>, 2000.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2001-01-30 12:18+0100\n"
+"PO-Revision-Date: 2001-01-29 22:23+0100\n"
+"Last-Translator: Gabriele Stella <gstella@libero.it>\n"
+"Language-Team: gnokii <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:582 common/fbus-6110.c:2219
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Invia un SMS a %s con il centro messaggi %s\n"
+
+#: common/fbus-3810.c:686
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Invio SMS fallito, nuovo tentativo (%d di %d)\n"
+
+#: common/fbus-3810.c:1304
+msgid "Couldn't open FB38 device"
+msgstr "Impossibile aprire il dispositivo FB38"
+
+#: common/fbus-3810.c:1397
+msgid "restarting.\n"
+msgstr "riavvio.\n"
+
+#: common/fbus-3810.c:1453
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT Fallito %02x"
+
+#: common/fbus-3810.c:1460 common/mbus-6160.c:992
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS Fallito %02x != %02x"
+
+#: common/fbus-3810.c:1572
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:1588
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:1589
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr "Accesso alla SIM: %s.\n"
+
+#: common/fbus-3810.c:1665
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS Memorizzato nella locazione 0x%02x\n"
+
+#: common/fbus-3810.c:1675
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Memorizzazione SMS fallita: 0x%02x\n"
+
+#: common/fbus-3810.c:1796
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [forse] digitato.\n"
+
+#: common/fbus-3810.c:1805
+msgid "Phone powering off..."
+msgstr "Spegnimento telefono..."
+
+#: common/fbus-3810.c:1834 common/mbus-6160.c:599
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1860
+msgid "Unknown: "
+msgstr "Sconosciuto: "
+
+#: common/fbus-3810.c:1862
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Msg Tipo: %02x "
+
+#: common/fbus-3810.c:1863
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Msg Lung.: %02x "
+
+#: common/fbus-3810.c:1864
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: common/fbus-3810.c:1865
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Checksum: %02x \n"
+"   "
+
+#: common/fbus-3810.c:1957 common/fbus-3810.c:2087
+msgid "Set Mem Loc Write failed!"
+msgstr "Scrittura Set Mem Loc fallita!"
+
+#: common/fbus-3810.c:2002
+msgid "TX_SendRLPFrame - write:"
+msgstr ""
+
+#: common/fbus-3810.c:2014
+msgid "Request HangupMessage Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2026
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2041
+msgid "Explore Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2051
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2111
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2124
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2167
+msgid "Send SMS header failed!"
+msgstr "Invio intestazione SMS fallita!"
+
+#: common/fbus-3810.c:2226
+msgid "Store SMS header failed!"
+msgstr "Memorizzazione intestazione SMS fallita!"
+
+#: common/fbus-3810.c:2251
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Invio blocco SMS %d fallita!"
+
+#: common/fbus-3810.c:2274
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2297
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2316
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2333 common/mbus-6160.c:1070
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - messaggio troppo lungo!\n"
+
+#: common/fbus-3810.c:2359 common/mbus-6160.c:873 common/mbus-6160.c:1102
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - scrittura:"
+
+#: common/fbus-3810.c:2372 common/fbus-3810.c:2508 common/fbus-3810.c:2526
+#: common/fbus-3810.c:2544 common/fbus-3810.c:2558 common/fbus-3810.c:2692
+#: common/fbus-3810.c:2753 common/fbus-3810.c:2812 common/fbus-3810.c:2852
+msgid "Write failed!"
+msgstr "Scrittura fallita!"
+
+#: common/fbus-3810.c:2386
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Chiamata in arrivo - Tipo: %s. %02x, Numero %s.\n"
+
+#: common/fbus-3810.c:2413
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2461
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2480
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Stato: %s. Batt %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2491
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2495
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Chiamata terminata dal telefono (avviso 0x10).\n"
+
+#: common/fbus-3810.c:2512
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Telefonata terminata dal chiamante (o dalla rete).\n"
+
+#: common/fbus-3810.c:2530
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Chiamata terminata dal telefono (avviso 0x12).\n"
+
+#: common/fbus-3810.c:2548
+msgid "Incoming call answered from phone.\n"
+msgstr "Risposta del telefono ad una chiamata in arrivo.\n"
+
+#: common/fbus-3810.c:2562
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s ha stabilito un collegamento - stato dei byte %02x %02x.\n"
+
+#: common/fbus-3810.c:2579
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2666
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2733
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"SMS in arrivo %d/%d/%d %d:%02d:%02d tz:0x%02x Mittente: %s(Tipo %02x) Centro "
+"Msg: %s\n"
+
+#: common/fbus-3810.c:2735
+#, c-format
+msgid ""
+"   Msg Length %d, Msg memory %d Msg number %d,  PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:2828
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: common/fbus-3810.c:2829
+#, c-format
+msgid "   IMEI:     %s\n"
+msgstr "  IMEI:     %s\n"
+
+#: common/fbus-3810.c:2831
+#, c-format
+msgid "   Model:    %s\n"
+msgstr "  Modello:  %s\n"
+
+#: common/fbus-3810.c:2833
+#, c-format
+msgid "   Revision: %s\n"
+msgstr "  Versione : %s\n"
+
+#: common/fbus-3810.c:2907
+msgid "SMS Message Center Data:\n"
+msgstr "Centro Messaggi SMS:\n"
+
+#: common/fbus-3810.c:2908
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Memoria in uso: 0x%02x\n"
+
+#: common/fbus-3810.c:2909
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Messaggi nel Telefono: 0x%02x Da leggere: 0x%02x\n"
+
+#: common/fbus-3810.c:2911
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Messaggi nella SIM: 0x%02x Da leggere: 0x%02x\n"
+
+#: common/fbus-3810.c:2913
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Risposta stesso centro: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2915
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Conferma invio: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2917
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Messaggio inviato come: 0x%02x\n"
+
+#: common/fbus-3810.c:2918
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Validità messaggio: 0x%02x\n"
+
+#: common/fbus-3810.c:2919
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Anonimo: 0x%02x\n"
+
+#: common/fbus-3810.c:2922
+msgid "UnknownNumber field empty."
+msgstr ""
+
+#: common/fbus-3810.c:2924
+msgid "UnknownNumber: "
+msgstr ""
+
+#: common/fbus-3810.c:2931
+msgid "Number field empty."
+msgstr ""
+
+#: common/fbus-3810.c:2934 xgnokii/xgnokii_calendar.c:229
+msgid "Number: "
+msgstr "Numero: "
+
+#: common/fbus-6110-ringtones.c:352
+#, c-format
+msgid "Error in PackRingtone - StartBit different to HowLong %d - %d)\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:411
+msgid "Not header\n"
+msgstr "Non intestato\n"
+
+#: common/fbus-6110-ringtones.c:418
+msgid "Not RingingToneProgramming\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:429
+msgid "Not Sound\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:436
+msgid "Not BasicSongType\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:454
+msgid "Not PatternHeaderId\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:556
+msgid "Unsupported block\n"
+msgstr ""
+
+#: common/fbus-6110.c:937
+msgid "Timeout in IR-mode\n"
+msgstr "Timeout in modalità IR\n"
+
+#: common/fbus-6110.c:974
+msgid "Couldn't open FB61 infrared device"
+msgstr "Impossibile aprire il dispositivo ad infrarossi FB61"
+
+#: common/fbus-6110.c:1049
+msgid "Starting IR mode...!\n"
+msgstr "Avvio modalità IR...!\n"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:978 gnokii/gnokii.c:1808
+#: gnokii/gnokii.c:3215 gnokii/gnokii.c:3242
+msgid "Send succeeded!\n"
+msgstr "Invio effettuato!\n"
+
+#: common/fbus-6110.c:2760 gnokii/gnokii.c:980 gnokii/gnokii.c:1810
+#: gnokii/gnokii.c:3217
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Invio SMS non riuscito (errore=%d)\n"
+
+#: common/fbus-6110.c:2791
+msgid "Serial flags dump:\n"
+msgstr "Stato dei Serial flags:\n"
+
+#: common/fbus-6110.c:2792 common/mbus-640.c:774
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "Il DTR è %s.\n"
+
+#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794
+#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775
+msgid "up"
+msgstr "attivo"
+
+#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794
+#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775
+msgid "down"
+msgstr "disattivo"
+
+#: common/fbus-6110.c:2793 common/mbus-640.c:775
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS è %s.\n"
+
+#: common/fbus-6110.c:2794
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR è %s.\n"
+
+#: common/fbus-6110.c:2795
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS è %s.\n"
+
+#: common/fbus-6110.c:2830
+msgid "Setting FBUS communication...\n"
+msgstr "Attivazione comunicazione FBUS...\n"
+
+#: common/fbus-6110.c:2865
+msgid "Couldn't open FB61 device"
+msgstr "Impossibile aprire il dispositivo FB61"
+
+#: common/fbus-6110.c:2999
+msgid "Message: Call message, type 0x02:"
+msgstr "Messaggio: Call message, tipo 0x02:"
+
+#: common/fbus-6110.c:3000 common/fbus-6110.c:3012 common/fbus-6110.c:3114
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr ""
+
+#: common/fbus-6110.c:3010
+msgid "Message: Call message, type 0x03:"
+msgstr "Messaggio: Call message, tipo 0x03:"
+
+#: common/fbus-6110.c:3011 common/fbus-6110.c:3027 common/fbus-6110.c:3045
+#: common/fbus-6110.c:3076 common/fbus-6110.c:3087 common/fbus-6110.c:3113
+#, c-format
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Nr. sequenziale della chiamata: %d\n"
+
+#: common/fbus-6110.c:3026
+msgid "Message: Remote end hang up.\n"
+msgstr "Avviso: Il chiamato ha chiuso la comunicazione.\n"
+
+#: common/fbus-6110.c:3040
+msgid "Message: Incoming call alert:\n"
+msgstr "Avviso: Chiamata in arrivo:\n"
+
+#: common/fbus-6110.c:3046 common/fbus-6110.c:3358
+msgid "   Number: "
+msgstr "   Numero: "
+
+#: common/fbus-6110.c:3054 common/fbus-6110.c:3342
+msgid "   Name: "
+msgstr "   Nome: "
+
+#: common/fbus-6110.c:3075
+msgid "Message: Call answered.\n"
+msgstr "Avviso: Chiamata risposta.\n"
+
+#: common/fbus-6110.c:3086
+msgid "Message: Call ended by your phone.\n"
+msgstr "Avviso: Chiamata terminata dal vostro telefono.\n"
+
+#: common/fbus-6110.c:3112
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: common/fbus-6110.c:3125
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: common/fbus-6110.c:3143
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Avviso: messaggio SMS inviato regolarmente.\n"
+
+#: common/fbus-6110.c:3154
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Avviso: Invio SMS fallito.\n"
+
+#: common/fbus-6110.c:3163
+msgid "Message: SMS Message Received\n"
+msgstr "Avviso: Ricevuto SMS\n"
+
+#: common/fbus-6110.c:3164 common/fbus-6110.c:4617
+#, c-format
+msgid "   SMS center number: %s\n"
+msgstr "   Numero centro messaggi SMS: %s\n"
+
+#: common/fbus-6110.c:3168 common/fbus-6110.c:4618
+#, c-format
+msgid "   Remote number: %s\n"
+msgstr "   Numero chiamato: %s\n"
+
+#: common/fbus-6110.c:3169
+#, c-format
+msgid "   Date: %s\n"
+msgstr "   Data: %s\n"
+
+#: common/fbus-6110.c:3170
+msgid "   SMS: "
+msgstr "   SMS:  "
+
+#: common/fbus-6110.c:3184
+msgid "Message: Cell Broadcast enabled/disabled successfully.\n"
+msgstr ""
+"Avviso: Informazioni Microcella abilitato/disabilitato correttamente.\n"
+
+#: common/fbus-6110.c:3196
+msgid "Message: CB received.\n"
+msgstr "Avviso: ricevuto CB.\n"
+
+#: common/fbus-6110.c:3198
+#, c-format
+msgid "Message: channel number %i\n"
+msgstr "Avviso: numero di canale %i\n"
+
+#: common/fbus-6110.c:3214
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Messaggio: Centro messaggi SMS impostato.\n"
+
+#: common/fbus-6110.c:3230
+msgid "Message: SMS Center received:\n"
+msgstr "Avviso: ricevuto Centro SMS:\n"
+
+#: common/fbus-6110.c:3231
+#, c-format
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. Il nome del Centro SMS è %s\n"
+
+#: common/fbus-6110.c:3232
+#, c-format
+msgid "   SMS Center number is %s\n"
+msgstr "   Il numero del centro SMS è %s\n"
+
+#: common/fbus-6110.c:3234
+msgid "   SMS Center message format is "
+msgstr "   Il formato dei messaggi SMS è "
+
+#: common/fbus-6110.c:3239 gnokii/gnokii.c:1117 xgnokii/xgnokii.c:546
+#: xgnokii/xgnokii.c:575 xgnokii/xgnokii.c:1445 xgnokii/xgnokii_calendar.c:862
+msgid "Text"
+msgstr "Testo"
+
+#: common/fbus-6110.c:3243 gnokii/gnokii.c:1121 xgnokii/xgnokii.c:550
+#: xgnokii/xgnokii.c:1459
+msgid "Paging"
+msgstr "Paging"
+
+#: common/fbus-6110.c:3247 gnokii/gnokii.c:1125 xgnokii/xgnokii.c:554
+#: xgnokii/xgnokii.c:1452 xgnokii/xgnokii_contacts.c:1784
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:3251 gnokii/gnokii.c:1130
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:3255 common/fbus-6110.c:3289 common/fbus-6110.c:4840
+#: common/fbus-6110.c:5388 gnokii/gnokii.c:1142 gnokii/gnokii.c:1176
+#: xgnokii/xgnokii_calendar.c:153
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: common/fbus-6110.c:3260
+msgid "   SMS Center message validity is "
+msgstr "   La permanenza dei messaggi nel centro SMS è "
+
+#: common/fbus-6110.c:3265 gnokii/gnokii.c:1152
+msgid "1 hour"
+msgstr "1 ora"
+
+#: common/fbus-6110.c:3269 gnokii/gnokii.c:1156
+msgid "6 hours"
+msgstr "6 ore"
+
+#: common/fbus-6110.c:3273 gnokii/gnokii.c:1160
+msgid "24 hours"
+msgstr "24 ore"
+
+#: common/fbus-6110.c:3277 gnokii/gnokii.c:1164
+msgid "72 hours"
+msgstr "72 ore"
+
+#: common/fbus-6110.c:3281 gnokii/gnokii.c:1168 xgnokii/xgnokii.c:598
+#: xgnokii/xgnokii.c:1524
+msgid "1 week"
+msgstr "1 settimana"
+
+#: common/fbus-6110.c:3285 gnokii/gnokii.c:1172
+msgid "Maximum time"
+msgstr "Tempo massimo"
+
+#: common/fbus-6110.c:3307
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3308
+msgid "   The request for SMS Center failed.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3319
+msgid "Unknown message!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3341
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3378
+msgid "   Date: "
+msgstr "   Data: "
+
+#: common/fbus-6110.c:3380
+msgid "   Time: "
+msgstr "   Ora: "
+
+#: common/fbus-6110.c:3393
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Avviso: voce in Rubrica errata:\n"
+
+#: common/fbus-6110.c:3401
+msgid "   Invalid memory type!\n"
+msgstr "   Tipo memoria errata!\n"
+
+#: common/fbus-6110.c:3411 common/fbus-6110.c:3449
+msgid "   Unknown error!\n"
+msgstr "   Errore indeterminato!\n"
+
+#: common/fbus-6110.c:3422
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Avviso: Scrittura Rubrica effettuata correttamente.\n"
+
+#: common/fbus-6110.c:3439
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+"Avviso: Scrittura in Rubrica non effettuata - il nome è troppo lungo.\n"
+
+#: common/fbus-6110.c:3460
+msgid "Message: Memory status received:\n"
+msgstr "Avviso: Ricezione condizioni memoria:\n"
+
+#: common/fbus-6110.c:3462
+#, c-format
+msgid "   Memory Type: %s\n"
+msgstr "   Tipo di memoria: %s\n"
+
+#: common/fbus-6110.c:3463
+#, c-format
+msgid "   Used: %d\n"
+msgstr "   In uso: %d\n"
+
+#: common/fbus-6110.c:3464
+#, c-format
+msgid "   Free: %d\n"
+msgstr "   Libera: %d\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+"Avviso: Errore analizzando la memoria, il telefono potrebbe essere spento.\n"
+
+#: common/fbus-6110.c:3486
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Avviso: Errore di memoria, il tipo non è supportato dal modello di "
+"telefono.\n"
+
+#: common/fbus-6110.c:3493
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3500
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:3517
+msgid "Message: Caller group logo etc.\n"
+msgstr "Avvisssso: Logo gruppo chiamante etc.\n"
+
+#: common/fbus-6110.c:3518
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Nome Gruppo chiamante: %s\n"
+
+#: common/fbus-6110.c:3538
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3548
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3556
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3564
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: common/fbus-6110.c:3575
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3576
+#, c-format
+msgid "   Location: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3577
+#, c-format
+msgid "   MemoryType: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3578
+#, c-format
+msgid "   Number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3588
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3598
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3608
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3618
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: common/fbus-6110.c:3634
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3635
+msgid "   Mode: "
+msgstr ""
+
+#: common/fbus-6110.c:3641
+msgid "registered within the network\n"
+msgstr ""
+
+#: common/fbus-6110.c:3650
+msgid "call in progress\n"
+msgstr "chiamata in corso\n"
+
+#: common/fbus-6110.c:3656
+msgid "waiting for security code\n"
+msgstr "fornire codice di sicurezza\n"
+
+#: common/fbus-6110.c:3662
+msgid "powered off\n"
+msgstr "spegnimento\n"
+
+#: common/fbus-6110.c:3668 common/fbus-6110.c:3690
+msgid "unknown\n"
+msgstr "sconosciuto\n"
+
+#: common/fbus-6110.c:3672
+msgid "   Power source: "
+msgstr "   Alimentazione: "
+
+#: common/fbus-6110.c:3678
+msgid "AC/DC\n"
+msgstr "CA/CC\n"
+
+#: common/fbus-6110.c:3684
+msgid "battery\n"
+msgstr "batteria\n"
+
+#: common/fbus-6110.c:3694
+#, c-format
+msgid "   Battery Level: %d\n"
+msgstr "   Livello batteria: %d\n"
+
+#: common/fbus-6110.c:3695
+#, c-format
+msgid "   Signal strength: %d\n"
+msgstr "   Ampiezza segnale: %d\n"
+
+#: common/fbus-6110.c:3707
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Avviso: Messaggio sconosciuto del tipo 0x04\n"
+
+#: common/fbus-6110.c:3723
+msgid "Message: Profile feature change result.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3781
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3805
+msgid "Startup logo supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3808
+msgid "currently set\n"
+msgstr ""
+
+#: common/fbus-6110.c:3810 common/fbus-6110.c:3829 common/fbus-6110.c:3849
+#: gnokii/gnokii.c:1913
+msgid "currently empty\n"
+msgstr ""
+
+#: common/fbus-6110.c:3822
+msgid "Startup Text supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3825 common/fbus-6110.c:3845
+msgid "currently set to \""
+msgstr ""
+
+#: common/fbus-6110.c:3826 common/fbus-6110.c:3846
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: common/fbus-6110.c:3827 common/fbus-6110.c:3847
+msgid "\"\n"
+msgstr ""
+
+#: common/fbus-6110.c:3842
+msgid "Dealer Welcome supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3862
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3872
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3898
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3907
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3930
+#, c-format
+msgid "Message: Operator Logo for %s (%s) network received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3948
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3957
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3975
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: common/fbus-6110.c:3981 gnokii/gnokii.c:1659
+msgid "waiting for Security Code.\n"
+msgstr "fornire il Codice di Sicurezza.\n"
+
+#: common/fbus-6110.c:3986 gnokii/gnokii.c:1664
+msgid "waiting for PIN.\n"
+msgstr "fornire il PIN.\n"
+
+#: common/fbus-6110.c:3991 gnokii/gnokii.c:1669
+msgid "waiting for PIN2.\n"
+msgstr "fornire il PIN2.\n"
+
+#: common/fbus-6110.c:3996 gnokii/gnokii.c:1674
+msgid "waiting for PUK.\n"
+msgstr "fornire il PUK.\n"
+
+#: common/fbus-6110.c:4001 gnokii/gnokii.c:1679
+msgid "waiting for PUK2.\n"
+msgstr "fornire il PUK2.\n"
+
+#: common/fbus-6110.c:4006 gnokii/gnokii.c:1684
+msgid "nothing to enter.\n"
+msgstr "nothing to enter.\n"
+
+#: common/fbus-6110.c:4011 gnokii/gnokii.c:1689
+msgid "Unknown!\n"
+msgstr "Sconosciuto!\n"
+
+#: common/fbus-6110.c:4023
+msgid "Message: Security code accepted.\n"
+msgstr "Messaggio: Codice di Sicurezza valido.\n"
+
+#: common/fbus-6110.c:4033
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+"Messaggio: Codice di Sicurezza errato. Non sei il mio proprietario :-)\n"
+
+#: common/fbus-6110.c:4060
+msgid "Message: Network informations:\n"
+msgstr "Messaggio: Informazioni sulla rete:\n"
+
+#: common/fbus-6110.c:4062
+#, c-format
+msgid "   CellID: %s\n"
+msgstr "  CellID: %s\n"
+
+#: common/fbus-6110.c:4063
+#, c-format
+msgid "   LAC: %s\n"
+msgstr "  LAC: %s\n"
+
+#: common/fbus-6110.c:4064
+#, c-format
+msgid "   Network code: %s\n"
+msgstr "  Codice della rete : %s\n"
+
+#: common/fbus-6110.c:4065
+#, c-format
+msgid "   Network name: %s (%s)\n"
+msgstr "   Nome della rete  : %s (%s)\n"
+
+#: common/fbus-6110.c:4068
+msgid "   Status: "
+msgstr "   Stato : "
+
+#: common/fbus-6110.c:4071
+msgid "home network selected"
+msgstr "selezionata rete locale"
+
+#: common/fbus-6110.c:4072
+msgid "roaming network"
+msgstr "rete in roaming"
+
+#: common/fbus-6110.c:4073
+msgid "requesting network"
+msgstr "richiesta rete"
+
+#: common/fbus-6110.c:4074
+msgid "not registered in the network"
+msgstr "non registrato nella rete"
+
+#: common/fbus-6110.c:4075 xgnokii/xgnokii_lowlevel.c:116
+#: xgnokii/xgnokii_lowlevel.c:191 xgnokii/xgnokii_lowlevel.c:193
+#: xgnokii/xgnokii_lowlevel.c:194
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: common/fbus-6110.c:4080
+#, c-format
+msgid "   Network selection: %s\n"
+msgstr "   Selezione rete   : %s\n"
+
+#: common/fbus-6110.c:4080
+msgid "manual"
+msgstr "manuale"
+
+#: common/fbus-6110.c:4080
+msgid "automatic"
+msgstr "automatica"
+
+#: common/fbus-6110.c:4090
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: common/fbus-6110.c:4125 gnokii/gnokii.c:3048
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Chiamata in corso: %s\n"
+
+#: common/fbus-6110.c:4126 gnokii/gnokii.c:3049
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Sconosciuto: %s\n"
+
+#: common/fbus-6110.c:4127 gnokii/gnokii.c:3050
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "SMS Non letti: %s\n"
+
+#: common/fbus-6110.c:4128 gnokii/gnokii.c:3051
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Chiamata vocale: %s\n"
+
+#: common/fbus-6110.c:4129 gnokii/gnokii.c:3052
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Chiamata fax attiva: %s\n"
+
+#: common/fbus-6110.c:4130 gnokii/gnokii.c:3053
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Chiamata dati in corso: %s\n"
+
+#: common/fbus-6110.c:4131 gnokii/gnokii.c:3054
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Tastiera bloccata: %s\n"
+
+#: common/fbus-6110.c:4132 gnokii/gnokii.c:3055
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Memoria SMS piena: %s\n"
+
+#: common/fbus-6110.c:4145
+msgid "Display output successfully disabled/enabled.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4155
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4174
+msgid "Message: Date and time set correctly\n"
+msgstr "Avviso: Date eed ora impostate correttamente\n"
+
+#: common/fbus-6110.c:4184 common/fbus-6110.c:4230
+msgid "Message: Date and time set error\n"
+msgstr "Avviso: Errore nell'impostazione di data e ora\n"
+
+#: common/fbus-6110.c:4204
+msgid "Message: Date and time\n"
+msgstr "Avviso: Data ed ora\n"
+
+#: common/fbus-6110.c:4205 common/fbus-6110.c:4358 gnokii/gnokii.c:2276
+#, c-format
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Ora:  %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4206
+#, c-format
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Data: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:4220
+msgid "Message: Alarm set correctly\n"
+msgstr "Avviso: Sveglia impostata regolarmente\n"
+
+#: common/fbus-6110.c:4242
+msgid "Message: Alarm\n"
+msgstr "Avviso: Allarme\n"
+
+#: common/fbus-6110.c:4243
+#, c-format
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Sveglia: %02d:%02d\n"
+
+#: common/fbus-6110.c:4244
+#, c-format
+msgid "   Alarm is %s\n"
+msgstr "   La sveglia è %s\n"
+
+#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049
+#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052
+#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055
+msgid "on"
+msgstr "on"
+
+#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049
+#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052
+#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055
+msgid "off"
+msgstr "off"
+
+#: common/fbus-6110.c:4260
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Avviso: Informazione sconosciuta tipo 0x11\n"
+
+#: common/fbus-6110.c:4283
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Avviso: Nota in agenda salvata correttamente!\n"
+
+#: common/fbus-6110.c:4293 common/fbus-6110.c:4303
+msgid "Message: Calendar note write failed!\n"
+msgstr "Avviso: Impossibile salvare la nota nell'agenda!\n"
+
+#: common/fbus-6110.c:4312
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: common/fbus-6110.c:4352
+msgid "Message: Calendar note received.\n"
+msgstr "Avviso: Ricevuta nota in agenda.\n"
+
+#: common/fbus-6110.c:4354 gnokii/gnokii.c:2272
+#, c-format
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Data: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4365 gnokii/gnokii.c:2281
+#, c-format
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Data allarme: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4369 gnokii/gnokii.c:2285
+#, c-format
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Ora allarme: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4374
+#, c-format
+msgid "   Type: %d\n"
+msgstr "   Tipo: %d\n"
+
+#: common/fbus-6110.c:4375 gnokii/gnokii.c:2290
+#, c-format
+msgid "   Text: %s\n"
+msgstr "   Testo: %s\n"
+
+#: common/fbus-6110.c:4378 gnokii/gnokii.c:2293
+#, c-format
+msgid "   Phone: %s\n"
+msgstr "   Telefono: %s\n"
+
+#: common/fbus-6110.c:4388
+msgid "Message: Calendar note not available\n"
+msgstr "Avviso: Nessuna nota diponibile nell'agenda\n"
+
+#: common/fbus-6110.c:4398
+msgid "Message: Calendar note error\n"
+msgstr "Avviso: Errore nell' agenda\n"
+
+#: common/fbus-6110.c:4420
+msgid "Message: Calendar note deleted\n"
+msgstr "Avviso: Nota in agenda eliminata\n"
+
+#: common/fbus-6110.c:4431
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Avviso: Non è possibile eliminare ;a nota in agenda\n"
+
+#: common/fbus-6110.c:4441
+msgid "Message: Calendar note deleting error\n"
+msgstr "Avviso: Errore eliminando la nota in agenda\n"
+
+#: common/fbus-6110.c:4457
+msgid "Message: Calendar Alarm active\n"
+msgstr "Avviso: Allarme in agenda attivo\n"
+
+#: common/fbus-6110.c:4458
+#, c-format
+msgid "   Item number: %d\n"
+msgstr "  Numero elemento: %d\n"
+
+#: common/fbus-6110.c:4466
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: common/fbus-6110.c:4529
+msgid "Concatenated message!!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4560
+#, c-format
+msgid "Number: %d\n"
+msgstr "Numero: %d\n"
+
+#: common/fbus-6110.c:4565
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4568
+msgid "Sent\n"
+msgstr ""
+
+#: common/fbus-6110.c:4570
+msgid "Not sent\n"
+msgstr ""
+
+#: common/fbus-6110.c:4574
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4577
+msgid "Delivery Report\n"
+msgstr ""
+
+#: common/fbus-6110.c:4579
+msgid "Unknown type\n"
+msgstr ""
+
+#: common/fbus-6110.c:4582
+msgid "Read\n"
+msgstr ""
+
+#: common/fbus-6110.c:4584
+msgid "Not read\n"
+msgstr ""
+
+#: common/fbus-6110.c:4586
+#, c-format
+msgid "   Date: %s "
+msgstr ""
+
+#: common/fbus-6110.c:4594 common/fbus-6110.c:4610 gnokii/gnokii.c:1352
+#: gnokii/gnokii.c:1365 gnokii/gnokii.c:1392
+#, c-format
+msgid "%02d00"
+msgstr ""
+
+#: common/fbus-6110.c:4601
+#, c-format
+msgid "   SMSC response date: %s "
+msgstr ""
+
+#: common/fbus-6110.c:4686
+msgid "Delivered"
+msgstr ""
+
+#: common/fbus-6110.c:4691
+msgid "SM received by the SME"
+msgstr ""
+
+#: common/fbus-6110.c:4694
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4697
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: common/fbus-6110.c:4705
+msgid "Failed"
+msgstr ""
+
+#: common/fbus-6110.c:4712
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4717 common/fbus-6110.c:4810
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4721 common/fbus-6110.c:4814
+msgid "SME busy"
+msgstr ""
+
+#: common/fbus-6110.c:4725 common/fbus-6110.c:4818
+msgid "No response from SME"
+msgstr ""
+
+#: common/fbus-6110.c:4729 common/fbus-6110.c:4822
+msgid "Service rejected"
+msgstr ""
+
+#: common/fbus-6110.c:4733 common/fbus-6110.c:4769 common/fbus-6110.c:4826
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: common/fbus-6110.c:4737 common/fbus-6110.c:4830
+msgid "Error in SME"
+msgstr ""
+
+#: common/fbus-6110.c:4741 common/fbus-6110.c:4793 common/fbus-6110.c:4834
+#: common/fbus-6110.c:4844
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4748
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4753
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4757
+msgid "Incompatibile destination"
+msgstr ""
+
+#: common/fbus-6110.c:4761
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: common/fbus-6110.c:4765
+msgid "Not obtainable"
+msgstr ""
+
+#: common/fbus-6110.c:4773
+msgid "No internetworking available"
+msgstr ""
+
+#: common/fbus-6110.c:4777
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4781
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4785
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4789
+msgid "SM does not exist"
+msgstr ""
+
+#: common/fbus-6110.c:4802
+msgid "Pending"
+msgstr ""
+
+#: common/fbus-6110.c:4806
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: common/fbus-6110.c:4868
+#, c-format
+msgid "Message stored at %d\n"
+msgstr "Messaggio memorizzato in %d\n"
+
+#: common/fbus-6110.c:4873
+msgid "SMS saving failed\n"
+msgstr "Salvataggio SMS fallito\n"
+
+#: common/fbus-6110.c:4876
+msgid "   All locations busy.\n"
+msgstr "   Tutte le memorie sono occupate.\n"
+
+#: common/fbus-6110.c:4880 common/fbus-6110.c:4903
+msgid "   Invalid location!\n"
+msgstr "   Indirizzo memoria non corretto!\n"
+
+#: common/fbus-6110.c:4884
+msgid "   Unknown error.\n"
+msgstr "   Errore indeterminato.\n"
+
+#: common/fbus-6110.c:4895
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4913
+msgid "   Empty SMS location.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4926
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4936
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: common/fbus-6110.c:4937
+#, c-format
+msgid "   The number of messages: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4938
+#, c-format
+msgid "   Unread messages: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4950
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: common/fbus-6110.c:4981
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4991
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:5007
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5029
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:5030
+#, c-format
+msgid "   IMEI: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5032
+#, c-format
+msgid "   Model: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5034
+#, c-format
+msgid "   Production Code: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5036
+#, c-format
+msgid "   HW: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5038
+#, c-format
+msgid "   Firmware: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5044
+#, c-format
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5064
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: common/fbus-6110.c:5082
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5106
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5122
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5242
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5243
+msgid "Please report it ...\n"
+msgstr ""
+
+#: common/fbus-6110.c:5310
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5382 xgnokii/xgnokii.c:1759
+msgid "Phone"
+msgstr "Telefono"
+
+#: common/fbus-6110.c:5385
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:5403
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Msg Dest: %s\n"
+
+#: common/fbus-6110.c:5404
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5406
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5408
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5409
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: common/fbus-6110.c:5480
+msgid "PC: "
+msgstr ""
+
+#: common/fbus-6110.c:5554
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: common/mbus-6160.c:551
+msgid "Standard Ack write (0x40) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:577
+msgid "Standard Ack write (0xd2) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:1022
+msgid "Couldn't open MB61 device: "
+msgstr "Impossibile aprire il dispositivo MB61: "
+
+#: common/mbus-640.c:667
+msgid "Phone: "
+msgstr "Telefono: "
+
+#: common/mbus-640.c:697 common/mbus-640.c:797
+msgid "PC   : "
+msgstr "PC   : "
+
+#: common/mbus-640.c:707 common/mbus-640.c:810
+msgid "Write error!\n"
+msgstr "Errore in scrittura!\n"
+
+#: common/mbus-640.c:734
+msgid "Setting MBUS communication...\n"
+msgstr ""
+
+#: common/rlp-common.c:705
+msgid "Unknown!!! "
+msgstr "Sconosciuto!!! "
+
+#: common/rlp-common.c:770
+msgid "BAD"
+msgstr ""
+
+#: common/rlp-common.c:892
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: common/rlp-common.c:1007
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1008
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1380
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1417
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1465
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1499
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1556
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1614
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1753
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1812
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1843
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1885
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:206
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"gnokii is free software, covered by the GNU General Public License, and you "
+"are\n"
+"welcome to change it and/or distribute copies of it under certain "
+"conditions.\n"
+"There is absolutely no warranty for gnokii.  See GPL for details.\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versione %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"gnokii è free software, rilasciato sotto la GNU General Public License, e "
+"potete\n"
+"apportare modifiche e/o distribuire le copie rispettandone le condizioni.\n"
+"Non esiste nessuna garanzia per gnokii. Vedere la GPL per i dettagli.\n"
+"Compilato %s %s per %s su %s \n"
+
+#: gnokii/gnokii.c:223
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start [end]\n"
+"          gnokii --writephonebook [-i]\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start [end] [-f file] [-d]\n"
+"          gnokii --deletesms memory_type start [end]\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --savesms [-m] [-l n] [-i]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index [-v]\n"
+"          gnokii --writecalendarnote vcardfile number\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --sendlogo {caller|op} destination logofile [network code]\n"
+"          gnokii --sendringtone destination rtttlfile\n"
+"          gnokii --setlogo op [logofile] [network code]\n"
+"          gnokii --setlogo startup [logofile]\n"
+"          gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+"          gnokii --setlogo {dealer|text} [text]\n"
+"          gnokii --getlogo op [logofile] [network code]\n"
+"          gnokii --getlogo startup [logofile] [network code]\n"
+"          gnokii --getlogo caller [logofile][caller group number][network "
+"code]\n"
+"          gnokii --getlogo {dealer|text}\n"
+"          gnokii --setringtone rtttlfile\n"
+"          gnokii --reset [soft|hard]\n"
+"          gnokii --getprofile [number]\n"
+"          gnokii --displayoutput\n"
+"          gnokii --keysequence\n"
+msgstr ""
+"   utilizzo: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory tipo_memoria inizio [fine]\n"
+"          gnokii --writephonebook [-i]\n"
+"          gnokii --getspeeddial numero\n"
+"          gnokii --setspeeddial numero tipo_memoria locazione\n"
+"          gnokii --getsms tipo_memoria inizio [fine] [-f file] -d\n"
+"          gnokii --deletesms tipo_memoria inizio [fine]\n"
+"          gnokii --sendsms destinazione [--smsc numero_centro_messaggi |\n"
+"                 --smscno indice_centro_messaggi] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --savesms [-m] [-l n] [-i]\n"
+"          gnokii --getsmsc numero_centro_messaggi\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice numero\n"
+"          gnokii --getcalendarnote indice [-v]\n"
+"          gnokii --writecalendarnote vcardfile numero\n"
+"          gnokii --deletecalendarnote indice\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf stringa\n"
+"          gnokii --sendlogo {caller|op} destinazione logofile [network "
+"code]\n"
+"          gnokii --sendringtone destinazione rtttlfile\n"
+"          gnokii --setlogo op [logofile] [network code]\n"
+"          gnokii --setlogo startup [logofile]\n"
+"          gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+"          gnokii --setlogo {dealer|text} [text]\n"
+"          gnokii --getlogo op [logofile] [network code]\n"
+"          gnokii --getlogo startup [logofile] [network code]\n"
+"          gnokii --getlogo caller [logofile][caller group number][network "
+"code]\n"
+"          gnokii --getlogo {dealer|text}\n"
+"          gnokii --setringtone rtttlfile\n"
+"          gnokii --reset [soft|hard]\n"
+"          gnokii --getprofile [number]\n"
+"          gnokii --displayoutput\n"
+"          gnokii --keysequence\n"
+
+#: gnokii/gnokii.c:266
+msgid ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+msgstr ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+
+#: common/virtmodem.c:292 gnokii/gnokii.c:293 gnokii/gnokii.c:3187
+#: xgnokii/xgnokii_lowlevel.c:171
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+"Inizializzazione GSM/FBUS fallita! (Modello non supportato ?). Uscita.\n"
+
+#: gnokii/gnokii.c:304
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n"
+
+#: gnokii/gnokii.c:580
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Usare '%s --help' per informazioni .\n"
+
+#: gnokii/gnokii.c:778
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Opzione sconosciuta: %d\n"
+
+#: gnokii/gnokii.c:788
+msgid "Wrong number of arguments\n"
+msgstr "Numero di argomenti non valido\n"
+
+#: gnokii/gnokii.c:859 gnokii/gnokii.c:917 gnokii/gnokii.c:1076
+msgid "Input too long!\n"
+msgstr "Input too long!\n"
+
+#: gnokii/gnokii.c:912 gnokii/gnokii.c:1071
+msgid "Couldn't read from stdin!\n"
+msgstr "Impossibile leggere da stdin!\n"
+
+#: gnokii/gnokii.c:1046
+msgid "Message at specified location exists. "
+msgstr ""
+
+#: gnokii/gnokii.c:1048 gnokii/gnokii.c:1421 gnokii/gnokii.c:2948
+msgid "Overwrite? (yes/no) "
+msgstr "Sovrascrivo (si/no) "
+
+#: gnokii/gnokii.c:1056
+msgid "Invalid location\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1062
+#, c-format
+msgid "Location %d empty. Saving\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1087
+msgid "Saved!\n"
+msgstr "Salvato!\n"
+
+#: gnokii/gnokii.c:1089
+#, c-format
+msgid "Saving failed (error=%d)\n"
+msgstr "Salvataggio non riuscito (errore=%d)\n"
+
+#: gnokii/gnokii.c:1110
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d centro SMS (%s) ha numero %s\n"
+
+#: gnokii/gnokii.c:1112
+msgid "Messages sent as "
+msgstr "Invia messaggi come "
+
+#: gnokii/gnokii.c:1134 xgnokii/xgnokii.c:563
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1138 xgnokii/xgnokii.c:567
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1147
+msgid "Message validity is "
+msgstr "La validità del messaggio è "
+
+#: gnokii/gnokii.c:1183
+msgid "SMS center can not be found :-(\n"
+msgstr "Centro SMS non trovato :-(\n"
+
+#: gnokii/gnokii.c:1256 gnokii/gnokii.c:2805 gnokii/gnokii.c:3016
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Tipo di memoria %s sconosciuta!\n"
+
+#: gnokii/gnokii.c:1283
+#, c-format
+msgid "Saving into %s\n"
+msgstr "Salva in %s\n"
+
+#: gnokii/gnokii.c:1287
+msgid "Filename too long - will be truncated to 63 charactera.\n"
+msgstr "Nome del file troppo lungo - sarà troncato a 63 caratteri.\n"
+
+#: gnokii/gnokii.c:1325
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Messaggi in Uscita "
+
+#: gnokii/gnokii.c:1328
+msgid "(sent)\n"
+msgstr "(inviato)\n"
+
+#: gnokii/gnokii.c:1330
+msgid "(not sent)\n"
+msgstr "(non inviato)\n"
+
+#: gnokii/gnokii.c:1332 gnokii/gnokii.c:1371
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Testo: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1338
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Rapporto di Invio "
+
+#: gnokii/gnokii.c:1340 gnokii/gnokii.c:1380
+msgid "(read)\n"
+msgstr "(letto)\n"
+
+#: gnokii/gnokii.c:1342 gnokii/gnokii.c:1382
+msgid "(not read)\n"
+msgstr "(non letto)\n"
+
+#: gnokii/gnokii.c:1344
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Invio data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1350 gnokii/gnokii.c:1363 gnokii/gnokii.c:1390
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1357
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Risposta data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1370
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Ricevente: %s Centro Msg: %s\n"
+
+#: gnokii/gnokii.c:1377
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Messaggi Ricevuti "
+
+#: gnokii/gnokii.c:1384
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1396
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1402
+#, c-format
+msgid "GSM operator logo for %s (%s) network.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1404
+msgid "Saved by Logo Express\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1405
+msgid "Saved by Operator Logo Uploader by Thomas Kessler\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1420
+#, c-format
+msgid "File %s exists.\n"
+msgstr "Il file %s esiste.\n"
+
+#: gnokii/gnokii.c:1427
+#, c-format
+msgid "Couldn't save logofile %s!\n"
+msgstr "Impossibile salvare il file dei loghi %s!\n"
+
+#: gnokii/gnokii.c:1435
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Collegato (%d/%d):\n"
+
+#: gnokii/gnokii.c:1437
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1442 gnokii/gnokii.c:2268
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1449
+msgid "(delete failed)\n"
+msgstr "(eliminazione fallita\n"
+
+#: gnokii/gnokii.c:1451
+msgid "(message deleted)\n"
+msgstr "(messaggio eliminato)\n"
+
+#: gnokii/gnokii.c:1457 gnokii/gnokii.c:1569 gnokii/gnokii.c:1635
+#: gnokii/gnokii.c:2723 gnokii/gnokii.c:2833
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funzione non implementata per il modello %s!\n"
+
+#: gnokii/gnokii.c:1463
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Locazione non valida: %s %d\n"
+
+#: gnokii/gnokii.c:1469
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "La memoria SMS %s %d è vuota.\n"
+
+#: gnokii/gnokii.c:1475
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d fallita!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1545
+#, c-format
+msgid "Unknown memory type %s (use ME,SM,....)!\n"
+msgstr "Tipo di memoria %s sconosciuta (usare ME,SM,...)!\n"
+
+#: gnokii/gnokii.c:1566
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d eliminato\n"
+
+#: gnokii/gnokii.c:1573
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"DeleteSMS %s %d fallito!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1624
+msgid "Enter your code: "
+msgstr "Digitate il vostro codice: "
+
+#: gnokii/gnokii.c:1631
+msgid "Error: invalid code.\n"
+msgstr "Errore: codice errato.\n"
+
+#: gnokii/gnokii.c:1633
+msgid "Code ok.\n"
+msgstr "Codice ok.\n"
+
+#: gnokii/gnokii.c:1637
+msgid "Other error.\n"
+msgstr "Altro errore.\n"
+
+#: gnokii/gnokii.c:1653
+msgid "Security code status: "
+msgstr "Stato del codice di sicurezza: "
+
+#: gnokii/gnokii.c:1755
+msgid "Sending operator logo.\n"
+msgstr "Invio logo operatore.\n"
+
+#: gnokii/gnokii.c:1759
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1761
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1780
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Codice operatore: %s\n"
+
+#: gnokii/gnokii.c:1829
+#, c-format
+msgid "Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "
+msgstr ""
+
+#: gnokii/gnokii.c:1837
+msgid "Enter name of new file: "
+msgstr ""
+
+#: gnokii/gnokii.c:1847
+#, c-format
+msgid "Failed to write file \"%s\"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1898
+msgid "Getting Logo\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1905
+msgid "Dealer welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:1906
+msgid "Welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:1911
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1969
+msgid "Function not implemented !\n"
+msgstr "Funzione non implementata ! \n"
+
+#: gnokii/gnokii.c:1972
+msgid "This kind of logo is not supported !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1975
+msgid "Error getting logo !\n"
+msgstr "Errore ricevendo il logo !\n"
+
+#: gnokii/gnokii.c:1981
+msgid "What kind of logo do you want to get ?\n"
+msgstr "Quale tipo di logo wolete avere ?\n"
+
+#: gnokii/gnokii.c:1998
+#, c-format
+msgid "Failed to read file \"%s\"\n"
+msgstr "Impossibile leggere il file \"%s\"\n"
+
+#: gnokii/gnokii.c:2000
+#, c-format
+msgid ""
+"Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2002
+#, c-format
+msgid "Wrong colors in \"%s\" logofile !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2004
+#, c-format
+msgid "Invalid format of \"%s\" logofile !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2006
+#, c-format
+msgid "Sorry, gnokii doesn't support used subformat in file \"%s\" !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2008
+#, c-format
+msgid "\"%s\" logofile is too short !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2010
+msgid ""
+"Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 "
+"and 72x28 !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2090
+msgid "Setting Logo.\n"
+msgstr "Impostazione Logo.\n"
+
+#: gnokii/gnokii.c:2104
+msgid "Removing Logo.\n"
+msgstr "Rimozione logo.\n"
+
+#: gnokii/gnokii.c:2108
+msgid "What kind of logo do you want to set ?\n"
+msgstr "Quale tipo di logo volete impostare ?\n"
+
+#: gnokii/gnokii.c:2124
+msgid "Error setting"
+msgstr "Errore di settaggio"
+
+#: gnokii/gnokii.c:2125
+msgid " dealer"
+msgstr ""
+
+#: gnokii/gnokii.c:2126
+msgid " welcome note - "
+msgstr ""
+
+#: gnokii/gnokii.c:2144
+msgid "SIM card and PIN is required\n"
+msgstr "Necessari la SIM card ed il PIN\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "too long, truncated to \"%s\" (length %i)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2156
+msgid "Error setting startup logo - SIM card and PIN is required\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2164
+msgid "Done.\n"
+msgstr "Eseguito.\n"
+
+#: gnokii/gnokii.c:2166
+msgid "Function not implemented.\n"
+msgstr "Funzione non implementata.\n"
+
+#: gnokii/gnokii.c:2168
+msgid "This kind of logo is not supported.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2170
+msgid "Error !\n"
+msgstr "Errore !\n"
+
+#: gnokii/gnokii.c:2247
+msgid "   Type of the note: "
+msgstr "   Tipo di annotazione: "
+
+#: gnokii/gnokii.c:2252
+msgid "Reminder\n"
+msgstr "Promemoria\n"
+
+#: gnokii/gnokii.c:2256
+msgid "Call\n"
+msgstr "Chiamata\n"
+
+#: gnokii/gnokii.c:2260
+msgid "Meeting\n"
+msgstr "Riunione\n"
+
+#: gnokii/gnokii.c:2264
+msgid "Birthday\n"
+msgstr "Compleanno\n"
+
+#: gnokii/gnokii.c:2297
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2315
+msgid "Failed to load vCalendar file.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2323 gnokii/gnokii.c:3027
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2325
+msgid "Failed to write calendar note!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2344
+msgid "   Calendar note deleted.\n"
+msgstr "   Nota eliminata dal calendario.\n"
+
+#: gnokii/gnokii.c:2347
+msgid "The calendar note can not be deleted\n"
+msgstr "La nota non può essere eliminata dal calendrio\n"
+
+#: gnokii/gnokii.c:2416
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Data: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2417
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Ora: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2453
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Sveglia: %s\n"
+
+#: gnokii/gnokii.c:2454
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Ora: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2496
+msgid "Entering monitor mode...\n"
+msgstr "Avvio della modalità monitor...\n"
+
+#: gnokii/gnokii.c:2497
+msgid "Initialising GSM interface...\n"
+msgstr "Inizializzazione interfaccia GSM...\n"
+
+#: gnokii/gnokii.c:2511
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Livello RF  : %d\n"
+
+#: gnokii/gnokii.c:2514
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batteria: %d\n"
+
+#: gnokii/gnokii.c:2517
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Alimentazione: %s\n"
+
+#: gnokii/gnokii.c:2517
+msgid "AC/DC"
+msgstr "AC/DC"
+
+#: gnokii/gnokii.c:2517
+msgid "battery"
+msgstr "batteria"
+
+#: gnokii/gnokii.c:2520
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "Carta SIM: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2523
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefono: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2529
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2532
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2535
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2538
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2541
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2544
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2547
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Messaggi SMS: Non letti %d, Numero %d\n"
+
+#: gnokii/gnokii.c:2550
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Chiamata in arrivo: %s\n"
+
+#: gnokii/gnokii.c:2553
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Rete  : %s (%s), LAC: %s, CellID: %s\n"
+
+#: gnokii/gnokii.c:2556
+#, c-format
+msgid "Cell broadcast received on channel %d: %s\n"
+msgstr "Informazioni microcella ricevute sul canale %d: %s\n"
+
+#: gnokii/gnokii.c:2561
+msgid "Leaving monitor mode...\n"
+msgstr "Chiusura modalità monitor...\n"
+
+#: gnokii/gnokii.c:2586
+msgid "Entering display monitoring mode...\n"
+msgstr "Avvio della modalità monitor...\n"
+
+#: gnokii/gnokii.c:2594
+msgid "Leaving display monitor mode...\n"
+msgstr "Chiusura modalità monitor...\n"
+
+#: gnokii/gnokii.c:2598 gnokii/gnokii.c:2600
+msgid "Error!\n"
+msgstr "Errore!\n"
+
+#: gnokii/gnokii.c:2649
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr "Il valore del profilo è compreso fra 1 e %d!\n"
+
+#: gnokii/gnokii.c:2656
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "Questo telefono consente solo %d profili!\n"
+
+#: gnokii/gnokii.c:2728
+msgid "Unspecified error\n"
+msgstr "Errore sconosciuto\n"
+
+#: gnokii/gnokii.c:2838
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "La memoria tipo %s non è supportata!\n"
+
+#: gnokii/gnokii.c:2843
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2902 gnokii/gnokii.c:2917 gnokii/gnokii.c:2935
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Problema di formato nella linea %d [%s]\n"
+
+#: gnokii/gnokii.c:2946
+msgid "Location busy. "
+msgstr "Locazione impegnata. "
+
+#: gnokii/gnokii.c:2956
+#, c-format
+msgid "Unknown error (%d)\n"
+msgstr "Errore indeterminato (%d)\n"
+
+#: gnokii/gnokii.c:2967
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2969
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2989
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3108
+#, c-format
+msgid "IMEI:     %s\n"
+msgstr "IMEI:     %s\n"
+
+#: gnokii/gnokii.c:3109
+#, c-format
+msgid "Model:    %s\n"
+msgstr "Modello:  %s\n"
+
+#: gnokii/gnokii.c:3110
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Versione: %s\n"
+
+#: gnokii/gnokii.c:3142
+msgid "What kind of reset do you want??\n"
+msgstr "Quale tipo di reset volete??\n"
+
+#: gnokii/gnokii.c:3205 gnokii/gnokii.c:3231
+msgid "Failed to load ringtone.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3244
+msgid "Send failed\n"
+msgstr "Invio fallito\n"
+
+#: gnokii/gnokii.c:3271
+msgid "Key press simulation failed.\n"
+msgstr ""
+
+#: gnokiid/gnokiid.c:56
+#, c-format
+msgid ""
+"gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"gnokiid Versione %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Compilato %s %s per %s su %s \n"
+
+#: gnokiid/gnokiid.c:68
+msgid ""
+"   usage: gnokiid {--help|--version}\n"
+"          --help            display usage information.          --version    "
+"     displays version and copyright information.          --debug           "
+"uses stdin/stdout for virtual modem comms.\n"
+msgstr ""
+"   uso: gnokiid {--help|--version}\n"
+"          --help            mostra le informazioni per l'uso.   --version    "
+"     mostra il copyright e la versione.                   --debug           "
+"utilizza stdin/stdout per comunicare con il modem virtuale.\n"
+
+#: common/virtmodem.c:119
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:126
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:131
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:136
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:229
+msgid "Couldn't open pty!\n"
+msgstr "Impossibile aprire pty!\n"
+
+#: common/virtmodem.c:237
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: common/virtmodem.c:242
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: common/virtmodem.c:304
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n"
+
+#: xgnokii/xgnokii.c:214
+msgid "Reading caller groups names ..."
+msgstr "Lettura nomi dei gruppi ..."
+
+#: xgnokii/xgnokii.c:218 xgnokii/xgnokii.c:1045
+msgid "Familly"
+msgstr "Famiglia"
+
+#: xgnokii/xgnokii.c:219 xgnokii/xgnokii.c:1057
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:220 xgnokii/xgnokii.c:1069
+msgid "Friends"
+msgstr "Amici"
+
+#: xgnokii/xgnokii.c:221 xgnokii/xgnokii.c:1081
+msgid "Colleagues"
+msgstr "Colleghi"
+
+#: xgnokii/xgnokii.c:222 xgnokii/xgnokii.c:1093
+msgid "Other"
+msgstr "Altro"
+
+#: xgnokii/xgnokii.c:223
+msgid "No group"
+msgstr "Nessuno"
+
+#: xgnokii/xgnokii.c:348
+msgid "Short Message received"
+msgstr "Breve Messaggio ricevuto"
+
+#: xgnokii/xgnokii.c:354
+msgid "Working ..."
+msgstr "In funzione..."
+
+#: xgnokii/xgnokii.c:371
+msgid "Call in progress"
+msgstr "Chiamata in corso"
+
+#: xgnokii/xgnokii.c:384
+msgid "Hide"
+msgstr "Nascondi"
+
+#: xgnokii/xgnokii.c:481
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Chiamata in corso:\n"
+"Durata: %s"
+
+#: xgnokii/xgnokii.c:484
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Chiamata provenente da: %s\n"
+"Durata: %s"
+
+#: xgnokii/xgnokii.c:537 xgnokii/xgnokii_sms.c:687
+#, c-format
+msgid "Set %d"
+msgstr "Set %d"
+
+#: xgnokii/xgnokii.c:559 xgnokii/xgnokii.c:1466
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:571
+msgid "Voice"
+msgstr "Voce"
+
+#: xgnokii/xgnokii.c:582 xgnokii/xgnokii.c:1496
+msgid "1 h"
+msgstr "1 h"
+
+#: xgnokii/xgnokii.c:586 xgnokii/xgnokii.c:1503
+msgid "6 h"
+msgstr "6 h"
+
+#: xgnokii/xgnokii.c:590 xgnokii/xgnokii.c:606 xgnokii/xgnokii.c:1510
+msgid "24 h"
+msgstr "24 h"
+
+#: xgnokii/xgnokii.c:594 xgnokii/xgnokii.c:1517
+msgid "72 h"
+msgstr "72 h"
+
+#: xgnokii/xgnokii.c:602
+msgid "Max. time"
+msgstr "Tempo massimo"
+
+#: xgnokii/xgnokii.c:649
+msgid "Reading SMS centers ..."
+msgstr "Lettura del centro SMS ..."
+
+#: xgnokii/xgnokii.c:910
+#, 
+msgid "SMS not supported!"
+msgstr "SMS non supportato!"
+
+#: xgnokii/xgnokii.c:918
+msgid "Calendar not supported!"
+msgstr "Calendario non supportato!"
+
+#: xgnokii/xgnokii.c:1106
+msgid "Error writing configuration file!"
+msgstr "Errore scrivendo il file di configurazione!"
+
+#: xgnokii/xgnokii.c:1118 xgnokii/xgnokii_contacts.c:3025
+msgid "Contacts"
+msgstr "Rubrica"
+
+#: xgnokii/xgnokii.c:1124 xgnokii/xgnokii.c:1902
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1129 xgnokii/xgnokii_calendar.c:867
+msgid "Calendar"
+msgstr "Agenda"
+
+#: xgnokii/xgnokii.c:1134 xgnokii/xgnokii_logos.c:1339
+msgid "Logos"
+msgstr "Loghi"
+
+#: xgnokii/xgnokii.c:1140
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1145 xgnokii/xgnokii_speed.c:559
+msgid "Speed Dial"
+msgstr "Chiamata rapida"
+
+#: xgnokii/xgnokii.c:1150
+msgid "Keyboard"
+msgstr "Tastiera"
+
+#: xgnokii/xgnokii.c:1155 xgnokii/xgnokii_netmon.c:317
+msgid "Net Monitor"
+msgstr "Net Monitor"
+
+#: xgnokii/xgnokii.c:1160
+msgid "Data calls"
+msgstr "Chiamata dati"
+
+#: xgnokii/xgnokii.c:1169 xgnokii/xgnokii.c:1629
+msgid "Options"
+msgstr "Opzioni"
+
+#: xgnokii/xgnokii.c:1179 xgnokii/xgnokii.c:2207
+msgid "Help"
+msgstr "Aiuto"
+
+#: xgnokii/xgnokii.c:1185 xgnokii/xgnokii.c:1202
+msgid "About"
+msgstr "Informazioni su"
+
+#: xgnokii/xgnokii.c:1206 xgnokii/xgnokii.c:1390
+#: xgnokii/xgnokii_calendar.c:495 xgnokii/xgnokii_calendar.c:541
+#: xgnokii/xgnokii_calendar.c:616 xgnokii/xgnokii_calendar.c:766
+#: xgnokii/xgnokii_contacts.c:839 xgnokii/xgnokii_contacts.c:1035
+#: xgnokii/xgnokii_contacts.c:1400 xgnokii/xgnokii_contacts.c:2846
+#: xgnokii/xgnokii_sms.c:480
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1219
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999,2000 Pavel Janík ml.,\n"
+"Hugh Blemings, Jan Derfinak and others\n"
+"xgnokii is free software, covered by the GNU General Public License, and you "
+"are\n"
+"welcome to change it and/or distribute copies of it under certain "
+"conditions.\n"
+"There is absolutely no waranty for xgnokii. See GPL for details.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1384
+msgid "Edit SMS Setting"
+msgstr "Modifica Impostazioni SMS"
+
+#: xgnokii/xgnokii.c:1398 xgnokii/xgnokii_calendar.c:504
+#: xgnokii/xgnokii_calendar.c:550 xgnokii/xgnokii_calendar.c:624
+#: xgnokii/xgnokii_calendar.c:774 xgnokii/xgnokii_common.c:64
+#: xgnokii/xgnokii_common.c:150 xgnokii/xgnokii_contacts.c:847
+#: xgnokii/xgnokii_contacts.c:1043 xgnokii/xgnokii_contacts.c:1272
+#: xgnokii/xgnokii_contacts.c:1318 xgnokii/xgnokii_contacts.c:1409
+#: xgnokii/xgnokii_contacts.c:1682 xgnokii/xgnokii_contacts.c:1797
+#: xgnokii/xgnokii_contacts.c:2853 xgnokii/xgnokii_sms.c:488
+msgid "Cancel"
+msgstr "Annulla"
+
+#: xgnokii/xgnokii.c:1411
+msgid "Set's name:"
+msgstr "Nome Set:"
+
+#: xgnokii/xgnokii.c:1424
+msgid "Center:"
+msgstr "Centro:"
+
+#: xgnokii/xgnokii.c:1437
+msgid "Sending Format:"
+msgstr "Formato di Invio:"
+
+#: xgnokii/xgnokii.c:1481
+msgid "Validity Period:"
+msgstr "Periodo di Validità:"
+
+#: xgnokii/xgnokii.c:1489
+msgid "Max. Time"
+msgstr "Tempo Massimo"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Set's name"
+msgstr "Nome Set"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Center number"
+msgstr "Numero Centro Messaggi"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Format"
+msgstr "Formato"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Validity"
+msgstr "Validità"
+
+#: xgnokii/xgnokii.c:1634
+msgid "Apply"
+msgstr "Applica"
+
+#: xgnokii/xgnokii.c:1643 xgnokii/xgnokii_contacts.c:1666
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Salva"
+
+#: xgnokii/xgnokii.c:1650
+msgid "Close"
+msgstr "Chiudi"
+
+#: xgnokii/xgnokii.c:1665
+msgid "Phone and connection type"
+msgstr "Telefono e tipo collegamento"
+
+#: xgnokii/xgnokii.c:1672
+msgid "Connection"
+msgstr "Collegamento"
+
+#: xgnokii/xgnokii.c:1679
+msgid "Port:"
+msgstr "Porta:"
+
+#: xgnokii/xgnokii.c:1694 xgnokii/xgnokii.c:1766
+msgid "Model:"
+msgstr "Modello:"
+
+#: xgnokii/xgnokii.c:1709
+msgid "Init length:"
+msgstr "Stringa di inizializzaaione:"
+
+#: xgnokii/xgnokii.c:1724
+msgid "Bindir:"
+msgstr "Directory eseguibili:"
+
+#: xgnokii/xgnokii.c:1739
+msgid "Connection:"
+msgstr "Collegamento:"
+
+#: xgnokii/xgnokii.c:1743
+msgid "infrared"
+msgstr "infrarossi"
+
+#: xgnokii/xgnokii.c:1747
+msgid "serial"
+msgstr "seriale"
+
+#: xgnokii/xgnokii.c:1752
+msgid "Phone information"
+msgstr "Informazioni sul telefono"
+
+#: xgnokii/xgnokii.c:1781
+msgid "Version:"
+msgstr "Modello:"
+
+#: xgnokii/xgnokii.c:1796
+msgid "Revision:"
+msgstr "Versione:"
+
+#: xgnokii/xgnokii.c:1811
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1826
+msgid "Names length:"
+msgstr "Lungezza nomi:"
+
+#: xgnokii/xgnokii.c:1834
+msgid "SIM:"
+msgstr "SIM:"
+
+#: xgnokii/xgnokii.c:1852
+msgid "Phone:"
+msgstr "Telefono:"
+
+#: xgnokii/xgnokii.c:1859
+msgid "Alarm setting"
+msgstr "Impostazione allarme"
+
+#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii.c:1873
+#: xgnokii/xgnokii_calendar.c:688 xgnokii/xgnokii_calendar.c:863
+msgid "Alarm"
+msgstr "Allarme"
+
+#: xgnokii/xgnokii.c:1896 xgnokii/xgnokii_sms.c:1544
+msgid "Short Message Service"
+msgstr "Short Message Service"
+
+#: xgnokii/xgnokii.c:1930
+msgid "Edit"
+msgstr "Modifica"
+
+#: xgnokii/xgnokii.c:1944
+msgid "Business Card"
+msgstr "Biglietto da Visita"
+
+#: xgnokii/xgnokii.c:1950
+msgid "User"
+msgstr "Utente"
+
+#: xgnokii/xgnokii.c:1968 xgnokii/xgnokii_contacts.c:860
+msgid "Name:"
+msgstr "Nome:"
+
+#: xgnokii/xgnokii.c:1994
+msgid "Title:"
+msgstr "Titolo:"
+
+#: xgnokii/xgnokii.c:2020
+msgid "Company:"
+msgstr "Società:"
+
+#: xgnokii/xgnokii.c:2046
+msgid "Telephone:"
+msgstr "Telefono:"
+
+#: xgnokii/xgnokii.c:2071
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:2096
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2122
+msgid "Address:"
+msgstr "Indirizzo:"
+
+#: xgnokii/xgnokii.c:2146
+msgid "Caller groups names"
+msgstr "Nome gruppo chiamante"
+
+#: xgnokii/xgnokii.c:2153
+msgid "Groups"
+msgstr "Gruppi"
+
+#: xgnokii/xgnokii.c:2162
+#, c-format
+msgid "Group %d:"
+msgstr "Gruppo %d:"
+
+#: xgnokii/xgnokii.c:2175
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: xgnokii/xgnokii.c:2182
+msgid "Mail"
+msgstr "Mail"
+
+#: xgnokii/xgnokii.c:2189
+msgid "Path to mailbox:"
+msgstr "Percorso della mailbox:"
+
+#: xgnokii/xgnokii.c:2200
+msgid "Help viewer"
+msgstr "Visualizzatore help"
+
+#: xgnokii/xgnokii.c:2214
+msgid "Viewer:"
+msgstr "Visualizzatore:"
+
+#: xgnokii/xgnokii_calendar.c:123
+msgid "Reminder"
+msgstr "Promemoria"
+
+#: xgnokii/xgnokii_calendar.c:130
+msgid "Call"
+msgstr "Chiamata"
+
+#: xgnokii/xgnokii_calendar.c:138
+msgid "Meeting"
+msgstr "Riunione"
+
+#: xgnokii/xgnokii_calendar.c:146
+msgid "Birthday"
+msgstr "Compleanno"
+
+#: xgnokii/xgnokii_calendar.c:194
+msgid "Type: "
+msgstr "Tipo: "
+
+#: xgnokii/xgnokii_calendar.c:202 xgnokii/xgnokii_sms.c:384
+msgid "Date: "
+msgstr "Data: "
+
+#: xgnokii/xgnokii_calendar.c:217
+msgid "Alarm: "
+msgstr "Allarme: "
+
+#: xgnokii/xgnokii_calendar.c:238
+msgid "Text: "
+msgstr "Testo: "
+
+#: xgnokii/xgnokii_calendar.c:488 xgnokii/xgnokii_calendar.c:534
+msgid "Choose date"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:571
+msgid "Alarm time:"
+msgstr "Ora allarme:"
+
+#: xgnokii/xgnokii_calendar.c:609 xgnokii/xgnokii_calendar.c:929
+msgid "Add reminder"
+msgstr "Aggiunta promemoria"
+
+#: xgnokii/xgnokii_calendar.c:641
+msgid "Date:"
+msgstr "Data:"
+
+#: xgnokii/xgnokii_calendar.c:676
+msgid "Subject:"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:759
+msgid "Delete calendar note"
+msgstr "Elimina nota in calendario"
+
+#: xgnokii/xgnokii_calendar.c:791
+msgid "Do you want to delete selected note(s)?"
+msgstr "Volete eliminare le/la nota/e selezionate?"
+
+#: xgnokii/xgnokii_calendar.c:826 xgnokii/xgnokii_contacts.c:2980
+#: xgnokii/xgnokii_dtmf.c:217 xgnokii/xgnokii_logos.c:1292
+#: xgnokii/xgnokii_netmon.c:259 xgnokii/xgnokii_sms.c:1121
+#: xgnokii/xgnokii_sms.c:1507 xgnokii/xgnokii_speed.c:527
+#: xgnokii/xgnokii_xkeyb.c:242
+msgid "/_File"
+msgstr "/_File"
+
+#: xgnokii/xgnokii_calendar.c:827 xgnokii/xgnokii_contacts.c:2981
+#: xgnokii/xgnokii_speed.c:528
+msgid "/File/_Read from phone"
+msgstr "/File/_Leggi dal telefono"
+
+#: xgnokii/xgnokii_calendar.c:828 xgnokii/xgnokii_contacts.c:2982
+#: xgnokii/xgnokii_speed.c:529
+msgid "/File/_Save to phone"
+msgstr "/File/_Salva sul telefono"
+
+#: xgnokii/xgnokii_calendar.c:829 xgnokii/xgnokii_contacts.c:2983
+#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_logos.c:1296
+#: xgnokii/xgnokii_sms.c:1124 xgnokii/xgnokii_sms.c:1510
+#: xgnokii/xgnokii_speed.c:530
+msgid "/File/Sep1"
+msgstr "/File/Sep1"
+
+#: xgnokii/xgnokii_calendar.c:830
+msgid "/File/Send via S_MS"
+msgstr "/File/Invi_a con S_MS"
+
+#: xgnokii/xgnokii_calendar.c:831 xgnokii/xgnokii_contacts.c:2986
+#: xgnokii/xgnokii_logos.c:1300 xgnokii/xgnokii_sms.c:1127
+#: xgnokii/xgnokii_speed.c:533
+msgid "/File/Sep2"
+msgstr "/File/Sep2"
+
+#: xgnokii/xgnokii_calendar.c:832 xgnokii/xgnokii_contacts.c:2984
+#: xgnokii/xgnokii_speed.c:531
+msgid "/File/_Import from file"
+msgstr "/File/_Importa da file"
+
+#: xgnokii/xgnokii_calendar.c:833 xgnokii/xgnokii_contacts.c:2985
+#: xgnokii/xgnokii_speed.c:532
+msgid "/File/_Export to file"
+msgstr "/File/_Esporta su file"
+
+#: xgnokii/xgnokii_calendar.c:834
+msgid "/File/Sep3"
+msgstr "/File/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:835 xgnokii/xgnokii_contacts.c:2987
+#: xgnokii/xgnokii_dtmf.c:221 xgnokii/xgnokii_logos.c:1301
+#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1128
+#: xgnokii/xgnokii_sms.c:1511 xgnokii/xgnokii_speed.c:534
+#: xgnokii/xgnokii_xkeyb.c:243
+msgid "/File/_Close"
+msgstr "/File/_Chiudi"
+
+#: xgnokii/xgnokii_calendar.c:836 xgnokii/xgnokii_contacts.c:2988
+#: xgnokii/xgnokii_logos.c:1302 xgnokii/xgnokii_speed.c:535
+msgid "/_Edit"
+msgstr "/_Modifica"
+
+#: xgnokii/xgnokii_calendar.c:837
+msgid "/Edit/Add _reminder"
+msgstr "/Modifica/Aggiungi p_romemoria"
+
+#: xgnokii/xgnokii_calendar.c:838
+msgid "/Edit/Add _call"
+msgstr "/Modifica/Aggiungi _chiamata"
+
+#: xgnokii/xgnokii_calendar.c:839
+msgid "/Edit/Add _meeting"
+msgstr "/Modifica/Aggiungi _meeting"
+
+#: xgnokii/xgnokii_calendar.c:840
+msgid "/Edit/Add _birthday"
+msgstr "/Modifica/Aggiungi c_ompleanno"
+
+#: xgnokii/xgnokii_calendar.c:841 xgnokii/xgnokii_contacts.c:2991
+#: xgnokii/xgnokii_speed.c:536
+msgid "/Edit/_Edit"
+msgstr "/Modifica/_Modifica"
+
+#: xgnokii/xgnokii_calendar.c:842 xgnokii/xgnokii_contacts.c:2992
+msgid "/Edit/_Delete"
+msgstr "/Modifica/_Cancella"
+
+#: xgnokii/xgnokii_calendar.c:843 xgnokii/xgnokii_contacts.c:2995
+#: xgnokii/xgnokii_logos.c:1310
+msgid "/Edit/Sep4"
+msgstr "/Modifica/Sep4"
+
+#: xgnokii/xgnokii_calendar.c:844 xgnokii/xgnokii_contacts.c:2999
+msgid "/Edit/Select _all"
+msgstr "/Modifica/Selezion_a tutti"
+
+#: xgnokii/xgnokii_calendar.c:845 xgnokii/xgnokii_contacts.c:3002
+#: xgnokii/xgnokii_dtmf.c:222 xgnokii/xgnokii_netmon.c:264
+#: xgnokii/xgnokii_sms.c:1129 xgnokii/xgnokii_sms.c:1519
+#: xgnokii/xgnokii_speed.c:537 xgnokii/xgnokii_xkeyb.c:244
+msgid "/_Help"
+msgstr "/_Aiuto"
+
+#: xgnokii/xgnokii_calendar.c:846 xgnokii/xgnokii_contacts.c:3003
+#: xgnokii/xgnokii_dtmf.c:223 xgnokii/xgnokii_netmon.c:265
+#: xgnokii/xgnokii_sms.c:1130 xgnokii/xgnokii_sms.c:1520
+#: xgnokii/xgnokii_speed.c:538 xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_Help"
+msgstr "/Aiuto/_Aiuto"
+
+#: xgnokii/xgnokii_calendar.c:847 xgnokii/xgnokii_contacts.c:3004
+#: xgnokii/xgnokii_dtmf.c:224 xgnokii/xgnokii_netmon.c:266
+#: xgnokii/xgnokii_sms.c:1131 xgnokii/xgnokii_sms.c:1521
+#: xgnokii/xgnokii_speed.c:539 xgnokii/xgnokii_xkeyb.c:246
+msgid "/Help/_About"
+msgstr "/Aiuto/_Informazioni"
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "#"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "Type"
+msgstr "Tipo"
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "Date"
+msgstr "Data"
+
+#: xgnokii/xgnokii_calendar.c:863 xgnokii/xgnokii_contacts.c:1350
+#: xgnokii/xgnokii_contacts.c:3020 xgnokii/xgnokii_speed.c:554
+msgid "Number"
+msgstr "Numero"
+
+#: xgnokii/xgnokii_calendar.c:896 xgnokii/xgnokii_contacts.c:3056
+#: xgnokii/xgnokii_speed.c:590
+msgid "Read from phone"
+msgstr "Leggi dal telefono"
+
+#: xgnokii/xgnokii_calendar.c:900 xgnokii/xgnokii_contacts.c:3060
+#: xgnokii/xgnokii_speed.c:594
+msgid "Save to phone"
+msgstr "Salva sul telefono"
+
+#: xgnokii/xgnokii_calendar.c:907
+msgid "Send via SMS"
+msgstr "Invia come SMS"
+
+#: xgnokii/xgnokii_calendar.c:914 xgnokii/xgnokii_contacts.c:3067
+#: xgnokii/xgnokii_logos.c:1386 xgnokii/xgnokii_speed.c:601
+msgid "Import from file"
+msgstr "Importa da file"
+
+#: xgnokii/xgnokii_calendar.c:918 xgnokii/xgnokii_contacts.c:3071
+#: xgnokii/xgnokii_logos.c:1390 xgnokii/xgnokii_speed.c:605
+msgid "Export to file"
+msgstr "Esporta su file"
+
+#: xgnokii/xgnokii_calendar.c:925
+msgid "Edit note"
+msgstr "Modifica nota"
+
+#: xgnokii/xgnokii_calendar.c:933
+msgid "Add call"
+msgstr "Aggiungi chiamata"
+
+#: xgnokii/xgnokii_calendar.c:937
+msgid "Add meeting"
+msgstr "Aggiungi riunione"
+
+#: xgnokii/xgnokii_calendar.c:941
+msgid "Add birthday"
+msgstr "Aggiungi compleanno"
+
+#: xgnokii/xgnokii_calendar.c:945
+msgid "Delete note"
+msgstr "Elimina voci"
+
+#: xgnokii/xgnokii_calendar.c:1005 xgnokii/xgnokii_contacts.c:2876
+#: xgnokii/xgnokii_contacts.c:3126 xgnokii/xgnokii_sms.c:1686
+#: xgnokii/xgnokii_speed.c:637
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "Errore: %s: linea %d: Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_calendar.c:1034 xgnokii/xgnokii_sms.c:1719
+msgid "couldn't allocate colour"
+msgstr "impossibile utilizzare il colore"
+
+#: xgnokii/xgnokii_cfg.c:80
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "ATTENZIONE: non trovo la variabile di ambiente HOME !\n"
+
+#: xgnokii/xgnokii_cfg.c:86 xgnokii/xgnokii_cfg.c:101
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:185
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:191 xgnokii/xgnokii_cfg.c:209
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:197
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "ERRORE: impossibile scrivere sul file %s !\n"
+
+#: xgnokii/xgnokii_cfg.c:215
+msgid "ERROR: Can't write config file!\n"
+msgstr "ERRORE: Impossibile scrivere il file di configurazione!\n"
+
+#: xgnokii/xgnokii_common.c:57
+msgid "Error"
+msgstr "Errore"
+
+#: xgnokii/xgnokii_common.c:96
+msgid "Info"
+msgstr "Info"
+
+#: xgnokii/xgnokii_common.c:134
+msgid "Yes"
+msgstr "Si"
+
+#: xgnokii/xgnokii_common.c:143
+msgid "No"
+msgstr "No"
+
+#: xgnokii/xgnokii_common.c:230
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Impossibile eseguire %s\n"
+
+#: xgnokii/xgnokii_contacts.c:246 xgnokii/xgnokii_contacts.c:279
+#: xgnokii/xgnokii_contacts.c:448 xgnokii/xgnokii_contacts.c:473
+#: xgnokii/xgnokii_contacts.c:613 xgnokii/xgnokii_contacts.c:635
+msgid "Can't change memory type!"
+msgstr "Impossibile cambiare il tipo di memoria!"
+
+#: xgnokii/xgnokii_contacts.c:290 xgnokii/xgnokii_contacts.c:337
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Spiacente, ma il nome della rubrica sarà troncato,\n"
+"poichè è stato salvato nella memoria SIM!"
+
+#: xgnokii/xgnokii_contacts.c:484 xgnokii/xgnokii_contacts.c:523
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Spiacente, ma il nominativo sarà troncato,\n"
+"poichè è stato salvato nella memoria SIM!"
+
+#: xgnokii/xgnokii_contacts.c:729
+msgid "Can't find pattern!"
+msgstr "Elemento non trovato!"
+
+#: xgnokii/xgnokii_contacts.c:873 xgnokii/xgnokii_contacts.c:1418
+msgid "Number:"
+msgstr "Numero:"
+
+#: xgnokii/xgnokii_contacts.c:888
+msgid "Extended:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:905
+msgid "Memory:"
+msgstr "Memoria:"
+
+#: xgnokii/xgnokii_contacts.c:909
+msgid "phone"
+msgstr "telefono"
+
+#: xgnokii/xgnokii_contacts.c:922
+msgid "Caller group:"
+msgstr "Gruppo chiamante:"
+
+#: xgnokii/xgnokii_contacts.c:939 xgnokii/xgnokii_contacts.c:3086
+#: xgnokii/xgnokii_speed.c:612
+msgid "Edit entry"
+msgstr "Modifica voce"
+
+#: xgnokii/xgnokii_contacts.c:1028
+msgid "Delete entries"
+msgstr "Elimina voci"
+
+#: xgnokii/xgnokii_contacts.c:1060
+msgid "Do you want to delete selected entries?"
+msgstr "Volete eliminare le voci selezionate?"
+
+#: xgnokii/xgnokii_contacts.c:1072 xgnokii/xgnokii_contacts.c:3078
+msgid "New entry"
+msgstr "Nuova voce"
+
+#: xgnokii/xgnokii_contacts.c:1111 xgnokii/xgnokii_contacts.c:3082
+msgid "Duplicate entry"
+msgstr "Duplica la voce"
+
+#: xgnokii/xgnokii_contacts.c:1177 xgnokii/xgnokii_contacts.c:1187
+#: xgnokii/xgnokii_contacts.c:1212
+msgid "Can't find free memory."
+msgstr "Memoria esaurita."
+
+#: xgnokii/xgnokii_contacts.c:1256
+msgid "Changing memory type"
+msgstr "Cambiare il tipo di memoria"
+
+#: xgnokii/xgnokii_contacts.c:1263
+msgid "Continue"
+msgstr "Continua"
+
+#: xgnokii/xgnokii_contacts.c:1283
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+
+#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:1309
+msgid "Find"
+msgstr "Cerca"
+
+#: xgnokii/xgnokii_contacts.c:1331
+msgid "Pattern:"
+msgstr "Stringa:"
+
+#: xgnokii/xgnokii_contacts.c:1344 xgnokii/xgnokii_contacts.c:3020
+#: xgnokii/xgnokii_speed.c:554
+msgid "Name"
+msgstr "Nome"
+
+#: xgnokii/xgnokii_contacts.c:1394 xgnokii/xgnokii_contacts.c:3097
+msgid "Dial voice"
+msgstr "Chiamata vocale"
+
+#: xgnokii/xgnokii_contacts.c:1520
+msgid "Phone memory..."
+msgstr "Memoria telefono..."
+
+#: xgnokii/xgnokii_contacts.c:1531
+msgid "SIM memory..."
+msgstr "Memoria SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1560
+msgid "Saving entries"
+msgstr "Salva elementi"
+
+#: xgnokii/xgnokii_contacts.c:1594
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile scrivere nella memoria ME numero %d! Errore: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1636
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile scrivere nella memoria SM numero %d! Errore: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1659
+msgid "Save changes?"
+msgstr "Salvare i cambiamenti?"
+
+#: xgnokii/xgnokii_contacts.c:1675
+msgid "Don't save"
+msgstr "Non salvare"
+
+#: xgnokii/xgnokii_contacts.c:1699
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Sono state effettuate modifiche\n"
+"nella rubrica.\n"
+"\n"
+"\n"
+"Le si vuole inviare al telefono?\n"
+
+#: xgnokii/xgnokii_contacts.c:1760
+msgid "Which Extended Phonebook Entry?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1766
+msgid "General"
+msgstr "Generale"
+
+#: xgnokii/xgnokii_contacts.c:1772
+msgid "Mobile"
+msgstr "Cellulare"
+
+#: xgnokii/xgnokii_contacts.c:1778
+msgid "Work"
+msgstr "Lavoro"
+
+#: xgnokii/xgnokii_contacts.c:1790
+msgid "Home"
+msgstr "Casa"
+
+#: xgnokii/xgnokii_contacts.c:1883 xgnokii/xgnokii_contacts.c:1910
+#: xgnokii/xgnokii_contacts.c:2555 xgnokii/xgnokii_contacts.c:2579
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: linea %d: Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_contacts.c:2005
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Non è possibile rilevare lo stato della memoria SM !\n"
+"\n"
+"Impostare il massimo delle voci nella SIM a 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2030
+msgid "Getting entries"
+msgstr "Caricamento dati"
+
+#: xgnokii/xgnokii_contacts.c:2163 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:426
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Impossibile aprire il file %s in scrittura!"
+
+#: xgnokii/xgnokii_contacts.c:2257 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_logos.c:1169 xgnokii/xgnokii_speed.c:468
+msgid "Overwrite file?"
+msgstr "Sovrascrivo il file?"
+
+#: xgnokii/xgnokii_contacts.c:2258 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_logos.c:1170 xgnokii/xgnokii_speed.c:469
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Il file %s esiste.\n"
+"Sovrascrivo?"
+
+#: xgnokii/xgnokii_contacts.c:2276 xgnokii/xgnokii_speed.c:487
+msgid "Export"
+msgstr "Esporta"
+
+#: xgnokii/xgnokii_contacts.c:2476 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:326
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Impossibile aprire il file %s in lettura!"
+
+#: xgnokii/xgnokii_contacts.c:2530
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Non è possibile rilevare lo stato della memoria SM !\n"
+"\n"
+"Impostare il massimo delle voci nella SIM a 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2645 xgnokii/xgnokii_speed.c:404
+msgid "Import"
+msgstr "Importa"
+
+#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_sms.c:1233
+msgid "Select contacts"
+msgstr "Seleziona nominativi"
+
+#: xgnokii/xgnokii_contacts.c:2989
+msgid "/Edit/_New"
+msgstr "/Modifica/_Nuovo"
+
+#: xgnokii/xgnokii_contacts.c:2990
+msgid "/Edit/D_uplicate"
+msgstr "/Modifica/_Duplica"
+
+#: xgnokii/xgnokii_contacts.c:2993 xgnokii/xgnokii_logos.c:1305
+msgid "/Edit/Sep3"
+msgstr "/Modifica/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2994
+msgid "/Edit/_Change memory type"
+msgstr "/Modifica/_Cambia il tipo di memoria"
+
+#: xgnokii/xgnokii_contacts.c:2996
+msgid "/Edit/_Find"
+msgstr "/Modifica/_Trova"
+
+#: xgnokii/xgnokii_contacts.c:2997
+msgid "/Edit/Find ne_xt"
+msgstr "/Modifica/Trova se_guente"
+
+#: xgnokii/xgnokii_contacts.c:2998
+msgid "/Edit/Sep5"
+msgstr "/Modifica/Sep5"
+
+#: xgnokii/xgnokii_contacts.c:3000
+msgid "/_Dial"
+msgstr "/_Chiamata"
+
+#: xgnokii/xgnokii_contacts.c:3001
+msgid "/Dial/Dial _voice"
+msgstr "/Chiamata/Chiamata _vocale"
+
+#: xgnokii/xgnokii_contacts.c:3020
+msgid "Memory"
+msgstr "Memoria"
+
+#: xgnokii/xgnokii_contacts.c:3020
+msgid "Group"
+msgstr "Gruppo"
+
+#: xgnokii/xgnokii_contacts.c:3090
+msgid "Delete entry"
+msgstr "Elimina elemento"
+
+#: xgnokii/xgnokii_data.c:42
+msgid ""
+"Data calls are currently\n"
+"Disabled\n"
+" "
+msgstr ""
+"Le chimate dati sono ora\n"
+"Disabilitate\n"
+" "
+
+#: xgnokii/xgnokii_data.c:44
+msgid ""
+"Data calls are currently\n"
+"Enabled\n"
+" "
+msgstr ""
+"Le chimate dati sono ora\n"
+"Abilitate\n"
+" "
+
+#: xgnokii/xgnokii_data.c:101
+msgid "Virtual Modem"
+msgstr "Modem Virtuale"
+
+#: xgnokii/xgnokii_data.c:119
+msgid "Enable"
+msgstr "Abilita"
+
+#: xgnokii/xgnokii_data.c:125
+msgid "Disable"
+msgstr "Disabilita"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Carica"
+
+#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1293
+msgid "/File/_Open"
+msgstr "/File/_Apri"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1294
+#: xgnokii/xgnokii_sms.c:1123 xgnokii/xgnokii_sms.c:1508
+msgid "/File/_Save"
+msgstr "/File/_Salva"
+
+#: xgnokii/xgnokii_dtmf.c:245
+msgid "Dial Tone"
+msgstr "Tono di chiamata"
+
+#: xgnokii/xgnokii_logos.c:823
+#, c-format
+msgid ""
+"Error getting network info\n"
+"(error=%d)"
+msgstr ""
+"Errore ricercando informazioni sulla rete\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:862
+#, c-format
+msgid ""
+"Error getting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Errore caricando l'immagine bitmap\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:907
+#, c-format
+msgid ""
+"Error setting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Errore impostando l'immagine bitmap\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1141
+#, c-format
+msgid ""
+"Error saving file\n"
+"(error=%d)"
+msgstr ""
+"Errore salvando il file\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1191
+#, c-format
+msgid "Can't open file %s for reading !"
+msgstr "Impossibile aprire il file %s in lettura !"
+
+#: xgnokii/xgnokii_logos.c:1200
+#, c-format
+msgid ""
+"Error reading file\n"
+"(error=%d)"
+msgstr ""
+"Errore leggendo il file\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1295
+msgid "/File/Save _as ..."
+msgstr "/File/Salv_a come ..."
+
+#: xgnokii/xgnokii_logos.c:1297
+msgid "/File/_Get operator"
+msgstr "/File/_Seleziona operatore"
+
+#: xgnokii/xgnokii_logos.c:1298
+msgid "/File/Get _logo"
+msgstr "/File/Seleziona _logo"
+
+#: xgnokii/xgnokii_logos.c:1299
+msgid "/File/Se_t logo"
+msgstr "/File/Impos_ta logo"
+
+#: xgnokii/xgnokii_logos.c:1303
+msgid "/Edit/_Clear"
+msgstr "/Edit/_Cancella tutto"
+
+#: xgnokii/xgnokii_logos.c:1304
+msgid "/Edit/_Invert"
+msgstr "/Edit/_Inverti"
+
+#: xgnokii/xgnokii_logos.c:1306
+msgid "/Edit/_Up logo"
+msgstr "/Edit/Logo s_u"
+
+#: xgnokii/xgnokii_logos.c:1307
+msgid "/Edit/_Down logo"
+msgstr "/Edit/Logo _giù"
+
+#: xgnokii/xgnokii_logos.c:1308
+msgid "/Edit/_Left logo"
+msgstr "/Edit/Logo _sinistra"
+
+#: xgnokii/xgnokii_logos.c:1309
+msgid "/Edit/_Right logo"
+msgstr "/Edit/Logo dest_ra"
+
+#: xgnokii/xgnokii_logos.c:1311
+msgid "/Edit/Flip _horizontal"
+msgstr ""
+
+#: xgnokii/xgnokii_logos.c:1312
+msgid "/Edit/Flip _vertical"
+msgstr ""
+
+#: xgnokii/xgnokii_logos.c:1604
+msgid "Load preview pixmap error, feature disabled."
+msgstr ""
+
+#: xgnokii/xgnokii_lowlevel.c:353
+#, c-format
+msgid "%s: line %d: Can't get memory entry number %d from memory %d! %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile leggere la locazione %d dalla memoria %d! %d\n"
+
+#: xgnokii/xgnokii_lowlevel.c:874
+msgid "Connecting..."
+msgstr "Connessione..."
+
+#: xgnokii/xgnokii_lowlevel.c:907
+msgid "Refreshing SMSes..."
+msgstr "Rilettura SMS..."
+
+#: xgnokii/xgnokii_lowlevel.c:965
+msgid "Working..."
+msgstr "Attendere..."
+
+#: xgnokii/xgnokii_lowlevel.c:968
+#, c-format
+msgid "Event %d failed with return code %d!\n"
+msgstr "Fallito evento %d con codice %d!\n"
+
+#: xgnokii/xgnokii_netmon.c:261
+msgid "/_Tools"
+msgstr "/S_trumenti"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/Tools/Net monitor o_n"
+msgstr "/Strumenti/_Net monitor attivo"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Strumenti/Net monitor disattiv_o"
+
+#: xgnokii/xgnokii_netmon.c:380 xgnokii/xgnokii_netmon.c:383
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:386
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:389
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:392
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:395
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:398
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:401
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:404
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:407
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:417
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:420
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:423
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:426
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:429
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:432
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:435
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:438
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:441
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:444
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:454
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:457
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:460
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:463
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:466
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:469
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:475
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:478
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:481
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:491
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:503
+msgid "Information about task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:506
+msgid "Information about task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:509
+msgid "Information about task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:512
+msgid "Information about OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:515
+msgid "Information about current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:518
+msgid "Hardware version"
+msgstr "Versione hardware"
+
+#: xgnokii/xgnokii_netmon.c:537
+msgid "Chan"
+msgstr "Chan"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "RxLv"
+msgstr "RxLv"
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "C1"
+msgstr "C1"
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C2"
+msgstr "C2"
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "ACT"
+msgstr "ACT"
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:578
+msgid "Page:"
+msgstr "Pagina:"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "report"
+msgstr "report"
+
+#: xgnokii/xgnokii_sms.c:241
+msgid "read"
+msgstr "letto"
+
+#: xgnokii/xgnokii_sms.c:246
+msgid "unread"
+msgstr "non letto"
+
+#: xgnokii/xgnokii_sms.c:306
+msgid "sent"
+msgstr "inviato"
+
+#: xgnokii/xgnokii_sms.c:308
+msgid "unsent"
+msgstr "non inviato"
+
+#: xgnokii/xgnokii_sms.c:376
+msgid "From: "
+msgstr "Da :"
+
+#: xgnokii/xgnokii_sms.c:473
+msgid "Delete SMS"
+msgstr "Elimina SMS"
+
+#: xgnokii/xgnokii_sms.c:505
+msgid "Do you want to delete selected SMS?"
+msgstr "Volete veramente eliminare gli SMS selezionati?"
+
+#: xgnokii/xgnokii_sms.c:529
+#, c-format
+msgid "Cannot open mailbox %s for appending!"
+msgstr "Impossibile aprire la mailbox %s per aggiungere!"
+
+#: xgnokii/xgnokii_sms.c:543
+#, c-format
+msgid ""
+"Cannot save to mailbox %s.\n"
+"%s is locked for process %d!"
+msgstr ""
+"Impossibile salvare nella mailbox %s.\n"
+"%s is è bloccato dal processo %d!"
+
+#: xgnokii/xgnokii_sms.c:558
+#, c-format
+msgid "Cannot lock mailbox %s!"
+msgstr "Impossibile bloccare la mailbox %s!"
+
+#: xgnokii/xgnokii_sms.c:609
+#, c-format
+msgid "Cannot unlock mailbox %s!"
+msgstr "Impossibile sbloccare la mailbox %s!"
+
+#: xgnokii/xgnokii_sms.c:827 xgnokii/xgnokii_sms.c:958
+msgid "Address line contains illegal address!"
+msgstr "L'indirizzo specificato non è valido!"
+
+#: xgnokii/xgnokii_sms.c:930
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"Invio SMS a %s fallito\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_sms.c:1057
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Invio SMS a %s (%d/%d) in corso ...\n"
+
+#: xgnokii/xgnokii_sms.c:1084
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Invio SMS a %s in corso ...\n"
+
+#: xgnokii/xgnokii_sms.c:1122
+msgid "/File/Sen_d"
+msgstr "/File/Invi_a"
+
+#: xgnokii/xgnokii_sms.c:1125
+msgid "/File/Check _Names"
+msgstr "/File/Verifica _Nomi"
+
+#: xgnokii/xgnokii_sms.c:1126
+msgid "/File/C_ontacts"
+msgstr "/File/C_ontatti"
+
+#: xgnokii/xgnokii_sms.c:1185
+msgid "Send message"
+msgstr "Invia il messaggio"
+
+#: xgnokii/xgnokii_sms.c:1189
+msgid "Save message to outbox"
+msgstr "Salva il messaggio su messaggi in uscita"
+
+#: xgnokii/xgnokii_sms.c:1196
+msgid "Check names"
+msgstr "Controlla i nominativi"
+
+#: xgnokii/xgnokii_sms.c:1209
+msgid "To:"
+msgstr "A:"
+
+#: xgnokii/xgnokii_sms.c:1281
+msgid "Delivery report"
+msgstr "Rapporto di invio"
+
+#: xgnokii/xgnokii_sms.c:1285
+msgid "Send as Long SMS"
+msgstr "Invia come Long SMS"
+
+#: xgnokii/xgnokii_sms.c:1289
+msgid "SMS Center:"
+msgstr "Centro SMS:"
+
+#: xgnokii/xgnokii_sms.c:1308
+msgid "New Message"
+msgstr "Nuovo Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1335
+msgid "Forward Message"
+msgstr "Reinvia il Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1379
+msgid "Reply Message"
+msgstr "Rispondi al Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1415 xgnokii/xgnokii_sms.c:1586
+msgid "Bussiness Card"
+msgstr "Biglietto da visita"
+
+#: xgnokii/xgnokii_sms.c:1509
+msgid "/File/Save to mailbo_x"
+msgstr "/File/Salva su mailbo_x"
+
+#: xgnokii/xgnokii_sms.c:1512
+msgid "/_Messages"
+msgstr "/_Messaggi"
+
+#: xgnokii/xgnokii_sms.c:1513
+msgid "/_Messages/_New"
+msgstr "/_Messaggi/_Nuovo"
+
+#: xgnokii/xgnokii_sms.c:1514
+msgid "/_Messages/_Forward"
+msgstr "/_Messaggi/_Rispedisci"
+
+#: xgnokii/xgnokii_sms.c:1515
+msgid "/_Messages/_Reply"
+msgstr "/_Messaggi/_Rispondi"
+
+#: xgnokii/xgnokii_sms.c:1516
+msgid "/_Messages/_Delete"
+msgstr "/_Messaggi/_Elimina"
+
+#: xgnokii/xgnokii_sms.c:1517
+msgid "/Messages/Sep3"
+msgstr "/Messaggi/Sep3"
+
+#: xgnokii/xgnokii_sms.c:1518
+msgid "/_Messages/_Bussiness card"
+msgstr "/_Messaggi/_Biglietti da visita"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Status"
+msgstr "Stato"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Date / Time"
+msgstr "Data / Ora"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Sender"
+msgstr "Mittente"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Message"
+msgstr "Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1573
+msgid "New message"
+msgstr "Nuovo messaggio"
+
+#: xgnokii/xgnokii_sms.c:1577
+msgid "Forward message"
+msgstr "Reinvia il messaggio"
+
+#: xgnokii/xgnokii_sms.c:1581
+msgid "Reply message"
+msgstr "Rispondi al messaggio"
+
+#: xgnokii/xgnokii_sms.c:1593
+msgid "Delete message"
+msgstr "Cancella messaggio"
+
+#: xgnokii/xgnokii_sms.c:1618
+msgid "SMS's"
+msgstr "SMS "
+
+#: xgnokii/xgnokii_sms.c:1627
+msgid "Inbox"
+msgstr "In arrivo"
+
+#: xgnokii/xgnokii_sms.c:1633
+msgid "Outbox"
+msgstr "In uscita"
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Reading data ..."
+msgstr "Lettura dati..."
+
+#: xgnokii/xgnokii_speed.c:191 xgnokii/xgnokii_speed.c:197
+#: xgnokii/xgnokii_speed.c:256
+msgid "Cannot allocate memory!"
+msgstr "Memoria esaurita!"
+
+#: xgnokii/xgnokii_speed.c:344
+msgid "Cannot allocate memory!\n"
+msgstr "Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_speed.c:356 xgnokii/xgnokii_speed.c:384
+msgid "Error reading file!"
+msgstr "Errore di lettura del file!"
+
+#: xgnokii/xgnokii_speed.c:554
+msgid "Key"
+msgstr "Tasto"
+
+#: xgnokii/xgnokii_xkeyb.c:183
+msgid "Cannot load background pixmap!"
+msgstr "Impossibile caricare l'immagine di sfondo!"
+
+#: xgnokii/xgnokii_xkeyb.c:260
+msgid "XGnokii Keyboard"
+msgstr "Tastiera di XGnokii"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..8d19833
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,2643 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. Naam SMS dienst is %s\n"
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Alarm datum ingesteld op: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid "   Alarm is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Alarm tijd ingesteld op: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid "   Alarm: %02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:2993
+msgid "   Battery Level: %d\n"
+msgstr "   Batterij niveau: %d\n"
+
+#: gnokii.c:1585
+msgid "   Calendar note deleted.\n"
+msgstr ""
+
+#: fbus-6110.c:3217
+msgid "   CellID: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3334
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Datum: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Datum: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid "   Date: %s\n"
+msgstr "   Datum: %s\n"
+
+#: fbus-6110.c:3714
+msgid "   Date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:4016
+msgid "   Empty SMS location.\n"
+msgstr "   Geen SMS bericht.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Betekenis onbekend, sorry :(\n"
+
+#: fbus-6110.c:4142
+msgid "   Firmware: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2764
+msgid "   Free: %d\n"
+msgstr "   Beschikbaar: %d\n"
+
+#: fbus-6110.c:4140
+msgid "   HW: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2274
+msgid "   IMEI:     %s\n"
+msgstr ""
+
+#: fbus-6110.c:4134
+msgid "   IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4006
+msgid "   Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid "   Invalid memory type!\n"
+msgstr "   Geheugentype fout!\n"
+
+#: fbus-6110.c:3583
+msgid "   Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid "   LAC: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2875
+msgid "   Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2762
+msgid "   Memory Type: %s\n"
+msgstr "   Geheugentype: %s\n"
+
+#: fbus-6110.c:2876
+msgid "   MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid "   Mode: "
+msgstr ""
+
+#: fbus-3810.c:2276
+msgid "   Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid "   Model: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2180
+msgid "   Msg Length %d, Msg number %d,  Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr "   Lengte bericht %d, Nummer bericht %d,  Onbekende Bytes: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid "   Name: "
+msgstr "   Naam: "
+
+#: fbus-6110.c:3219
+msgid "   Network code: %s\n"
+msgstr "   Netwerk Code: %s\n"
+
+#: fbus-6110.c:3220
+msgid "   Network name: %s (%s)\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "   Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid "   Number: "
+msgstr "   Nummer: "
+
+#: fbus-6110.c:2877
+msgid "   Number: %d\n"
+msgstr "   Nummer: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid "   Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid "   Power source: "
+msgstr "   Voeding type: "
+
+#: fbus-6110.c:4138
+msgid "   Production Code: %s\n"
+msgstr "   Productie Code: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid "   Remote number: %s\n"
+msgstr "   Nummer inkomend gesprek: %s\n"
+
+#: fbus-3810.c:2278
+msgid "   Revision: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2548
+msgid "   SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid "   SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid "   SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid "   SMS center number: %s\n"
+msgstr "   Nummer SMS dienst: %s\n"
+
+#: fbus-6110.c:2513
+msgid "   SMS: "
+msgstr ""
+
+#: fbus-6110.c:3729
+msgid "   SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Rijnummmer van oproep: %d\n"
+
+#: fbus-6110.c:2994
+msgid "   Signal strength: %d\n"
+msgstr "   Signaal sterkte: %d\n"
+
+#: fbus-6110.c:3223
+msgid "   Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid "   Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid "   The number of messages: %d\n"
+msgstr "   Aantal berichten: %d\n"
+
+#: fbus-6110.c:2622
+msgid "   The request for SMS Center failed.\n"
+msgstr "   Oproep naar SMS dienst mislukt.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Tijd: %02d:%02d:%02d\n"
+
+#: gnokii.c:1476
+msgid "   Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid "   Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid "   Unknown error!\n"
+msgstr "   Onbekende fout!\n"
+
+#: fbus-6110.c:4041
+msgid "   Unread messages: %d\n"
+msgstr "   Ongelezen berichten: %d\n"
+
+#: fbus-6110.c:2763
+msgid "   Used: %d\n"
+msgstr "   Gebruikt: %d\n"
+
+#: gnokii.c:86
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --sendoplogoviasms destionation logofile [network code]\n"
+"          gnokii --setdatetime [YYYY MM DD HH MM]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+"          gnokii --reset [soft|hard]\n"
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken from\n"
+"                            phone memory from address [message_center_index].\n"
+"                            If this argument is ommited SMSC number is taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --sendoplogoviasms send the logofile to destination as operator\n"
+"                             logo\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid "   usage: gnokiid {--help|--version}"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Foute locatie of andere fout!(%d)\n"
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr "0x10 Opslaan mislukt!"
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registratie Respons 0x%02x\n"
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr "0x15 Opslaan mislukt!"
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr "0x16 Registratie Response 0x%02x 0x%02x\n"
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr "0x27 Opslaan mislukt!"
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr "0x2c Opslaan mislukt!"
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr "0x3f Opslaan mislukt!"
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr "0x4a Opslaan mislukt!"
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr "0x4b Opslaan mislukt!"
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "Lader"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "Lader\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Batterij: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr "Cs-Fout %02x != %02x"
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr ""
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Prüfsumme: %02x \n"
+"   "
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr "Openen FB38-Device mislukt: "
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr "Openen FB61-Device mislukt: "
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr "Lezen van stdin mislukt!\n"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Datum: %4d/%02d/%02d\n"
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Verwijderen SMS van geheugenlocatie mislukt!"
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr "Verwijderen SMS %s %d mislukt!(%d)\n\n"
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d verwijderd.\n"
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Monitor modus wordt gestart...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr "Opmaakprobleem op regel %d [%s]\n"
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr "Funktie is (nog) niet beschikbaar op model %s!\n"
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS int mislukt! (Model niet ondersteund?). Stop.\n"
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr "GetSMS %s %d mislukt!(%d)\n"
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM Link niet geinitialiseerd. Stop. \n"
+
+#: gnokii.c:2150
+msgid "IMEI:     %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr "Inkomend SMS-bericht %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n"
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr "Inkomende oproep beantwoord.\n"
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr "Inkomende oproep beeindigd.\n"
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr "Inkomende oproep: %s\n"
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Bezig met initialiseren GSM interface...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Monitor modus wordt beeindigd...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr "Geheugentype %s wordt niet ondersteund!\n"
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr "Bericht: Alarm\n"
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr "Bericht: Alarm correct ingesteld\n"
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr "Bericht: Kalender niet ontvangen.\n"
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr "Bericht: Oproep beantwoord.\n"
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr "Bericht: Oproep verbroken door toestel.\n"
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr "Bericht: Datum en tijd\n"
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr "Bericht: Datum en tijd correct ingesteld\n"
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr "Bericht: Inkomende oproep:\n"
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr "Bericht: Geheugenstatus ontvangen:\n"
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model:    %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr "Lengte bericht: %02x"
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr "Bericht type: %02x\n"
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr "Type bericht: %02x"
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr "Bericht onbekend: %02x\n"
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr "Nummer: "
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr "Abgehender Anruf beantwortet - Statusbytes %02x %02x %02x.\n"
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr "Abgehender Anruf beendet (0x10 Nachricht).\n"
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr "Abgehender Anruf beendet (0x12 Nachricht).\n"
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN-Code is (wellicht) ingegeven.\n"
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr "Toestel schakelt uit..."
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Toestel: Gebruikt %d, beschikbaar %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Voedingstype: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Signaalniveau: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr ""
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS Berichten: Ongelezen %d, Aantal %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr "Verzenden SMS-Block %d mislukt!"
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr "Verzenden SMS-Header mislukt!"
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Verzend SMS naar %s via SMS-Dienst %s\n"
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr "Volgnummer: %02x"
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr ""
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr "Opslaan geheugenlocatie mislukt!"
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Bezig met FBUS Communicatie initialiseren...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr "Standaard bevestiging (ACK) sturen mislukt!"
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr "Text: %s\n"
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr "Tijd: %02d:%02d\n"
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Tijd: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr "Onbekend geheugentype %2!\n"
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr "Onbekend: "
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Opslaan mislukt!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr ""
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr ""
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr "Oproep gaande\n"
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr ""
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr "uit"
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr "on-line"
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr "off-line\n"
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr "geregistreerd op het netwerk\n"
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "Herstart.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr "onbekend\n"
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr ""
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid "Number field emtpy."
+# msgstr "Nummer veld leeg."
+# 
+# msgid "locked"
+# msgstr "uit"
+# 
+# msgid "unlocked"
+# msgstr "aan"
+# 
+# msgid "GNOKII Version %s"
+# msgstr "GNOKII Versie %s"
+# 
+# msgid "Enter your PIN: "
+# msgstr "Geef uw PIN-Code:"
+# 
+# msgid "   %d. SMS Center number is %s\n"
+# msgstr "   %d. Nummer SMS dienst is %s\n"
+# 
+# msgid "Date/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+# msgstr "Datum/tijd %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n"
+# 
+# msgid "Error: invalid PIN\n"
+# msgstr "Fout: Ongedige PIN-Code\n"
+# 
+# msgid "   Text: "
+# msgstr "   Tekst: "
+# 
+# msgid "   usage: gnokii {--help|--monitor|--version}"
+# msgstr "   gebruik: gnokii {--help|--monitor|--version}"
+# 
+# msgid "waiting for pin\n"
+# msgstr "bezig met wachten op PIN"
+# 
+# msgid ""
+# "   Code Error\n"
+# "   You're not my big owner :-)\n"
+# msgstr "   Code fout!\n"
+# 
+# msgid "   Code Accepted\n"
+# msgstr "   Code Ok\n"
+# 
+# msgid "Message: Keyboard lock\n"
+# msgstr "Bericht: Toetsenbord uit\n"
+# 
+# msgid "   Keyboard is %s\n"
+# msgstr "   Toetsen zijn %s\n"
+# 
+# msgid "   Network name: %s\n"
+# msgstr "   Netwerk Naam: %s\n"
+# 
+# msgid "Status: RF %02x, Batt %02x, Connection Status %02x.\n"
+# msgstr "Status: Signaal %02x, Batt %02x, Verbindingsstatus %02x.\n"
+# 
+# msgid "Empty location: %s %d!\n"
+# msgstr "Geen SMS bericht op Locatie: %s %d!\n"
+# 
+# msgid "Message: Memory status error, probably not authorized by PIN\n"
+# msgstr "Bericht: Geheugenstatus fout, waarschijnlijk niet geauthoriserd door PIN\n"
+# 
+# msgid "SMS Send attempt failed, trying again (%d)\n"
+# msgstr "SMS verzenden mislukt, automatische herhaling (%d)\n"
+# 
+# msgid "Incomming call - status %02x %02x %02x, Number %s.\n"
+# msgstr "Inkomende oproep - Status %02x %02x %02x, Nummer %s.\n"
+# 
+#  This was the dutch version 
+#  
+#  ARE THESE NECESSARY? If so, somebody should do 'em some day :)
+#
+#              goran (@8hz.com)
+#
+#
+# msgid "GSM/fbus init failed! (Unknown model ?).  Quitting. \n"
+# msgstr "Initialisierung des GSM/fbus fehlgeschlagen! (Unbekanntes Modell?). Beenden. \n"
+# 
+# msgid "SMS %s %d Unknown bytes: %02x %02x %02x %02x %02x %02x Length: %d\n"
+# msgstr "SMS %s %d unbekannte Bytes: %02x %02x %02x %02x %02x %02x Länge: %d\n"
+# 
+# msgid "SMS Send OK. Result code  0x%02x\n"
+# msgstr "SMS-Versand erfolgreich. Ergebnis-Code 0x%02x\n"
+# 
+# msgid "0x65 0x15 means SMS sending not enabled by network (probably...)\n"
+# msgstr "0x65 0x15: Verschicken von SMS-Nachrichten nicht vom Provider freigeschaltet (wahrscheinlich...)\n"
+# 
+# msgid "Write Succeeded: memory type:%s, loc:%d, name: %s, number: %s\n"
+# msgstr "Speichern erfolgreich: Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n"
+# 
+# msgid "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. <hugh@linuxcare.com>\n"
+# msgstr "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. <hugh@linuxcare.com>\n"
+# 
+# msgid "SMS Send failed, gnokii error code was %d, network returned 0x%02x 0x%02x\n"
+# msgstr "Senden der SMS-Nachricht fehlgeschlagen, gnokii Fehler-Nummer war %d, Netz antwortete mit 0x%02x 0x%02x\n"
+# 
+# msgid "Hmmm... GSM_LinkOK never went true.  Quitting. \n"
+# msgstr "Hmmm... GSM_LinkOK nie erhalten. Beenden. \n"
+# 
+# msgid "Interrupted\n"
+# msgstr "Unterbrochen\n"
+# 
+# msgid "Monitor mode...\n"
+# msgstr "Monitor Modus...\n"
+# 
+# msgid "Write FAILED(%d): memory type:%s, loc:%d, name: %s, number: %s\n"
+# msgstr "Speichern erfolglos(%d): Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n"
+# 
+# msgid "       Built %s %s for %s on %s \n"
+# msgstr "       Kompiliert: %s %s für Modell %s an Port %s \n"
+# 
+# msgid "%s|%d|Bad location or other error!\n"
+# msgstr "%s|%d|Falsche Zelle oder anderer Fehler!\n"
+# 
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..78dcadc
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,3310 @@
+# This is the German locale definition for Gnokii.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Daniel Egger <Daniel.Egger@suse.de>, 1999, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-05-08 21:27+0200\n"
+"PO-Revision-Date: 2000-05-08 18:25:30+0100\n"
+"Last-Translator: Jacek Fiok <j.fiok@zodiac.mimuw.edu.pl>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:525 common/fbus-6110.c:2037
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Wysy³am SMS do %s przez centrum wiadomo¶ci %s\n"
+
+#: common/fbus-3810.c:629
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Próba wys³ania wiadomo¶ci SMS zakoñczona niepowodzeniem, nastêpna próba (%d z %d)\n"
+
+#: common/fbus-3810.c:1161
+msgid "Couldn't open FB38 device: "
+msgstr "Nie mog³em otworzyæ urz±dzenia FB38: "
+
+#: common/fbus-3810.c:1253
+msgid "restarting.\n"
+msgstr "ponowne uruchamianie.\n"
+
+#: common/fbus-3810.c:1309
+#, c-format
+msgid "MT Fail %02x"
+msgstr "Niepowodzenie MT %02x"
+
+#: common/fbus-3810.c:1316 common/mbus-6160.c:689
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "Niepowodzenie CS %02x != %02x"
+
+#: common/fbus-3810.c:1430
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Odpowied¼ na rejestracjê 0x%02x\n"
+
+#: common/fbus-3810.c:1446
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 Odpowied¼ na rejestracjê 0x%02x\n"
+
+#: common/fbus-3810.c:1447
+msgid "SIM access: %s.\n"
+msgstr "Dostêp do SIM: %s\n"
+
+#: common/fbus-3810.c:1523
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS zapisany pod adresem 0x%02x\n"
+
+#: common/fbus-3810.c:1533
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Zapisywanie SMSa nie powiod³o siê: 0x%02x\n"
+
+#: common/fbus-3810.c:1654
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [prawdopodobnie] wprowadzony.\n"
+
+#: common/fbus-3810.c:1663
+msgid "Phone powering off..."
+msgstr "Wy³±czanie zasilania telefonu..."
+
+#: common/fbus-3810.c:1692
+msgid "Standard Ack write failed!"
+msgstr "Wys³anie standardowego potwierdzenia nie powiod³o siê!"
+
+#: common/fbus-3810.c:1718
+msgid "Unknown: "
+msgstr "Nieznany: "
+
+#: common/fbus-3810.c:1720
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Typ wiadomo¶ci: %02x"
+
+#: common/fbus-3810.c:1721
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "D³ugo¶æ wiadomo¶ci: %02x"
+
+#: common/fbus-3810.c:1722
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Numer sekwencyjny: %02x"
+
+#: common/fbus-3810.c:1723
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Suma kontrolna: %02x \n"
+"   "
+
+#: common/fbus-3810.c:1815 common/fbus-3810.c:1936
+msgid "Set Mem Loc Write failed!"
+msgstr "Operacja zapisu do komórki pamiêci nieudana!"
+
+#: common/fbus-3810.c:1860
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - zapisywanie:"
+
+#: common/fbus-3810.c:1875
+msgid "0x4a Write failed!"
+msgstr "0x4a Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1890
+msgid "Explore Write failed!"
+msgstr "Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1900
+msgid "0x3f Write failed!"
+msgstr "0x3f Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1960
+msgid "Request Mem Loc Write failed!"
+msgstr "¯±danie zapisu do komórki pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:1973
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "¯±danie zapisu numerów IMEI/wersji/modelu nie powiod³o siê!"
+
+#: common/fbus-3810.c:2016
+msgid "Send SMS header failed!"
+msgstr "Wys³anie nag³ówka wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2075
+msgid "Store SMS header failed!"
+msgstr "Zapisanie nag³ówka wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2100
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Wys³anie bloku %d wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2123
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "¯±danie zapisu wiadomo¶ci SMS do pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:2146
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Usuniêcie wiadomo¶ci SMS z pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:2165
+msgid "0x15 Write failed!"
+msgstr "0x15 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2182 common/mbus-6160.c:759
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - wiadomo¶æ za d³uga!\n"
+
+#: common/fbus-3810.c:2208 common/mbus-6160.c:788
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage  - zapisywanie:"
+
+#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368
+#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530
+#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688
+msgid "Write failed!"
+msgstr "Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2235
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Po³±czenie przychodz±ce - Typ: %s. %02x, Numer %s.\n"
+
+#: common/fbus-3810.c:2262
+msgid "0x27 Write failed!"
+msgstr "0x27 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2310
+msgid "0x4b Write failed!"
+msgstr "0x4b Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2329
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Status: %s. Baterie %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2340
+msgid "0x10 Write failed!"
+msgstr "0x10 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2344
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x10).\n"
+
+#: common/fbus-3810.c:2358
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Po³±czenie zakoñczone przez przeciwn± stronê (lub z siec).\n"
+
+#: common/fbus-3810.c:2372
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x12).\n"
+
+#: common/fbus-3810.c:2386
+msgid "Incoming call answered from phone.\n"
+msgstr "Po³±czenie przychodz±ce odebrane przez telefon.\n"
+
+#: common/fbus-3810.c:2400
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s po³±czenie ustanowione - status %02x %02x.\n"
+
+#: common/fbus-3810.c:2417
+msgid "0x2c Write failed!"
+msgstr "0x2c Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2504
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Strefa czas.:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2571
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Przychodz±ca wiadomo¶æ SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Nadawca: %s(Typ %02x) "
+"Centrum wiadomo¶ci: %s\n"
+
+#: common/fbus-3810.c:2573
+msgid ""
+"   Msg Length %d, Msg memory %d Msg number %d,  PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+"   D³ugo¶æ wiadomo¶ci %d, pamiêæ wiadomo¶ci %d numer wiadomo¶ci %d, "
+"PID: %02x DCS: %02x Nieznane: %02x\n"
+
+#: common/fbus-3810.c:2666
+msgid "Mobile phone identification received:\n"
+msgstr "Otrzymano identyfikacjê telefonu:\n"
+
+#: common/fbus-3810.c:2667
+#, c-format
+msgid "   IMEI:     %s\n"
+msgstr "   IMEI:     %s\n"
+
+#: common/fbus-3810.c:2669
+#, c-format
+msgid "   Model:    %s\n"
+msgstr "   Model:    %s\n"
+
+#: common/fbus-3810.c:2671
+#, c-format
+msgid "   Revision: %s\n"
+msgstr "   Wersja: %s\n"
+
+#: common/fbus-3810.c:2739
+msgid "SMS Message Center Data:\n"
+msgstr "Dane centrum wiadomo¶ci SMS:\n"
+
+#: common/fbus-3810.c:2740
+msgid "Selected memory: 0x%02x\n"
+msgstr "Wybrana pamiêæ: 0x%02x\n"
+
+#: common/fbus-3810.c:2741
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Wiadomo¶ci w pamiêci aparatu: 0x%02x Nieprzeczytanych: 0x%02x\n"
+
+#: common/fbus-3810.c:2743
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Wiadomo¶ci na karcie SIM: 0x%02x Nieprzeczytanych: 0x%02x\n"
+
+#: common/fbus-3810.c:2745
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Odpowied¼ przez w³asne centrum wiadomo¶ci: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2747
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Raporty dorêczenia: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2749
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Wiadomo¶ci wysy³ane jako: 0x%02x\n"
+
+#: common/fbus-3810.c:2750
+msgid "Message validity: 0x%02x\n"
+msgstr "Okres wa¿no¶ci wiadomo¶ci: 0x%02x\n"
+
+#: common/fbus-3810.c:2751
+msgid "Unknown: 0x%02x\n"
+msgstr "Nieznane: 0x%02x\n"
+
+#: common/fbus-3810.c:2754
+msgid "UnknownNumber field empty."
+msgstr "Nieznany: puste pole numeru."
+
+#: common/fbus-3810.c:2756
+msgid "UnknownNumber: "
+msgstr "Nieznany numer: "
+
+#: common/fbus-3810.c:2763
+msgid "Number field empty."
+msgstr "Puste pole numeru."
+
+#: common/fbus-3810.c:2766
+msgid "Number: "
+msgstr "Numer: "
+
+#: common/fbus-6110-ringtones.c:242
+msgid "File can not be opened!\n"
+msgstr "Nie mo¿na otworzyæ pliku!\n"
+
+#: common/fbus-6110.c:770
+msgid "Timeout in IR-mode\n"
+msgstr "Przekroczenie czasu oczekiwania w trybie IR\n"
+
+#: common/fbus-6110.c:802
+msgid "Couldn't open FB61 infrared device"
+msgstr "Nie mog³em otworzyæ urz±dzenia FB61"
+
+#: common/fbus-6110.c:870
+msgid "Starting IR mode...!\n"
+msgstr "Uruchamiam tryb IR...!\n"
+
+#: common/fbus-6110.c:2325
+msgid "Serial flags dump:\n"
+msgstr "Stan flag portu szeregowego:\n"
+
+#: common/fbus-6110.c:2326 common/mbus-640.c:893
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR jest %s.\n"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "up"
+msgstr "w³±czony"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "down"
+msgstr "wy³±czony"
+
+#: common/fbus-6110.c:2327 common/mbus-640.c:894
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS jest %s.\n"
+
+#: common/fbus-6110.c:2328
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR jest %s.\n"
+
+#: common/fbus-6110.c:2329
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS jest %s.\n"
+
+#: common/fbus-6110.c:2364
+msgid "Setting FBUS communication...\n"
+msgstr "Ustanawiam komunikacjê FBUS...\n"
+
+#: common/fbus-6110.c:2395
+msgid "Couldn't open FB61 device"
+msgstr "Nie mog³em otworzyæ urz±dzenia FB61"
+
+#: common/fbus-6110.c:2521
+msgid "Message: Call message, type 0x03:"
+msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, typ 0x03:"
+
+#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554
+#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620
+#, c-format
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Kolejny numer po³±czenia: %d\n"
+
+#: common/fbus-6110.c:2523 common/fbus-6110.c:2621
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Dok³adne znaczenie jeszcze nie jest znane, przykro mi :-(\n"
+
+#: common/fbus-6110.c:2536
+msgid "Message: Remote end hang up.\n"
+msgstr "Wiadomo¶æ: Zdalna strona roz³±czy³a siê.\n"
+
+#: common/fbus-6110.c:2549
+msgid "Message: Incoming call alert:\n"
+msgstr "Wiadomo¶æ: Ostrze¿enie o po³±czeniu:\n"
+
+#: common/fbus-6110.c:2555 common/fbus-6110.c:2835
+msgid "   Number: "
+msgstr "   Numer: "
+
+#: common/fbus-6110.c:2563 common/fbus-6110.c:2819
+msgid "   Name: "
+msgstr "   Nazwa: "
+
+#: common/fbus-6110.c:2584
+msgid "Message: Call answered.\n"
+msgstr "Wiadomo¶æ: Po³±czenie odebrane.\n"
+
+#: common/fbus-6110.c:2595
+msgid "Message: Call ended by your phone.\n"
+msgstr "Wiadomo¶æ: Po³±czenie zakoñczone przez Twój telefon.\n"
+
+#: common/fbus-6110.c:2619
+msgid "Message: Call message, type 0x0a:"
+msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, Typ 0x0a:"
+
+#: common/fbus-6110.c:2631
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x01\n"
+
+#: common/fbus-6110.c:2649
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Wiadomo¶æ: Wiadomo¶æ SMS wys³ana prawid³owo.\n"
+
+#: common/fbus-6110.c:2660
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Wiadomo¶æ: Wys³anie wiadomo¶ci SMS nie powiod³o siê.\n"
+
+#: common/fbus-6110.c:2669
+msgid "Message: SMS Message Received\n"
+msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n"
+
+#: common/fbus-6110.c:2670 common/fbus-6110.c:3997
+#, c-format
+msgid "   SMS center number: %s\n"
+msgstr "   Numer centrum wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:2674 common/fbus-6110.c:3998
+#, c-format
+msgid "   Remote number: %s\n"
+msgstr "   Zdalny numer: %s\n"
+
+#: common/fbus-6110.c:2675
+#, c-format
+msgid "   Date: %s\n"
+msgstr "   Data: %s\n"
+
+#: common/fbus-6110.c:2676
+msgid "   SMS: "
+msgstr "   SMS: "
+
+#: common/fbus-6110.c:2691
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Wiadomo¶æ: Poprawnie ustawione centrum wiadomo¶ci.\n"
+
+#: common/fbus-6110.c:2707
+msgid "Message: SMS Center received:\n"
+msgstr "Wiadomo¶æ: Otrzymano centrum wiadomo¶ci:\n"
+
+#: common/fbus-6110.c:2708
+#, c-format
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. Nazwa centrum wiadomo¶ci to %s\n"
+
+#: common/fbus-6110.c:2709
+#, c-format
+msgid "   SMS Center number is %s\n"
+msgstr "   Numer centrum wiadomo¶ci to %s\n"
+
+#: common/fbus-6110.c:2711
+msgid "   SMS Center message format is "
+msgstr "   Format wiadomo¶ci to "
+
+#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604
+#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335
+msgid "Text"
+msgstr "Tekst"
+
+#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608
+#: xgnokii/xgnokii.c:1349
+msgid "Paging"
+msgstr "Pager"
+
+#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612
+#: xgnokii/xgnokii.c:1342
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228
+#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: common/fbus-6110.c:2737
+msgid "   SMS Center message validity is "
+msgstr "   Okres wa¿no¶ci wiadomo¶ci to "
+
+#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084
+msgid "1 hour"
+msgstr "1 godzina"
+
+#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088
+msgid "6 hours"
+msgstr "6 godzin"
+
+#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092
+msgid "24 hours"
+msgstr "24 godziny"
+
+#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096
+msgid "72 hours"
+msgstr "72 godziny"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656
+#: xgnokii/xgnokii.c:1414
+msgid "1 week"
+msgstr "1 tydzieñ"
+
+#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104
+msgid "Maximum time"
+msgstr "Czas maksymalny"
+
+#: common/fbus-6110.c:2784
+msgid "Message: SMS Center error received:\n"
+msgstr "Wiadomo¶æ: Otrzymano b³±d od centrum wiadomo¶ci:\n"
+
+#: common/fbus-6110.c:2785
+msgid "   The request for SMS Center failed.\n"
+msgstr "   ¯±danie do centrum wiadomo¶ci nie powiod³o siê.\n"
+
+#: common/fbus-6110.c:2796
+msgid "Unknown message!\n"
+msgstr "Nieznana wiadomo¶æ!\n"
+
+#: common/fbus-6110.c:2818
+msgid "Message: Phonebook entry received:\n"
+msgstr "Wiadomo¶æ: Otrzymano wpis ksi±¿ki telefonicznej:\n"
+
+#: common/fbus-6110.c:2855
+msgid "   Date: "
+msgstr "   Data: "
+
+#: common/fbus-6110.c:2857
+msgid "   Time: "
+msgstr "   Czas: "
+
+#: common/fbus-6110.c:2870
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu wpisu ksi±¿ki telefonicznej:\n"
+
+#: common/fbus-6110.c:2878
+msgid "   Invalid memory type!\n"
+msgstr "   Nieznany typ pamiêci!\n"
+
+#: common/fbus-6110.c:2888 common/fbus-6110.c:2926
+msgid "   Unknown error!\n"
+msgstr "   Nieznany b³±d!\n"
+
+#: common/fbus-6110.c:2899
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna zapisana prawid³owo.\n"
+
+#: common/fbus-6110.c:2916
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna nie zapisana - nazwa za d³uga.\n"
+
+#: common/fbus-6110.c:2937
+msgid "Message: Memory status received:\n"
+msgstr "Wiadomo¶æ: Otrzymano stan pamiêci:\n"
+
+#: common/fbus-6110.c:2939
+#, c-format
+msgid "   Memory Type: %s\n"
+msgstr "   Typ pamiêci: %s\n"
+
+#: common/fbus-6110.c:2940
+#, c-format
+msgid "   Used: %d\n"
+msgstr "   U¿ywane: %d\n"
+
+#: common/fbus-6110.c:2941
+#, c-format
+msgid "   Free: %d\n"
+msgstr "   Wolne: %d\n"
+
+#: common/fbus-6110.c:2956
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Wiadomo¶æ: B³±d stanu pamiêci, telefon jest prawdopodobnie wy³±czony.\n"
+
+#: common/fbus-6110.c:2963
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Wiadomo¶æ: B³±d stanu pamiêci, typ pamiêci nie obs³ugiwany przez ten model telefonu.\n"
+
+#: common/fbus-6110.c:2970
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Wiadomo¶æ: B³±d stanu pamiêci, czekam na kod zabezpieczaj±cy.\n"
+
+#: common/fbus-6110.c:2977
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Wiadomo¶æ: Nieznany b³±d stanu pamiêci, podtyp (MessageBuffer[4] = %02x\n"
+
+#: common/fbus-6110.c:2994
+msgid "Message: Caller group logo etc.\n"
+msgstr "Wiadomo¶æ: Logo grupy dzwoni±cych etc.\n"
+
+#: common/fbus-6110.c:2995
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Nazwa grupy dzwoni±cych: %s\n"
+
+#: common/fbus-6110.c:3015
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych otrzymane bez uprzedniego ¿±dania!\n"
+
+#: common/fbus-6110.c:3025
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Wiadomo¶æ: B³±d przy wyci±ganiu danych o grupie dzwoni±cych.\n"
+
+#: common/fbus-6110.c:3033
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3041
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu danych o grupie dzwoni±cych.\n"
+
+#: common/fbus-6110.c:3052
+msgid "Message: Speed dial entry received:\n"
+msgstr "Wiadomo¶æ: Wpis szybkiego wybierania otrzymany:\n"
+
+#: common/fbus-6110.c:3053
+#, c-format
+msgid "   Location: %d\n"
+msgstr "   Lokacja: %d\n"
+
+#: common/fbus-6110.c:3054
+#, c-format
+msgid "   MemoryType: %s\n"
+msgstr "   Typ pamiêci: %s\n"
+
+#: common/fbus-6110.c:3055
+#, c-format
+msgid "   Number: %d\n"
+msgstr "   Numer: %d\n"
+
+#: common/fbus-6110.c:3065
+msgid "Message: Speed dial entry error\n"
+msgstr "Wiadomo¶æ: B³±d wpisu szybkiego wybierania\n"
+
+#: common/fbus-6110.c:3075
+msgid "Message: Speed dial entry set.\n"
+msgstr "Wiadomo¶æ: Wpis szybkiego wybierania ustawiony.\n"
+
+#: common/fbus-6110.c:3085
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu wpisu szybkiego wybierania.\n"
+
+#: common/fbus-6110.c:3095
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x03\n"
+
+#: common/fbus-6110.c:3111
+msgid "Message: Phone status received:\n"
+msgstr "Wiadomo¶æ: Otrzymano status telefonu:\n"
+
+#: common/fbus-6110.c:3112
+msgid "   Mode: "
+msgstr "   Tryb: "
+
+#: common/fbus-6110.c:3118
+msgid "registered within the network\n"
+msgstr "zarejestrowany w sieci\n"
+
+#: common/fbus-6110.c:3127
+msgid "call in progress\n"
+msgstr "po³±czenie w trakcie\n"
+
+#: common/fbus-6110.c:3133
+msgid "waiting for security code\n"
+msgstr "oczekuje na kod zabezpieczaj±cy\n"
+
+#: common/fbus-6110.c:3139
+msgid "powered off\n"
+msgstr "wy³±czony\n"
+
+#: common/fbus-6110.c:3145 common/fbus-6110.c:3167
+msgid "unknown\n"
+msgstr "nieznany\n"
+
+#: common/fbus-6110.c:3149
+msgid "   Power source: "
+msgstr "   ¬ród³o zasilania: "
+
+#: common/fbus-6110.c:3155
+msgid "AC/DC\n"
+msgstr "sieæ zasilaj±ca\n"
+
+#: common/fbus-6110.c:3161
+msgid "battery\n"
+msgstr "bateria\n"
+
+#: common/fbus-6110.c:3171
+#, c-format
+msgid "   Battery Level: %d\n"
+msgstr "   Poziom baterii: %d\n"
+
+#: common/fbus-6110.c:3172
+#, c-format
+msgid "   Signal strength: %d\n"
+msgstr "   Si³a sygna³u: %d\n"
+
+#: common/fbus-6110.c:3184
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x04\n"
+
+#: common/fbus-6110.c:3257
+msgid "Message: Startup Logo received.\n"
+msgstr "Wiadomo¶æ: Otrzymano logo powitalne.\n"
+
+#: common/fbus-6110.c:3274
+#, c-format
+msgid "Startup Text: %s\n"
+msgstr "Tekst powitania: %s\n"
+
+#: common/fbus-6110.c:3286
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Wiadomo¶æ: Otrzymano logo powitalne bez wcze¶niejszego ¿±dania!\n"
+
+#: common/fbus-6110.c:3295
+msgid "Message: Startup logo correctly set.\n"
+msgstr "Wiadomo¶æ: Logo powitania ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3329
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Wiadomo¶æ: Logo operatora ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3338
+msgid "Message: Error setting operator logo!\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu logo operatora!\n"
+
+#: common/fbus-6110.c:3348
+msgid "Message: Operator Logo received.\n"
+msgstr "Wiadomo¶æ: Otrzymano logo operatora.\n"
+
+#: common/fbus-6110.c:3365
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Wiadomo¶æ: Otrzymano logo operatora bez wcze¶niejszego ¿±dania!\n"
+
+#: common/fbus-6110.c:3374
+msgid "Message: Error getting operator logo!\n"
+msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu logo operatora!\n"
+
+#: common/fbus-6110.c:3392
+msgid "Message: Security Code status received: "
+msgstr "Wiadomo¶æ: Otrzymany stan kodu zabezpieczj±cego: "
+
+#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507
+msgid "waiting for Security Code.\n"
+msgstr "czeka na kod zabezpieczaj±cy.\n"
+
+#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512
+msgid "waiting for PIN.\n"
+msgstr "czeka na PIN.\n"
+
+#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517
+msgid "waiting for PIN2.\n"
+msgstr "czeka na PIN2.\n"
+
+#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522
+msgid "waiting for PUK.\n"
+msgstr "czeka na PUK.\n"
+
+#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527
+msgid "waiting for PUK2.\n"
+msgstr "czeka na PUK2.\n"
+
+#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532
+msgid "nothing to enter.\n"
+msgstr "nic do wprowadzenia.\n"
+
+#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537
+msgid "Unknown!\n"
+msgstr "Nieznany!\n"
+
+#: common/fbus-6110.c:3440
+msgid "Message: Security code accepted.\n"
+msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy przyjêty.\n"
+
+#: common/fbus-6110.c:3450
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy jest nieprawid³owy. Nie jeste¶ moim prawowitym w³a¶cicielem :-)\n"
+
+#: common/fbus-6110.c:3477
+msgid "Message: Network informations:\n"
+msgstr "Wiadomo¶æ: Informacje o sieci:\n"
+
+#: common/fbus-6110.c:3479
+#, c-format
+msgid "   CellID: %s\n"
+msgstr "   ID komórki: %s\n"
+
+#: common/fbus-6110.c:3480
+#, c-format
+msgid "   LAC: %s\n"
+msgstr "   LAC: %s\n"
+
+#: common/fbus-6110.c:3481
+#, c-format
+msgid "   Network code: %s\n"
+msgstr "   Kod sieci: %s\n"
+
+#: common/fbus-6110.c:3482
+#, c-format
+msgid "   Network name: %s (%s)\n"
+msgstr "   Nazwa sieci: %s (%s)\n"
+
+#: common/fbus-6110.c:3485
+msgid "   Status: "
+msgstr "   Status: "
+
+#: common/fbus-6110.c:3488
+msgid "home network selected"
+msgstr "wybrana sieæ domowa"
+
+#: common/fbus-6110.c:3489
+msgid "roaming network"
+msgstr "sieæ partnerska"
+
+#: common/fbus-6110.c:3490
+msgid "requesting network"
+msgstr "szuka sieci"
+
+#: common/fbus-6110.c:3491
+msgid "not registered in the network"
+msgstr "nie zarejestrowany w sieci"
+
+#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199
+#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219
+msgid "unknown"
+msgstr "nieznany"
+
+#: common/fbus-6110.c:3497
+#, c-format
+msgid "   Network selection: %s\n"
+msgstr "   Wybór sieci: %s\n"
+
+#: common/fbus-6110.c:3497
+msgid "manual"
+msgstr "rêczny"
+
+#: common/fbus-6110.c:3497
+msgid "automatic"
+msgstr "automatyczny"
+
+#: common/fbus-6110.c:3507
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x0a\n"
+
+#: common/fbus-6110.c:3545
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Nieznana wiadomo¶æ typu 0x0d.\n"
+
+#: common/fbus-6110.c:3564
+msgid "Message: Date and time set correctly\n"
+msgstr "Wiadomo¶æ: Data i czas ustawione prawid³owo\n"
+
+#: common/fbus-6110.c:3574 common/fbus-6110.c:3620
+msgid "Message: Date and time set error\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu daty i czasu\n"
+
+#: common/fbus-6110.c:3594
+msgid "Message: Date and time\n"
+msgstr "Wiadomo¶æ: Data i czas\n"
+
+#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863
+#, c-format
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Czas: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3596
+#, c-format
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Data: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3610
+msgid "Message: Alarm set correctly\n"
+msgstr "Wiadomo¶æ: Alarm ustawiony prawid³owo\n"
+
+#: common/fbus-6110.c:3632
+msgid "Message: Alarm\n"
+msgstr "Wiadomo¶æ: Alarm\n"
+
+#: common/fbus-6110.c:3633
+#, c-format
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Alarm: %02d:%02d\n"
+
+#: common/fbus-6110.c:3634
+#, c-format
+msgid "   Alarm is %s\n"
+msgstr "   Alarm jest %s\n"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "on"
+msgstr "w³±czony"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "off"
+msgstr "wy³±czony"
+
+#: common/fbus-6110.c:3650
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x11\n"
+
+#: common/fbus-6110.c:3673
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza udany!\n"
+
+#: common/fbus-6110.c:3683 common/fbus-6110.c:3693
+msgid "Message: Calendar note write failed!\n"
+msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza nieudany!\n"
+
+#: common/fbus-6110.c:3702
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Nieznana wiadomo¶æ typu 0x13 i podtypu 0x65\n"
+
+#: common/fbus-6110.c:3742
+msgid "Message: Calendar note received.\n"
+msgstr "Wiadomo¶æ: Otrzymano wpis do kalendarza.\n"
+
+#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859
+#, c-format
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Data: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868
+#, c-format
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Data alarmu: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872
+#, c-format
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Czas alarmu: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3764
+#, c-format
+msgid "   Type: %d\n"
+msgstr "   Typ: %d\n"
+
+#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877
+#, c-format
+msgid "   Text: %s\n"
+msgstr "   Tekst: %s\n"
+
+#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880
+#, c-format
+msgid "   Phone: %s\n"
+msgstr "   Telefon: %s\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note not available\n"
+msgstr "Wiadomo¶æ: Wpis kalendarza niedostêpny\n"
+
+#: common/fbus-6110.c:3788
+msgid "Message: Calendar note error\n"
+msgstr "Wiadomo¶æ: B³±d wpisu do kalendarza\n"
+
+#: common/fbus-6110.c:3810
+msgid "Message: Calendar note deleted\n"
+msgstr "Wiadomo¶æ: Wpis do kalendarza usuniêty\n"
+
+#: common/fbus-6110.c:3821
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Wiadomo¶æ: Wpis do kalendarza nie mo¿e byæ usuniêty\n"
+
+#: common/fbus-6110.c:3831
+msgid "Message: Calendar note deleting error\n"
+msgstr "Wiadomo¶æ: B³±d przy usuwaniu wpisu kalendarza\n"
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar Alarm active\n"
+msgstr "Wiadomo¶æ: Alarm kalendarza aktywny\n"
+
+#: common/fbus-6110.c:3848
+#, c-format
+msgid "   Item number: %d\n"
+msgstr "   Numer pozycji: %d\n"
+
+#: common/fbus-6110.c:3856
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x13\n"
+
+#: common/fbus-6110.c:3919
+msgid "Concatenated message!!!\n"
+msgstr "Sklejone wiadomo¶ci!!!\n"
+
+#: common/fbus-6110.c:3940
+#, c-format
+msgid "Number: %d\n"
+msgstr "Numer: %d\n"
+
+#: common/fbus-6110.c:3945
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Wiadomo¶æ: Skrzynka nadawcza\n"
+
+#: common/fbus-6110.c:3948
+msgid "Sent\n"
+msgstr "Wys³ane\n"
+
+#: common/fbus-6110.c:3950
+msgid "Not sent\n"
+msgstr "Niewys³ane\n"
+
+#: common/fbus-6110.c:3954
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n"
+
+#: common/fbus-6110.c:3957
+msgid "Delivery Report\n"
+msgstr "Raport dostarczenia\n"
+
+#: common/fbus-6110.c:3959
+msgid "Unknown type\n"
+msgstr "Nieznany typ\n"
+
+#: common/fbus-6110.c:3962
+msgid "Read\n"
+msgstr "Przeczytane\n"
+
+#: common/fbus-6110.c:3964
+msgid "Not read\n"
+msgstr "Nieprzeczytane\n"
+
+#: common/fbus-6110.c:3966
+msgid "   Date: %s "
+msgstr "   Data: %s "
+
+#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241
+#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:3981
+msgid "   SMSC response date: %s "
+msgstr "   Data odpowiedzi SMSC: %s "
+
+#: common/fbus-6110.c:4074
+msgid "Delivered"
+msgstr "Dostarczone"
+
+#: common/fbus-6110.c:4079
+msgid "SM received by the SME"
+msgstr "SM otzymany przez SME"
+
+#: common/fbus-6110.c:4082
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+"SM przekazana przez SC do SME, ale SC nie móg³ potwierdziæ dostarczenia"
+
+#: common/fbus-6110.c:4085
+msgid "SM replaced by the SC"
+msgstr "SM zast±piona przez SC"
+
+#: common/fbus-6110.c:4093
+msgid "Failed"
+msgstr "Nieudane"
+
+#: common/fbus-6110.c:4100
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "B³±d tymczasowy, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n"
+
+#: common/fbus-6110.c:4105 common/fbus-6110.c:4198
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4109 common/fbus-6110.c:4202
+msgid "SME busy"
+msgstr "SME zajêty"
+
+#: common/fbus-6110.c:4113 common/fbus-6110.c:4206
+msgid "No response from SME"
+msgstr "Nie ma odpowiedzi od SME"
+
+#: common/fbus-6110.c:4117 common/fbus-6110.c:4210
+msgid "Service rejected"
+msgstr "Us³uga odrzucona"
+
+#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214
+msgid "Quality of service not aviable"
+msgstr "QoS niedostêpne"
+
+#: common/fbus-6110.c:4125 common/fbus-6110.c:4218
+msgid "Error in SME"
+msgstr "B³±d w SME"
+
+#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222
+#: common/fbus-6110.c:4232
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr "Zarezerwowane/Specyficzne dla SC: %x"
+
+#: common/fbus-6110.c:4136
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "B³±d, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n"
+
+#: common/fbus-6110.c:4141
+msgid "Remote procedure error"
+msgstr "B³±d zdalnej procedury"
+
+#: common/fbus-6110.c:4145
+msgid "Incompatibile destination"
+msgstr "Niekompatybilne przeznaczenie"
+
+#: common/fbus-6110.c:4149
+msgid "Connection rejected by SME"
+msgstr "Po³±czenie odrzucone przez SME"
+
+#: common/fbus-6110.c:4153
+msgid "Not obtainable"
+msgstr "Niemo¿liwe do uzyskania"
+
+#: common/fbus-6110.c:4161
+msgid "No internetworking available"
+msgstr "Brak po³±czenia miêdzysieciowego"
+
+#: common/fbus-6110.c:4165
+msgid "SM Validity Period Expired"
+msgstr "Okres wa¿no¶ci SM przekroczony"
+
+#: common/fbus-6110.c:4169
+msgid "SM deleted by originating SME"
+msgstr "SM wykasowana przez ¼ród³owe SME"
+
+#: common/fbus-6110.c:4173
+msgid "SM Deleted by SC Administration"
+msgstr "SM skasowany przez zarz±d SC"
+
+#: common/fbus-6110.c:4177
+msgid "SM does not exist"
+msgstr "SM nie istnieje"
+
+#: common/fbus-6110.c:4190
+msgid "Pending"
+msgstr "Oczekuj±ce"
+
+#: common/fbus-6110.c:4194
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "B³±d tymczasowy, SC ca³y czas próbuje przekazaæ SM\n"
+
+#: common/fbus-6110.c:4260
+msgid "Message: SMS reading failed.\n"
+msgstr "Wiadomo¶æ: Odczytanie wiadomo¶ci SMS nieudane.\n"
+
+#: common/fbus-6110.c:4268
+msgid "   Invalid location!\n"
+msgstr "   Z³a lokacja!\n"
+
+#: common/fbus-6110.c:4278
+msgid "   Empty SMS location.\n"
+msgstr "   Pusta lokacja SMS.\n"
+
+#: common/fbus-6110.c:4291
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Wiadomo¶æ: skasowanie SMS udane.\n"
+
+#: common/fbus-6110.c:4301
+msgid "Message: SMS Status Received\n"
+msgstr "Wiadomo¶æ: Otrzymano status wiadomo¶ci SMS\n"
+
+#: common/fbus-6110.c:4302
+#, c-format
+msgid "   The number of messages: %d\n"
+msgstr "   Ilo¶æ wiadomo¶ci: %d\n"
+
+#: common/fbus-6110.c:4303
+#, c-format
+msgid "   Unread messages: %d\n"
+msgstr "   Nieprzeczytane wiadomo¶ci: %d\n"
+
+#: common/fbus-6110.c:4315
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Wiadomo¶æ: B³±d statusu wiadomo¶ci, prawdopodobnie brak autoryzacji przez PIN\n"
+
+#: common/fbus-6110.c:4346
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Wiadomo¶æ: Netmonitor ustawiony poprawnie.\n"
+
+#: common/fbus-6110.c:4356
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Wiadomo¶æ: Otrzymano menu %d Netmonitora:\n"
+
+#: common/fbus-6110.c:4372
+msgid "Unknown message of type 0x40.\n"
+msgstr "Nieznana wiadomo¶æ typu 0x40.\n"
+
+#: common/fbus-6110.c:4394
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Wiadomo¶æ: Otrzymano identyfikacjê aparatu:\n"
+
+#: common/fbus-6110.c:4395
+#, c-format
+msgid "   IMEI: %s\n"
+msgstr "   IMEI: %s\n"
+
+#: common/fbus-6110.c:4397
+#, c-format
+msgid "   Model: %s\n"
+msgstr "   Model: %s\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid "   Production Code: %s\n"
+msgstr "   Kod produktu: %s\n"
+
+#: common/fbus-6110.c:4401
+#, c-format
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: common/fbus-6110.c:4403
+#, c-format
+msgid "   Firmware: %s\n"
+msgstr "   Firmware: %s\n"
+
+#: common/fbus-6110.c:4409
+#, c-format
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Magiczny numer: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4429
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Otrzymano potwierdzenie typu %02x, nr: %2x]\n"
+
+#: common/fbus-6110.c:4447
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 1.\n"
+
+#: common/fbus-6110.c:4471
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 2.\n"
+
+#: common/fbus-6110.c:4487
+msgid "Message: Unknown message.\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ.\n"
+
+#: common/fbus-6110.c:4564
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr "Przerwana wiadomo¶æ wieloramkowa - ignorujê j± !!!\n"
+
+#: common/fbus-6110.c:4565
+msgid "Please report it ...\n"
+msgstr "Proszê to zg³osiæ ...\n"
+
+#: common/fbus-6110.c:4624
+msgid "Bad checksum!\n"
+msgstr "Z³a suma kontrolna!\n"
+
+#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:4684
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4702
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Adresat wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "¬ród³o wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:4705
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Typ wiadomo¶ci: %02x\n"
+
+#: common/fbus-6110.c:4707
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Wiadomo¶æ nieznana: %02x\n"
+
+#: common/fbus-6110.c:4708
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"D³ugo¶æ wiadomo¶ci: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:4779
+msgid "PC: "
+msgstr "PC: "
+
+#: common/fbus-6110.c:4853
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Wysy³am potwierdzenie typu %02x, nr: %x]\n"
+
+#: common/mbus-6160.c:719
+msgid "Couldn't open MB61 device: "
+msgstr "Nie mog³em otworzyæ urz±dzenia MB61: "
+
+#: common/mbus-640.c:786
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:816 common/mbus-640.c:916
+msgid "PC   : "
+msgstr "PC   : "
+
+#: common/mbus-640.c:826 common/mbus-640.c:929
+msgid "Write error!\n"
+msgstr "B³±d zapisu!\n"
+
+#: common/mbus-640.c:853
+msgid "Setting MBUS communication...\n"
+msgstr "Ustanawianie komunikacji MBUS...\n"
+
+#: common/rlp-common.c:706
+msgid "Unknown!!! "
+msgstr "Nieznany!!! "
+
+#: common/rlp-common.c:771
+msgid "BAD"
+msgstr "Z£Y"
+
+#: common/rlp-common.c:893
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "Ramka FCS jest nieprawid³owa. Ignorujê...\n"
+
+#: common/rlp-common.c:1006
+msgid "Send_TXU()\n"
+msgstr "Send_TXU()\n"
+
+#: common/rlp-common.c:1007
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr "XID_R_State=%d\n"
+
+#: common/rlp-common.c:1371
+msgid "RLP state 0.\n"
+msgstr "RLP stan 0.\n"
+
+#: common/rlp-common.c:1408
+msgid "RLP state 1.\n"
+msgstr "RLP stan 1.\n"
+
+#: common/rlp-common.c:1473
+msgid "RLP state 2.\n"
+msgstr "RLP stan 2.\n"
+
+#: common/rlp-common.c:1507
+msgid "UA received in RLP state 2.\n"
+msgstr "UA otrzymane przy RLP w stanie 2.\n"
+
+#: common/rlp-common.c:1564
+msgid "RLP state 3.\n"
+msgstr "RLP stan 3.\n"
+
+#: common/rlp-common.c:1622
+msgid "RLP state 4.\n"
+msgstr "RLP stan 4.\n"
+
+#: common/rlp-common.c:1732
+msgid "RLP state 5.\n"
+msgstr "RLP stan 5.\n"
+
+#: common/rlp-common.c:1791
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr "RLP stan 5 - jeszcze nie zaimplementowany!\n"
+
+#: common/rlp-common.c:1821
+msgid "RLP state 7.\n"
+msgstr "RLP stan 7.\n"
+
+#: common/rlp-common.c:1863
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr "DEBUG: Nieznany stan RLP!\n"
+
+#: gnokii/gnokii.c:207
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII wersja %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Budowane %s %s dla %s na %s \n"
+
+#: gnokii/gnokii.c:221
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index [-v]\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+"          gnokii --sendringtone destionation rtttlfile\n"
+"          gnokii --reset [soft|hard]\n"
+msgstr ""
+"  u¿ycie: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory typ_pamiêci pocz±tek koniec \n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial numer\n"
+"          gnokii --setspeeddial numer typ_pamiêci lokacja\n"
+"          gnokii --getsms typ_pamiêci pocz±tek koniec\n"
+"          gnokii --deletesms typ_pamiêci pocz±tek koniec\n"
+"          gnokii --sendsms adresat [--smsc numer_centrum_wiadomo¶ci |\n"
+"                 --smscno indeks_centrum] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --getsmsc numer_centrum_wiadomo¶ci\n"
+"          gnokii --setdatetime [RRRR [MM [DD [GG [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm GG MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote indeks [-v]\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote indeks\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf ci±g\n"
+"          gnokii --sendlogo {caller|op} cel plik_logo [kod "
+"sieci]\n"
+"          gnokii --setlogo logofile [kod sieci]\n"
+"          gnokii --setlogo logofile [cz³onek grupy] [nazwa grupy]\n"
+"          gnokii --setlogo text [tekst powitania]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [numer grupy]\n"
+"          gnokii --sendringtone cel plik_rtttl\n"
+"          gnokii --reset [soft|hard]\n"
+
+#: gnokii/gnokii.c:255
+msgid ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+msgstr ""
+
+#: gnokii/gnokii.c:260
+msgid ""
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output "
+"of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken "
+"from\n"
+"                            phone memory from address "
+"[message_center_index].\n"
+"                            If this argument is ommited SMSC number is "
+"taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"                             [--long n] - send no more then n characters,\n"
+"                                          default is 160\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number index from calendar.\n"
+"                             [-v] - output in vCalendar 1.0 format\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --sendlogo        send the logofile to destination as operator\n"
+"                            or CLI logo\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --sendringtone    send the rtttlfile to destination as ringtone\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+"\n"
+"          --help            wy¶wietla informacje o u¿yciu.\n"
+"\n"
+"          --monitor         wy¶wietla w trybie ci±g³ym informacje otrzymane\n"
+"                            z telefonu.\n"
+"\n"
+"          --version         wy¶wietla numer wersji i informacjê o prawach\n"
+"                            autorskich.\n"
+"\n"
+"          --getmemory       wczytuje dany obszar pamiêci z telefonu.\n"
+"                            Dostêpne typy pamiêci to:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  wczytuje dane ze standardowego wej¶cia i zapisuje\n"
+"                            je do ksi±¿ki telefonicznej.\n"
+"                            U¿ywa tego samego formatu co wyj¶cie z\n"
+"                            polecenia getphonebook.\n"
+"\n"
+"          --getspeeddial    wczytuje ustawienia szybkiego wybierania z danej\n"
+"                            pozycji.\n"
+"\n"
+"          --setspeeddial    ustawia szybkie wybieranie.\n"
+"\n"
+"          --getsms          wczytuje wiadomo¶ci SMS z podanej pamiêci\n"
+"                            pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n"
+"                            [koniec].\n"
+"                            Wpisy s± podawane na standardowe wyj¶cie.\n"
+"\n"
+"          --deletesms       kasuje wiadomo¶ci SMS z podanej pamiêci\n"
+"                            pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n"
+"                            [koniec].\n"
+"\n"
+"          --sendsms         wysy³a wiadomo¶ci do [adresata] przez\n"
+"                            [numer_centrum_wiadomo¶ci] lub numer SMSC brany\n"
+"                            z pamiêci telefonu z adresu [indeks_centrum].\n"
+"                            Je¶li ten argument jest pominiêty, numer SMSC jest\n"
+"                            brany z pamiêci z lokacji nr 1. Tekst wiadomo¶ci\n"
+"                            jest brany ze standardowego wej¶cia. Ta funkcja\n"
+"                            zosta³a tylko czê¶ciowo przetestowana i mo¿e w\n"
+"                            ogóle nie dzia³aæ w Twojej sieci. Znaczenie innych\n"
+"                             opcjonalnych parametrów:\n"
+"                             [-r] - wymagaj raportu dostarczenia\n"
+"                             [-C n] - Klasa wiadomo¶ci n, gdzie n = 0..3\n"
+"                             [-v n] - okres wa¿no¶ci w minutach\n"
+"                             [--long n] - wy¶lij nie wiêcej ni¿ n znaków,\n"
+"                                          domy¶lnie 160\n"
+"\n"
+"          --getsmsc         poka¿ numer SMSC z lokacji\n"
+"                            [indeks_centrum_wiadomo¶ci].\n"
+"\n"
+"          --setdatetime     ustaw datê i czas telefonu.\n"
+"\n"
+"          --getdatetime     pokazuje aktualn± datê i czas.\n"
+"\n"
+"          --setalarm        ustawia budzik w telefonie.\n"
+"\n"
+"          --getalarm        pokazuje stan budzika.\n"
+"\n"
+"          --dialvoice       nawi±zuje po³±czenie g³osowe.\n"
+"\n"
+"          --getcalendarnote wy¶wietla wpis z kalendarza z podanej daty.\n"
+"                             [-v] - wyj¶cie w formacie vCalendar 1.0\n"
+"\n"
+"          --writecalendarnote dodaj wpis do kalendarza.\n"
+"\n"
+"          --deletecalendarnote  usuñ wpis z numerek [indeks]\n"
+"                                z kalendarza.\n"
+"\n"
+"          --getdisplaystatus poka¿ jakie ikony s± wy¶wietlane.\n"
+"\n"
+"          --netmonitor      ustawianie/sprawdzanie trybu netmonitora.\n"
+"\n"
+"          --identify        sprawdzanie IMEI, wersji i modelu.\n"
+"\n"
+"          --senddtmf        wysy³anie sekwencji DTMF\n"
+"\n"
+"          --sendlogo        wysy³anie logo do adresata jako logo operatora\n"
+"                            albo CLI\n"
+"\n"
+"          --setlogo         ustawienie logo dzwoni±cego, operatora lub powitalne\n"
+"\n"
+"          --getlogo         odebranie logo dzwoni±cego, operatora lub powitalne\n"
+"\n"
+"          --sendringtone    wy¶lij plik_rtttl do celu jako sygna³ telefonu\n"
+"\n"
+"          --reset [soft|hard] resetuje telefon.\n"
+"\n"
+
+#: gnokii/gnokii.c:344
+msgid ""
+"          --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+"          --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+"          --entersecuritycode pyta o kod i przesy³a go do telefonu\n"
+"\n"
+"          --getsecuritycodestatus pokazuje czy potrzebny jest kod\n"
+"                                  zabezpieczaj±cy\n"
+"\n"
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282
+#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "Inicjalizacha GSM/FBUS nieudana! (Nieznany model?). Koñczê pracê.\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK nie zosta³ ustawiony. Koñczê pracê.\n"
+
+#: gnokii/gnokii.c:636
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "U¿yj '%s --help' ¿eby otrzymaæ pomoc.\n"
+
+#: gnokii/gnokii.c:815
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Nieznana opcja: %d\n"
+
+#: gnokii/gnokii.c:825
+msgid "Wrong number of arguments\n"
+msgstr "Z³a ilo¶æ argumentów\n"
+
+#: gnokii/gnokii.c:897 gnokii/gnokii.c:955
+msgid "Input too long!\n"
+msgstr "Wej¶cie za d³ugie!\n"
+
+#: gnokii/gnokii.c:950
+msgid "Couldn't read from stdin!\n"
+msgstr "B³±d podczas czytania z STDIN\n"
+
+#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692
+msgid "Send succeeded!\n"
+msgstr "Wys³ano OK.\n"
+
+#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Wysy³anie nieudane (b³±d=%d)\n"
+
+#: gnokii/gnokii.c:1042
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d. Centrum SMS (%s) ma numer %s\n"
+
+#: gnokii/gnokii.c:1044
+msgid "Messages sent as "
+msgstr "Wiadomo¶ci wys³ane jako "
+
+#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625
+msgid "X.400"
+msgstr "X.400"
+
+# nie wiem czy dobrze zrobione
+#: gnokii/gnokii.c:1079
+msgid "Message validity is "
+msgstr "Poprawno¶æ wiadomo¶ci to "
+
+#: gnokii/gnokii.c:1115
+msgid "SMS center can not be found :-(\n"
+msgstr "Nie mo¿na znale¼æ centrum SMS :-(\n"
+
+#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225
+#: gnokii/gnokii.c:2392
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Nieznany typ pamiêci %s!\n"
+
+#: gnokii/gnokii.c:1214
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Wiadomo¶æ z Outbox "
+
+#: gnokii/gnokii.c:1217
+msgid "(sent)\n"
+msgstr "(wys³ano)\n"
+
+#: gnokii/gnokii.c:1219
+msgid "(not sent)\n"
+msgstr "(nie wys³ano)\n"
+
+#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1227
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Raport dorêczenia "
+
+#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269
+msgid "(read)\n"
+msgstr "(przeczytana)\n"
+
+#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271
+msgid "(not read)\n"
+msgstr "(nieprzeczytana)\n"
+
+#: gnokii/gnokii.c:1233
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data wys³ania: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1246
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr ""
+
+#: gnokii/gnokii.c:1259
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Wiadomo¶æ z Inbox "
+
+#: gnokii/gnokii.c:1273
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data/Czas: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1285
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Nadawca: %s Centrum SMS: %s\n"
+
+#: gnokii/gnokii.c:1291
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Po³±czony (%d/%d):\n"
+
+#: gnokii/gnokii.c:1297
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483
+#: gnokii/gnokii.c:2252
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funkcja nie zaimplementowana w modelu %s!\n"
+
+#: gnokii/gnokii.c:1312
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1318
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "Lokacja SMS %s %d pusta.\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d nieudane!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1414
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d skasowany\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"Kasowanie SMS %s %d nieudane!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1472
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii/gnokii.c:1479
+msgid "Error: invalid code.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1481
+msgid "Code ok.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1485
+msgid "Other error.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1501
+msgid "Security code status: "
+msgstr ""
+
+#: gnokii/gnokii.c:1603
+msgid "Sending operator logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1607
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1609
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1628
+msgid "Operator code: %s\n"
+msgstr "Kod operatora: %s\n"
+
+#: gnokii/gnokii.c:1706
+msgid "Getting Logo.\n"
+msgstr "Pobieranie logo.\n"
+
+#: gnokii/gnokii.c:1752
+msgid "Logo file error.\n"
+msgstr "B³±d pliku z Logiem.\n"
+
+#: gnokii/gnokii.c:1758
+msgid "Sending Logo.\n"
+msgstr "Wysy³anie Logo.\n"
+
+#: gnokii/gnokii.c:1800
+msgid "BEGIN:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1801
+msgid "VERSION:1.0\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1802
+msgid "BEGIN:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1803
+msgid "CATEGORIES:"
+msgstr ""
+
+#: gnokii/gnokii.c:1806
+msgid "MISCELLANEOUS\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1809
+msgid "PHONE CALL\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1812
+msgid "MEETING\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1815
+msgid "SPECIAL OCCASION\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1818
+msgid "UNKNOWN\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1821
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1822
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1826
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1830
+msgid "END:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1831
+msgid "END:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1834
+msgid "   Type of the note: "
+msgstr "   Typ notatki: "
+
+#: gnokii/gnokii.c:1839
+msgid "Reminder\n"
+msgstr "Przypomnienie\n"
+
+#: gnokii/gnokii.c:1843
+msgid "Call\n"
+msgstr "Rozmowa\n"
+
+#: gnokii/gnokii.c:1847
+msgid "Meeting\n"
+msgstr "Spotkanie\n"
+
+#: gnokii/gnokii.c:1851
+msgid "Birthday\n"
+msgstr "Urodziny\n"
+
+#: gnokii/gnokii.c:1855
+msgid "Unknown\n"
+msgstr "Nieznany\n"
+
+#: gnokii/gnokii.c:1884
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403
+msgid "Succesfully written!\n"
+msgstr "Zapisano OK!\n"
+
+#: gnokii/gnokii.c:1943
+msgid "   Calendar note deleted.\n"
+msgstr "   Notatka skasowana.\n"
+
+#: gnokii/gnokii.c:1946
+msgid "The calendar note can not be deleted\n"
+msgstr "Notatka nie mo¿e byæ skasowana\n"
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Data: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2016
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Czas: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2052
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Alarm: %s\n"
+
+#: gnokii/gnokii.c:2053
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Czas: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2094
+msgid "Entering monitor mode...\n"
+msgstr "Uruchamiam tryb monitoruj±cy...\n"
+
+#: gnokii/gnokii.c:2095
+msgid "Initialising GSM interface...\n"
+msgstr "Inicjalizacja interfejsu GSM...\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "RFLevel: %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Bateria: %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Zród³o zasilania: %s\n"
+
+#: gnokii/gnokii.c:2112
+msgid "AC/DC"
+msgstr "z sieci"
+
+#: gnokii/gnokii.c:2112
+msgid "battery"
+msgstr "bateria"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2127
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2130
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2133
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2136
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2139
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2142
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Wiadomo¶ci SMS: nieprzeczytanych %d, numer %d\n"
+
+#: gnokii/gnokii.c:2145
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Rozmowa przychodz±ca: %s\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Sieæ: %s (%s), LAC (obszar wywo³añ): %s, CellID (ID komórki): %s\n"
+
+#: gnokii/gnokii.c:2153
+msgid "Leaving monitor mode...\n"
+msgstr "Wyj¶cie z trybu monitoruj±cego...\n"
+
+#: gnokii/gnokii.c:2257
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Typ pamiêci %s nie obs³ugiwany!\n"
+
+#: gnokii/gnokii.c:2262
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Z³a lokacja lub inny, niezidentyfikowany b³±d (%d)\n"
+
+#: gnokii/gnokii.c:2329
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Format problem on line %d [%s]\n"
+
+#: gnokii/gnokii.c:2343
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Zapisano OK: typ pamiêci: %s, Lokacja: %d, Nazwa: %s, Numer: %s\n"
+
+#: gnokii/gnokii.c:2345
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Nieudany zapis (%d): typ pamiêci: %s, lokacja: %d, nazwa: %s, numer: "
+"%s\n"
+
+#: gnokii/gnokii.c:2365
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "B³±d podczas otwierania %s, u¿ywam konfiguracji domy¶lnej\n"
+
+#: gnokii/gnokii.c:2466
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Po³±czenie trwa: %s\n"
+
+#: gnokii/gnokii.c:2467
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Nieznany: %s\n"
+
+#: gnokii/gnokii.c:2468
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Nieprzeczytany SMS: %s\n"
+
+#: gnokii/gnokii.c:2469
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Po³±czenie typu Voice: %s\n"
+
+#: gnokii/gnokii.c:2470
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Aktywne po³±czenie typu Fax: %s\n"
+
+#: gnokii/gnokii.c:2471
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Aktywne po³±czenie typu Data: %s\n"
+
+#: gnokii/gnokii.c:2472
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Blokada klawiatury: %s\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Pamiêæ SMS pe³na: %s\n"
+
+#: gnokii/gnokii.c:2525
+#, c-format
+msgid "IMEI:     %s\n"
+msgstr "IMEI:     %s\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "Model:    %s\n"
+msgstr "Model:    %s\n"
+
+#: gnokii/gnokii.c:2527
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revision: %s\n"
+
+#: gnokii/gnokii.c:2559
+msgid "What kind of reset do you want??\n"
+msgstr "Jakiego typu resetu sobie ¿yczysz?\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid Version %s"
+
+#: gnokiid/gnokiid.c:70
+msgid "   usage: gnokiid {--help|--version}"
+msgstr "   u¿ycie: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:85
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:93
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:212
+msgid "Couldn't open pty!\n"
+msgstr "Nie mog³em otworzyæ pty!\n"
+
+#: gnokiid/virtmodem.c:220
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid NIE powinien byæ zainstalowany z setuid root!\n"
+
+#: gnokiid/virtmodem.c:224
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Slave pty = %s, wo³am %s dla stworzenia /dev/gnokii.\n"
+
+#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Nie odebrano GSM_LinkOK. Koniec pracy. \n"
+
+#: xgnokii/xgnokii.c:175
+msgid "/help/index.html"
+msgstr "/help/index.html"
+
+#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973
+msgid "Familly"
+msgstr "Rodzina"
+
+#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991
+msgid "Friends"
+msgstr "Przyjaciele"
+
+#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000
+msgid "Colleagues"
+msgstr "Znajomi"
+
+#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009
+msgid "Other"
+msgstr "Inni"
+
+#: xgnokii/xgnokii.c:244
+msgid "No group"
+msgstr "Zadna grupa"
+
+#: xgnokii/xgnokii.c:383
+msgid "Short Message received"
+msgstr "otrzymano SMS"
+
+#: xgnokii/xgnokii.c:398
+msgid "Call in progress"
+msgstr "Rozmowa w trakcie"
+
+#: xgnokii/xgnokii.c:411
+msgid "Hide"
+msgstr "Ukryj"
+
+#: xgnokii/xgnokii.c:539
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr "Rozmowa przychodz±ca od: %s\n"
+"Czas: %s"
+
+#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Zbiór %d"
+
+#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:629
+msgid "Voice"
+msgstr "Voice"
+
+#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386
+msgid "1 h"
+msgstr "1 godzina"
+
+#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393
+msgid "6 h"
+msgstr "6 godzin"
+
+#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400
+msgid "24 h"
+msgstr "24 godziny"
+
+#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407
+msgid "72 h"
+msgstr "72 godzin"
+
+#: xgnokii/xgnokii.c:660
+msgid "Max. time"
+msgstr "Maksymalny mo¿liwy czas"
+
+#: xgnokii/xgnokii.c:962
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1020
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572
+msgid "Contacts"
+msgstr "Ksi±¿ka adresowa"
+
+#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1044
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487
+msgid "Speed Dial"
+msgstr "Speed Dial"
+
+#: xgnokii/xgnokii.c:1057
+msgid "Keyboard"
+msgstr "Klawiatura"
+
+#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr "Net Monitor"
+
+#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518
+msgid "Options"
+msgstr "Opcje"
+
+#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042
+msgid "Help"
+msgstr "Pomoc"
+
+#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103
+msgid "About"
+msgstr "O..."
+
+#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280
+#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914
+#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428
+#: xgnokii/xgnokii_sms.c:470
+msgid "Ok"
+msgstr "OK"
+
+#: xgnokii/xgnokii.c:1120
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1274
+msgid "Edit SMS Setting"
+msgstr "Edycja ustawieñ SMS"
+
+#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148
+#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788
+#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145
+#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270
+#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435
+#: xgnokii/xgnokii_sms.c:478
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: xgnokii/xgnokii.c:1301
+msgid "Set name:"
+msgstr "Podaj nazwê:"
+
+#: xgnokii/xgnokii.c:1314
+msgid "Center:"
+msgstr "Centrum:"
+
+#: xgnokii/xgnokii.c:1327
+msgid "Sending Format:"
+msgstr "Format wysy³ania:"
+
+#: xgnokii/xgnokii.c:1371
+msgid "Validity Period:"
+msgstr "Validity Period:"
+
+#: xgnokii/xgnokii.c:1379
+msgid "Max. Time"
+msgstr "Maksymalny czas"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Set name"
+msgstr "Podaj nazwê:"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Center number"
+msgstr "Numer centrum"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Format"
+msgstr "Format"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Validity"
+msgstr "Validity"
+
+#: xgnokii/xgnokii.c:1523
+msgid "Apply"
+msgstr "Zastosuj"
+
+#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510
+#: xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr "Zapisz"
+
+#: xgnokii/xgnokii.c:1539
+msgid "Close"
+msgstr "Zamknij"
+
+#: xgnokii/xgnokii.c:1554
+msgid "Phone and connection type"
+msgstr "Telefon i typ po³±czenia"
+
+#: xgnokii/xgnokii.c:1561
+msgid "Connection"
+msgstr "Po³±czenie"
+
+#: xgnokii/xgnokii.c:1568
+msgid "Port:"
+msgstr "Port:"
+
+#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1598
+msgid "Init length:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1613
+msgid "Bindir:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1628
+msgid "Connection:"
+msgstr "Po³±czenie:"
+
+#: xgnokii/xgnokii.c:1632
+msgid "infrared"
+msgstr "podczerwieñ (IR)"
+
+#: xgnokii/xgnokii.c:1636
+msgid "serial"
+msgstr "szeregowe (serial)"
+
+#: xgnokii/xgnokii.c:1641
+msgid "Phone information"
+msgstr "Informacje o telefonie"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Version:"
+msgstr "Wersja:"
+
+#: xgnokii/xgnokii.c:1685
+msgid "Revision:"
+msgstr "Wersja:"
+
+#: xgnokii/xgnokii.c:1700
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1715
+msgid "Alarm setting"
+msgstr "Ustawianie alarmu"
+
+#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729
+msgid "Alarm"
+msgstr "Alarm"
+
+#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318
+msgid "Short Message Service"
+msgstr "Short Message Service"
+
+#: xgnokii/xgnokii.c:1789
+msgid "Edit"
+msgstr "Edycja"
+
+#: xgnokii/xgnokii.c:1803
+msgid "Business Card"
+msgstr "Business Card"
+
+#: xgnokii/xgnokii.c:1810
+msgid "User"
+msgstr "U¿ytkownik"
+
+#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: xgnokii/xgnokii.c:1854
+msgid "Title:"
+msgstr "Tytu³:"
+
+#: xgnokii/xgnokii.c:1880
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1906
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1931
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1956
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:1982
+msgid "Address:"
+msgstr "Adres:"
+
+#: xgnokii/xgnokii.c:2006
+msgid "Caller groups names"
+msgstr "Nazwy grup dzwoni±cych"
+
+#: xgnokii/xgnokii.c:2013
+msgid "Groups"
+msgstr "Grupy"
+
+#: xgnokii/xgnokii.c:2022
+#, c-format
+msgid "Group %d:"
+msgstr "Grupa %d:"
+
+#: xgnokii/xgnokii.c:2035
+msgid "Help viewer"
+msgstr "Ogl±dacz pomocy"
+
+#: xgnokii/xgnokii.c:2049
+msgid "Viewer:"
+msgstr "Ogl±dacz:"
+
+#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:154
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:166
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:184
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:141
+msgid "Error"
+msgstr "B³±d"
+
+#: xgnokii/xgnokii_common.c:187
+msgid "Yes"
+msgstr "Tak"
+
+#: xgnokii/xgnokii_common.c:196
+msgid "No"
+msgstr "Nie"
+
+#: xgnokii/xgnokii_common.c:281
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Nie mogê uruchomiæ %s\n"
+
+#: xgnokii/xgnokii_contacts.c:88
+msgid "/help/contacts.html"
+msgstr "/help/contacts.html"
+
+#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243
+#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429
+#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584
+msgid "Can't change memory type!"
+msgstr "Nie mogê zmieniæ typu pamiêci!"
+
+#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:674
+msgid "Can't find pattern!"
+msgstr "Nie mogê znale¼æ ¶cie¿ki!"
+
+#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279
+msgid "Number:"
+msgstr "Numer:"
+
+#: xgnokii/xgnokii_contacts.c:827
+msgid "Memory:"
+msgstr "Pamiêæ:"
+
+#: xgnokii/xgnokii_contacts.c:831
+msgid "phone"
+msgstr "telefon"
+
+#: xgnokii/xgnokii_contacts.c:846
+msgid "Caller group:"
+msgstr "Grupa:"
+
+#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633
+#: xgnokii/xgnokii_speed.c:540
+msgid "Edit entry"
+msgstr "Edycja pozycji"
+
+#: xgnokii/xgnokii_contacts.c:907
+msgid "Delete entries"
+msgstr "Kasowanie pozycji"
+
+#: xgnokii/xgnokii_contacts.c:939
+msgid "Do you want to delete selected entries?"
+msgstr "Czy chcesz skasowaæ zaznaczone pozycje?"
+
+#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625
+msgid "New entry"
+msgstr "Nowa pozycja"
+
+#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629
+msgid "Duplicate entry"
+msgstr "Skopiuj pozycjê"
+
+#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062
+#: xgnokii/xgnokii_contacts.c:1087
+msgid "Can't find free memory."
+msgstr "Brak wolnej pamiêci."
+
+#: xgnokii/xgnokii_contacts.c:1128
+msgid "Changing memory type"
+msgstr "Zmieniam typ pamiêci"
+
+#: xgnokii/xgnokii_contacts.c:1136
+msgid "Continue"
+msgstr "Dalej"
+
+#: xgnokii/xgnokii_contacts.c:1156
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181
+msgid "Find"
+msgstr "Szukanie"
+
+#: xgnokii/xgnokii_contacts.c:1203
+msgid "Pattern:"
+msgstr "Scie¿ka:"
+
+#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Name"
+msgstr "Nazwa"
+
+#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Number"
+msgstr "Numer"
+
+#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644
+msgid "Dial voice"
+msgstr "Dzwoñ (voice)"
+
+#: xgnokii/xgnokii_contacts.c:1385
+msgid "Phone memory..."
+msgstr "Pamiêæ telefonu..."
+
+#: xgnokii/xgnokii_contacts.c:1396
+msgid "SIM memory..."
+msgstr "Pamiêæ karty SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Saving entries"
+msgstr "Zapisujê pozycje"
+
+#: xgnokii/xgnokii_contacts.c:1448
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1481
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid "Save changes?"
+msgstr "Zapisaæ zmiany?"
+
+#: xgnokii/xgnokii_contacts.c:1519
+msgid "Don't save"
+msgstr "Nie zapisuj"
+
+#: xgnokii/xgnokii_contacts.c:1543
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1641
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1665
+msgid "Getting entries"
+msgstr "Pobieranie danych"
+
+#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719
+#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691
+#, c-format
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736
+#, c-format
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110
+#: xgnokii/xgnokii_speed.c:378
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142
+#: xgnokii/xgnokii_speed.c:418
+msgid "Overwrite file?"
+msgstr "Nadpisaæ plik?"
+
+#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143
+#: xgnokii/xgnokii_speed.c:419
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436
+msgid "Export"
+msgstr "Export"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74
+#: xgnokii/xgnokii_speed.c:280
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2130
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357
+msgid "Import"
+msgstr "Import"
+
+#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036
+msgid "Select contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673
+#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Memory"
+msgstr "Pamiêæ"
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Group"
+msgstr "Grupa"
+
+#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518
+msgid "Read from phone"
+msgstr "Odczyt z telefonu"
+
+#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522
+msgid "Save to phone"
+msgstr "Zapis do telefonu"
+
+#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529
+msgid "Import from file"
+msgstr "Import z pliku"
+
+#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533
+msgid "Export to file"
+msgstr "Eksport do pliku"
+
+#: xgnokii/xgnokii_contacts.c:2637
+msgid "Delete entry"
+msgstr "Skasuj pozycjê"
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr "/help/dtmf.html"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr "Odczyt"
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr "Dial Tone"
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr "/help/netmon.html"
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr "Aktywna komórka"
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:83
+msgid "/help/sms.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:88
+msgid "/help/sms_send.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "report"
+msgstr "raport"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "read"
+msgstr "przeczytane"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "unread"
+msgstr "nieprzeczytane"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "wys³ane"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "nie wys³±ne"
+
+#: xgnokii/xgnokii_sms.c:380
+msgid "From: "
+msgstr "Od: "
+
+#: xgnokii/xgnokii_sms.c:388
+msgid "Date: "
+msgstr "Data: "
+
+#: xgnokii/xgnokii_sms.c:438
+msgid "Function not implemented!"
+msgstr "Funkcja nie zaimplementowana!" 
+
+#: xgnokii/xgnokii_sms.c:443
+msgid "Delete SMS failed!"
+msgstr "Kasowanie SMS nieudane!"
+
+#: xgnokii/xgnokii_sms.c:463
+msgid "Delete SMS"
+msgstr "Skasuj SMS"
+
+#: xgnokii/xgnokii_sms.c:495
+msgid "Do you want delete selected SMS?"
+msgstr "Czy chcesz skasowaæ wybrane SMS-y?"
+
+#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817
+msgid "Address line contains illegal address!"
+msgstr "Nieprawid³owa linia adresu!"
+
+#: xgnokii/xgnokii_sms.c:791
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr "wys³anie SMS do %s zakoñczone NIEpowodzeniem\n"
+"(b³±d=%d)"
+
+#: xgnokii/xgnokii_sms.c:988
+msgid "Send message"
+msgstr "Wy¶lij wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:992
+msgid "Save message to outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:999
+msgid "Check names"
+msgstr "Sprawd¼ nazwy"
+
+#: xgnokii/xgnokii_sms.c:1012
+msgid "To:"
+msgstr "Do:"
+
+#: xgnokii/xgnokii_sms.c:1084
+msgid "Delivery report"
+msgstr "Raport dorêczenia"
+
+#: xgnokii/xgnokii_sms.c:1088
+msgid "Send as Long SMS"
+msgstr "Wy¶lij jako d³ugi SMS"
+
+#: xgnokii/xgnokii_sms.c:1092
+msgid "SMS Center:"
+msgstr "Centrum SMS:"
+
+#: xgnokii/xgnokii_sms.c:1110
+msgid "New Message"
+msgstr "Nowa wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352
+msgid "Forward Message"
+msgstr "Prze¶lij dalej"
+
+#: xgnokii/xgnokii_sms.c:1177
+msgid "Reply Message"
+msgstr "Odpowied¼"
+
+#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361
+msgid "Bussiness Card"
+msgstr "Business Card"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Status"
+msgstr "Status"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Date / Time"
+msgstr "Data / Czas"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Sender"
+msgstr "Nadawca"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Message"
+msgstr "Wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1348
+msgid "New message"
+msgstr "Nowa wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1356
+msgid "Reply message"
+msgstr "Odpowiedz"
+
+#: xgnokii/xgnokii_sms.c:1368
+msgid "Delete message"
+msgstr "Skasuj"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "SMS's"
+msgstr "SMS-y"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1408
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:42
+msgid "/help/speeddial.html"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Cannot allocate memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:226
+#, c-format
+msgid ""
+"Error writing speed\n"
+"dial for key %d!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:298
+msgid "Cannot allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338
+msgid "Error reading file!"
+msgstr "B³±d odczytu pliku"
+
+#: xgnokii/xgnokii_speed.c:484
+msgid "Key"
+msgstr "Klawisz"
+
+#: xgnokii/xgnokii_xkeyb.c:90
+msgid "/help/xkeyb.html"
+msgstr "/help/xkeyb.html"
+
+#: xgnokii/xgnokii_xkeyb.c:149
+msgid "Cannot load background pixmap!"
+msgstr "Nie mogê wczytaæ t³a"
+
+#: xgnokii/xgnokii_xkeyb.c:201
+msgid "/_File"
+msgstr "/_Plik"
+
+#: xgnokii/xgnokii_xkeyb.c:202
+msgid "/File/_Close"
+msgstr "/Plik/_Zamknij"
+
+#: xgnokii/xgnokii_xkeyb.c:203
+msgid "/_Help"
+msgstr "/_Pomoc"
+
+#: xgnokii/xgnokii_xkeyb.c:204
+msgid "/Help/_Help"
+msgstr "/Pomoc/_Pomoc"
+
+#: xgnokii/xgnokii_xkeyb.c:205
+msgid "/Help/_About"
+msgstr "/Pomoc/_O..."
+
+#: xgnokii/xgnokii_xkeyb.c:218
+msgid "XGnokii Keyboard"
+msgstr "Klawiatura XGnokii"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644 (file)
index 0000000..d1b04e9
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,3579 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii 0.3.2_pre23\n"
+"POT-Creation-Date: 2000-05-20 11:57+0200\n"
+"PO-Revision-Date: 2000-05-20 17:30+0200\n"
+"Last-Translator: Stanislav Meduna <stano@trillian.eunet.sk>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/fbus-3810.c:517 common/fbus-6110.c:2076
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Posiela sa SMS pre %s prostredníctvom centra %s\n"
+
+#: common/fbus-3810.c:621
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Poslanie SMS zlyhalo, nový pokus (%d z %d)\n"
+
+#: common/fbus-3810.c:1172
+msgid "Couldn't open FB38 device: "
+msgstr "Nie je mo¾né otvori» zariadenie FB38: "
+
+#: common/fbus-3810.c:1264
+msgid "restarting.\n"
+msgstr "nový ¹tart.\n"
+
+#: common/fbus-3810.c:1320
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT chyba %02x"
+
+#: common/fbus-3810.c:1327 common/mbus-6160.c:733
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS chyba %02x != %02x"
+
+#: common/fbus-3810.c:1441
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 registraèná odpoveï 0x%02x\n"
+
+#: common/fbus-3810.c:1457
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 registraèná odpoveï 0x%02x\n"
+
+#: common/fbus-3810.c:1458
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr "Prístup k SIM: %s.\n"
+
+#: common/fbus-3810.c:1534
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS zapísaná na pozíciu 0x%02x\n"
+
+#: common/fbus-3810.c:1544
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Zápis SMS zlyhal: 0x%02x\n"
+
+#: common/fbus-3810.c:1665
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN bol [pravdepodobne] zadaný.\n"
+
+#: common/fbus-3810.c:1674
+msgid "Phone powering off..."
+msgstr "Telefón sa vypína..."
+
+#: common/fbus-3810.c:1703
+msgid "Standard Ack write failed!"
+msgstr "Zápis ¹tandardného potvrdenia zlyhal!"
+
+#: common/fbus-3810.c:1729
+msgid "Unknown: "
+msgstr "Neznáma: "
+
+#: common/fbus-3810.c:1731
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Typ správy: %02x "
+
+#: common/fbus-3810.c:1732
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Då¾ka správy: %02x "
+
+#: common/fbus-3810.c:1733
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Sekvenèné èíslo: %02x "
+
+#: common/fbus-3810.c:1734
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+"   "
+msgstr ""
+"Kontrolný súèet: %02x \n"
+"   "
+
+#: common/fbus-3810.c:1826 common/fbus-3810.c:1956
+msgid "Set Mem Loc Write failed!"
+msgstr "Poslanie správy Set Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:1871
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - zápis:"
+
+#: common/fbus-3810.c:1883
+msgid "Request HangupMessage Write failed!"
+msgstr "Poslanie správy Request HangupMessage zlyhalo!"
+
+#: common/fbus-3810.c:1895
+msgid "0x4a Write failed!"
+msgstr "Poslanie správy 0x4a zlyhalo!"
+
+#: common/fbus-3810.c:1910
+msgid "Explore Write failed!"
+msgstr "Poslanie správy Explore zlyhalo!"
+
+#: common/fbus-3810.c:1920
+msgid "0x3f Write failed!"
+msgstr "Poslanie správy 0x3f zlyhalo!"
+
+#: common/fbus-3810.c:1980
+msgid "Request Mem Loc Write failed!"
+msgstr "Poslanie správy Request Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:1993
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "Poslanie správy Request IMEI/Revision/Model zlyhalo!"
+
+#: common/fbus-3810.c:2036
+msgid "Send SMS header failed!"
+msgstr "Poslanie SMS hlavièky zlyhalo!"
+
+#: common/fbus-3810.c:2095
+msgid "Store SMS header failed!"
+msgstr "Zápis SMS hlavièky zlyhal!"
+
+#: common/fbus-3810.c:2120
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Poslanie SMS bloku %d zlyhalo!"
+
+#: common/fbus-3810.c:2143
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "Poslanie správy SMS Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:2166
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Poslanie správy Delete SMS Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:2185
+msgid "0x15 Write failed!"
+msgstr "Poslanie správy 0x15 zlyhalo!"
+
+#: common/fbus-3810.c:2202 common/mbus-6160.c:803
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - správa je príli¹ dlhá!\n"
+
+#: common/fbus-3810.c:2228 common/mbus-6160.c:832
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - zápis:"
+
+#: common/fbus-3810.c:2241 common/fbus-3810.c:2374 common/fbus-3810.c:2388
+#: common/fbus-3810.c:2402 common/fbus-3810.c:2416 common/fbus-3810.c:2550
+#: common/fbus-3810.c:2611 common/fbus-3810.c:2670 common/fbus-3810.c:2708
+msgid "Write failed!"
+msgstr "Zápis zlyhal!"
+
+#: common/fbus-3810.c:2255
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Prichádzajúce volanie: typ %s. %02x, èíslo %s.\n"
+
+#: common/fbus-3810.c:2282
+msgid "0x27 Write failed!"
+msgstr "Poslanie správy 0x27 zlyhalo!"
+
+#: common/fbus-3810.c:2330
+msgid "0x4b Write failed!"
+msgstr "Poslanie správy 0x4b zlyhalo!"
+
+#: common/fbus-3810.c:2349
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Stav: %s. Batéria: %02x Signál: %02x.\n"
+
+#: common/fbus-3810.c:2360
+msgid "0x10 Write failed!"
+msgstr "Poslanie správy 0x10 zlyhalo!"
+
+#: common/fbus-3810.c:2364
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Spojenie ukonèené telefónom (správa 0x10).\n"
+
+#: common/fbus-3810.c:2378
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Spojenie ukonèené protistranou (alebo sie»ou).\n"
+
+#: common/fbus-3810.c:2392
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Spojenie ukonèené telefónom (správa 0x12).\n"
+
+#: common/fbus-3810.c:2406
+msgid "Incoming call answered from phone.\n"
+msgstr "Telefón prijal prichádzajúci hovor.\n"
+
+#: common/fbus-3810.c:2420
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "Spojenie nadviazané: typ %s, stavové bajty %02x %02x.\n"
+
+#: common/fbus-3810.c:2437
+msgid "0x2c Write failed!"
+msgstr "Poslanie správy 0x2c zlyhalo!"
+
+#: common/fbus-3810.c:2524
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Èas. pásmo:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2591
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Prichádzajúca SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Odosielateµ: %s(Typ %02x) "
+"SMS centrum: %s\n"
+
+#: common/fbus-3810.c:2593
+#, c-format
+msgid ""
+"   Msg Length %d, Msg memory %d Msg number %d,  PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+"   Då¾ka %d, Pamä» %d Èíslo %d,  PID: %02x DCS: %02x Neznáme: %02x\n"
+
+#: common/fbus-3810.c:2686
+msgid "Mobile phone identification received:\n"
+msgstr "Identifikácia mobilného telefónu prijatá:\n"
+
+#: common/fbus-3810.c:2687
+#, c-format
+msgid "   IMEI:     %s\n"
+msgstr "   IMEI:     %s\n"
+
+#: common/fbus-3810.c:2689
+#, c-format
+msgid "   Model:    %s\n"
+msgstr "   Model:    %s\n"
+
+#: common/fbus-3810.c:2691
+#, c-format
+msgid "   Revision: %s\n"
+msgstr "   Revízia:  %s\n"
+
+#: common/fbus-3810.c:2759
+msgid "SMS Message Center Data:\n"
+msgstr "Údaje SMS centra:\n"
+
+#: common/fbus-3810.c:2760
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Zvolená pamä»:  0x%02x\n"
+
+#: common/fbus-3810.c:2761
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Správ v telefóne: 0x%02x, nepreèítaných: 0x%02x\n"
+
+#: common/fbus-3810.c:2763
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Správ na SIM: 0x%02x, nepreèítaných: 0x%02x\n"
+
+#: common/fbus-3810.c:2765
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Odpoveï prostredníctvom vlastného centra: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2767
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Potvrdenie o doruèení: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2769
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "SPrávy posielané ako: 0x%02x\n"
+
+#: common/fbus-3810.c:2770
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Platnos» správ: 0x%02x\n"
+
+#: common/fbus-3810.c:2771
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Neznáme: 0x%02x\n"
+
+#: common/fbus-3810.c:2774
+msgid "UnknownNumber field empty."
+msgstr "Pole UnknownNumber prázdne."
+
+#: common/fbus-3810.c:2776
+msgid "UnknownNumber: "
+msgstr "UnknownNumber: "
+
+#: common/fbus-3810.c:2783
+msgid "Number field empty."
+msgstr "Èíselné pole prázdne."
+
+#: common/fbus-3810.c:2786
+msgid "Number: "
+msgstr "Èíslo: "
+
+#: common/fbus-6110-ringtones.c:256
+msgid "File can not be opened!\n"
+msgstr "Súbor nie je mo¾né otvori»!\n"
+
+#: common/fbus-6110.c:808
+msgid "Timeout in IR-mode\n"
+msgstr "Vypr¹anie èasového intervalu v IR-re¾ime\n"
+
+#: common/fbus-6110.c:840
+msgid "Couldn't open FB61 infrared device"
+msgstr "Nie je mo¾né otvori» FB61 infrèervené zariadenie"
+
+#: common/fbus-6110.c:908
+msgid "Starting IR mode...!\n"
+msgstr "©tart IR re¾imu...!\n"
+
+#: common/fbus-6110.c:2384
+msgid "Serial flags dump:\n"
+msgstr "Výpis sériových príznakov:\n"
+
+#: common/fbus-6110.c:2385 common/mbus-640.c:899
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR je %s.\n"
+
+#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387
+#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900
+msgid "up"
+msgstr "aktívne"
+
+#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387
+#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900
+msgid "down"
+msgstr "inaktívne"
+
+#: common/fbus-6110.c:2386 common/mbus-640.c:900
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS je %s.\n"
+
+#: common/fbus-6110.c:2387
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR je %s.\n"
+
+#: common/fbus-6110.c:2388
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS je %s.\n"
+
+#: common/fbus-6110.c:2423
+msgid "Setting FBUS communication...\n"
+msgstr "Nastavenie FBUS komunikácie...\n"
+
+#: common/fbus-6110.c:2454
+msgid "Couldn't open FB61 device"
+msgstr "Nie je mo¾né otvori» FB61 zariadenie"
+
+#: common/fbus-6110.c:2580
+msgid "Message: Call message, type 0x02:"
+msgstr "Správa: Volanie, typ 0x02:"
+
+#: common/fbus-6110.c:2581 common/fbus-6110.c:2593 common/fbus-6110.c:2695
+msgid "   Exact meaning not known yet, sorry :-(\n"
+msgstr "   Presný význam zatiaµ nie je známy, µutujeme :-(\n"
+
+#: common/fbus-6110.c:2591
+msgid "Message: Call message, type 0x03:"
+msgstr "Správa: Volanie, typ 0x03:"
+
+#: common/fbus-6110.c:2592 common/fbus-6110.c:2608 common/fbus-6110.c:2626
+#: common/fbus-6110.c:2657 common/fbus-6110.c:2668 common/fbus-6110.c:2694
+#, c-format
+msgid "   Sequence nr. of the call: %d\n"
+msgstr "   Sekvenèné èíslo volania: %d\n"
+
+#: common/fbus-6110.c:2607
+msgid "Message: Remote end hang up.\n"
+msgstr "Správa: Protistrana zavesila.\n"
+
+#: common/fbus-6110.c:2621
+msgid "Message: Incoming call alert:\n"
+msgstr "Správa: Prichádzajúce volanie:\n"
+
+#: common/fbus-6110.c:2627 common/fbus-6110.c:2910
+msgid "   Number: "
+msgstr "   Èíslo: "
+
+#: common/fbus-6110.c:2635 common/fbus-6110.c:2894
+msgid "   Name: "
+msgstr "   Meno: "
+
+#: common/fbus-6110.c:2656
+msgid "Message: Call answered.\n"
+msgstr "Správa: Volanie prijaté.\n"
+
+#: common/fbus-6110.c:2667
+msgid "Message: Call ended by your phone.\n"
+msgstr "Správa: Volanie ukonèené va¹ím telefónom.\n"
+
+#: common/fbus-6110.c:2693
+msgid "Message: Call message, type 0x0a:"
+msgstr "Správa: Volanie, typ 0x0a:"
+
+#: common/fbus-6110.c:2706
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Správa: Neznáma správa typu 0x01\n"
+
+#: common/fbus-6110.c:2724
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Správa: SMS správa úspe¹ne odoslaná.\n"
+
+#: common/fbus-6110.c:2735
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Správa: Odoslanie SMS správy zlyhalo.\n"
+
+#: common/fbus-6110.c:2744
+msgid "Message: SMS Message Received\n"
+msgstr "Správa: SMS správa prijatá\n"
+
+#: common/fbus-6110.c:2745 common/fbus-6110.c:4102
+#, c-format
+msgid "   SMS center number: %s\n"
+msgstr "   Èíslo SMS centra: %s\n"
+
+#: common/fbus-6110.c:2749 common/fbus-6110.c:4103
+#, c-format
+msgid "   Remote number: %s\n"
+msgstr "   Èíslo odosielateµa: %s\n"
+
+#: common/fbus-6110.c:2750
+#, c-format
+msgid "   Date: %s\n"
+msgstr "   Dátum: %s\n"
+
+#: common/fbus-6110.c:2751
+msgid "   SMS: "
+msgstr "   SMS: "
+
+#: common/fbus-6110.c:2766
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Správa: SMS centrum korektne nastavené.\n"
+
+#: common/fbus-6110.c:2782
+msgid "Message: SMS Center received:\n"
+msgstr "Správa: SMS centrum prijaté:\n"
+
+#: common/fbus-6110.c:2783
+#, c-format
+msgid "   %d. SMS Center name is %s\n"
+msgstr "   %d. Názov SMS centra je %s\n"
+
+#: common/fbus-6110.c:2784
+#, c-format
+msgid "   SMS Center number is %s\n"
+msgstr "   Èíslo SMS centra je %s\n"
+
+#: common/fbus-6110.c:2786
+msgid "   SMS Center message format is "
+msgstr "   Formát správ SMS centra je "
+
+#: common/fbus-6110.c:2791 gnokii/gnokii.c:1021 xgnokii/xgnokii.c:525
+#: xgnokii/xgnokii.c:554 xgnokii/xgnokii.c:1376
+msgid "Text"
+msgstr "Text"
+
+#: common/fbus-6110.c:2795 gnokii/gnokii.c:1025 xgnokii/xgnokii.c:529
+#: xgnokii/xgnokii.c:1390
+msgid "Paging"
+msgstr "Paging"
+
+#: common/fbus-6110.c:2799 gnokii/gnokii.c:1029 xgnokii/xgnokii.c:533
+#: xgnokii/xgnokii.c:1383
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2803 gnokii/gnokii.c:1034
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2807 common/fbus-6110.c:2841 common/fbus-6110.c:4324
+#: common/fbus-6110.c:4817 gnokii/gnokii.c:1046 gnokii/gnokii.c:1080
+msgid "Unknown"
+msgstr "Neznámy"
+
+#: common/fbus-6110.c:2812
+msgid "   SMS Center message validity is "
+msgstr "   Platnos» správ SMS centra je "
+
+#: common/fbus-6110.c:2817 gnokii/gnokii.c:1056
+msgid "1 hour"
+msgstr "1 hodina"
+
+#: common/fbus-6110.c:2821 gnokii/gnokii.c:1060
+msgid "6 hours"
+msgstr "6 hodín"
+
+#: common/fbus-6110.c:2825 gnokii/gnokii.c:1064
+msgid "24 hours"
+msgstr "24 hodín"
+
+#: common/fbus-6110.c:2829 gnokii/gnokii.c:1068
+msgid "72 hours"
+msgstr "72 hodín"
+
+#: common/fbus-6110.c:2833 gnokii/gnokii.c:1072 xgnokii/xgnokii.c:577
+#: xgnokii/xgnokii.c:1455
+msgid "1 week"
+msgstr "1 tý¾deò"
+
+#: common/fbus-6110.c:2837 gnokii/gnokii.c:1076
+msgid "Maximum time"
+msgstr "Maximálny èas"
+
+#: common/fbus-6110.c:2859
+msgid "Message: SMS Center error received:\n"
+msgstr "Správa: Prijatá chyba SMS centra:\n"
+
+#: common/fbus-6110.c:2860
+msgid "   The request for SMS Center failed.\n"
+msgstr "   ®iados» o SMS centrum zlyhala.\n"
+
+#: common/fbus-6110.c:2871
+msgid "Unknown message!\n"
+msgstr "Naznáma správa!\n"
+
+#: common/fbus-6110.c:2893
+msgid "Message: Phonebook entry received:\n"
+msgstr "Správa: Príjem polo¾ky telefónneho zoznamu:\n"
+
+#: common/fbus-6110.c:2930
+msgid "   Date: "
+msgstr "   Dátum: "
+
+#: common/fbus-6110.c:2932
+msgid "   Time: "
+msgstr "   Èas:   "
+
+#: common/fbus-6110.c:2945
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Správa: Prijatá chyba polo¾ky telefónneho zoznamu:\n"
+
+#: common/fbus-6110.c:2953
+msgid "   Invalid memory type!\n"
+msgstr "   Chybný typ pamäti!\n"
+
+#: common/fbus-6110.c:2963 common/fbus-6110.c:3001
+msgid "   Unknown error!\n"
+msgstr "   Neznáma chyba!\n"
+
+#: common/fbus-6110.c:2974
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Správa: Polo¾ka telefónneho zoznamu úspe¹ne zapísaná.\n"
+
+#: common/fbus-6110.c:2991
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Správa: Polo¾ka telefónneho zoznamu nebola zapísaná - meno je príli¹ dlhé.\n"
+
+#: common/fbus-6110.c:3012
+msgid "Message: Memory status received:\n"
+msgstr "Správa: Príjatý stav pamäti:\n"
+
+#: common/fbus-6110.c:3014
+#, c-format
+msgid "   Memory Type: %s\n"
+msgstr "   Typ pamäti: %s\n"
+
+#: common/fbus-6110.c:3015
+#, c-format
+msgid "   Used: %d\n"
+msgstr "   Vyu¾ité: %d\n"
+
+#: common/fbus-6110.c:3016
+#, c-format
+msgid "   Free: %d\n"
+msgstr "   Voµné:   %d\n"
+
+#: common/fbus-6110.c:3031
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Správa: Chyba stavu pamäti, telefón je pravdepodobne vypnutý.\n"
+
+#: common/fbus-6110.c:3038
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Správa: Chyba stavu pamäti, telefón tento typ nepodporuje.\n"
+
+#: common/fbus-6110.c:3045
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Správa: Chyba stavu pamäti, èaká sa na bezpeènostný kód.\n"
+
+#: common/fbus-6110.c:3052
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Správa: Neznáma chyba stavu pamäti, subkód (MessageBuffer[4]) = %02x\n"
+
+#: common/fbus-6110.c:3069
+msgid "Message: Caller group logo etc.\n"
+msgstr "Správa: Logo skupiny volajúcich a.p.\n"
+
+#: common/fbus-6110.c:3070
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Názov skupiny: %s\n"
+
+#: common/fbus-6110.c:3090
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Správa: Údaje o skupine volajúcich prijaté, ale neboli po¾adované!\n"
+
+#: common/fbus-6110.c:3100
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Správa: Chyba pri pokuse získa» údaje o skupine volajúcich.\n"
+
+#: common/fbus-6110.c:3108
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Správa: Údaje o skupine volajúcich úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3116
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Správa: Chyba pri pokuse zapísa» údaje o skupine volajúcich.\n"
+
+#: common/fbus-6110.c:3127
+msgid "Message: Speed dial entry received:\n"
+msgstr "Správa: Polo¾ka skráteného volania prijatá:\n"
+
+#: common/fbus-6110.c:3128
+#, c-format
+msgid "   Location: %d\n"
+msgstr "   Pozícia: %d\n"
+
+#: common/fbus-6110.c:3129
+#, c-format
+msgid "   MemoryType: %s\n"
+msgstr "   Typ pamäti: %s\n"
+
+#: common/fbus-6110.c:3130
+#, c-format
+msgid "   Number: %d\n"
+msgstr "   Èíslo: %d\n"
+
+#: common/fbus-6110.c:3140
+msgid "Message: Speed dial entry error\n"
+msgstr "Správa: Chyba polo¾ky skráteného volania\n"
+
+#: common/fbus-6110.c:3150
+msgid "Message: Speed dial entry set.\n"
+msgstr "Správa: Polo¾ka skráteného volania zapísaná.\n"
+
+#: common/fbus-6110.c:3160
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Správa: Chyba pri zápise polo¾ky skráteného volanie.\n"
+
+#: common/fbus-6110.c:3170
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Správa: Neznáma správa typu 0x03\n"
+
+#: common/fbus-6110.c:3186
+msgid "Message: Phone status received:\n"
+msgstr "Správa: Prijatý stav telefónu:\n"
+
+#: common/fbus-6110.c:3187
+msgid "   Mode: "
+msgstr "   Re¾im: "
+
+#: common/fbus-6110.c:3193
+msgid "registered within the network\n"
+msgstr "registrovaný v sieti\n"
+
+#: common/fbus-6110.c:3202
+msgid "call in progress\n"
+msgstr "prebieha volanie\n"
+
+#: common/fbus-6110.c:3208
+msgid "waiting for security code\n"
+msgstr "èakajúci na bezpeènostný kód\n"
+
+#: common/fbus-6110.c:3214
+msgid "powered off\n"
+msgstr "vypnutý\n"
+
+#: common/fbus-6110.c:3220 common/fbus-6110.c:3242
+msgid "unknown\n"
+msgstr "neznámy\n"
+
+#: common/fbus-6110.c:3224
+msgid "   Power source: "
+msgstr "   Napájania: "
+
+#: common/fbus-6110.c:3230
+msgid "AC/DC\n"
+msgstr "sie»\n"
+
+#: common/fbus-6110.c:3236
+msgid "battery\n"
+msgstr "batéria\n"
+
+#: common/fbus-6110.c:3246
+#, c-format
+msgid "   Battery Level: %d\n"
+msgstr "   Nabitie batérie: %d\n"
+
+#: common/fbus-6110.c:3247
+#, c-format
+msgid "   Signal strength: %d\n"
+msgstr "   Sila signálu: %d\n"
+
+#: common/fbus-6110.c:3259
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Správa: Neznáma správa typu 0x04\n"
+
+#: common/fbus-6110.c:3275
+msgid "Message: Profile feature change result.\n"
+msgstr "Správa: Výsledok zmeny profilu.\n"
+
+#: common/fbus-6110.c:3333
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr "Správa: Úvodné logo, privítanie a privítanie predajcu prijaté.\n"
+
+#: common/fbus-6110.c:3356
+msgid "Startup logo supported - "
+msgstr "Úvodné logo podporované - "
+
+#: common/fbus-6110.c:3359
+msgid "currently set\n"
+msgstr "nastavené\n"
+
+#: common/fbus-6110.c:3361 common/fbus-6110.c:3375 common/fbus-6110.c:3389
+msgid "currently empty\n"
+msgstr "prázdne\n"
+
+#: common/fbus-6110.c:3370
+msgid "Startup Text supported - "
+msgstr "Privítanie podporované - "
+
+#: common/fbus-6110.c:3373 common/fbus-6110.c:3387
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr "nastavené na \"%s\"\n"
+
+#: common/fbus-6110.c:3384
+msgid "Dealer welcome note supported - "
+msgstr "Privítanie predajcu podporované - "
+
+#: common/fbus-6110.c:3399
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Správa: Úvodné logo prijaté, ale nepo¾adované!\n"
+
+#: common/fbus-6110.c:3408
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+"Správa: Úvodné logo, privítanie alebo privítanie predajcu úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3434
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Správa: Logo operátora úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3443
+msgid "Message: Error setting operator logo!\n"
+msgstr "Správa: Chyba pri nastavení loga operátora!\n"
+
+#: common/fbus-6110.c:3453
+msgid "Message: Operator Logo received.\n"
+msgstr "Správa: Logo operátora prijaté.\n"
+
+#: common/fbus-6110.c:3470
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Správa: Logo operátora prijaté, ale nepo¾adované!\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Error getting operator logo!\n"
+msgstr "Správa: Chyba pri získaní loga operátora!\n"
+
+#: common/fbus-6110.c:3497
+msgid "Message: Security Code status received: "
+msgstr "Správa: Stav bezpeènostného kódu prijatý: "
+
+#: common/fbus-6110.c:3503 gnokii/gnokii.c:1476
+msgid "waiting for Security Code.\n"
+msgstr "èaká sa na bzpeènostný kód.\n"
+
+#: common/fbus-6110.c:3508 gnokii/gnokii.c:1481
+msgid "waiting for PIN.\n"
+msgstr "èaká sa na PIN.\n"
+
+#: common/fbus-6110.c:3513 gnokii/gnokii.c:1486
+msgid "waiting for PIN2.\n"
+msgstr "èaká sa na PIN2.\n"
+
+#: common/fbus-6110.c:3518 gnokii/gnokii.c:1491
+msgid "waiting for PUK.\n"
+msgstr "èaká sa na PUK.\n"
+
+#: common/fbus-6110.c:3523 gnokii/gnokii.c:1496
+msgid "waiting for PUK2.\n"
+msgstr "èaká sa na PUK2.\n"
+
+#: common/fbus-6110.c:3528 gnokii/gnokii.c:1501
+msgid "nothing to enter.\n"
+msgstr "netreba niè zada».\n"
+
+#: common/fbus-6110.c:3533 gnokii/gnokii.c:1506
+msgid "Unknown!\n"
+msgstr "Neznámy!\n"
+
+#: common/fbus-6110.c:3545
+msgid "Message: Security code accepted.\n"
+msgstr "Správa: Bezpeènostný kód akceptovaný.\n"
+
+#: common/fbus-6110.c:3555
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Správa: Bezpeènostný kód je chybný. Vy nie ste môj pán :-)\n"
+
+#: common/fbus-6110.c:3582
+msgid "Message: Network informations:\n"
+msgstr "Správa: Informácie o sieti:\n"
+
+#: common/fbus-6110.c:3584
+#, c-format
+msgid "   CellID: %s\n"
+msgstr "   ID bunky: %s\n"
+
+#: common/fbus-6110.c:3585
+#, c-format
+msgid "   LAC: %s\n"
+msgstr "   LAC: %s\n"
+
+#: common/fbus-6110.c:3586
+#, c-format
+msgid "   Network code: %s\n"
+msgstr "   Kód siete: %s\n"
+
+#: common/fbus-6110.c:3587
+#, c-format
+msgid "   Network name: %s (%s)\n"
+msgstr "   Názov siete: %s (%s)\n"
+
+#: common/fbus-6110.c:3590
+msgid "   Status: "
+msgstr "   Stav: "
+
+#: common/fbus-6110.c:3593
+msgid "home network selected"
+msgstr "zvolená domáca sie»"
+
+#: common/fbus-6110.c:3594
+msgid "roaming network"
+msgstr "roamingová sie»"
+
+#: common/fbus-6110.c:3595
+msgid "requesting network"
+msgstr "¾iados» o sie»"
+
+#: common/fbus-6110.c:3596
+msgid "not registered in the network"
+msgstr "neregistrovaný v sieti"
+
+#: common/fbus-6110.c:3597
+msgid "unknown"
+msgstr "neznámy"
+
+#: common/fbus-6110.c:3602
+#, c-format
+msgid "   Network selection: %s\n"
+msgstr "   Výber siete: %s\n"
+
+#: common/fbus-6110.c:3602
+msgid "manual"
+msgstr "manuálny"
+
+#: common/fbus-6110.c:3602
+msgid "automatic"
+msgstr "automatický"
+
+#: common/fbus-6110.c:3612
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Správa: Neznáma správa typu 0x0a\n"
+
+#: common/fbus-6110.c:3650
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Neznáma správa typu 0x0d\n"
+
+#: common/fbus-6110.c:3669
+msgid "Message: Date and time set correctly\n"
+msgstr "Správa: Dátum a èas úspe¹ne nastavené\n"
+
+#: common/fbus-6110.c:3679 common/fbus-6110.c:3725
+msgid "Message: Date and time set error\n"
+msgstr "Správa: Chyba pri nastavení dátumu a èasu\n"
+
+#: common/fbus-6110.c:3699
+msgid "Message: Date and time\n"
+msgstr "Správa: Dátum a èas\n"
+
+#: common/fbus-6110.c:3700 common/fbus-6110.c:3853 gnokii/gnokii.c:1839
+#, c-format
+msgid "   Time: %02d:%02d:%02d\n"
+msgstr "   Èas:   %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3701
+#, c-format
+msgid "   Date: %4d/%02d/%02d\n"
+msgstr "   Dátum: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3715
+msgid "Message: Alarm set correctly\n"
+msgstr "Správa: Budík úspe¹ne nastavený\n"
+
+#: common/fbus-6110.c:3737
+msgid "Message: Alarm\n"
+msgstr "Správa: Budík\n"
+
+#: common/fbus-6110.c:3738
+#, c-format
+msgid "   Alarm: %02d:%02d\n"
+msgstr "   Budík: %02d:%02d\n"
+
+#: common/fbus-6110.c:3739
+#, c-format
+msgid "   Alarm is %s\n"
+msgstr "   Budík je %s\n"
+
+#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579
+#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582
+#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585
+msgid "on"
+msgstr "zapnutý"
+
+#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579
+#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582
+#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585
+msgid "off"
+msgstr "vypnutý"
+
+#: common/fbus-6110.c:3755
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Správa: Neznáma správa typu 0x11\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Správa: Polo¾ka kalendára úspe¹ne zapísaná!\n"
+
+#: common/fbus-6110.c:3788 common/fbus-6110.c:3798
+msgid "Message: Calendar note write failed!\n"
+msgstr "Správa: Zápis polo¾ky kalendára zlyhal!\n"
+
+#: common/fbus-6110.c:3807
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Neznáma správa typu 0x13 a subtypu 0x65\n"
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar note received.\n"
+msgstr "Správa: Polo¾ka kalendára prijatá.\n"
+
+#: common/fbus-6110.c:3849 gnokii/gnokii.c:1835
+#, c-format
+msgid "   Date: %d-%02d-%02d\n"
+msgstr "   Dátum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3860 gnokii/gnokii.c:1844
+#, c-format
+msgid "   Alarm date: %d-%02d-%02d\n"
+msgstr "   Dátum upozornenia: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3864 gnokii/gnokii.c:1848
+#, c-format
+msgid "   Alarm time: %02d:%02d:%02d\n"
+msgstr "   Èas upozornenia: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3869
+#, c-format
+msgid "   Type: %d\n"
+msgstr "   Typ: %d\n"
+
+#: common/fbus-6110.c:3870 gnokii/gnokii.c:1853
+#, c-format
+msgid "   Text: %s\n"
+msgstr "   Text: %s\n"
+
+#: common/fbus-6110.c:3873 gnokii/gnokii.c:1856
+#, c-format
+msgid "   Phone: %s\n"
+msgstr "   Telefón: %s\n"
+
+#: common/fbus-6110.c:3883
+msgid "Message: Calendar note not available\n"
+msgstr "Správa: Polo¾ka kalendára nie je k dispozícii\n"
+
+#: common/fbus-6110.c:3893
+msgid "Message: Calendar note error\n"
+msgstr "Správa: Chyba polo¾ky kalendára\n"
+
+#: common/fbus-6110.c:3915
+msgid "Message: Calendar note deleted\n"
+msgstr "Správa: Polo¾ka kalendára vymazaná\n"
+
+#: common/fbus-6110.c:3926
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Správa: Polo¾ka kalendára nemô¾e by» vymazaná\n"
+
+#: common/fbus-6110.c:3936
+msgid "Message: Calendar note deleting error\n"
+msgstr "Správa: Chyba pri mazaní polo¾ky kalendára\n"
+
+#: common/fbus-6110.c:3952
+msgid "Message: Calendar Alarm active\n"
+msgstr "Správa: Upozornenie kalendára aktívne\n"
+
+#: common/fbus-6110.c:3953
+#, c-format
+msgid "   Item number: %d\n"
+msgstr "   Èíslo polo¾ky: %d\n"
+
+#: common/fbus-6110.c:3961
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Správa: Neznáma správa typu 0x13\n"
+
+#: common/fbus-6110.c:4024
+msgid "Concatenated message!!!\n"
+msgstr "Zlo¾ená správa!!!\n"
+
+#: common/fbus-6110.c:4045
+#, c-format
+msgid "Number: %d\n"
+msgstr "Èíslo: %d\n"
+
+#: common/fbus-6110.c:4050
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Správa: Odchádzajúca správa\n"
+
+#: common/fbus-6110.c:4053
+msgid "Sent\n"
+msgstr "Odoslaná\n"
+
+#: common/fbus-6110.c:4055
+msgid "Not sent\n"
+msgstr "Neodoslaná\n"
+
+#: common/fbus-6110.c:4059
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Správa: Príjem SMS\n"
+
+#: common/fbus-6110.c:4062
+msgid "Delivery Report\n"
+msgstr "Potvrdenie o doruèení\n"
+
+#: common/fbus-6110.c:4064
+msgid "Unknown type\n"
+msgstr "Neznámy typ\n"
+
+#: common/fbus-6110.c:4067
+msgid "Read\n"
+msgstr "Preèítaná\n"
+
+#: common/fbus-6110.c:4069
+msgid "Not read\n"
+msgstr "Nepreèítaná\n"
+
+#: common/fbus-6110.c:4071
+#, c-format
+msgid "   Date: %s "
+msgstr "   Dátum: %s "
+
+#: common/fbus-6110.c:4079 common/fbus-6110.c:4095 gnokii/gnokii.c:1210
+#: gnokii/gnokii.c:1223 gnokii/gnokii.c:1250
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:4086
+#, c-format
+msgid "   SMSC response date: %s "
+msgstr "   Dátum odpovede SMSC: %s "
+
+#: common/fbus-6110.c:4170
+msgid "Delivered"
+msgstr "Doruèená"
+
+#: common/fbus-6110.c:4175
+msgid "SM received by the SME"
+msgstr "Správa prijatá SME"
+
+#: common/fbus-6110.c:4178
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+"SC poslal správu SME, ale SC nie je schopné potvrdi» doruèenie"
+
+#: common/fbus-6110.c:4181
+msgid "SM replaced by the SC"
+msgstr "Správa prepísaná SC"
+
+#: common/fbus-6110.c:4189
+msgid "Failed"
+msgstr "Zlyhala"
+
+#: common/fbus-6110.c:4196
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "Doèasná chyba, SC sa nebude viac pokú¹a» o prenos\n"
+
+#: common/fbus-6110.c:4201 common/fbus-6110.c:4294
+msgid "Congestion"
+msgstr "Pre»a¾enie"
+
+#: common/fbus-6110.c:4205 common/fbus-6110.c:4298
+msgid "SME busy"
+msgstr "SME obsadené"
+
+#: common/fbus-6110.c:4209 common/fbus-6110.c:4302
+msgid "No response from SME"
+msgstr "SME neodpovedal"
+
+#: common/fbus-6110.c:4213 common/fbus-6110.c:4306
+msgid "Service rejected"
+msgstr "Slu¾ba odmietnutá"
+
+#: common/fbus-6110.c:4217 common/fbus-6110.c:4253 common/fbus-6110.c:4310
+msgid "Quality of service not aviable"
+msgstr "Kvalita slu¾ieb nedostupná"
+
+#: common/fbus-6110.c:4221 common/fbus-6110.c:4314
+msgid "Error in SME"
+msgstr "Chyba v SME"
+
+#: common/fbus-6110.c:4225 common/fbus-6110.c:4277 common/fbus-6110.c:4318
+#: common/fbus-6110.c:4328
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr "Rezervované/SC ¹pecifické: %x"
+
+#: common/fbus-6110.c:4232
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "Trvalá chyba, SC sa nebude viac pokú¹a» o prenos\n"
+
+#: common/fbus-6110.c:4237
+msgid "Remote procedure error"
+msgstr "Chyba procedúry protistrany"
+
+#: common/fbus-6110.c:4241
+msgid "Incompatibile destination"
+msgstr "Nekompatibilný príjemca"
+
+#: common/fbus-6110.c:4245
+msgid "Connection rejected by SME"
+msgstr "Spojenie odmietnuté SME"
+
+#: common/fbus-6110.c:4249
+msgid "Not obtainable"
+msgstr "Nedá sa získa»"
+
+#: common/fbus-6110.c:4257
+msgid "No internetworking available"
+msgstr "Internetworking nedostupný"
+
+#: common/fbus-6110.c:4261
+msgid "SM Validity Period Expired"
+msgstr "Platnos» správy vypr¹ala"
+
+#: common/fbus-6110.c:4265
+msgid "SM deleted by originating SME"
+msgstr "Správa vymazaná odosielajúcim SME"
+
+#: common/fbus-6110.c:4269
+msgid "SM Deleted by SC Administration"
+msgstr "Správa zmazaná správcom SC"
+
+#: common/fbus-6110.c:4273
+msgid "SM does not exist"
+msgstr "SPráva neexistuje"
+
+#: common/fbus-6110.c:4286
+msgid "Pending"
+msgstr "Èakajúca"
+
+#: common/fbus-6110.c:4290
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "Doèasná chyba, SC sa stále pokú¹a správu doruèi»\n"
+
+#: common/fbus-6110.c:4356
+msgid "Message: SMS reading failed.\n"
+msgstr "Správa: Èítanie SMS zlyhalo.\n"
+
+#: common/fbus-6110.c:4364
+msgid "   Invalid location!\n"
+msgstr "   Chybná pozícia!\n"
+
+#: common/fbus-6110.c:4374
+msgid "   Empty SMS location.\n"
+msgstr "   Prázdna pozícia.\n"
+
+#: common/fbus-6110.c:4387
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Správa: SMS úspe¹ne zmazaná.\n"
+
+#: common/fbus-6110.c:4397
+msgid "Message: SMS Status Received\n"
+msgstr "Správa: Príjem stavu SMS\n"
+
+#: common/fbus-6110.c:4398
+#, c-format
+msgid "   The number of messages: %d\n"
+msgstr "   Poèet správ: %d\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid "   Unread messages: %d\n"
+msgstr "   Nepreèítaných správ: %d\n"
+
+#: common/fbus-6110.c:4411
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Správa: Chyba SMS stavu, pravdepodobne nebol zadaný PIN\n"
+
+#: common/fbus-6110.c:4442
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Správa: Monitor siete úspe¹ne zapnutý.\n"
+
+#: common/fbus-6110.c:4452
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Správa: Menu sie»ového monitora %d prijaté:\n"
+
+#: common/fbus-6110.c:4468
+msgid "Unknown message of type 0x40.\n"
+msgstr "Neznáma správa typu 0x40.\n"
+
+#: common/fbus-6110.c:4490
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Správa: Identifikácia mobilného telefónu prijatá:\n"
+
+#: common/fbus-6110.c:4491
+#, c-format
+msgid "   IMEI: %s\n"
+msgstr "   IMEI: %s\n"
+
+#: common/fbus-6110.c:4493
+#, c-format
+msgid "   Model: %s\n"
+msgstr "   Model: %s\n"
+
+#: common/fbus-6110.c:4495
+#, c-format
+msgid "   Production Code: %s\n"
+msgstr "   Výrobné èíslo: %s\n"
+
+#: common/fbus-6110.c:4497
+#, c-format
+msgid "   HW: %s\n"
+msgstr "   HW: %s\n"
+
+#: common/fbus-6110.c:4499
+#, c-format
+msgid "   Firmware: %s\n"
+msgstr "   Firmware: %s\n"
+
+#: common/fbus-6110.c:4505
+#, c-format
+msgid "   Magic bytes: %02x %02x %02x %02x\n"
+msgstr "   Magické bajty: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4525
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Prijaté potvrdenie typu %02x, sekv.: %2x]\n"
+
+#: common/fbus-6110.c:4543
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Správa: Telefón sa zapína - sekv. 1.\n"
+
+#: common/fbus-6110.c:4567
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Správa: Telefón sa zapína - sekv. 2.\n"
+
+#: common/fbus-6110.c:4583
+msgid "Message: Unknown message.\n"
+msgstr "Správa: Neznáma správa.\n"
+
+#: common/fbus-6110.c:4681
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr "Preru¹ená viacrámcová správa - ignorovaná !!!\n"
+
+#: common/fbus-6110.c:4682
+msgid "Please report it ...\n"
+msgstr "Prosím ohláste to...\n"
+
+#: common/fbus-6110.c:4749
+msgid "Bad checksum!\n"
+msgstr "Chybný kontrolný súèet!\n"
+
+#: common/fbus-6110.c:4811 xgnokii/xgnokii.c:1690
+msgid "Phone"
+msgstr "Telefón"
+
+#: common/fbus-6110.c:4814
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4832
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Cieµ správy: %s\n"
+
+#: common/fbus-6110.c:4833
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Zdroj správy: %s\n"
+
+#: common/fbus-6110.c:4835
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Typ správy: %02x\n"
+
+#: common/fbus-6110.c:4837
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Neznáma správa: %02x\n"
+
+#: common/fbus-6110.c:4838
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Då¾ka správy: %02x\n"
+"Telefón: "
+
+#: common/fbus-6110.c:4909
+msgid "PC: "
+msgstr "PC:"
+
+#: common/fbus-6110.c:4983
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Posiela sa potvrdenie typu %02x, sekv.: %x]\n"
+
+#: common/mbus-6160.c:763
+msgid "Couldn't open MB61 device: "
+msgstr "Nie je mo¾né otvori» zariadenie MB61: "
+
+#: common/mbus-640.c:792
+msgid "Phone: "
+msgstr "Telefón: "
+
+#: common/mbus-640.c:822 common/mbus-640.c:922
+msgid "PC   : "
+msgstr "PC:      "
+
+#: common/mbus-640.c:832 common/mbus-640.c:935
+msgid "Write error!\n"
+msgstr "Chyba zápisu!\n"
+
+#: common/mbus-640.c:859
+msgid "Setting MBUS communication...\n"
+msgstr "Nastavenie MBUS komunikácie...\n"
+
+#: common/rlp-common.c:669
+msgid "Unknown!!! "
+msgstr "Neznámy!!! "
+
+#: common/rlp-common.c:734
+msgid "BAD"
+msgstr "CHYBA"
+
+#: common/rlp-common.c:856
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "Kontrolný súèet rámca je chybný. Ignoruje sa...\n"
+
+#: common/rlp-common.c:969
+msgid "Send_TXU()\n"
+msgstr "Send_TXU()\n"
+
+#: common/rlp-common.c:970
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr "XID_R_State=%d\n"
+
+#: common/rlp-common.c:1334
+msgid "RLP state 0.\n"
+msgstr "RLP stav 0.\n"
+
+#: common/rlp-common.c:1371
+msgid "RLP state 1.\n"
+msgstr "RLP stav 1.\n"
+
+#: common/rlp-common.c:1436
+msgid "RLP state 2.\n"
+msgstr "RLP stae 2.\n"
+
+#: common/rlp-common.c:1470
+msgid "UA received in RLP state 2.\n"
+msgstr "UA prijatý v RLP stave 2.\n"
+
+#: common/rlp-common.c:1527
+msgid "RLP state 3.\n"
+msgstr "RLP stav 3.\n"
+
+#: common/rlp-common.c:1585
+msgid "RLP state 4.\n"
+msgstr "RLP stav 4.\n"
+
+#: common/rlp-common.c:1695
+msgid "RLP state 5.\n"
+msgstr "RLP stav 5.\n"
+
+#: common/rlp-common.c:1754
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr "RLP stav 6 - zatiaµ neimplementovaný!\n"
+
+#: common/rlp-common.c:1784
+msgid "RLP state 7.\n"
+msgstr "RLP stav 7.\n"
+
+#: common/rlp-common.c:1826
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr "DEBUG: Neznámy RLP stav!\n"
+
+#: gnokii/gnokii.c:168
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII verzia %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Kompilácia: %s %s pre %s na %s \n"
+
+#: gnokii/gnokii.c:182
+msgid ""
+"   usage: gnokii [--help|--monitor|--version]\n"
+"          gnokii --getmemory memory_type start end\n"
+"          gnokii --writephonebook\n"
+"          gnokii --getspeeddial number\n"
+"          gnokii --setspeeddial number memory_type location\n"
+"          gnokii --getsms memory_type start end\n"
+"          gnokii --deletesms memory_type start end\n"
+"          gnokii --sendsms destination [--smsc message_center_number |\n"
+"                 --smscno message_center_index] [-r] [-C n] [-v n]\n"
+"                 [--long n]\n"
+"          gnokii --getsmsc message_center_number\n"
+"          gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+"          gnokii --getdatetime\n"
+"          gnokii --setalarm HH MM\n"
+"          gnokii --getalarm\n"
+"          gnokii --dialvoice number\n"
+"          gnokii --getcalendarnote index [-v]\n"
+"          gnokii --writecalendarnote\n"
+"          gnokii --deletecalendarnote index\n"
+"          gnokii --getdisplaystatus\n"
+"          gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"          gnokii --identify\n"
+"          gnokii --senddtmf string\n"
+"          gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+"          gnokii --setlogo logofile [network code]\n"
+"          gnokii --setlogo logofile [caller group number] [group name]\n"
+"          gnokii --setlogo text [startup text]\n"
+"          gnokii --setlogo dealer [dealer startup text]\n"
+"          gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+"          gnokii --sendringtone destionation rtttlfile\n"
+"          gnokii --reset [soft|hard]\n"
+"          gnokii --getprofile [number]\n"
+msgstr ""
+"   Pou¾itie: gnokii [--help|--monitor|--version]\n"
+"             gnokii --getmemory typ_pamäti zaèiatok koniec\n"
+"             gnokii --writephonebook\n"
+"             gnokii --getspeeddial èíslo\n"
+"             gnokii --setspeeddial èíslo typ_pamäti pozícia\n"
+"             gnokii --getsms typ_pamäti zaèiatok koniec\n"
+"             gnokii --deletesms typ_pamäti zaèiatok koniec\n"
+"             gnokii --sendsms cieµ [--smsc èíslo_centra_správ |\n"
+"                    --smscno index_centra_správ] [-r] [-C n] [-v n]\n"
+"                    [--long n]\n"
+"             gnokii --getsmsc èíslo_centra_správ\n"
+"             gnokii --setdatetime [RRRR [MM [DD [HH [MM]]]]]\n"
+"             gnokii --getdatetime\n"
+"             gnokii --setalarm HH MM\n"
+"             gnokii --getalarm\n"
+"             gnokii --dialvoice èíslo\n"
+"             gnokii --getcalendarnote index [-v]\n"
+"             gnokii --writecalendarnote\n"
+"             gnokii --deletecalendarnote index\n"
+"             gnokii --getdisplaystatus\n"
+"             gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+"             gnokii --identify\n"
+"             gnokii --senddtmf string\n"
+"             gnokii --sendlogo {caller|op} cieµ logo_súbor [kód_siete]\n"
+"             gnokii --setlogo logo_súbor [kód_siete]\n"
+"             gnokii --setlogo logo_súbor [èíslo_skupiny] [názov_skupiny]\n"
+"             gnokii --setlogo text [úvodný_text]\n"
+"             gnokii --setlogo dealer [úvodný_text_predajcu]\n"
+"             gnokii --getlogo logofile {caller|op|startup} [èíslo_skupiny]\n"
+"             gnokii --sendringtone cieµ rtttl_súbor\n"
+"             gnokii --reset [soft|hard]\n"
+"             gnokii --getprofile [èíslo]\n"
+
+#: gnokii/gnokii.c:218
+msgid ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+msgstr ""
+"          gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+"          gnokii --getsecuritycodestatus\n"
+
+#: gnokii/gnokii.c:223
+msgid ""
+"\n"
+"          --help            display usage information.\n"
+"\n"
+"          --monitor         continually updates phone status to stderr.\n"
+"\n"
+"          --version         displays version and copyright information.\n"
+"\n"
+"          --getmemory       reads specificed memory location from phone.\n"
+"                            Valid memory types are:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  reads data from stdin and writes to phonebook.\n"
+"                            Uses the same format as provided by the output "
+"of\n"
+"                            the getphonebook command.\n"
+"\n"
+"          --getspeeddial    reads speed dial from the specified location.\n"
+"\n"
+"          --setspeeddial    specify speed dial.\n"
+"\n"
+"          --getsms          gets SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"                            Entries are dumped to stdout.\n"
+"\n"
+"          --deletesms       deletes SMS messages from specified memory type\n"
+"                            starting at entry [start] and ending at [end].\n"
+"\n"
+"          --sendsms         sends an SMS message to [destination] via\n"
+"                            [message_center_number] or SMSC number taken "
+"from\n"
+"                            phone memory from address "
+"[message_center_index].\n"
+"                            If this argument is ommited SMSC number is "
+"taken\n"
+"                            from phone memory from location 1. Message text\n"
+"                            is taken from stdin.  This function has had\n"
+"                            limited testing and may not work at all on your\n"
+"                            network. Meaning of other optional parameters:\n"
+"                             [-r] - request for delivery report\n"
+"                             [-C n] - Class Message n, where n can be 0..3\n"
+"                             [-v n] - validity in minutes\n"
+"                             [--long n] - send no more then n characters,\n"
+"                                          default is 160\n"
+"\n"
+"          --getsmsc         show the SMSC number from location\n"
+"                            [message_center_number].\n"
+"\n"
+"          --setdatetime     set the date and the time of the phone.\n"
+"\n"
+"          --getdatetime     shows current date and time in the phone.\n"
+"\n"
+"          --setalarm        set the alarm of the phone.\n"
+"\n"
+"          --getalarm        shows current alarm.\n"
+"\n"
+"          --dialvoice       initiate voice call.\n"
+"\n"
+"          --getcalendarnote get the note with number index from calendar.\n"
+"                             [-v] - output in vCalendar 1.0 format\n"
+"\n"
+"          --writecalendarnote write the note to calendar.\n"
+"\n"
+"          --deletecalendarnote  delete the note with number [index]\n"
+"                                from calendar.\n"
+"\n"
+"          --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+"          --netmonitor      setting/querying netmonitor mode.\n"
+"\n"
+"          --identify        get IMEI, model and revision\n"
+"\n"
+"          --senddtmf        send DTMF sequence\n"
+"\n"
+"          --sendlogo        send the logofile to destination as operator\n"
+"                            or CLI logo\n"
+"\n"
+"          --setlogo         set caller, startup or operator logo\n"
+"\n"
+"          --getlogo         get caller, startup or operator logo\n"
+"\n"
+"          --sendringtone    send the rtttlfile to destination as ringtone\n"
+"\n"
+"          --reset [soft|hard] resets the phone.\n"
+"\n"
+"          --getprofile [number] show settings for selected(all) profile(s)\n"
+"\n"
+msgstr ""
+"\n"
+"          --help            zobrazi» informáciu o pou¾ití.\n"
+"\n"
+"          --monitor         priebe¾ne vypisova» stav telefónu na ¹tandardný\n"
+"                            chybový výstup.\n"
+"\n"
+"          --version         zobrazi» verziu a informáciu o copyrighte.\n"
+"\n"
+"          --getmemory       preèíta» zadanú pamä»ovú pozíciu z telefónu.\n"
+"                            Platné typy pamäti sú:\n"
+"                            ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+"          --writephonebook  preèíta» údaje zo ¹tandardného vstupu a zapísa».\n"
+"                            ich do telefónneho zoznamu. Pou¾itý formát je\n"
+"                            zhodný s výstupným formátom príkazu getphonebook.\n"
+"\n"
+"          --getspeeddial    preèíta» definíciu skráteného volania zo zadanej\n"
+"                            pozície.\n"
+"\n"
+"          --setspeeddial    zadefinova» zrýchlené volanie.\n"
+"\n"
+"          --getsms          preèíta» krátke správy zo zadaného typu pamäti\n"
+"                            od pozície [zaèiatok] po [koniec]. Záznamy sa\n"
+"                            zapí¹u na ¹tandardný výstup.\n"
+"\n"
+"          --deletesms       zmaza» krátke správy zo zadaného typu pamäti\n"
+"                            od pozície [zaèiatok] po [koniec].\n"
+"\n"
+"          --sendsms         posla» krátku správu pre [cieµ] prostredníctvom\n"
+"                            [èísla_centra_správ] alebo èísla SMSC na pozícii\n"
+"                            [index_centa_správ] v pamäti telefónu.\n"
+"                            Pokiaµ je tento argument vynechaný, èíslo sa\n"
+"                            preèíta z pozície 1 pamäti telefónu. Text správy\n"
+"                            sa preèíta zo ¹tandardného vstupu. Táto funkcia\n"
+"                            bola len èiastoène testovaná a vo va¹ej sieti\n"
+"                            nemusí fungova». Význam ostatných voliteµných\n"
+"                            parametrov je::\n"
+"                             [-r]       - vy¾iada» potvrdenie o doruèení\n"
+"                             [-C n]     - trieda správy n, kde n je 0 a¾ 3\n"
+"                             [-v n]     - èas platnosti v minútach\n"
+"                             [--long n] - neposiela» viac ako n znakov,\n"
+"                                          prednastavená hodnota je 160\n"
+"\n"
+"          --getsmsc         ukáza» èíslo centra správ na pozícii\n"
+"                            [èíslo_centra_správ].\n"
+"\n"
+"          --setdatetime     nastavi» dátum a èas v telefóne.\n"
+"\n"
+"          --getdatetime     zobrazi» dátum a èas telefónu.\n"
+"\n"
+"          --setalarm        nastavi» budík v telefóne.\n"
+"\n"
+"          --getalarm        zobrazi» aktuálny budík.\n"
+"\n"
+"          --dialvoice       zaèa» hlasové volanie.\n"
+"\n"
+"          --getcalendarnote zobrazi» poznámku èíslo [index] z kalendára.\n"
+"                             [-v] - výstup vo formáte vCalendar 1.0\n"
+"\n"
+"          --writecalendarnote zapísa» poznámku do kalendára.\n"
+"\n"
+"          --deletecalendarnote  vymaza» poznámku èíslo [index]\n"
+"                                z kalendára.\n"
+"\n"
+"          --getdisplaystatus ukáza», ktoré ikony sú zobrazené.\n"
+"\n"
+"          --netmonitor      nastavi»/zisti» re¾im monitora siete.\n"
+"\n"
+"          --identify        zobrazi» IMEI, model a revíziu\n"
+"\n"
+"          --senddtmf        posla» DTMF sekvenciu\n"
+"\n"
+"          --sendlogo        posla» logo_súbor cieµu ako logo operátora\n"
+"                            alebo skupiny\n"
+"\n"
+"          --setlogo         nastavi» úvodné logo, logo volajúceho alebo\n"
+"                            logo operátora\n"
+"\n"
+"          --getlogo         získa» úvodné logo, logo volajúceho alebo\n"
+"                            logo operátora\n"
+"\n"
+"          --sendringtone    posla» rtttl_súbor cieµu ako vyzváòanie\n"
+"\n"
+"          --reset [soft|hard] resetova» telefón.\n"
+"\n"
+"          --getprofile [number] zobrazi» nastavenia zvoleného (v¹etkých)\n"
+"                                profilov\n"
+"\n"
+
+#: gnokii/gnokii.c:309
+msgid ""
+"          --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+"          --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+"          --entersecuritycode vypýta» kód a posla» ho telefónu\n"
+"\n"
+"          --getsecuritycodestatus zobrazi», èi je po¾adovaný bezpeènostný kód\n"
+"\n"
+
+#: gnokii/gnokii.c:336 gnokii/gnokii.c:2721 gnokiid/virtmodem.c:262
+#: xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS inicializácia zlyhala (neznámy model?). Koniec.\n"
+
+#: gnokii/gnokii.c:347
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec.\n"
+
+#: gnokii/gnokii.c:605
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Pou¾ite '%s --help' na získanie informácie o pou¾ití.\n"
+
+#: gnokii/gnokii.c:788
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Neznáma voµba: %d\n"
+
+#: gnokii/gnokii.c:798
+msgid "Wrong number of arguments\n"
+msgstr "Nesprávny poèet argumentov\n"
+
+#: gnokii/gnokii.c:869 gnokii/gnokii.c:927
+msgid "Input too long!\n"
+msgstr "Vstup príli¹ dlhý!\n"
+
+#: gnokii/gnokii.c:922
+msgid "Couldn't read from stdin!\n"
+msgstr "Nie je mo¾né èíta» zo ¹tandardného vstupu!\n"
+
+#: gnokii/gnokii.c:988 gnokii/gnokii.c:1625 gnokii/gnokii.c:2779
+msgid "Send succeeded!\n"
+msgstr "Poslanie bolo úspe¹né!\n"
+
+#: gnokii/gnokii.c:990 gnokii/gnokii.c:1627 gnokii/gnokii.c:2781
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Poslanie SMS zlyhalo (chyba=%d)\n"
+
+#: gnokii/gnokii.c:1014
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%. Èíslo SMS centra (%s) je %s\n"
+
+#: gnokii/gnokii.c:1016
+msgid "Messages sent as "
+msgstr "Správy poslané ako "
+
+#: gnokii/gnokii.c:1038 xgnokii/xgnokii.c:542
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1042 xgnokii/xgnokii.c:546
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1051
+msgid "Message validity is "
+msgstr "Platnos» správy je "
+
+#: gnokii/gnokii.c:1087
+msgid "SMS center can not be found :-(\n"
+msgstr "SMS centrum nie je mo¾né nájs» :-(\n"
+
+#: gnokii/gnokii.c:1156 gnokii/gnokii.c:1363 gnokii/gnokii.c:2334
+#: gnokii/gnokii.c:2504
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Neznámy typ pamäti %s!\n"
+
+#: gnokii/gnokii.c:1183
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Správa vo výstupnej schránke "
+
+#: gnokii/gnokii.c:1186
+msgid "(sent)\n"
+msgstr "(odoslaná)\n"
+
+#: gnokii/gnokii.c:1188
+msgid "(not sent)\n"
+msgstr "(neodoslaná)\n"
+
+#: gnokii/gnokii.c:1190 gnokii/gnokii.c:1229
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1196
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Potvrdenie o doruèení"
+
+#: gnokii/gnokii.c:1198 gnokii/gnokii.c:1238
+msgid "(read)\n"
+msgstr "(preèítaná)\n"
+
+#: gnokii/gnokii.c:1200 gnokii/gnokii.c:1240
+msgid "(not read)\n"
+msgstr "(nepreèítaná)\n"
+
+#: gnokii/gnokii.c:1202
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum a èas odoslania:  %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1208 gnokii/gnokii.c:1221 gnokii/gnokii.c:1248
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1215
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum a èas odpovede: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1228
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Príjemca: %s Centrum správ: %s\n"
+
+#: gnokii/gnokii.c:1235
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Správa vo vstupnej schránke "
+
+#: gnokii/gnokii.c:1242
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum/èas: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1254
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Odosielateµ: %s Centrum správ: %s\n"
+
+#: gnokii/gnokii.c:1260
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Zre»azenie (%d/%d)\n"
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1275 gnokii/gnokii.c:1386 gnokii/gnokii.c:1452
+#: gnokii/gnokii.c:2252 gnokii/gnokii.c:2361
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funkcia nie je pre odel %s implementovaná!\n"
+
+#: gnokii/gnokii.c:1281
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Nesprávna pozícia %s %d\n"
+
+#: gnokii/gnokii.c:1287
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS pozícia %s %d je prázdna.\n"
+
+#: gnokii/gnokii.c:1293
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d zlyhalo!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1383
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "Zmazaná SMS %s %d\n"
+
+#: gnokii/gnokii.c:1390
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"DeleteSMS %s %d zlyhalo!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1441
+msgid "Enter your code: "
+msgstr "Zadajte vá¹ kód: "
+
+#: gnokii/gnokii.c:1448
+msgid "Error: invalid code.\n"
+msgstr "Chyba: Nesprávny kód.\n"
+
+#: gnokii/gnokii.c:1450
+msgid "Code ok.\n"
+msgstr "Kód v poriadku.\n"
+
+#: gnokii/gnokii.c:1454
+msgid "Other error.\n"
+msgstr "Iná chyba.\n"
+
+#: gnokii/gnokii.c:1470
+msgid "Security code status: "
+msgstr "Stav bezpeènostného kódu: "
+
+#: gnokii/gnokii.c:1572
+msgid "Sending operator logo.\n"
+msgstr "Posielanie loga operátora.\n"
+
+#: gnokii/gnokii.c:1576
+msgid "Sending caller line identification logo.\n"
+msgstr "Posielanie loga volajúceho.\n"
+
+#: gnokii/gnokii.c:1578
+msgid "You should specify what kind of logo to send!\n"
+msgstr "Je potrebné zada» druh posielaného loga!\n"
+
+#: gnokii/gnokii.c:1597
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Kód operátora: %s\n"
+
+#: gnokii/gnokii.c:1675
+msgid "Getting Logo.\n"
+msgstr "Získanie loga.\n"
+
+#: gnokii/gnokii.c:1728
+msgid "Logo file error.\n"
+msgstr "Chyba v súbore s logom.\n"
+
+#: gnokii/gnokii.c:1734
+msgid "Sending Logo.\n"
+msgstr "Posielanie loga.\n"
+
+#: gnokii/gnokii.c:1776
+msgid "BEGIN:VCALENDAR\n"
+msgstr "BEGIN:VCALENDAR\n"
+
+#: gnokii/gnokii.c:1777
+msgid "VERSION:1.0\n"
+msgstr "VERSION:1.0\n"
+
+#: gnokii/gnokii.c:1778
+msgid "BEGIN:VEVENT\n"
+msgstr "BEGIN:VEVENT\n"
+
+#: gnokii/gnokii.c:1779
+msgid "CATEGORIES:"
+msgstr "CATEGORIES:"
+
+#: gnokii/gnokii.c:1782
+msgid "MISCELLANEOUS\n"
+msgstr "MISCELLANEOUS\n"
+
+#: gnokii/gnokii.c:1785
+msgid "PHONE CALL\n"
+msgstr "PHONE CALL\n"
+
+#: gnokii/gnokii.c:1788
+msgid "MEETING\n"
+msgstr "MEETING\n"
+
+#: gnokii/gnokii.c:1791
+msgid "SPECIAL OCCASION\n"
+msgstr "SPECIAL OCCASION\n"
+
+#: gnokii/gnokii.c:1794
+msgid "UNKNOWN\n"
+msgstr "UNKNOWN\n"
+
+#: gnokii/gnokii.c:1797
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr "SUMMARY:%s\n"
+
+#: gnokii/gnokii.c:1798
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+
+#: gnokii/gnokii.c:1802
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+
+#: gnokii/gnokii.c:1806
+msgid "END:VEVENT\n"
+msgstr "END:VEVENT\n"
+
+#: gnokii/gnokii.c:1807
+msgid "END:VCALENDAR\n"
+msgstr "END:VCALENDAR\n"
+
+#: gnokii/gnokii.c:1810
+msgid "   Type of the note: "
+msgstr "   Typ poznámky: "
+
+#: gnokii/gnokii.c:1815
+msgid "Reminder\n"
+msgstr "Pripomenutie\n"
+
+#: gnokii/gnokii.c:1819
+msgid "Call\n"
+msgstr "Telefonát\n"
+
+#: gnokii/gnokii.c:1823
+msgid "Meeting\n"
+msgstr "Stretnutie\n"
+
+#: gnokii/gnokii.c:1827
+msgid "Birthday\n"
+msgstr "Narodeniny\n"
+
+#: gnokii/gnokii.c:1831
+msgid "Unknown\n"
+msgstr "Neznámy\n"
+
+#: gnokii/gnokii.c:1860
+msgid "The calendar note can not be read\n"
+msgstr "Polo¾ku kalendára nie je mo¾né preèíta»\n"
+
+#: gnokii/gnokii.c:1899 gnokii/gnokii.c:2515
+msgid "Succesfully written!\n"
+msgstr "Zápis bol úspe¹ný!\n"
+
+#: gnokii/gnokii.c:1919
+msgid "   Calendar note deleted.\n"
+msgstr "   Polo¾ka kalendára vymazaná.\n"
+
+#: gnokii/gnokii.c:1922
+msgid "The calendar note can not be deleted\n"
+msgstr "Polo¾ku kalendára nie je mo¾né vymaza»\n"
+
+#: gnokii/gnokii.c:1991
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Dátum: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:1992
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Èas: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2028
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Upozornenie: %s\n"
+
+#: gnokii/gnokii.c:2029
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Èas: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2070
+msgid "Entering monitor mode...\n"
+msgstr "Aktivácia re¾imu monitorovania siete...\n"
+
+#: gnokii/gnokii.c:2071
+msgid "Initialising GSM interface...\n"
+msgstr "Inicializácia GSM rozhrania...\n"
+
+#: gnokii/gnokii.c:2082
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Sila signálu: %d\n"
+
+#: gnokii/gnokii.c:2085
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batéria: %d\n"
+
+#: gnokii/gnokii.c:2088
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Napájanie: %s\n"
+
+#: gnokii/gnokii.c:2088
+msgid "AC/DC"
+msgstr "sie»"
+
+#: gnokii/gnokii.c:2088
+msgid "battery"
+msgstr "batéria"
+
+#: gnokii/gnokii.c:2091
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2094
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefón: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2097
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2100
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2103
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS správy: Nepreèítaných %d, poèet %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Prichádzajúci hovor: %s\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Sie»: %s (%s), LAC: %s, ID bunky: %s\n"
+
+#: gnokii/gnokii.c:2129
+msgid "Leaving monitor mode...\n"
+msgstr "Deaktivácia re¾imu monitorovania siete...\n"
+
+#: gnokii/gnokii.c:2178
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr "Èíslo profilu musí by» od 1 po %d!\n"
+
+#: gnokii/gnokii.c:2185
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "Tento telefón podporuje iba %d profilov!\n"
+
+#: gnokii/gnokii.c:2257
+msgid "Unspecified error\n"
+msgstr "Bli¾¹ie neurèená chyba\n"
+
+#: gnokii/gnokii.c:2366
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Typ pamäti %s nie je podporovaný!\n"
+
+#: gnokii/gnokii.c:2371
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Chybná pozícia alebo iná chyba!(%d)\n"
+
+#: gnokii/gnokii.c:2440
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Problém formátu na riadku %d [%s]\n"
+
+#: gnokii/gnokii.c:2455
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Zápis úspe¹ný: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n"
+
+#: gnokii/gnokii.c:2457
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Zápis ZLYHAL: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n"
+
+#: gnokii/gnokii.c:2477
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr "Zrýchlená voµba è. %d: %d:%d\n"
+
+#: gnokii/gnokii.c:2546 xgnokii/xgnokii.c:2264 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "chyba pri otváraní %s, pou¾itá prednastavená konfigurácia\n"
+
+#: gnokii/gnokii.c:2578
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Prebieha volanie: %s\n"
+
+#: gnokii/gnokii.c:2579
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Neznámy: %s\n"
+
+#: gnokii/gnokii.c:2580
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Nepreèítané SMS: %s\n"
+
+#: gnokii/gnokii.c:2581
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Hlasové volanie: %s\n"
+
+#: gnokii/gnokii.c:2582
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Faxové volanie: %s\n"
+
+#: gnokii/gnokii.c:2583
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Dátové volanie: %s\n"
+
+#: gnokii/gnokii.c:2584
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Zámok klávesnice: %s\n"
+
+#: gnokii/gnokii.c:2585
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Pamä» SMS plná: %s\n"
+
+#: gnokii/gnokii.c:2637
+#, c-format
+msgid "IMEI:     %s\n"
+msgstr "IMEI:    %s\n"
+
+#: gnokii/gnokii.c:2638
+#, c-format
+msgid "Model:    %s\n"
+msgstr "Model:   %s\n"
+
+#: gnokii/gnokii.c:2639
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revízia: %s\n"
+
+#: gnokii/gnokii.c:2671
+msgid "What kind of reset do you want??\n"
+msgstr "Aký druh resetu si ¾eláte??\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid verzia %s"
+
+#: gnokiid/gnokiid.c:70
+msgid "   usage: gnokiid {--help|--version}"
+msgstr "   pou¾itie: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:87
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr "VM_Initialise - VM_GSMInitialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:94
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr "VM_Initialise - VM_PtySetup zlyhal!\n"
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr "VM_Initialise - ATEM_Initialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr "VM_Initialise - DP_Initialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:198
+msgid "Couldn't open pty!\n"
+msgstr "Nie je mo¾né otvori» pseudoterminál!\n"
+
+#: gnokiid/virtmodem.c:206
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid by nemal by» nain¹talovaný setuid na root-a!\n"
+
+#: gnokiid/virtmodem.c:210
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Slave pseudoterminál je %s, volá sa %s pre vytvorenie /dev/gnokii.\n"
+
+#: gnokiid/virtmodem.c:274 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec. \n"
+
+#: xgnokii/xgnokii.c:194 xgnokii/xgnokii_contacts.c:2070
+msgid "Reading caller groups names ..."
+msgstr "Èítajú sa názvy skupín volajúcich ..."
+
+#: xgnokii/xgnokii.c:198 xgnokii/xgnokii.c:991
+msgid "Familly"
+msgstr "Rodina"
+
+#: xgnokii/xgnokii.c:199 xgnokii/xgnokii.c:1003
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:200 xgnokii/xgnokii.c:1015
+msgid "Friends"
+msgstr "Priatelia"
+
+#: xgnokii/xgnokii.c:201 xgnokii/xgnokii.c:1027
+msgid "Colleagues"
+msgstr "Kolegovia"
+
+#: xgnokii/xgnokii.c:202 xgnokii/xgnokii.c:1039
+msgid "Other"
+msgstr "Iní"
+
+#: xgnokii/xgnokii.c:203
+msgid "No group"
+msgstr "®iadna skupina"
+
+#: xgnokii/xgnokii.c:321
+msgid "Short Message received"
+msgstr "Krátka správa prijatá"
+
+#: xgnokii/xgnokii.c:333
+msgid "Working ..."
+msgstr "Pracujem ..."
+
+#: xgnokii/xgnokii.c:350
+msgid "Call in progress"
+msgstr "Prebieha volanie"
+
+#: xgnokii/xgnokii.c:363
+msgid "Hide"
+msgstr "Skry»"
+
+#: xgnokii/xgnokii.c:460
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Prebieha odchádzajúce volanie:\n"
+"Èas: %s"
+
+#: xgnokii/xgnokii.c:463
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Prichádzajúce volanie od: %s\n"
+"Èas: %s"
+
+#: xgnokii/xgnokii.c:516 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Súbor %d"
+
+#: xgnokii/xgnokii.c:538 xgnokii/xgnokii.c:1397
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:550
+msgid "Voice"
+msgstr "Hlas"
+
+#: xgnokii/xgnokii.c:561 xgnokii/xgnokii.c:1427
+msgid "1 h"
+msgstr "1 h"
+
+#: xgnokii/xgnokii.c:565 xgnokii/xgnokii.c:1434
+msgid "6 h"
+msgstr "6 h"
+
+#: xgnokii/xgnokii.c:569 xgnokii/xgnokii.c:585 xgnokii/xgnokii.c:1441
+msgid "24 h"
+msgstr "24 h"
+
+#: xgnokii/xgnokii.c:573 xgnokii/xgnokii.c:1448
+msgid "72 h"
+msgstr "72 h"
+
+#: xgnokii/xgnokii.c:581
+msgid "Max. time"
+msgstr "Max. èas"
+
+#: xgnokii/xgnokii.c:628
+msgid "Reading SMS centers ..."
+msgstr "Naèítavajú sa SMS centrá ..."
+
+#: xgnokii/xgnokii.c:982
+msgid "Error saving SMS centers!"
+msgstr "Chyba pri zápise SMS centier!"
+
+#: xgnokii/xgnokii.c:1052
+msgid "Error writing configuration file!"
+msgstr "Chyba pri zápise konfiguraèného súboru!"
+
+#: xgnokii/xgnokii.c:1064 xgnokii/xgnokii_contacts.c:2880
+msgid "Contacts"
+msgstr "Kontakty"
+
+#: xgnokii/xgnokii.c:1070 xgnokii/xgnokii.c:1800
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1075
+msgid "Calendar"
+msgstr "Kalendár"
+
+#: xgnokii/xgnokii.c:1080
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1085 xgnokii/xgnokii_speed.c:565
+msgid "Speed Dial"
+msgstr "Zrýchlená voµba"
+
+#: xgnokii/xgnokii.c:1090
+msgid "Keyboard"
+msgstr "Klávesnica"
+
+#: xgnokii/xgnokii.c:1095 xgnokii/xgnokii_netmon.c:318
+msgid "Net Monitor"
+msgstr "Monitor siete"
+
+#: xgnokii/xgnokii.c:1104 xgnokii/xgnokii.c:1560
+msgid "Options"
+msgstr "Voµby"
+
+#: xgnokii/xgnokii.c:1114 xgnokii/xgnokii.c:2080
+msgid "Help"
+msgstr "Nápoveda"
+
+#: xgnokii/xgnokii.c:1120 xgnokii/xgnokii.c:1137
+msgid "About"
+msgstr "O aplikácii"
+
+#: xgnokii/xgnokii.c:1141 xgnokii/xgnokii.c:1321
+#: xgnokii/xgnokii_contacts.c:806 xgnokii/xgnokii_contacts.c:936
+#: xgnokii/xgnokii_contacts.c:1301 xgnokii/xgnokii_contacts.c:2712
+#: xgnokii/xgnokii_sms.c:468
+msgid "Ok"
+msgstr "OK"
+
+#: xgnokii/xgnokii.c:1154
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+"xgnokii verzia: %s\n"
+"gnokii verzia: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Ján Derfiòák\n"
+
+#: xgnokii/xgnokii.c:1315
+msgid "Edit SMS Setting"
+msgstr "Zmena nastavení SMS"
+
+#: xgnokii/xgnokii.c:1329 xgnokii/xgnokii_common.c:240
+#: xgnokii/xgnokii_common.c:326 xgnokii/xgnokii_contacts.c:814
+#: xgnokii/xgnokii_contacts.c:944 xgnokii/xgnokii_contacts.c:1173
+#: xgnokii/xgnokii_contacts.c:1219 xgnokii/xgnokii_contacts.c:1310
+#: xgnokii/xgnokii_contacts.c:1590 xgnokii/xgnokii_contacts.c:2719
+#: xgnokii/xgnokii_sms.c:476
+msgid "Cancel"
+msgstr "Zru¹i»"
+
+#: xgnokii/xgnokii.c:1342
+msgid "Set's name:"
+msgstr "Meno súboru:"
+
+#: xgnokii/xgnokii.c:1355
+msgid "Center:"
+msgstr "Centrum:"
+
+#: xgnokii/xgnokii.c:1368
+msgid "Sending Format:"
+msgstr "Formát posielania:"
+
+#: xgnokii/xgnokii.c:1412
+msgid "Validity Period:"
+msgstr "Èas platnosti:"
+
+#: xgnokii/xgnokii.c:1420
+msgid "Max. Time"
+msgstr "Max. èas"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Set's name"
+msgstr "Meno súboru"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Center number"
+msgstr "Èíslo centra"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Format"
+msgstr "Formát"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Validity"
+msgstr "Platnos»"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Apply"
+msgstr "Pou¾i»"
+
+#: xgnokii/xgnokii.c:1574 xgnokii/xgnokii_contacts.c:1574
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Ulo¾i»"
+
+#: xgnokii/xgnokii.c:1581
+msgid "Close"
+msgstr "Zavrie»"
+
+#: xgnokii/xgnokii.c:1596
+msgid "Phone and connection type"
+msgstr "Typ telefónu a pripojenia"
+
+#: xgnokii/xgnokii.c:1603
+msgid "Connection"
+msgstr "Pripojenie"
+
+#: xgnokii/xgnokii.c:1610
+msgid "Port:"
+msgstr "Port:"
+
+#: xgnokii/xgnokii.c:1625 xgnokii/xgnokii.c:1697
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1640
+msgid "Init length:"
+msgstr "Då¾ka inicializácie:"
+
+#: xgnokii/xgnokii.c:1655
+msgid "Bindir:"
+msgstr "Bindir:"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Connection:"
+msgstr "Pripojenie:"
+
+#: xgnokii/xgnokii.c:1674
+msgid "infrared"
+msgstr "infraèervené"
+
+#: xgnokii/xgnokii.c:1678
+msgid "serial"
+msgstr "sériové"
+
+#: xgnokii/xgnokii.c:1683
+msgid "Phone information"
+msgstr "Informácia o telefóne"
+
+#: xgnokii/xgnokii.c:1712
+msgid "Version:"
+msgstr "Verzia:"
+
+#: xgnokii/xgnokii.c:1727
+msgid "Revision:"
+msgstr "Revízia:"
+
+#: xgnokii/xgnokii.c:1742
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1756
+msgid "Alarm setting"
+msgstr "Nastavenie budíka"
+
+#: xgnokii/xgnokii.c:1763 xgnokii/xgnokii.c:1770
+msgid "Alarm"
+msgstr "Budík"
+
+#: xgnokii/xgnokii.c:1794 xgnokii/xgnokii_sms.c:1423
+msgid "Short Message Service"
+msgstr "Slu¾ba krátkych správ"
+
+#: xgnokii/xgnokii.c:1828
+msgid "Edit"
+msgstr "Upravi»"
+
+#: xgnokii/xgnokii.c:1842
+msgid "Business Card"
+msgstr "Vizitka"
+
+#: xgnokii/xgnokii.c:1848
+msgid "User"
+msgstr "Pou¾ívateµ"
+
+#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii_contacts.c:827
+msgid "Name:"
+msgstr "Meno:"
+
+#: xgnokii/xgnokii.c:1892
+msgid "Title:"
+msgstr "Titul:"
+
+#: xgnokii/xgnokii.c:1918
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1944
+msgid "Telephone:"
+msgstr "Telefón:"
+
+#: xgnokii/xgnokii.c:1969
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1994
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2020
+msgid "Address:"
+msgstr "Adresa:"
+
+#: xgnokii/xgnokii.c:2044
+msgid "Caller groups names"
+msgstr "Názvy skupín volajúcich"
+
+#: xgnokii/xgnokii.c:2051
+msgid "Groups"
+msgstr "Skupiny"
+
+#: xgnokii/xgnokii.c:2060
+#, c-format
+msgid "Group %d:"
+msgstr "Skupina %d:"
+
+#: xgnokii/xgnokii.c:2073
+msgid "Help viewer"
+msgstr "Prezeraè pomôcok"
+
+#: xgnokii/xgnokii.c:2087
+msgid "Viewer:"
+msgstr "Prezeraè:"
+
+#: xgnokii/xgnokii.c:2247 xgnokii/xgnokii_cfg.c:71
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "VAROVANIE: Nie je mo¾né nájs» premennú prostredia HOME!\n"
+
+#: xgnokii/xgnokii.c:2252 xgnokii/xgnokii_cfg.c:77 xgnokii/xgnokii_cfg.c:92
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr "VAROVANIE: Nie je mo¾né prideli» pamä» pre èítanie konfigurácie!\n"
+
+#: xgnokii/xgnokii_cfg.c:156
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr "CHYBA: Nie je mo¾né nájs» premennú prostredia HOME!\n"
+
+#: xgnokii/xgnokii_cfg.c:162 xgnokii/xgnokii_cfg.c:180
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr "CHYBA: Nie je mo¾né prideli» pamä» pre zápis konfigurácie!\n"
+
+#: xgnokii/xgnokii_cfg.c:168
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "CHYBA: Nie je mo¾né otvori» súbor %s pre zápis!\n"
+
+#: xgnokii/xgnokii_cfg.c:186
+msgid "ERROR: Can't write config file!\n"
+msgstr "CHYBA: Nie je mo¾né zapísa» konfiguraèný súbor!\n"
+
+#: xgnokii/xgnokii_common.c:233
+msgid "Error"
+msgstr "Chyba"
+
+#: xgnokii/xgnokii_common.c:272
+msgid "Info"
+msgstr "Informácia"
+
+#: xgnokii/xgnokii_common.c:310
+msgid "Yes"
+msgstr "Áno"
+
+#: xgnokii/xgnokii_common.c:319
+msgid "No"
+msgstr "Nie"
+
+#: xgnokii/xgnokii_common.c:406
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Nie je mo¾né spusti» %s\n"
+
+#: xgnokii/xgnokii_contacts.c:230 xgnokii/xgnokii_contacts.c:263
+#: xgnokii/xgnokii_contacts.c:426 xgnokii/xgnokii_contacts.c:451
+#: xgnokii/xgnokii_contacts.c:585 xgnokii/xgnokii_contacts.c:607
+msgid "Can't change memory type!"
+msgstr "Nie je mo¾né zmeni» typ pamäti!"
+
+#: xgnokii/xgnokii_contacts.c:274 xgnokii/xgnokii_contacts.c:321
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Meno z telefónneho zoznamu bude ¾iaµ\n"
+"pri zápise do pamäti na SIM skrátené!"
+
+#: xgnokii/xgnokii_contacts.c:462 xgnokii/xgnokii_contacts.c:501
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Meno z telefónneho zoznamu bude ¾iaµ\n"
+"pri zápise do pamäti na SIM skrátené!"
+
+#: xgnokii/xgnokii_contacts.c:696
+msgid "Can't find pattern!"
+msgstr "Nie je mo¾né nájs» vzor!"
+
+#: xgnokii/xgnokii_contacts.c:840 xgnokii/xgnokii_contacts.c:1319
+msgid "Number:"
+msgstr "Èíslo:"
+
+#: xgnokii/xgnokii_contacts.c:852
+msgid "Memory:"
+msgstr "Pamä»:"
+
+#: xgnokii/xgnokii_contacts.c:856
+msgid "phone"
+msgstr "telefón"
+
+#: xgnokii/xgnokii_contacts.c:869
+msgid "Caller group:"
+msgstr "Skupina volajúcich:"
+
+#: xgnokii/xgnokii_contacts.c:883 xgnokii/xgnokii_contacts.c:2941
+#: xgnokii/xgnokii_speed.c:618
+msgid "Edit entry"
+msgstr "Upravi» polo¾ku"
+
+#: xgnokii/xgnokii_contacts.c:929
+msgid "Delete entries"
+msgstr "Vymaza» polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:961
+msgid "Do you want to delete selected entries?"
+msgstr "®eláte si zmaza» zvolené polo¾ky?"
+
+#: xgnokii/xgnokii_contacts.c:973 xgnokii/xgnokii_contacts.c:2933
+msgid "New entry"
+msgstr "Nová polo¾ka"
+
+#: xgnokii/xgnokii_contacts.c:1012 xgnokii/xgnokii_contacts.c:2937
+msgid "Duplicate entry"
+msgstr "Duplikova» polo¾ku"
+
+#: xgnokii/xgnokii_contacts.c:1078 xgnokii/xgnokii_contacts.c:1088
+#: xgnokii/xgnokii_contacts.c:1113
+msgid "Can't find free memory."
+msgstr "Voµná pamä» nie je k dispozícii."
+
+#: xgnokii/xgnokii_contacts.c:1157
+msgid "Changing memory type"
+msgstr "Zmena typu pamäti"
+
+#: xgnokii/xgnokii_contacts.c:1164
+msgid "Continue"
+msgstr "Pokraèova»"
+
+#: xgnokii/xgnokii_contacts.c:1184
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"Pri presune z pamäti telefónu na SIM mô¾u\n"
+"by» niektoré polo¾ky skrátené."
+
+#: xgnokii/xgnokii_contacts.c:1204 xgnokii/xgnokii_contacts.c:1210
+msgid "Find"
+msgstr "Nájs»"
+
+#: xgnokii/xgnokii_contacts.c:1232
+msgid "Pattern:"
+msgstr "Vzor:"
+
+#: xgnokii/xgnokii_contacts.c:1245 xgnokii/xgnokii_contacts.c:2875
+#: xgnokii/xgnokii_speed.c:560
+msgid "Name"
+msgstr "Meno"
+
+#: xgnokii/xgnokii_contacts.c:1251 xgnokii/xgnokii_contacts.c:2875
+#: xgnokii/xgnokii_speed.c:560
+msgid "Number"
+msgstr "Èíslo"
+
+#: xgnokii/xgnokii_contacts.c:1295 xgnokii/xgnokii_contacts.c:2952
+msgid "Dial voice"
+msgstr "Zavola»"
+
+#: xgnokii/xgnokii_contacts.c:1428
+msgid "Phone memory..."
+msgstr "Pamä» telefónu..."
+
+#: xgnokii/xgnokii_contacts.c:1439
+msgid "SIM memory..."
+msgstr "Pamä» SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1468
+msgid "Saving entries"
+msgstr "Ukladám polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:1502
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku ME pamäti èíslo %d! Chyba: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1544
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku SM pamäti èíslo %d! Chyba: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1567
+msgid "Save changes?"
+msgstr "Ulo¾i» zmeny?"
+
+#: xgnokii/xgnokii_contacts.c:1583
+msgid "Don't save"
+msgstr "Neulo¾i»"
+
+#: xgnokii/xgnokii_contacts.c:1607
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Vo va¹om adresári kontaktov\n"
+"ste urobili zmeny.\n"
+"\n"
+"\n"
+"®eláte si tieto zmeny zapísa» do telefónu?\n"
+
+#: xgnokii/xgnokii_contacts.c:1673 xgnokii/xgnokii_contacts.c:1700
+#: xgnokii/xgnokii_contacts.c:2424 xgnokii/xgnokii_contacts.c:2447
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: riadok %d: Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_contacts.c:1796
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Nie je mo¾né zisti» stav SM pamäti!\n"
+"\n"
+"Max. poèet SIM polo¾iek nastavený na 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:1821
+msgid "Getting entries"
+msgstr "Naèítavam polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:434
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Nie je mo¾né otvori» súbor %s pre zápis!"
+
+#: xgnokii/xgnokii_contacts.c:2165 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_speed.c:476
+msgid "Overwrite file?"
+msgstr "Prepísa» súbor?"
+
+#: xgnokii/xgnokii_contacts.c:2166 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_speed.c:477
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Súbor %s u¾ existuje.\n"
+"Prepísa»?"
+
+#: xgnokii/xgnokii_contacts.c:2184 xgnokii/xgnokii_speed.c:495
+msgid "Export"
+msgstr "Export"
+
+#: xgnokii/xgnokii_contacts.c:2345 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:334
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Nie je mo¾né otvori» súbor %s pre èítanie!"
+
+#: xgnokii/xgnokii_contacts.c:2399
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Nie je mo¾né zisti» stav SM pamäti!\n"
+"\n"
+"Max. poèet SIM polo¾iek nastavený na 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2512 xgnokii/xgnokii_speed.c:412
+msgid "Import"
+msgstr "Import"
+
+#: xgnokii/xgnokii_contacts.c:2709 xgnokii/xgnokii_sms.c:1115
+msgid "Select contacts"
+msgstr "Výber kontaktov"
+
+#: xgnokii/xgnokii_contacts.c:2742 xgnokii/xgnokii_contacts.c:2981
+#: xgnokii/xgnokii_sms.c:1565 xgnokii/xgnokii_speed.c:643
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "Chyba: %s: riadok %d: Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_contacts.c:2840 xgnokii/xgnokii_dtmf.c:217
+#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1005
+#: xgnokii/xgnokii_sms.c:1388 xgnokii/xgnokii_speed.c:535
+#: xgnokii/xgnokii_xkeyb.c:241
+msgid "/_File"
+msgstr "/Súbor"
+
+#: xgnokii/xgnokii_contacts.c:2841 xgnokii/xgnokii_speed.c:536
+msgid "/File/_Read from phone"
+msgstr "/Súbor/Naèíta» z telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2842 xgnokii/xgnokii_speed.c:537
+msgid "/File/_Save to phone"
+msgstr "/Súbor/Zapísa» do telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_speed.c:538
+msgid "/File/_Import from file"
+msgstr "/Súbor/Import zo súboru"
+
+#: xgnokii/xgnokii_contacts.c:2844 xgnokii/xgnokii_speed.c:539
+msgid "/File/_Export to file"
+msgstr "/Súbor/Export do súboru"
+
+#: xgnokii/xgnokii_contacts.c:2845 xgnokii/xgnokii_dtmf.c:220
+#: xgnokii/xgnokii_netmon.c:261 xgnokii/xgnokii_sms.c:1010
+#: xgnokii/xgnokii_sms.c:1391 xgnokii/xgnokii_speed.c:540
+#: xgnokii/xgnokii_xkeyb.c:242
+msgid "/File/_Close"
+msgstr "/Súbor/Zavrie»"
+
+#: xgnokii/xgnokii_contacts.c:2846 xgnokii/xgnokii_speed.c:541
+msgid "/_Edit"
+msgstr "/Úpravy"
+
+#: xgnokii/xgnokii_contacts.c:2847
+msgid "/Edit/_New"
+msgstr "/Úpravy/Nový"
+
+#: xgnokii/xgnokii_contacts.c:2848
+msgid "/Edit/D_uplicate"
+msgstr "/Úpravy/Duplikova»"
+
+#: xgnokii/xgnokii_contacts.c:2849 xgnokii/xgnokii_speed.c:542
+msgid "/Edit/_Edit"
+msgstr "/Úpravy/Upravi»"
+
+#: xgnokii/xgnokii_contacts.c:2850
+msgid "/Edit/_Delete"
+msgstr "/Úpravy/Zmaza»"
+
+#: xgnokii/xgnokii_contacts.c:2851
+msgid "/Edit/_Change memory type"
+msgstr "/Úpravy/Zmeni» typ pamäti"
+
+#: xgnokii/xgnokii_contacts.c:2852
+msgid "/Edit/_Find"
+msgstr "/Úpravy/Vyhµada»"
+
+#: xgnokii/xgnokii_contacts.c:2853
+msgid "/Edit/Find ne_xt"
+msgstr "/Úpravy/Vyhµada» ïal¹í"
+
+#: xgnokii/xgnokii_contacts.c:2854
+msgid "/Edit/Select _all"
+msgstr "/Úpravy/Vybra» v¹etky"
+
+#: xgnokii/xgnokii_contacts.c:2855
+msgid "/_Dial"
+msgstr "/Zavola»"
+
+#: xgnokii/xgnokii_contacts.c:2856
+msgid "/Dial/Dial _voice"
+msgstr "/Zavola»/Zavola» (hlas)"
+
+#: xgnokii/xgnokii_contacts.c:2857 xgnokii/xgnokii_dtmf.c:221
+#: xgnokii/xgnokii_netmon.c:265 xgnokii/xgnokii_sms.c:1011
+#: xgnokii/xgnokii_sms.c:1398 xgnokii/xgnokii_speed.c:543
+#: xgnokii/xgnokii_xkeyb.c:243
+msgid "/_Help"
+msgstr "/Nápoveda"
+
+#: xgnokii/xgnokii_contacts.c:2858 xgnokii/xgnokii_dtmf.c:222
+#: xgnokii/xgnokii_netmon.c:266 xgnokii/xgnokii_sms.c:1012
+#: xgnokii/xgnokii_sms.c:1399 xgnokii/xgnokii_speed.c:544
+#: xgnokii/xgnokii_xkeyb.c:244
+msgid "/Help/_Help"
+msgstr "/Nápoveda/Nápoveda"
+
+#: xgnokii/xgnokii_contacts.c:2859 xgnokii/xgnokii_dtmf.c:223
+#: xgnokii/xgnokii_netmon.c:267 xgnokii/xgnokii_sms.c:1013
+#: xgnokii/xgnokii_sms.c:1400 xgnokii/xgnokii_speed.c:545
+#: xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_About"
+msgstr "/Nápoveda/O aplikácii"
+
+#: xgnokii/xgnokii_contacts.c:2875
+msgid "Memory"
+msgstr "Pamä»"
+
+#: xgnokii/xgnokii_contacts.c:2875
+msgid "Group"
+msgstr "Skupina"
+
+#: xgnokii/xgnokii_contacts.c:2911 xgnokii/xgnokii_speed.c:596
+msgid "Read from phone"
+msgstr "Naèíta» z telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2915 xgnokii/xgnokii_speed.c:600
+msgid "Save to phone"
+msgstr "Zapísa» do telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2922 xgnokii/xgnokii_speed.c:607
+msgid "Import from file"
+msgstr "Import zo súboru"
+
+#: xgnokii/xgnokii_contacts.c:2926 xgnokii/xgnokii_speed.c:611
+msgid "Export to file"
+msgstr "Export do súboru"
+
+#: xgnokii/xgnokii_contacts.c:2945
+msgid "Delete entry"
+msgstr "Zmaza» polo¾ku"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Naèíta»"
+
+#: xgnokii/xgnokii_dtmf.c:218
+msgid "/File/_Open"
+msgstr "/Súbor/Otvori»"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_sms.c:1007
+#: xgnokii/xgnokii_sms.c:1389
+msgid "/File/_Save"
+msgstr "/Súbor/Ulo¾i»"
+
+#: xgnokii/xgnokii_calendar.c:243 xgnokii/xgnokii_contacts.c:2843
+#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_sms.c:1012
+#: xgnokii/xgnokii_sms.c:1394 xgnokii/xgnokii_speed.c:538
+msgid "/File/Sep1"
+msgstr "/Súbor/Sep1"
+
+#: xgnokii/xgnokii_calendar.c:245 xgnokii/xgnokii_contacts.c:2846
+#: xgnokii/xgnokii_sms.c:1015 xgnokii/xgnokii_speed.c:541
+msgid "/File/Sep2"
+msgstr "/Súbor/Sep2"
+
+#: xgnokii/xgnokii_calendar.c:248
+msgid "/File/Sep3"
+msgstr "/Súbor/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2853
+msgid "/Edit/Sep3"
+msgstr "/Úpravy/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:257 xgnokii/xgnokii_contacts.c:2855
+msgid "/Edit/Sep4"
+msgstr "/Úpravy/Sep4"
+
+#: xgnokii/xgnokii_contacts.c:2858
+msgid "/Edit/Sep5"
+msgstr "/Úpravy/Sep5"
+
+#: xgnokii/xgnokii_sms.c:1401
+msgid "/Messages/Sep3"
+msgstr "/Správy/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:244
+msgid "/File/Send via S_MS"
+msgstr "/Súbor/Po¹li ako SMS"
+
+#: xgnokii/xgnokii_calendar.c:251
+msgid "/Edit/Add _reminder"
+msgstr "/Úpravy/Pridaj pripomienku"
+
+#: xgnokii/xgnokii_calendar.c:252
+msgid "/Edit/Add _call"
+msgstr "/Úpravy/Pridaj volanie"
+
+#: xgnokii/xgnokii_calendar.c:253
+msgid "/Edit/Add _meeting"
+msgstr "/Úpravy/Pridaj schôdzku"
+
+#: xgnokii/xgnokii_calendar.c:254
+msgid "/Edit/Add _birthday"
+msgstr "/Úpravy/Pridaj narodeniny"
+
+#: xgnokii/xgnokii_dtmf.c:244
+msgid "Dial Tone"
+msgstr "Tónová voµba"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/_Tools"
+msgstr "/Nástroje"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_n"
+msgstr "/Nástroje/Zapnú» monitor siete"
+
+#: xgnokii/xgnokii_netmon.c:264
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Nástroje/Vypnú» monitor siete"
+
+#: xgnokii/xgnokii_netmon.c:381 xgnokii/xgnokii_netmon.c:384
+msgid "Active cell"
+msgstr "Aktívna bunka"
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "NCELL list I"
+msgstr "NCELL zoznam I"
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "NCELL list II"
+msgstr "NCELL zoznam II"
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "NCELL list III"
+msgstr "NCELL zoznam III"
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Prefered/Denied networks"
+msgstr "Preferované/Zakázané siete"
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "System information bits"
+msgstr "Systémové informácie"
+
+#: xgnokii/xgnokii_netmon.c:402
+msgid "TMSI, Paging, PLU"
+msgstr "TMSI, Paging, PLU"
+
+#: xgnokii/xgnokii_netmon.c:405
+msgid "Cells info"
+msgstr "Informácie o bunkách"
+
+#: xgnokii/xgnokii_netmon.c:408
+msgid "DTX, Cipher, Hopping"
+msgstr "DTX, ©ifra, Hopping"
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "Uplink DTX"
+msgstr "Uplink DTX"
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "BTS TEST"
+msgstr "BTS TEST"
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "CELL BARR-Flag"
+msgstr "CELL BARR-Príznak"
+
+#: xgnokii/xgnokii_netmon.c:427
+msgid "Accumulator, Charge status"
+msgstr "Akumulátor, Stav nabitia"
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "?Constant voltage charging display"
+msgstr "?Nabíjanie kon¹tantným napätím"
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "?Battery full detection"
+msgstr "?Detekcia plného nabitia batérie"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Accumulator"
+msgstr "Akumulátor"
+
+#: xgnokii/xgnokii_netmon.c:439
+msgid "SW-Resets"
+msgstr "SW-Resety"
+
+#: xgnokii/xgnokii_netmon.c:442
+msgid "Reset-Counter"
+msgstr "Èítaè resetov"
+
+#: xgnokii/xgnokii_netmon.c:445
+msgid "Cause codes for last connection abortion"
+msgstr "Dôvod posledného zru¹enia spojenia"
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Reset handover counters"
+msgstr "Vynulova» èítaèe handoverov"
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Handover Counter"
+msgstr "Èítaè handoverov"
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Handover Counter (Dual)"
+msgstr "Èítaè handoverov (duálny)"
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "L2-Timeouts"
+msgstr "L2-Timeouty"
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "SIM"
+msgstr "SIM"
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "?Block display 1"
+msgstr "?Block display 1"
+
+#: xgnokii/xgnokii_netmon.c:476
+msgid "Memory status before reset"
+msgstr "Stav pamäti pred resetom"
+
+#: xgnokii/xgnokii_netmon.c:479
+msgid "Reset Counters"
+msgstr "Èítaèe resetov"
+
+#: xgnokii/xgnokii_netmon.c:482
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr "Èítaè vyhµadávania PLMN a nového výberu siete (Singleband)"
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Neighbourhood measurement"
+msgstr "Meranie susedstva"
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "Calls"
+msgstr "Volania"
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "Temporary counters of DSP"
+msgstr "Prechodné èítaèe DSP"
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "Control of task information displays"
+msgstr "Riadenie zobrazenia informácií o úlohe"
+
+#: xgnokii/xgnokii_netmon.c:504
+msgid "Information about task numbers 0-7"
+msgstr "Informácie o úlohách 0-7"
+
+#: xgnokii/xgnokii_netmon.c:507
+msgid "Information about task numbers 8-15"
+msgstr "Informácie o úlohách 8-15"
+
+#: xgnokii/xgnokii_netmon.c:510
+msgid "Information about task numbers 16-23"
+msgstr "Informácie o úlohách 16-23"
+
+#: xgnokii/xgnokii_netmon.c:513
+msgid "Information about OS_SYSTEM_STACK"
+msgstr "Informácie o OS_SYSTEM_STACK"
+
+#: xgnokii/xgnokii_netmon.c:516
+msgid "Information about current MCU and DSP software versions"
+msgstr "Informácia o aktuálnych verziách softvéru MCU a DSP"
+
+#: xgnokii/xgnokii_netmon.c:519
+msgid "Hardware version"
+msgstr "Verzia hardvéru"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "Chan"
+msgstr "Chan"
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "RxLv"
+msgstr "RxLv"
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C1"
+msgstr "C1"
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "C2"
+msgstr "C2"
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "ACT"
+msgstr "ACT"
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC2"
+msgstr "NC2"
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC3"
+msgstr "NC3"
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC4"
+msgstr "NC4"
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC5"
+msgstr "NC5"
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC6"
+msgstr "NC6"
+
+#: xgnokii/xgnokii_netmon.c:548
+msgid "NC7"
+msgstr "NC7"
+
+#: xgnokii/xgnokii_netmon.c:579
+msgid "Page:"
+msgstr "Stránka:"
+
+#: xgnokii/xgnokii_sms.c:232
+msgid "report"
+msgstr "potvrdenie"
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "read"
+msgstr "preèítaná"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "unread"
+msgstr "nepreèítaná"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "odoslaná"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "neodoslaná"
+
+#: xgnokii/xgnokii_sms.c:364
+msgid "From: "
+msgstr "Od: "
+
+#: xgnokii/xgnokii_sms.c:372
+msgid "Date: "
+msgstr "Dátum: "
+
+#: xgnokii/xgnokii_sms.c:461
+msgid "Delete SMS"
+msgstr "Zmaza» SMS"
+
+#: xgnokii/xgnokii_sms.c:493
+msgid "Do you want to delete selected SMS?"
+msgstr "®eláte si vymaza» zvolené SMS?"
+
+#: xgnokii/xgnokii_sms.c:711 xgnokii/xgnokii_sms.c:842
+msgid "Address line contains illegal address!"
+msgstr "Riadok s adresou obsahuje neplatnú adresu!"
+
+#: xgnokii/xgnokii_sms.c:814
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"Odoslanie SMS pre %s zlyhalo\n"
+"(chyba=%d)"
+
+#: xgnokii/xgnokii_sms.c:904 xgnokii/xgnokii_sms.c:941
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Odosiela sa SMS pre %s (%d/%d) ...\n"
+
+#: xgnokii/xgnokii_sms.c:968
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Odosiela sa SMS pre %s ...\n"
+
+#: xgnokii/xgnokii_sms.c:1006
+msgid "/File/Sen_d"
+msgstr "/Súbor/Posla»"
+
+#: xgnokii/xgnokii_sms.c:1008
+msgid "/File/Check _Names"
+msgstr "/Súbor/Skontrolova» mená"
+
+#: xgnokii/xgnokii_sms.c:1009
+msgid "/File/C_ontacts"
+msgstr "/Súbor/Kontakty"
+
+#: xgnokii/xgnokii_sms.c:1067
+msgid "Send message"
+msgstr "Odosla» správu"
+
+#: xgnokii/xgnokii_sms.c:1071
+msgid "Save message to outbox"
+msgstr "Ulo¾i» správu do výstupnej schránky"
+
+#: xgnokii/xgnokii_sms.c:1078
+msgid "Check names"
+msgstr "Skontrolova» mená"
+
+#: xgnokii/xgnokii_sms.c:1091
+msgid "To:"
+msgstr "Pre:"
+
+#: xgnokii/xgnokii_sms.c:1163
+msgid "Delivery report"
+msgstr "Potvrdenie o doruèení"
+
+#: xgnokii/xgnokii_sms.c:1167
+msgid "Send as Long SMS"
+msgstr "Odosla» ako dlhú SMS"
+
+#: xgnokii/xgnokii_sms.c:1171
+msgid "SMS Center:"
+msgstr "SMS centrum:"
+
+#: xgnokii/xgnokii_sms.c:1190
+msgid "New Message"
+msgstr "Nová správa"
+
+#: xgnokii/xgnokii_sms.c:1217
+msgid "Forward Message"
+msgstr "Posla» správu inam"
+
+#: xgnokii/xgnokii_sms.c:1261
+msgid "Reply Message"
+msgstr "Odpoveda» na správu"
+
+#: xgnokii/xgnokii_sms.c:1297 xgnokii/xgnokii_sms.c:1465
+msgid "Bussiness Card"
+msgstr "Vizitka"
+
+#: xgnokii/xgnokii_sms.c:1390
+msgid "/File/_Refresh"
+msgstr "/Súbor/Obnovi»"
+
+#: xgnokii/xgnokii_sms.c:1392
+msgid "/_Messages"
+msgstr "/Správy"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "/_Messages/_New"
+msgstr "/Správy/Nová"
+
+#: xgnokii/xgnokii_sms.c:1394
+msgid "/_Messages/_Forward"
+msgstr "/Správy/Posla» inam"
+
+#: xgnokii/xgnokii_sms.c:1395
+msgid "/_Messages/_Reply"
+msgstr "/Správy/Odpoveda»"
+
+#: xgnokii/xgnokii_sms.c:1396
+msgid "/_Messages/_Delete"
+msgstr "/Správy/Zmaza»"
+
+#: xgnokii/xgnokii_sms.c:1397
+msgid "/_Messages/_Bussiness card"
+msgstr "/Správy/Vizitka"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Status"
+msgstr "Stav"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Date / Time"
+msgstr "Dátum / èas"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Sender"
+msgstr "Odosielateµ"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Message"
+msgstr "Správa"
+
+#: xgnokii/xgnokii_sms.c:1452
+msgid "New message"
+msgstr "Nová správa"
+
+#: xgnokii/xgnokii_sms.c:1456
+msgid "Forward message"
+msgstr "Posla» správu inam"
+
+#: xgnokii/xgnokii_sms.c:1460
+msgid "Reply message"
+msgstr "Odpoveda» na správu"
+
+#: xgnokii/xgnokii_sms.c:1472
+msgid "Delete message"
+msgstr "Zmaza» správu"
+
+#: xgnokii/xgnokii_sms.c:1497
+msgid "SMS's"
+msgstr "SMS"
+
+#: xgnokii/xgnokii_sms.c:1506
+msgid "Inbox"
+msgstr "Vstupná schránka"
+
+#: xgnokii/xgnokii_sms.c:1512
+msgid "Outbox"
+msgstr "Výstupná schránka"
+
+#: xgnokii/xgnokii_speed.c:188
+msgid "Reading data ..."
+msgstr "Naèítavajú sa údaje ..."
+
+#: xgnokii/xgnokii_speed.c:199 xgnokii/xgnokii_speed.c:205
+#: xgnokii/xgnokii_speed.c:264
+msgid "Cannot allocate memory!"
+msgstr "Nie je mo¾né prideli» pamä»!"
+
+#: xgnokii/xgnokii_speed.c:352
+msgid "Cannot allocate memory!\n"
+msgstr "Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_speed.c:364 xgnokii/xgnokii_speed.c:392
+msgid "Error reading file!"
+msgstr "Chyba pri èítaní súboru!"
+
+#: xgnokii/xgnokii_speed.c:560
+msgid "Key"
+msgstr "Klávesa"
+
+#: xgnokii/xgnokii_xkeyb.c:182
+msgid "Cannot load background pixmap!"
+msgstr "Nie je mo¾né naèíta» obrázok pozadia!"
+
+#: xgnokii/xgnokii_xkeyb.c:259
+msgid "XGnokii Keyboard"
+msgstr "XGnokii klávesnica"
diff --git a/utils/Makefile b/utils/Makefile
new file mode 100644 (file)
index 0000000..04af119
--- /dev/null
@@ -0,0 +1,57 @@
+
+#
+# Makefile for the GNOKII tool suite.
+#
+# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+#               2000 Karel Zak
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+OBJS = mgnokiidev.o
+
+all: mgnokiidev
+
+mgnokiidev: $(OBJS) 
+
+makelib: $(OBJS)
+       $(CC) $(LDFLAGS) $(OBJS) -o mgnokiidev
+       
+clean:
+       $(RM) $(OBJS) *~ depend mgnokiidev *.exe core *.bak
+
+install: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) mgnokiidev $(sbindir)
+       $(INSTALL) todologo $(bindir)
+       $(INSTALL) sendsms $(bindir)
+       
+install-strip: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -s mgnokiidev $(sbindir)
+       $(INSTALL) todologo $(bindir)
+       $(INSTALL) sendsms $(bindir)
+       
+install-suid: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 mgnokiidev $(sbindir)
+       $(INSTALL) todologo $(bindir)
+       $(INSTALL) sendsms $(bindir)
+       
+install-ss: all
+       $(INSTALL) -d $(sbindir)
+       $(INSTALL) -o root -g gnokii -m 4750 -s mgnokiidev $(sbindir)
+       $(INSTALL) todologo $(bindir)
+       $(INSTALL) sendsms $(bindir)    
+       
+depend dep:
+       $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+
+.PHONY: all install clean dep depend
+
diff --git a/utils/mgnokiidev.c b/utils/mgnokiidev.c
new file mode 100644 (file)
index 0000000..78b2090
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+
+  $Id$
+  
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  Mgnokiidev gets passed a slave pty name by gnokiid and uses this
+  information to create a symlink from the pty to /dev/gnokii.
+
+*/
+
+#include <stdio.h>
+#include <errno.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#define DEVLEN 30
+#define MAXLEN 12
+
+int main(int argc, char *argv[])
+{
+  int count, err;
+  char dev_name[DEVLEN];
+
+  /* Check we have one and only one command line argument. */
+  if (argc != 2) {
+    fprintf(stderr, "mgnokiidev takes one and only one argument!\n");
+    exit(-2);
+  }
+
+  /* Check if argument has a reasonable length (less than MAXLEN characters) */
+  if (strlen(argv[1]) >= MAXLEN) {
+    fprintf(stderr, "Argument must be less than %d characters.\n", MAXLEN);
+    exit (-2);
+  }
+
+  strncpy(dev_name, argv[1], DEVLEN);
+
+  /* Check for suspicious characters. */
+  for (count = 0; count < strlen(dev_name); count ++)
+    if (!(isalnum(dev_name[count]) || dev_name[count]=='/')) {
+      fprintf(stderr, "Suspicious character at index %d in argument.\n", count);
+      exit (-2);
+    }
+
+  /* Now become root */
+  setuid(0);
+
+  /* Change group of slave pty to group of mgnokiidev */
+  err = chown(dev_name, -1, getgid());
+
+  if (err < 0) {
+    perror("mgnokiidev - chown: ");
+    exit (-2);
+  }
+
+  /* Change permissions to rw by group */
+  err = chmod(dev_name, S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR);
+       
+  if (err < 0) {
+    perror("mgnokiidev - chmod: ");
+    exit (-2);
+  }
+
+  /* FIXME: Possible bug - should check that /dev/gnokii doesn't already exist
+     in case multiple users are trying to run gnokii. Well, but will be
+     mgnokiidev called then? I do not think so - you will probably got the
+     message serialport in use or similar. Don't you. I haven't tested it
+     though. */
+
+  /* Remove symlink in case it already exists. Don't care if it fails.  */
+  unlink ("/dev/gnokii");
+
+  /* Create symlink */
+  err = symlink(dev_name, "/dev/gnokii");
+
+  if (err < 0) {
+    perror("mgnokiidev - symlink: ");
+    exit (-2);
+  }
+
+  /* Done */
+  exit (0);
+}
diff --git a/utils/todologo b/utils/todologo
new file mode 100644 (file)
index 0000000..df1c179
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/perl
+# $Id$
+#
+# Author: Tomi Ollila <Tomi.Ollila@iki.fi>
+#
+# Created: Tue Oct 10 18:04:02 2000 too
+# Last modified: Wed Oct 25 22:41:50 2000 too
+#
+# HISTORY
+# $Log$
+# Revision 1.1.1.1  2001/11/25 21:59:23  short
+# :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001
+#
+# Revision 1.1  2000/11/03 13:18:08  pavel
+#
+# Tomi's todologo.
+#
+
+
+$a1= " a  b    c dd  ee ff  gg h h i   j k   l  m m nn   o  pp   q  r r ss ";
+$a2= "a a bb  c  d d ee f  g   hhh i   j k k l  mmm n n o o p p q q rr  s  ";
+$a3= "aaa b b c  d d e  ff g g hhh i j j kk  l  m m n n o o pp   q  r    s ";
+$a4= "a a bb   c dd   e f   gg h h i  j  k k ll m m n n  o  p     q r   ss ";
+
+$a1 .= "ttt u u v v w w x x y y zz 333 4   55   6 777  88  9  ";
+$a2 .= " t  u u v v w w  x  y y  z  3  4 4 5   6    7  88 9 9 ";
+$a3 .= " t  u u v v www  x   y  z    3 444  5 6 6  7  88   9  ";
+$a4 .= " t  uuu  v  w w x x  y  zz 33    4 5   6   7  88  9   ";
+
+$a1 =~ tr/ /0/;
+$a2 =~ tr/ /0/;
+$a3 =~ tr/ /0/;
+$a4 =~ tr/ /0/;
+
+
+sub searchalpha
+{
+    $_ = $_[0];
+    tr/A-Z/a-z/;
+    tr/210/zio/;
+
+    $width = 1;
+    $aa1 = $aa2 = $aa3 = $aa4 = '0';
+    
+    $i = index $a4, $_; return if ($i < 0);
+    $m = index $a3, $_; $i = $m if ($i >= 0 && $m < $i);
+    $m = index $a2, $_; $i = $m if ($i >= 0 && $m < $i);
+    $m = index $a1, $_; $i = $m if ($i >= 0 && $m < $i);
+
+    $j = rindex $a4, $_;
+    $m = rindex $a3, $_; $j = $m if ($m > $j);
+    $m = rindex $a2, $_; $j = $m if ($m > $j);
+    $m = rindex $a1, $_; $j = $m if ($m > $j);
+    
+
+    $width = $j - $i + 2;
+    
+    $aa1 = substr $a1, $i, $width; $aa1 =~ tr/0/1/c;
+    $aa2 = substr $a2, $i, $width; $aa2 =~ tr/0/1/c;
+    $aa3 = substr $a3, $i, $width; $aa3 =~ tr/0/1/c;
+    $aa4 = substr $a4, $i, $width; $aa4 =~ tr/0/1/c;
+}
+
+@ilines = split /\s*-\s*/, "@ARGV";
+
+for ($i = 0; $i < 14; $i++)
+{
+    $line[$i] = "0" x 72;
+}
+
+$l = 0;
+foreach (@ilines)
+{
+    $p = 0;
+
+    @lc = split //, $_;
+
+    foreach (@lc)
+    {
+       searchalpha($_);
+       $l1 .= $aa1;
+       $l2 .= $aa2;
+       $l3 .= $aa3;
+       $l4 .= $aa4;
+    }
+
+    $line[$l++] = substr $l1 . "0" x 72, 0, 72;
+    $line[$l++] = substr $l2 . "0" x 72, 0, 72;
+    $line[$l++] = substr $l3 . "0" x 72, 0, 72;
+    $line[$l++] = substr $l4 . "0" x 72, 0, 72;
+    $line[$l++] = "0" x 72;
+
+    undef $l1;  undef $l2;  undef $l3;  undef $l4; 
+}
+
+# header is just copied from gnokii.nol.
+print "NOL\000\001\000\346\000\001\000\110\000\016\000\001\000\001\000\126\000";
+
+for ($i = 0; $i < 14; $i++)
+{
+    print "$line[$i]";
+}
diff --git a/xgnokii/Makefile b/xgnokii/Makefile
new file mode 100644 (file)
index 0000000..c3e220b
--- /dev/null
@@ -0,0 +1,102 @@
+
+
+#
+# Makefile for the xGNOKII tool suite.
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+CFLAGS += -DXGNOKIIDOCSDIR=\"$(docdir)\" \
+         $(PTHREAD_CFLAGS) \
+         $(GTK_CFLAGS) 
+
+LDLIBS += $(PTHREAD_LIBS) \
+          $(GTK_LIBS) 
+
+ifdef XPM_LIBS
+    LDLIBS += $(XPM_LIBS)
+endif
+
+OBJS =         xgnokii.o \
+       xgnokii_common.o \
+       xgnokii_contacts.o \
+       xgnokii_sms.o \
+       xgnokii_netmon.o \
+       xgnokii_dtmf.o \
+       xgnokii_cfg.o \
+       xgnokii_speed.o \
+       xgnokii_xkeyb.o \
+       xgnokii_calendar.o \
+       xgnokii_logos.o \
+       xgnokii_xring.o \
+       xgnokii_lowlevel.o \
+       xgnokii_data.o
+
+all: xgnokii
+
+xgnokii: $(OBJS) $(TOPDIR)/common/COMMON.o $(TOPDIR)/common/DATA.o $(TOPDIR)/common/gsm-filetypes.o
+       $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
+
+$(TOPDIR)/common/COMMON.o: 
+       $(MAKE) -C $(TOPDIR)/common COMMON.o
+
+$(TOPDIR)/common/DATA.o:
+       $(MAKE) -C $(TOPDIR)/common DATA.o
+
+$(TOPDIR)/common/gsm-filetypes.o: 
+       $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o
+
+$(TOPDIR)/common/libmygnokii.so:
+       $(MAKE) -C $(TOPDIR)/common makelib
+       
+xgnokiilib: $(OBJS) $(TOPDIR)/common/libmygnokii.so
+       $(CC) $(LDFLAGS) $(TARGET_ARCH) $(OBJS) -L$(TOPDIR)/common -lmygnokii $(LOADLIBES) $(LDLIBS) -o $@
+
+makelib: xgnokiilib
+       
+clean:
+       $(RM) $(OBJS) *~ xpm/*~ depend xgnokii xgnokiilib
+
+install: all
+       $(INSTALL) -d $(xbindir)
+       $(INSTALL) xgnokii $(xbindir)
+       $(INSTALL) xgnokiilib $(xbindir)/xgnokii
+       $(INSTALL) -d $(xgnokii_libdir)/xpm
+
+install-strip: all
+       $(INSTALL) -d $(xbindir)
+       $(INSTALL) -s xgnokii $(xbindir)
+       $(INSTALL) -s xgnokiilib $(xbindir)/xgnokii
+       $(INSTALL) -d $(xgnokii_libdir)/xpm
+       @echo "done"
+
+install-suid: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -d $(xbindir)
+       $(INSTALL) -o root -g gnokii -m 0750 xgnokii $(xbindir)
+       $(INSTALL) -o root -g gnokii -m 0750 xgnokiilib $(xbindir)/xgnokii
+       $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/xpm
+       @echo
+
+install-ss: all
+       @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+               /usr/sbin/groupadd gnokii; \
+       fi
+       $(INSTALL) -o root -g gnokii -d $(xbindir)
+       $(INSTALL) -o root -g gnokii -m 0750 -s xgnokii $(xbindir)
+       $(INSTALL) -o root -g gnokii -m 0750 -s xgnokiilib $(xbindir)/xgnokii
+       $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/xpm
+       @echo
+
+depend dep:
+       $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+
+.PHONY: all install clean dep depend
diff --git a/xgnokii/VERSION b/xgnokii/VERSION
new file mode 100644 (file)
index 0000000..0b2c357
--- /dev/null
@@ -0,0 +1 @@
+20000715
\ No newline at end of file
diff --git a/xgnokii/xgnokii.c b/xgnokii/xgnokii.c
new file mode 100644 (file)
index 0000000..233ebd6
--- /dev/null
@@ -0,0 +1,2481 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h>  /* for getenv */
+#include <locale.h>
+#include <string.h>
+#include <time.h>    /* for time   */
+#include <pthread.h>
+
+#ifndef WIN32
+# include <unistd.h>  /* for usleep */
+# include <signal.h>
+#else
+# include <windows.h>
+# include "../win32/winserial.h"
+# define WRITEPHONE(a, b, c) WriteCommBlock(b, c)
+# undef IN
+# undef OUT
+# define sleep(x) Sleep((x) * 1000)
+# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000))
+#endif
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "files/cfgreader.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_sms.h"
+#include "xgnokii_netmon.h"
+#include "xgnokii_dtmf.h"
+#include "xgnokii_speed.h"
+#include "xgnokii_xkeyb.h"
+#include "xgnokii_calendar.h"
+#include "xgnokii_logos.h"
+#include "xgnokii_xring.h"
+#include "xgnokii_cfg.h"
+#include "xgnokii_data.h"
+#include "newmodules/n6110.h"
+
+#include "xpm/logo.xpm"
+#include "xpm/background.xpm"
+#include "xpm/sms.xpm"
+#include "xpm/alarm.xpm"
+
+/* Widgets for dialogs. */
+static GtkWidget *SplashWindow;
+static GtkWidget *GUI_MainWindow;
+static GtkWidget *AboutDialog;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static GtkWidget *OptionsDialog;
+static bool optionsDialogIsOpened;
+
+/* SMS sets list */
+static GtkWidget *SMSClist;
+
+/* Pixmap used for drawing all the stuff. */
+static GdkPixmap *Pixmap = NULL;
+
+/* Pixmap used for background. */
+static GdkPixmap *BackgroundPixmap = NULL;
+
+/* Pixmap used for SMS picture. */
+static GdkPixmap *SMSPixmap = NULL;
+
+/* Pixmap used for alarm picture. */
+static GdkPixmap *AlarmPixmap = NULL;
+
+
+/* Widget for popup menu */
+static GtkWidget *Menu;
+static GtkWidget *netmon_menu_item;
+static GtkWidget *sms_menu_item;
+static GtkWidget *calendar_menu_item;
+static GtkWidget *logos_menu_item;
+static GtkWidget *dtmf_menu_item;
+static GtkWidget *speedDial_menu_item;
+static GtkWidget *xkeyb_menu_item;
+static GtkWidget *cg_names_option_frame;
+static GtkWidget *sms_option_frame;
+static GtkWidget *mail_option_frame;
+static GtkWidget *user_option_frame;
+static GtkWidget *data_menu_item;
+
+/* Hold main configuration data for xgnokii */
+XgnokiiConfig xgnokiiConfig;
+
+gint max_phonebook_name_length; 
+gint max_phonebook_number_length;
+gint max_phonebook_sim_name_length;
+gint max_phonebook_sim_number_length;
+
+/* Local variables */
+static char *DefaultXGnokiiDir = XGNOKIIDIR;
+static char *DefaultXGnokiiDocsDir = XGNOKIIDOCSDIR;
+static bool SMSSettingsInitialized = FALSE;
+static bool CallersGroupsInitialized = FALSE;
+static bool SMSFoldersInitialized = FALSE;
+static gint hiddenCallDialog;
+static guint splashRemoveHandler;
+
+GSM_SMSFolders folders;
+
+static struct CallDialog {
+  GtkWidget *dialog;
+  GtkWidget *label;
+} inCallDialog;
+
+typedef struct {
+  GtkWidget *alarmSwitch;
+  GtkWidget *alarmHour;
+  GtkWidget *alarmMin;
+} AlarmWidgets;
+
+typedef struct {
+  GtkWidget *port;
+  GtkWidget *model;
+  GtkWidget *init;
+  GtkWidget *bindir;
+  GtkWidget *serial, *infrared, *mbus;
+} ConnectionWidgets;
+
+typedef struct {
+  GtkWidget *model;
+  GtkWidget *version;
+  GtkWidget *revision;
+  GtkWidget *imei;
+  GtkWidget *simNameLen;
+  GtkWidget *phoneNameLen;
+} PhoneWidgets;
+
+typedef struct {
+  GtkWidget *set;
+  GtkWidget *number;
+  GtkWidget *defaultrecipient;
+  GtkWidget *format;
+  GtkWidget *validity;
+  GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
+} SMSWidgets;
+
+typedef struct {
+  GtkWidget *name;
+  GtkWidget *title;
+  GtkWidget *company;
+  GtkWidget *telephone;
+  GtkWidget *fax;
+  GtkWidget *email;
+  GtkWidget *address;
+  GtkWidget *status;
+  gint   max;
+  gint   used;
+} UserWidget;
+
+static struct ConfigDialogData
+{
+  ConnectionWidgets connection;
+  PhoneWidgets phone;
+  GtkWidget *groups[6];
+  AlarmWidgets alarm;
+  SMSWidgets sms;
+  UserWidget user;
+  GtkWidget *mailbox;
+  GtkWidget *help;
+} configDialogData;
+
+static GSM_MessageCenter tempMessageSettings;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/main/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+void GUI_InitSMSFoldersInf (void)
+{
+  if (SMSFoldersInitialized)
+    return;
+
+  GSM->GetSMSFolders(&folders);
+  
+  SMSFoldersInitialized = TRUE;
+  GUIEventSend (GUI_EVENT_SMS_FOLDERS_CHANGED);
+}
+
+void GUI_InitCallerGroupsInf (void)
+{
+  D_CallerGroup *cg;
+  PhoneEvent *e;
+  register gint i;
+
+  if (CallersGroupsInitialized)
+    return;
+
+  gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading caller groups names ..."));
+  gtk_widget_show_now (infoDialog.dialog);
+  GUI_Refresh ();
+
+  xgnokiiConfig.callerGroups[0] = g_strndup( _("Familly"), MAX_CALLER_GROUP_LENGTH);
+  xgnokiiConfig.callerGroups[1] = g_strndup( _("VIP"), MAX_CALLER_GROUP_LENGTH);
+  xgnokiiConfig.callerGroups[2] = g_strndup( _("Friends"), MAX_CALLER_GROUP_LENGTH);
+  xgnokiiConfig.callerGroups[3] = g_strndup( _("Colleagues"), MAX_CALLER_GROUP_LENGTH);
+  xgnokiiConfig.callerGroups[4] = g_strndup( _("Other"), MAX_CALLER_GROUP_LENGTH);
+  xgnokiiConfig.callerGroups[5] = g_strndup( _("No group"), MAX_CALLER_GROUP_LENGTH);
+
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+    for (i = 0; i < 5; i++)
+    {
+      cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+      cg->number = i;
+      e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+      e->event = Event_GetCallerGroup;
+      e->data = cg;
+      GUI_InsertEvent (e);
+      pthread_mutex_lock (&callerGroupMutex);
+      pthread_cond_wait (&callerGroupCond, &callerGroupMutex);
+      pthread_mutex_unlock (&callerGroupMutex);
+
+      if (*cg->text != '\0' && cg->status == GE_NONE)
+      {
+        g_free (xgnokiiConfig.callerGroups[i]);
+        xgnokiiConfig.callerGroups[i] = g_strndup (cg->text, MAX_CALLER_GROUP_LENGTH);
+      }
+      g_free (cg);
+    }
+
+  CallersGroupsInitialized = TRUE;
+  gtk_widget_hide (infoDialog.dialog);
+  GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+}
+
+
+static inline void DrawBackground (GtkWidget *data)
+{
+  gdk_draw_pixmap (Pixmap,
+                  GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+                  BackgroundPixmap,
+                  0, 0,
+                  0, 0,
+                  261, 96);
+}
+
+int network_levels[] = {
+  152, 69, 11, 3,
+  138, 69, 11, 3,
+  124, 69, 11, 4,
+  110, 69, 11, 6
+};
+
+
+static inline void DrawNetwork (GtkWidget *data, int rflevel)
+{
+  int i;
+
+  if (rflevel > 100)
+    rflevel = 100;
+  for (i = 0; (i * 25) <= rflevel; i++)
+  {
+    float percent = ((float) rflevel - i * 25) / 25;
+    
+    if (percent > 1)
+      percent = 1;
+    gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+                        network_levels[4 * i] + network_levels[4 * i + 2] * (1 - percent),
+                        network_levels[4 * i + 1],
+                        network_levels[4 * i + 2] * percent,
+                        network_levels[4 * i + 3]);
+  }
+}
+
+
+int battery_levels[] = {
+  50, 69, 11, 3,
+  64, 69, 11, 3,
+  78, 69, 11, 4,
+  92, 69, 11, 6
+};
+
+static inline void DrawBattery (GtkWidget *data, int batterylevel)
+{
+  int i;
+
+  if (batterylevel < 0)
+    return;
+  if (batterylevel > 100)
+    batterylevel = 100;
+  for (i = 0; (i * 25) <= batterylevel; i++)
+  {
+    float percent = ((float) batterylevel - i * 25) / 25;
+    if (percent > 1)
+      percent = 1;
+    gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+                        battery_levels[4 * i],
+                        battery_levels[4 * i + 1],
+                        battery_levels[4 * i + 2] * percent,
+                        battery_levels[4 * i + 3]);
+  }
+}
+
+static inline void DrawSMS (GtkWidget *data)
+{
+  gdk_draw_pixmap (Pixmap,
+                  GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+                  SMSPixmap,
+                  0, 0,
+                  25, 47,
+                  26, 7);
+}
+
+
+static inline void DrawAlarm (GtkWidget *data)
+{
+  gdk_draw_pixmap (Pixmap,
+                  GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+                  AlarmPixmap,
+                  0, 0,
+                  163, 11,
+                  9, 9);
+}
+
+static inline void DrawText (GtkWidget *data, int at, char *text)
+{
+  static GdkFont *Font;
+
+  Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-*-*");
+  gdk_draw_string (Pixmap,
+                  Font,
+                  GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+                   33, at, text);
+}
+
+
+static inline void DrawSMSReceived (GtkWidget *data)
+{
+  DrawText (data, 25, _("Short Message received"));
+}
+
+
+static inline void DrawWorking (GtkWidget *data)
+{
+  DrawText(data, 40, _("Working ..."));
+}
+
+
+static inline void HideCallDialog (GtkWidget *widget, gpointer data)
+{
+  hiddenCallDialog = 1;
+  gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+static void CreateInCallDialog (void)
+{
+  GtkWidget *button, *hbox;
+
+  inCallDialog.dialog = gtk_dialog_new ();
+  gtk_window_position (GTK_WINDOW (inCallDialog.dialog), GTK_WIN_POS_MOUSE);
+  gtk_window_set_title (GTK_WINDOW (inCallDialog.dialog), _("Call in progress"));
+  gtk_container_set_border_width (GTK_CONTAINER (inCallDialog.dialog), 5);
+  gtk_signal_connect (GTK_OBJECT (inCallDialog.dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->vbox), hbox, FALSE, FALSE, 5);
+  gtk_widget_show (hbox);
+
+  inCallDialog.label = gtk_label_new ("");
+  gtk_box_pack_start (GTK_BOX (hbox), inCallDialog.label, FALSE, FALSE, 0);
+  gtk_widget_show (inCallDialog.label);
+
+  button = gtk_button_new_with_label (_("Hide"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->action_area),
+                      button, TRUE, FALSE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (HideCallDialog), (gpointer) inCallDialog.dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+}
+
+
+static gint Update (gpointer data)
+{
+  static gchar lastCallNum[20] = "";
+  static gchar callBuf[80];
+  static gchar timeBuf[10];
+  static gchar *anonym = "anonymous";
+  static struct tm stm;
+  static gint smsNumber = 0;
+  static gint callTimerStart = 0;
+  gint callTimer = 0;
+  time_t t;
+  static gchar *name;
+  static bool outgoing = TRUE;
+
+
+  /* The number of SMS messages before second */
+  static int smsold=0;
+
+  /* The number of second for we should display "Short Message Received" message */
+  static int smsreceived=-1;
+
+  DrawBackground (data);
+
+  DrawNetwork(data, phoneMonitor.rfLevel);
+
+  DrawBattery(data, phoneMonitor.batteryLevel);
+
+  if (phoneMonitor.alarm)
+    DrawAlarm (data);
+
+  if (phoneMonitor.working)
+    DrawText (data, 25, phoneMonitor.working);
+
+  pthread_mutex_lock (&smsMutex);
+  if (phoneMonitor.sms.unRead > 0)
+  {
+    DrawSMS (data);
+
+    if (phoneMonitor.sms.unRead > smsold && smsold != -1)
+      smsreceived = 10;  /* The message "Short Message Received" is displayed for 10s */
+  }
+  if (smsNumber != phoneMonitor.sms.number)
+    GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+
+  smsold = phoneMonitor.sms.unRead;
+
+  smsNumber = phoneMonitor.sms.number;
+
+  pthread_mutex_unlock (&smsMutex);
+
+  if (smsreceived >= 0)
+  {
+    DrawSMSReceived (data);
+    smsreceived--;
+  }
+
+  pthread_mutex_lock (&callMutex);
+  if (phoneMonitor.call.callInProgress != CS_Idle)
+  {
+    if (phoneMonitor.call.callInProgress == CS_InProgress)
+    {
+      if (!callTimerStart)
+        callTimerStart = callTimer = time (NULL);
+      else
+        callTimer = time (NULL);
+    }
+
+    if (phoneMonitor.call.callInProgress == CS_Waiting)
+    {
+      outgoing = FALSE;
+
+      if (*phoneMonitor.call.callNum == '\0')
+        name = anonym;
+      else if (strncmp (phoneMonitor.call.callNum, lastCallNum, 20))
+      {
+        strncpy (lastCallNum, phoneMonitor.call.callNum, 20);
+        lastCallNum[19] = '\0';
+        name = GUI_GetName (phoneMonitor.call.callNum);
+        if (!name)
+          name = phoneMonitor.call.callNum;
+      }
+    }
+    t = (time_t) difftime (callTimer, callTimerStart);
+    (void) gmtime_r (&t, &stm);
+    strftime (timeBuf, 10, "%T", &stm);
+    if (outgoing)
+      g_snprintf (callBuf, 80, _("Outgoing call in progress:\nTime: %s"),
+                  timeBuf);
+    else
+      g_snprintf (callBuf, 80, _("Incomming call from: %s\nTime: %s"),
+                  name, timeBuf);
+
+    gtk_label_set_text (GTK_LABEL (inCallDialog.label), callBuf);
+    if (!GTK_WIDGET_VISIBLE (inCallDialog.dialog) && !hiddenCallDialog)
+      gtk_widget_show (inCallDialog.dialog);
+  }
+  else
+  {
+    callTimerStart = callTimer = 0;
+    *lastCallNum = '\0';
+    outgoing = TRUE;
+    if (GTK_WIDGET_VISIBLE (inCallDialog.dialog))
+      gtk_widget_hide (inCallDialog.dialog);
+    hiddenCallDialog = 0;
+  }
+  pthread_mutex_unlock (&callMutex);
+
+  gtk_widget_draw (data,NULL);
+
+  GUIEventSend (GUI_EVENT_NETMON_CHANGED);
+
+  return TRUE;
+}
+
+
+/* Redraw the screen from the backing pixmap */
+static inline gint ExposeEvent (GtkWidget *widget, GdkEventExpose *event)
+{
+  gdk_draw_pixmap (widget->window,
+                  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                  Pixmap,
+                  event->area.x, event->area.y,
+                  event->area.x, event->area.y,
+                  event->area.width, event->area.height);
+
+  return FALSE;
+}
+
+
+static void ParseSMSCenters (void)
+{
+  register gint i;
+  register gint j;
+
+  gtk_clist_freeze (GTK_CLIST (SMSClist));
+
+  gtk_clist_clear (GTK_CLIST (SMSClist));
+
+  for (i = 0; i < xgnokiiConfig.smsSets; i++)
+  {
+    gchar *row[5];
+    if (*(configDialogData.sms.smsSetting[i].Name) == '\0')
+      row[0] = g_strdup_printf (_("Set %d"), i + 1);
+    else
+      row[0] = g_strdup (configDialogData.sms.smsSetting[i].Name);
+
+    row[1] = g_strdup (configDialogData.sms.smsSetting[i].Number);
+
+    switch (configDialogData.sms.smsSetting[i].Format)
+    {
+      case GSMF_Text:
+        row[2] = g_strdup (_("Text"));
+        break;
+
+    case GSMF_Paging:
+        row[2] = g_strdup (_("Paging"));
+        break;
+
+    case GSMF_Fax:
+        row[2] = g_strdup (_("Fax"));
+        break;
+
+    case GSMF_Email:
+    case GSMF_UCI:
+        row[2] = g_strdup (_("E-Mail"));
+        break;
+
+    case GSMF_ERMES:
+        row[2] = g_strdup (_("ERMES"));
+        break;
+
+    case GSMF_X400:
+        row[2] = g_strdup (_("X.400"));
+        break;
+
+    case GSMF_Voice:
+        row[2] = g_strdup (_("Voice"));
+        break;
+
+    default:
+        row[2] = g_strdup (_("Text"));
+        break;
+    }
+
+    switch (configDialogData.sms.smsSetting[i].Validity)
+    {
+      case GSMV_1_Hour:
+        row[3] = g_strdup (_("1 h"));
+        break;
+
+      case GSMV_6_Hours:
+        row[3] = g_strdup (_("6 h"));
+        break;
+
+      case GSMV_24_Hours:
+        row[3] = g_strdup (_("24 h"));
+        break;
+
+      case GSMV_72_Hours:
+        row[3] = g_strdup (_("72 h"));
+        break;
+
+      case GSMV_1_Week:
+        row[3] = g_strdup (_("1 week"));
+        break;
+
+      case GSMV_Max_Time:
+        row[3] = g_strdup (_("Max. time"));
+        break;
+
+      default:
+        row[3] = g_strdup (_("24 h"));
+        break;
+    }
+
+    row[4] = g_strdup (configDialogData.sms.smsSetting[i].DefaultRecipient);
+    
+    gtk_clist_append( GTK_CLIST (SMSClist), row); 
+
+    for (j = 0; j < 5; j++)
+      g_free (row[j]);
+  }
+
+  gtk_clist_thaw (GTK_CLIST (SMSClist));
+}
+
+
+static void RefreshUserStatus (void)
+{
+  gchar buf[8];
+  configDialogData.user.used = GTK_ENTRY (configDialogData.user.name)->text_length
+                             + GTK_ENTRY (configDialogData.user.title)->text_length
+                             + GTK_ENTRY (configDialogData.user.company)->text_length
+                             + GTK_ENTRY (configDialogData.user.telephone)->text_length
+                             + GTK_ENTRY (configDialogData.user.fax)->text_length
+                             + GTK_ENTRY (configDialogData.user.email)->text_length
+                             + GTK_ENTRY (configDialogData.user.address)->text_length;
+  configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+  if (GTK_ENTRY (configDialogData.user.telephone)->text_length > 0)
+    configDialogData.user.max -= 4;
+  if (GTK_ENTRY (configDialogData.user.fax)->text_length > 0)
+    configDialogData.user.max -= 4;
+  g_snprintf (buf, 8, "%d/%d", configDialogData.user.used, configDialogData.user.max);
+  gtk_label_set_text (GTK_LABEL (configDialogData.user.status), buf);
+}
+
+
+void GUI_InitSMSSettings (void)
+{
+  PhoneEvent *e;
+  D_SMSCenter *c;
+  register gint i;
+
+  if (SMSSettingsInitialized)
+    return;
+
+  gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading SMS centers ..."));
+  gtk_widget_show_now (infoDialog.dialog);
+  GUI_Refresh ();
+
+  for (i = 1; i <= MAX_SMS_CENTER; i++)
+  {
+    xgnokiiConfig.smsSetting[i - 1].No = i;
+    c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+    c->center = &(xgnokiiConfig.smsSetting[i - 1]);
+
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_GetSMSCenter;
+    e->data = c;
+    GUI_InsertEvent (e);
+    pthread_mutex_lock (&smsCenterMutex);
+    pthread_cond_wait (&smsCenterCond, &smsCenterMutex);
+    pthread_mutex_unlock (&smsCenterMutex);
+
+    if (c->status != GE_NONE)
+      break;
+
+    g_free (c);
+
+    configDialogData.sms.smsSetting[i - 1] = xgnokiiConfig.smsSetting[i - 1];
+  }
+
+  xgnokiiConfig.smsSets = i - 1;
+
+  ParseSMSCenters ();
+
+  SMSSettingsInitialized = TRUE;
+  
+  gtk_widget_hide (infoDialog.dialog);
+}
+
+
+void GUI_ShowOptions (void)
+{
+  PhoneEvent *e;
+  D_Alarm *alarm;
+  register gint i;
+
+  if (optionsDialogIsOpened)
+    return;
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.port), xgnokiiConfig.port);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.model), xgnokiiConfig.model);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.init), xgnokiiConfig.initlength);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.bindir), xgnokiiConfig.bindir);
+
+  if (!strcmp(xgnokiiConfig.connection, "fbus"))
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.serial), TRUE);
+
+  if (!strcmp(xgnokiiConfig.connection, "infrared"))
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.infrared), TRUE);
+
+  if (!strcmp(xgnokiiConfig.connection, "mbus"))
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.mbus), TRUE);
+
+  /* Phone */
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.model), phoneMonitor.phone.model);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.version), phoneMonitor.phone.version);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.revision), phoneMonitor.phone.revision);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.imei), phoneMonitor.phone.imei);
+
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen),
+                             atof (xgnokiiConfig.maxSIMLen));
+
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen),
+                             atof (xgnokiiConfig.maxPhoneLen));
+                             
+  /* Alarm */
+  alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetAlarm;
+  e->data = alarm;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&alarmMutex);
+  pthread_cond_wait (&alarmCond, &alarmMutex);
+  pthread_mutex_unlock (&alarmMutex);
+
+  if (alarm->status != GE_NONE)
+  {
+    xgnokiiConfig.alarmSupported = FALSE;
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), 0.0);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), 0.0);
+  }
+  else
+  {
+    xgnokiiConfig.alarmSupported = TRUE;
+    if (alarm->time.IsSet)
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), TRUE);
+    else
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), alarm->time.Hour);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), alarm->time.Minute);
+  }
+  g_free (alarm);  
+
+  /* SMS */
+  if (GetModelFeature(FN_SMS)!=0)
+  {
+    gtk_widget_show (sms_option_frame);
+    GUI_InitSMSSettings ();
+  }
+  else
+    gtk_widget_hide (sms_option_frame);
+
+
+  /* BUSINESS CARD */
+  if (GetModelFeature(FN_SMS)!=0)
+  {
+    gtk_widget_show (user_option_frame);
+
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.name),
+                        xgnokiiConfig.user.name);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.title),
+                        xgnokiiConfig.user.title);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.company),
+                        xgnokiiConfig.user.company);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.telephone),
+                        xgnokiiConfig.user.telephone);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.fax),
+                        xgnokiiConfig.user.fax);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.email),
+                        xgnokiiConfig.user.email);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.user.address),
+                        xgnokiiConfig.user.address);
+
+    RefreshUserStatus();
+  }
+  else
+    gtk_widget_hide (user_option_frame);
+
+
+  /* Groups */
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    gtk_widget_show (cg_names_option_frame);
+    GUI_InitCallerGroupsInf ();
+    for ( i = 0; i < 6; i++)
+      gtk_entry_set_text (GTK_ENTRY (configDialogData.groups[i]), xgnokiiConfig.callerGroups[i]);
+  }
+  else
+    gtk_widget_hide (cg_names_option_frame);
+
+  /* Mail */
+  if (GetModelFeature(FN_SMS)!=0)
+  {
+    gtk_widget_show (mail_option_frame);
+    gtk_entry_set_text (GTK_ENTRY (configDialogData.mailbox),
+                        xgnokiiConfig.mailbox);;
+  }
+  else
+    gtk_widget_hide (mail_option_frame);
+
+  /* Help */
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.help),
+                      xgnokiiConfig.helpviewer);
+
+  if (GetModelFeature(FN_SMSCDEFAULT)!=0) {} else
+    gtk_clist_set_column_visibility (GTK_CLIST (SMSClist), 4, (GetModelFeature(FN_SMSCDEFAULT)!=0));
+
+  optionsDialogIsOpened = TRUE;
+  gtk_widget_show (OptionsDialog);
+}
+
+
+inline void GUI_ShowAbout (void)
+{
+  gtk_widget_show (AboutDialog);
+}
+
+
+inline void GUI_HideAbout(void)
+{
+  gtk_widget_hide (AboutDialog);
+}
+
+
+static void MainExit (void)
+{
+  PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+
+  e->event = Event_Exit;
+  e->data = NULL;
+  GUI_InsertEvent (e);
+  pthread_join (monitor_th, NULL); 
+
+  //need to correctly close connection
+  GSM->Terminate();
+
+  gtk_main_quit();
+}
+
+
+static void ShowMenu (GdkEventButton *event)
+{
+  GdkEventButton *bevent = (GdkEventButton *) event;
+
+  if (GetModelFeature(FN_KEYPRESS)!=0)
+    gtk_widget_show (xkeyb_menu_item);
+  else
+    gtk_widget_hide (xkeyb_menu_item);
+
+  if (GetModelFeature(FN_NETMONITOR)!=0)
+    gtk_widget_show (netmon_menu_item);
+  else
+    gtk_widget_hide (netmon_menu_item);
+
+  if (GetModelFeature(FN_SMS)!=0)
+    gtk_widget_show (sms_menu_item);
+  else
+    gtk_widget_hide (sms_menu_item);
+
+  if (GetModelFeature(FN_CALENDAR)!=0)
+    gtk_widget_show (calendar_menu_item);
+  else
+    gtk_widget_hide (calendar_menu_item);
+
+  if (GetModelFeature(FN_DTMF)!=0)
+    gtk_widget_show (dtmf_menu_item);
+  else
+    gtk_widget_hide (dtmf_menu_item);
+
+  if (GetModelFeature(FN_SPEEDDIAL)!=0)
+    gtk_widget_show (speedDial_menu_item);
+  else
+    gtk_widget_hide (speedDial_menu_item);
+  
+  if (GetModelFeature(FN_DATACALLS)!=0)
+    gtk_widget_show (data_menu_item);
+  else
+    gtk_widget_hide (data_menu_item);
+
+  gtk_menu_popup (GTK_MENU (Menu), NULL, NULL, NULL, NULL,
+                          bevent->button, bevent->time);
+}
+
+
+static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event)
+{
+  /* Left button */
+  if (event->button == 1) {
+
+    /* Close */
+    if (event->x >= 206 && event->x <= 221 &&
+       event->y >=  42 && event->y <= 55)
+    {
+      if (GUI_ContactsIsChanged())
+        GUI_QuitSaveContacts();
+      else
+        MainExit ();
+    }
+    else if ((event->x >= 180 && event->x <= 195 &&
+             event->y >=  30 && event->y <= 50) || 
+             (event->x >= 185 && event->x <= 215 &&
+             event->y >=  15 && event->y <= 30))
+    {
+      GUI_ShowContacts ();
+    }
+    else if (event->x >= 190 && event->x <= 210 &&
+             event->y >=  70 && event->y <= 85)
+    {
+      if (GetModelFeature(FN_SMS)==0)
+        phoneMonitor.working = _("SMS not supported!");
+      else
+        GUI_ShowSMS ();
+    }
+    else if (event->x >= 235 && event->x <= 248 &&
+             event->y >=  27 && event->y <= 75) 
+    {
+      if (GetModelFeature(FN_CALENDAR)==0)
+        phoneMonitor.working = _("Calendar not supported!");
+      else
+        GUI_ShowCalendar ();
+    }
+    else if (event->x >= 245 && event->x <= 258 &&
+             event->y >=  83 && event->y <= 93)
+    {
+      GUI_ShowOptions();
+    }
+  } /* Right button */
+  else if (event->button == 3)
+    ShowMenu (event); 
+
+  // g_print ("event->x: %f\n", event->x);
+  // g_print ("event->y: %f\n", event->y);
+
+  return TRUE;
+}
+
+
+static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
+{
+  PhoneEvent *e;
+  D_Alarm *alarm;
+  register gint i;
+
+  /* Phone */
+  max_phonebook_sim_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen));
+  max_phonebook_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen));
+  g_free (xgnokiiConfig.maxSIMLen);
+  g_free (xgnokiiConfig.maxPhoneLen);
+  xgnokiiConfig.maxSIMLen = g_strdup_printf ("%d", max_phonebook_sim_name_length);
+  xgnokiiConfig.maxPhoneLen = g_strdup_printf ("%d", max_phonebook_name_length);
+
+  /* ALARM */
+  /* From fbus-6110.c 
+     FIXME: we should also allow to set the alarm off :-) */  
+  if (xgnokiiConfig.alarmSupported 
+      && GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch)->active) 
+  {
+    alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+    alarm->time.Hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour));
+    alarm->time.Minute = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin));
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SetAlarm;
+    e->data = alarm;
+    GUI_InsertEvent (e);
+  }
+
+  /* SMS */
+  if (GetModelFeature(FN_SMS)!=0)    
+  {
+    for (i = 0; i < xgnokiiConfig.smsSets; i++)
+      xgnokiiConfig.smsSetting[i] = configDialogData.sms.smsSetting[i];
+    GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED);
+  }
+
+  /* BUSINESS CARD */
+  if (GetModelFeature(FN_SMS)!=0)
+  {
+    g_free(xgnokiiConfig.user.name);
+    xgnokiiConfig.user.name = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.name)));
+    g_free(xgnokiiConfig.user.title);
+    xgnokiiConfig.user.title = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.title)));
+    g_free(xgnokiiConfig.user.company);
+    xgnokiiConfig.user.company = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.company)));
+    g_free(xgnokiiConfig.user.telephone);
+    xgnokiiConfig.user.telephone = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.telephone)));
+    g_free(xgnokiiConfig.user.fax);
+    xgnokiiConfig.user.fax = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.fax)));
+    g_free(xgnokiiConfig.user.email);
+    xgnokiiConfig.user.email = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.email)));
+    g_free(xgnokiiConfig.user.address);
+    xgnokiiConfig.user.address = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.address)));
+  }
+
+  /* GROUPS */
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    for ( i = 0; i < 6; i++)
+    {
+      strncpy(xgnokiiConfig.callerGroups[i], 
+              gtk_entry_get_text(GTK_ENTRY (configDialogData.groups[i])),
+              MAX_CALLER_GROUP_LENGTH);
+      xgnokiiConfig.callerGroups[i][MAX_CALLER_GROUP_LENGTH] = '\0';
+    }
+    GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+    GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+  }
+
+  /* Mail */
+  if (GetModelFeature(FN_SMS)!=0)
+  {
+    g_free(xgnokiiConfig.mailbox);
+    xgnokiiConfig.mailbox = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.mailbox)));
+  }
+  
+  /* Help */
+  g_free(xgnokiiConfig.helpviewer);
+  xgnokiiConfig.helpviewer = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.help)));
+}
+
+
+static void OptionsSaveCallback (GtkWidget *widget, gpointer data )
+{
+  D_CallerGroup *cg;
+  D_SMSCenter *c;
+  PhoneEvent *e;
+  register gint i;
+
+  //gtk_widget_hide(GTK_WIDGET(data));
+  OptionsApplyCallback (widget, data);
+  for (i = 0; i < xgnokiiConfig.smsSets; i++)
+  {
+    xgnokiiConfig.smsSetting[i].No = i + 1;
+    c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+    c->center = &(xgnokiiConfig.smsSetting[i]);
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SetSMSCenter;
+    e->data = c;
+    GUI_InsertEvent (e);
+  }
+
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+    cg->number = 0;
+    if (strcmp (xgnokiiConfig.callerGroups[0], _("Familly")) == 0)
+      *cg->text = '\0';
+    else
+      strncpy (cg->text, xgnokiiConfig.callerGroups[0], 256);
+    cg->text[255] = '\0';
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SendCallerGroup;
+    e->data = cg;
+    GUI_InsertEvent (e);
+
+    cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+    cg->number = 1;
+    if (strcmp (xgnokiiConfig.callerGroups[1], _("VIP")) == 0)
+      *cg->text = '\0';
+    else
+      strncpy (cg->text, xgnokiiConfig.callerGroups[1], 256);
+    cg->text[255] = '\0';
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SendCallerGroup;
+    e->data = cg;
+    GUI_InsertEvent (e);
+
+    cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+    cg->number = 2;
+    if (strcmp (xgnokiiConfig.callerGroups[2], _("Friends")) == 0)
+      *cg->text = '\0';
+    else
+      strncpy (cg->text, xgnokiiConfig.callerGroups[2], 256);
+    cg->text[255] = '\0';
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SendCallerGroup;
+    e->data = cg;
+    GUI_InsertEvent (e);
+
+    cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+    cg->number = 3;
+    if (strcmp (xgnokiiConfig.callerGroups[3], _("Colleagues")) == 0)
+      *cg->text = '\0';
+    else
+      strncpy (cg->text, xgnokiiConfig.callerGroups[3], 256);
+    cg->text[255] = '\0';
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SendCallerGroup;
+    e->data = cg;
+    GUI_InsertEvent (e);
+
+    cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+    cg->number = 4;
+    if (strcmp (xgnokiiConfig.callerGroups[4], _("Other")) == 0)
+      *cg->text = '\0';
+    else
+      strncpy (cg->text, xgnokiiConfig.callerGroups[4], 256);
+    cg->text[255] = '\0';
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_SendCallerGroup;
+    e->data = cg;
+    GUI_InsertEvent (e);
+  }
+
+  if (GUI_SaveXConfig())
+  {
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), _("Error writing configuration file!"));
+    gtk_widget_show (errorDialog.dialog);
+  }
+}
+
+
+static GtkWidget *CreateMenu (void)
+{
+  GtkWidget *menu, *menu_items;
+
+  menu = gtk_menu_new ();
+
+  menu_items = gtk_menu_item_new_with_label (_("Contacts"));
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowContacts), NULL);
+  gtk_widget_show (menu_items);
+
+  sms_menu_item = gtk_menu_item_new_with_label (_("SMS"));
+  gtk_menu_append (GTK_MENU (menu), sms_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (sms_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowSMS), NULL);
+
+  calendar_menu_item = gtk_menu_item_new_with_label (_("Calendar"));
+  gtk_menu_append (GTK_MENU (menu), calendar_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (calendar_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowCalendar), NULL);
+
+  logos_menu_item = gtk_menu_item_new_with_label (_("Logos"));
+  gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowLogosWindow), NULL);
+  gtk_widget_show(logos_menu_item);
+
+  logos_menu_item = gtk_menu_item_new_with_label (_("Ringtones"));
+  gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowRingtonesWindow), NULL);
+  gtk_widget_show(logos_menu_item);  
+
+  dtmf_menu_item = gtk_menu_item_new_with_label (_("DTMF"));
+  gtk_menu_append (GTK_MENU (menu), dtmf_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (dtmf_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowDTMF), NULL);
+
+  speedDial_menu_item = gtk_menu_item_new_with_label (_("Speed Dial"));
+  gtk_menu_append (GTK_MENU (menu), speedDial_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (speedDial_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowSpeedDial), NULL);
+
+  xkeyb_menu_item = gtk_menu_item_new_with_label (_("Keyboard"));
+  gtk_menu_append (GTK_MENU (menu), xkeyb_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (xkeyb_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowXkeyb), NULL);
+
+  netmon_menu_item = gtk_menu_item_new_with_label (_("Net Monitor"));
+  gtk_menu_append (GTK_MENU (menu), netmon_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (netmon_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowNetmon), NULL);
+
+  data_menu_item = gtk_menu_item_new_with_label (_("Data calls"));
+  gtk_menu_append (GTK_MENU (menu), data_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (data_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowData), NULL);
+
+  menu_items = gtk_menu_item_new ();
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_widget_show (menu_items);
+
+  menu_items = gtk_menu_item_new_with_label (_("Options"));
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+                             GTK_SIGNAL_FUNC(GUI_ShowOptions), NULL);
+  gtk_widget_show (menu_items);
+
+  menu_items = gtk_menu_item_new ();
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_widget_show (menu_items);
+
+  menu_items = gtk_menu_item_new_with_label (_("Help"));
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+                             GTK_SIGNAL_FUNC(Help1), NULL);
+  gtk_widget_show (menu_items);
+
+  menu_items = gtk_menu_item_new_with_label (_("About"));
+  gtk_menu_append (GTK_MENU (menu), menu_items);
+  gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowAbout), NULL);
+  gtk_widget_show (menu_items);
+
+  return menu;
+}
+
+
+static GtkWidget *CreateAboutDialog (void)
+{
+  GtkWidget *dialog;
+  GtkWidget *button, *hbox, *label;
+  gchar buf[200];
+
+  dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (dialog), _("About"));
+  gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+  gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  button = gtk_button_new_with_label (_("Ok"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, FALSE, 5);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (GUI_HideAbout), NULL);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  g_snprintf (buf, 200, _("xgnokii version: %s\ngnokii version: %s\n\n\
+Copyright (C) 1999 Pavel Janík ml.,\nHugh Blemings & Jan Derfinak\n"), XVERSION, VERSION);
+  label = gtk_label_new ((gchar *) buf);
+  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  return dialog;
+}
+
+
+static inline void SetFormat (GtkWidget *item, gpointer data)
+{
+  tempMessageSettings.Format = GPOINTER_TO_INT (data);
+}
+
+
+static inline void SetValidity (GtkWidget *item, gpointer data)
+{
+  tempMessageSettings.Validity = GPOINTER_TO_INT (data);
+}
+
+
+static inline void OptionsDeleteEvent (GtkWidget *widget, GdkEvent *event, gpointer data )
+{
+  gtk_widget_hide( GTK_WIDGET (widget));
+  optionsDialogIsOpened = FALSE;
+}
+
+
+static inline void OptionsCloseCallback (GtkWidget *widget, gpointer data )
+{
+  gtk_widget_hide(GTK_WIDGET(data));
+  optionsDialogIsOpened = FALSE;
+}
+
+
+static gint CheckInUserDataLength (GtkWidget *widget,
+                                   GdkEvent  *event,
+                                   gpointer   callback_data)
+{
+  register gint len;
+
+  len = configDialogData.user.max - (GTK_ENTRY (configDialogData.user.name)->text_length
+      + GTK_ENTRY (configDialogData.user.title)->text_length
+      + GTK_ENTRY (configDialogData.user.company)->text_length
+      + GTK_ENTRY (configDialogData.user.telephone)->text_length
+      + GTK_ENTRY (configDialogData.user.fax)->text_length
+      + GTK_ENTRY (configDialogData.user.email)->text_length
+      + GTK_ENTRY (configDialogData.user.address)->text_length
+      - GTK_ENTRY (widget)->text_length);
+
+  if (len < 1)
+  {
+    gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+    return (FALSE);
+  }
+  else 
+    gtk_entry_set_editable (GTK_ENTRY (widget), TRUE);
+  if (GPOINTER_TO_INT (callback_data) == 3
+      || GPOINTER_TO_INT (callback_data) == 4)
+  {
+    if ((GPOINTER_TO_INT (callback_data) == 3
+        && GTK_ENTRY (configDialogData.user.telephone)->text_length == 0)
+        || (GPOINTER_TO_INT (callback_data) == 4
+        && GTK_ENTRY (configDialogData.user.fax)->text_length == 0))
+      len -= 4;
+
+    if (len < 1)
+    {
+      gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+      return (FALSE);
+    }
+
+    if (len > max_phonebook_number_length)
+      len = max_phonebook_number_length;
+  }
+
+  gtk_entry_set_max_length (GTK_ENTRY (widget), len);
+  return (FALSE);
+}
+
+
+static inline gint CheckOutUserDataLength (GtkWidget *widget,
+                                           GdkEvent  *event,
+                                           gpointer   callback_data)
+{
+  gtk_entry_set_max_length (GTK_ENTRY (widget), GPOINTER_TO_INT (callback_data));
+  return (FALSE);  
+}
+
+
+static inline gint RefreshUserStatusCallBack (GtkWidget   *widget,
+                                              GdkEventKey *event,
+                                              gpointer     callback_data)
+{
+  RefreshUserStatus ();
+  if (GTK_EDITABLE (widget)->editable == FALSE)
+    return (FALSE);
+  if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear ||
+      event->keyval == GDK_Insert || event->keyval == GDK_Delete ||
+      event->keyval == GDK_Home || event->keyval == GDK_End ||
+      event->keyval == GDK_Left || event->keyval == GDK_Right ||
+      event->keyval == GDK_Return ||
+      (event->keyval >= 0x20 && event->keyval <= 0xFF))
+    return (TRUE);
+
+  return (FALSE);
+}
+
+
+static void OkEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+
+  strncpy(configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name,
+          gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.set)),
+          GSM_MAX_SMS_CENTER_NAME_LENGTH);
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name[GSM_MAX_SMS_CENTER_NAME_LENGTH - 1]
+    = '\0';
+
+  strncpy(configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number,
+          gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.number)),
+          GSM_MAX_SMS_CENTER_LENGTH);
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number[GSM_MAX_SMS_CENTER_LENGTH]
+    = '\0';
+
+  strncpy(configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient,
+          gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.defaultrecipient)),
+          GSM_MAX_RECIPIENT_LENGTH);
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient[GSM_MAX_RECIPIENT_LENGTH]
+    = '\0';
+
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format
+    = tempMessageSettings.Format;
+
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity
+    = tempMessageSettings.Validity;
+
+  ParseSMSCenters ();
+
+  gtk_widget_hide (GTK_WIDGET (data));  
+}
+
+
+static inline void EditSMSSetDialogClick (GtkWidget        *clist,
+                                          gint              row,
+                                          gint              column,
+                                          GdkEventButton   *event,
+                                          GtkWidget        *data )
+{
+  if(event && event->type == GDK_2BUTTON_PRESS)
+    gtk_signal_emit_by_name(GTK_OBJECT (data), "clicked");
+}
+
+
+static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+  static GtkWidget *dialog = NULL;
+  GtkWidget *button, *label, *label2, *hbox, *hbox2, *menu, *item;
+
+  if (GTK_CLIST (SMSClist)->selection == NULL)
+    return;
+
+  if (dialog == NULL)
+  {
+    dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (dialog), _("Edit SMS Setting"));
+    gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkEditSMSSetDialog), (gpointer) dialog);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Set's name:"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    configDialogData.sms.set = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_NAME_LENGTH - 1);
+    gtk_widget_set_usize (configDialogData.sms.set, 110, 22);
+    gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.set, FALSE, FALSE, 2);
+    gtk_widget_show (configDialogData.sms.set);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Center:"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    configDialogData.sms.number = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_LENGTH - 1);
+    gtk_widget_set_usize (configDialogData.sms.number, 110, 22);
+    gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.number, FALSE, FALSE, 2);
+    gtk_widget_show (configDialogData.sms.number);
+
+    hbox2 = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox2, FALSE, FALSE, 9);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (hbox2);
+
+    label2 = gtk_label_new (_("Default recipient:"));
+    gtk_box_pack_start(GTK_BOX(hbox2), label2, FALSE, FALSE, 2);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (label2);
+
+    configDialogData.sms.defaultrecipient = gtk_entry_new_with_max_length(GSM_MAX_RECIPIENT_LENGTH - 1);
+    gtk_widget_set_usize (configDialogData.sms.defaultrecipient, 110, 22);
+    gtk_box_pack_end(GTK_BOX(hbox2), configDialogData.sms.defaultrecipient, FALSE, FALSE, 2);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (configDialogData.sms.defaultrecipient);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+    gtk_widget_show (hbox);
+    label = gtk_label_new (_("Sending Format:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    configDialogData.sms.format = gtk_option_menu_new ();
+    menu = gtk_menu_new ();
+    gtk_widget_set_usize (configDialogData.sms.format, 110, 28);
+
+    item = gtk_menu_item_new_with_label (_("Text"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetFormat),
+                        (gpointer) GSMF_Text);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("Fax"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetFormat),
+                        (gpointer) GSMF_Fax);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("Paging"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetFormat),
+                        (gpointer) GSMF_Paging);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("E-Mail"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetFormat),
+                        (gpointer) GSMF_Email);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.format), menu);
+    gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.format, FALSE, FALSE, 2);
+    gtk_widget_show (configDialogData.sms.format);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Validity Period:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    configDialogData.sms.validity = gtk_option_menu_new ();
+    menu = gtk_menu_new ();
+    gtk_widget_set_usize (configDialogData.sms.validity, 110, 28);
+
+    item = gtk_menu_item_new_with_label (_("Max. Time"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_Max_Time);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("1 h"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_1_Hour);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("6 h"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_6_Hours);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("24 h"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_24_Hours);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("72 h"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_72_Hours);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    item = gtk_menu_item_new_with_label (_("1 week"));
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC(SetValidity),
+                        (gpointer) GSMV_1_Week);
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (menu), item);
+
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.validity), menu);
+    gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.validity, FALSE, FALSE, 2);
+    gtk_widget_show (configDialogData.sms.validity);
+  }
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.set),
+                      configDialogData.sms.smsSetting
+                      [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.number),
+                      configDialogData.sms.smsSetting
+                      [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number);
+
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.defaultrecipient),
+                      configDialogData.sms.smsSetting
+                      [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient);
+
+  switch (configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format)
+  {
+    case GSMF_Text:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+                                   0);
+      break;
+
+    case GSMF_Paging:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+                                   2);
+      break;
+
+    case GSMF_Fax:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+                                   1);
+      break;
+
+    case GSMF_Email:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+                                   3);
+      break;
+
+    default:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+                                   0);
+  }
+
+  switch (configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity)
+  {
+    case GSMV_1_Hour:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   1);
+      break;
+
+    case GSMV_6_Hours:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   2);
+      break;
+
+    case GSMV_24_Hours:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   3);
+      break;
+
+    case GSMV_72_Hours:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   4);
+      break;
+
+    case GSMV_1_Week:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   5);
+      break;
+
+    case GSMV_Max_Time:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   0);
+      break;
+
+    default:
+      gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+                                   3);
+  }
+
+  tempMessageSettings.Format = configDialogData.sms.smsSetting
+               [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format;
+  tempMessageSettings.Validity = configDialogData.sms.smsSetting
+               [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity;
+
+  gtk_widget_show (dialog);
+}
+
+
+static GtkWidget *CreateOptionsDialog (void)
+{
+  gchar labelBuffer[10];
+  GtkWidget *dialog;
+  GtkWidget *button, *hbox, *vbox, *label, *notebook, *frame, *clistScrolledWindow;
+  register gint i;
+  GtkAdjustment *adj;
+  gchar *titles[5] = { _("Set's name"), _("Center number"), _("Format"), _("Validity"), _("Default recipient")};
+
+  dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (dialog), _("Options"));
+  gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+  gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (OptionsDeleteEvent), NULL);
+
+  button = gtk_button_new_with_label (_("Apply"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (OptionsApplyCallback), (gpointer)dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("Save"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (OptionsSaveCallback), (gpointer)dialog);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("Close"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (OptionsCloseCallback), (gpointer)dialog);
+  gtk_widget_show (button);
+
+  gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+  notebook = gtk_notebook_new ();
+  gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
+  gtk_widget_show(notebook);
+
+  /***  Connection notebook  ***/
+  frame = gtk_frame_new (_("Phone and connection type"));
+  gtk_widget_show (frame);
+
+  vbox = gtk_vbox_new( FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Connection"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Port:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.connection.port = gtk_entry_new_with_max_length (10);
+  gtk_widget_set_usize (configDialogData.connection.port, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.port),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.port, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.port);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Model:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.connection.model = gtk_entry_new_with_max_length (5);
+  gtk_widget_set_usize (configDialogData.connection.model, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.model),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.model, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.model);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Init length:"));
+  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.connection.init = gtk_entry_new_with_max_length (100);
+  gtk_widget_set_usize (configDialogData.connection.init, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.init),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.init, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.init);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Bindir:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.connection.bindir = gtk_entry_new_with_max_length (100);
+  gtk_widget_set_usize (configDialogData.connection.bindir, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.bindir),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.bindir, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.bindir);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Connection:"));
+  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 3);
+  gtk_widget_show (label);
+
+  configDialogData.connection.infrared = gtk_radio_button_new_with_label (NULL, _("infrared"));
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.infrared, TRUE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.infrared);
+
+  configDialogData.connection.serial = gtk_radio_button_new_with_label ( 
+            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("fbus"));
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.serial, TRUE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.serial);
+
+  configDialogData.connection.mbus = gtk_radio_button_new_with_label ( 
+            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.serial)), _("mbus"));
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.mbus, TRUE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.mbus);
+
+  /***  Phone notebook  ***/
+  frame = gtk_frame_new (_("Phone information"));
+  gtk_widget_show (frame);
+
+  vbox = gtk_vbox_new( FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Phone"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Model:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.phone.model = gtk_entry_new_with_max_length (7);
+  gtk_widget_set_usize (configDialogData.phone.model, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.model),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.model, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.model);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Version:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.phone.version = gtk_entry_new_with_max_length (7);
+  gtk_widget_set_usize (configDialogData.phone.version, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.version),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.version, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.version);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Revision:"));
+  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.phone.revision = gtk_entry_new_with_max_length (64);
+  gtk_widget_set_usize (configDialogData.phone.revision, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.revision),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.revision, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.revision);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("IMEI:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.phone.imei = gtk_entry_new_with_max_length (64);
+  gtk_widget_set_usize (configDialogData.phone.imei, 220, 22);
+  gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.imei),
+                          FALSE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.imei, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.imei);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new ("Names length:");
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new ("SIM:");
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+  configDialogData.phone.simNameLen = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+  gtk_box_pack_start (GTK_BOX (hbox), configDialogData.phone.simNameLen, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.simNameLen);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+  configDialogData.phone.phoneNameLen = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.phoneNameLen, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.phone.phoneNameLen);
+
+  label = gtk_label_new ("Phone:");
+  gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  /***  Alarm notebook  ***/
+  xgnokiiConfig.alarmSupported = TRUE;
+
+  frame = gtk_frame_new (_("Alarm setting"));
+  gtk_widget_show (frame);
+
+  vbox = gtk_vbox_new( FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_widget_show(vbox);
+
+  label = gtk_label_new (_("Alarm"));
+  gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
+  gtk_widget_show (hbox);
+
+  configDialogData.alarm.alarmSwitch = gtk_check_button_new_with_label (_("Alarm"));
+  gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmSwitch, FALSE, FALSE, 10);
+  gtk_widget_show (configDialogData.alarm.alarmSwitch);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 23.0, 1.0, 4.0, 0.0);
+  configDialogData.alarm.alarmHour = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+  gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmHour, FALSE, FALSE, 0);
+  gtk_widget_show (configDialogData.alarm.alarmHour);
+
+  label = gtk_label_new (":");
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 59.0, 1.0, 10.0, 0.0);
+  configDialogData.alarm.alarmMin = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+  gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmMin, FALSE, FALSE, 0);
+  gtk_widget_show (configDialogData.alarm.alarmMin);
+
+  /***  SMS notebook     ***/
+  sms_option_frame = gtk_frame_new (_("Short Message Service"));
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (sms_option_frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("SMS"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sms_option_frame, label);
+
+  SMSClist = gtk_clist_new_with_titles (5, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (SMSClist), GTK_SHADOW_OUT);
+  gtk_clist_column_titles_passive (GTK_CLIST (SMSClist));
+  gtk_clist_set_auto_sort (GTK_CLIST (SMSClist), FALSE);
+
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 0, 70);
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 1, 115);
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 2, 40);
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 3, 55);
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 4, 100);
+//  gtk_clist_set_column_justification (GTK_CLIST (SMSClist), 1, GTK_JUSTIFY_RIGHT);
+
+  clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (clistScrolledWindow), SMSClist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (vbox), clistScrolledWindow, 
+                      TRUE, TRUE, 10);
+
+  gtk_widget_show (SMSClist);
+
+  gtk_widget_show (clistScrolledWindow);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 9);
+  gtk_widget_show (hbox);
+
+  button = gtk_button_new_with_label (_("Edit"));
+  gtk_box_pack_start (GTK_BOX (hbox),
+                      button, TRUE, FALSE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ShowEditSMSSetDialog), (gpointer)dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  gtk_signal_connect (GTK_OBJECT (SMSClist), "select_row",
+                      GTK_SIGNAL_FUNC (EditSMSSetDialogClick),
+                      (gpointer) button);
+
+  /***  Business notebook  ***/
+  user_option_frame = gtk_frame_new (_("Business Card"));
+
+  vbox = gtk_vbox_new( FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (user_option_frame), vbox);
+  gtk_widget_show(vbox);
+
+  label = gtk_label_new(_("User"));
+  gtk_notebook_append_page( GTK_NOTEBOOK (notebook), user_option_frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  configDialogData.user.status = gtk_label_new ("");
+  gtk_box_pack_end(GTK_BOX(hbox), configDialogData.user.status, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.status);
+
+  configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+  configDialogData.user.used = 0;
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Name:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.name = gtk_entry_new_with_max_length(configDialogData.user.max);
+  gtk_widget_set_usize (configDialogData.user.name, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 0);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+                      (gpointer) configDialogData.user.max);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.name, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.name);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Title:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.title = gtk_entry_new_with_max_length(configDialogData.user.max);
+  gtk_widget_set_usize (configDialogData.user.title, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 1);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+                      (gpointer) configDialogData.user.max);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.title, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.title);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Company:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.company = gtk_entry_new_with_max_length(configDialogData.user.max);
+  gtk_widget_set_usize (configDialogData.user.company, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 2);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+                      (gpointer) configDialogData.user.max);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.company, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.company);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Telephone:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.telephone = gtk_entry_new_with_max_length(max_phonebook_number_length);
+  gtk_widget_set_usize (configDialogData.user.telephone, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 3);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.telephone, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.telephone);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Fax:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.fax = gtk_entry_new_with_max_length(max_phonebook_number_length);
+  gtk_widget_set_usize (configDialogData.user.fax, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 4);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.fax, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.fax);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("E-Mail:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.email = gtk_entry_new_with_max_length(configDialogData.user.max);
+  gtk_widget_set_usize (configDialogData.user.email, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 5);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+                      (gpointer) configDialogData.user.max);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.email, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.email);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Address:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.user.address = gtk_entry_new_with_max_length(configDialogData.user.max);
+  gtk_widget_set_usize (configDialogData.user.address, 220, 22);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+                      "focus_in_event",
+                      GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 6);
+  gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+                      "focus_out_event",
+                      GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+                      (gpointer) configDialogData.user.max);
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.address, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.user.address);
+
+
+  /***  Groups notebook  ***/
+  cg_names_option_frame = gtk_frame_new (_("Caller groups names"));
+
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (cg_names_option_frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Groups"));
+  gtk_notebook_append_page( GTK_NOTEBOOK (notebook), cg_names_option_frame, label);
+
+  for ( i = 0; i < 6; i++)
+  {
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 3);
+    gtk_widget_show (hbox);
+
+    g_snprintf (labelBuffer, 10, _("Group %d:"), i + 1);
+    label = gtk_label_new (labelBuffer);
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    configDialogData.groups[i] = gtk_entry_new_with_max_length (MAX_CALLER_GROUP_LENGTH);
+    gtk_widget_set_usize (configDialogData.groups[i], 220, 22);
+
+    gtk_box_pack_end (GTK_BOX (hbox), configDialogData.groups[i], FALSE, FALSE, 2);
+    gtk_widget_show (configDialogData.groups[i]);
+  }
+
+  /* Mail */
+  mail_option_frame = gtk_frame_new (_("Mailbox"));
+  gtk_widget_show (mail_option_frame);
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (mail_option_frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Mail"));
+  gtk_notebook_append_page( GTK_NOTEBOOK (notebook), mail_option_frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Path to mailbox:"));
+  gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.mailbox = gtk_entry_new_with_max_length (MAILBOX_LENGTH - 1);
+  gtk_widget_set_usize (configDialogData.mailbox, 220, 22);
+
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.mailbox, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.mailbox);
+
+  /* Help */
+  frame = gtk_frame_new (_("Help viewer"));
+  gtk_widget_show (frame);
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Help"));
+  gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Viewer:"));
+  gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  configDialogData.help = gtk_entry_new_with_max_length (HTMLVIEWER_LENGTH - 1);
+  gtk_widget_set_usize (configDialogData.help, 220, 22);
+
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.help, FALSE, FALSE, 2);
+  gtk_widget_show (configDialogData.help);
+
+
+  optionsDialogIsOpened = FALSE;
+  return dialog;
+}
+
+
+static void TopLevelWindow (void)
+{
+  GtkWidget *drawing_area;
+  GdkBitmap *mask;
+  GtkStyle *style;
+  GdkGC *gc;
+  struct sigaction act;
+
+  GUI_MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_realize (GUI_MainWindow);
+
+  BackgroundPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+  SMSPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_sms);
+
+  AlarmPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_alarm);
+
+  Pixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+//  gdk_window_set_icon_name (GUI_MainWindow->window, "XXX");
+  style = gtk_widget_get_default_style ();
+  gc = style->black_gc;
+
+  /* Create the drawing area */
+  drawing_area = gtk_drawing_area_new ();
+
+  /* Signals used to handle backing pixmap */
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+                     (GtkSignalFunc) ExposeEvent, NULL);
+
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+                     (GtkSignalFunc) ButtonPressEvent, NULL);
+
+  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+                        | GDK_BUTTON_PRESS_MASK);
+
+  gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 261, 96);
+  gtk_container_add (GTK_CONTAINER (GUI_MainWindow), drawing_area);
+
+  gdk_draw_pixmap (drawing_area->window,
+                  drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)],
+                  Pixmap,
+                  0, 0,
+                  0, 0,
+                  261, 96);
+
+  gtk_widget_shape_combine_mask (GUI_MainWindow, mask, 0, 0);
+
+  gtk_signal_connect (GTK_OBJECT (GUI_MainWindow), "destroy",
+                      GTK_SIGNAL_FUNC (MainExit),
+                      NULL);
+
+  Menu = CreateMenu ();
+  OptionsDialog = CreateOptionsDialog ();
+  AboutDialog = CreateAboutDialog ();
+  GUI_CreateSMSWindow ();
+  GUI_CreateContactsWindow ();
+  GUI_CreateNetmonWindow ();
+  GUI_CreateDTMFWindow ();
+  GUI_CreateSpeedDialWindow ();
+  GUI_CreateXkeybWindow ();
+  GUI_CreateCalendarWindow ();
+  GUI_CreateLogosWindow ();
+  GUI_CreateDataWindow();
+  GUI_CreateRingtonesWindow ();
+  CreateErrorDialog (&errorDialog, GUI_MainWindow);
+  CreateInfoDialog (&infoDialog, GUI_MainWindow);
+  CreateInCallDialog ();
+
+  act.sa_handler = RemoveZombie;
+  sigemptyset (&(act.sa_mask));
+  act.sa_flags = SA_NOCLDSTOP;
+  sigaction (SIGCHLD, &act, NULL);
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+  act.sa_handler = SIG_IGN;
+  sigemptyset (&(act.sa_mask));
+  sigaction (SIGALRM, &act, NULL);
+#endif
+
+  gtk_widget_show_all (GUI_MainWindow);
+  GUI_Refresh ();
+
+  GUI_InitPhoneMonitor ();
+  pthread_create (&monitor_th, NULL, GUI_Connect, NULL);
+
+  gtk_timeout_add (1000, (GtkFunction) Update, GUI_MainWindow);
+
+  hiddenCallDialog = 0;
+}
+
+
+static void SplashScreen (void)
+{
+  GtkWidget *pixmap, *fixed;
+  GdkPixmap *gdk_pixmap;
+  GdkBitmap *mask;
+  GtkStyle *style;
+  GdkGC *gc;
+
+  SplashWindow = gtk_window_new (GTK_WINDOW_POPUP);
+  gtk_widget_realize (SplashWindow);
+
+  gtk_widget_set_usize (SplashWindow, 475, 160);
+  gtk_window_position (GTK_WINDOW (SplashWindow), GTK_WIN_POS_CENTER);
+
+  style = gtk_widget_get_default_style();
+  gc = style->black_gc;
+  gdk_pixmap = gdk_pixmap_create_from_xpm_d(SplashWindow->window, &mask,
+                                           &style->bg[GTK_STATE_NORMAL],
+                                           XPM_logo);
+  pixmap = gtk_pixmap_new(gdk_pixmap, mask);
+
+  fixed = gtk_fixed_new();
+  gtk_widget_set_usize(fixed, 261, 96);
+  gtk_fixed_put(GTK_FIXED(fixed), pixmap, 0, 0);
+  gtk_container_add(GTK_CONTAINER (SplashWindow), fixed);
+
+  gtk_widget_shape_combine_mask (SplashWindow, mask, 0, 0);
+
+  gtk_widget_show_all (SplashWindow);
+}
+
+
+static gint RemoveSplash (GtkWidget *Win)
+{
+  if (GTK_WIDGET_VISIBLE (SplashWindow))
+  {
+    gtk_timeout_remove (splashRemoveHandler);
+    gtk_widget_hide (SplashWindow);
+    gtk_widget_destroy (SplashWindow);
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+static void ReadConfig (void)
+{
+  /* Read config file */
+  if (CFG_ReadConfig(&xgnokiiConfig.model, &xgnokiiConfig.port,
+                 &xgnokiiConfig.initlength, &xgnokiiConfig.connection,
+                &xgnokiiConfig.bindir, &xgnokiiConfig.synchronizetime,false) < 0) {
+    exit(-1);
+  }
+  
+#ifndef WIN32
+  if ((xgnokiiConfig.locale = getenv ("LC_ALL")) == NULL)
+    if ((xgnokiiConfig.locale = getenv ("LC_MESSAGES")) == NULL)
+      if ((xgnokiiConfig.locale = getenv ("LANG")) == NULL)
+        xgnokiiConfig.locale = "POSIX";
+#endif
+
+  GUI_ReadXConfig();
+  max_phonebook_name_length = atoi (xgnokiiConfig.maxPhoneLen);
+  max_phonebook_sim_name_length = atoi (xgnokiiConfig.maxSIMLen);
+  
+#ifndef WIN32
+  xgnokiiConfig.xgnokiidir = DefaultXGnokiiDir;
+  xgnokiiConfig.xgnokiidocsdir = DefaultXGnokiiDocsDir;
+#endif
+  if (CheckModel (N6110_Information, xgnokiiConfig.model, CurrentConnectionType)) {
+    max_phonebook_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+    max_phonebook_sim_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+  }
+  else
+  {
+    max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH;
+  }
+
+  xgnokiiConfig.callerGroups[0] = xgnokiiConfig.callerGroups[1] =
+  xgnokiiConfig.callerGroups[2] = xgnokiiConfig.callerGroups[3] =
+  xgnokiiConfig.callerGroups[4] = xgnokiiConfig.callerGroups[5] = NULL;
+  xgnokiiConfig.smsSets = 0;
+}
+
+
+int main (int argc, char *argv[])
+{
+#ifdef USE_NLS
+  textdomain("gnokii");
+#endif
+
+  (void) gtk_set_locale ();
+
+  gtk_init (&argc, &argv);
+
+  /* Show the splash screen. */
+
+  SplashScreen ();
+
+  /* Remove it after a while. */
+
+  ReadConfig ();
+  TopLevelWindow (); 
+
+  splashRemoveHandler = gtk_timeout_add(5000, (GtkFunction) RemoveSplash, (gpointer) SplashWindow);
+
+  gtk_main ();
+
+  return(0);
+}
diff --git a/xgnokii/xgnokii.h b/xgnokii/xgnokii.h
new file mode 100644 (file)
index 0000000..ad79075
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_H
+#define XGNOKII_H
+
+#include <gtk/gtk.h>
+#include "config.h"
+#include "misc.h"
+#include "gsm-sms.h"
+
+#define MAX_CALLER_GROUP_LENGTH        10
+#define MAX_SMS_CENTER         10
+#define MAX_BUSINESS_CARD_LENGTH       139
+
+typedef struct {
+  gchar *name;
+  gchar *title;
+  gchar *company;
+  gchar *telephone;
+  gchar *fax;
+  gchar *email;
+  gchar *address;
+} UserInf;
+
+typedef struct {
+  gchar *initlength; /* Init length from .gnokiirc file */
+  gchar *model;      /* Model from .gnokiirc file. */
+  gchar *port;       /* Serial port from .gnokiirc file */
+  gchar *connection; /* Connection type from .gnokiirc file */
+  gchar *synchronizetime;
+  gchar *bindir;
+  gchar *xgnokiidir;
+  gchar *xgnokiidocsdir;
+  gchar *helpviewer; /* Program to showing help files */
+  gchar *mailbox;    /* Mailbox, where we can save SMS's */
+  gchar *maxSIMLen;  /* Max length of names on SIM card */
+  gchar *maxPhoneLen;/* Max length of names in phone */
+  gchar *locale;
+  GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
+  UserInf user;
+  gchar *callerGroups[6];
+  gint   smsSets:4;
+  bool   alarmSupported:1;
+} XgnokiiConfig;
+
+/* Hold main configuration data for xgnokii */
+extern XgnokiiConfig xgnokiiConfig;
+
+extern gint max_phonebook_name_length;
+extern gint max_phonebook_number_length;
+extern gint max_phonebook_sim_name_length;
+extern gint max_phonebook_sim_number_length;
+extern GSM_SMSFolders folders;
+extern void GUI_InitCallerGroupsInf (void);
+extern void GUI_InitSMSSettings (void);
+extern void GUI_InitSMSFoldersInf (void);
+extern void GUI_ShowAbout (void);
+
+#endif /* XGNOKII_H */
diff --git a/xgnokii/xgnokii_calendar.c b/xgnokii/xgnokii_calendar.c
new file mode 100644 (file)
index 0000000..6c64386
--- /dev/null
@@ -0,0 +1,1524 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <time.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_calendar.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/SendSMS.xpm"
+#include "xpm/NewBD.xpm"
+#include "xpm/NewCall.xpm"
+#include "xpm/NewMeet.xpm"
+#include "xpm/NewRem.xpm"
+#include "xpm/quest.xpm"
+
+
+typedef struct {
+  GtkWidget *calendar;
+  GtkWidget *notesClist;
+  GtkWidget *noteText;
+  GdkColor   colour;
+} CalendarWidget;
+
+
+typedef struct {
+  guint year;
+  guint month;
+  guint day;
+  GtkWidget *button;
+} Date;
+
+
+typedef struct {
+  Date date;
+  guchar hours;
+  guchar minutes;
+  GtkWidget *button;
+  GtkWidget *hButton;
+  GtkWidget *mButton;
+} DateTime;
+
+
+typedef struct {
+  GtkWidget *dialog;
+  Date       date;
+  DateTime   alarm;
+  GtkWidget *alarmCheck;
+  GtkWidget *text;
+} AddDialogData;
+
+typedef struct {
+  GtkWidget *dialog;
+  DateTime   date;
+  DateTime   alarm;
+  GtkWidget *alarmCheck;
+  GtkWidget *text;
+} AddDialogData2;
+
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *cal;
+} CalendarDialog;
+
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *cal;
+} CalTimeDialog;
+
+  
+static GtkWidget *GUI_CalendarWindow;
+static ErrorDialog errorDialog = {NULL, NULL};
+static CalendarWidget cal = {NULL, NULL};
+static QuestMark questMark;
+static AddDialogData addReminderDialogData;
+static AddDialogData2 addCallDialogData;
+static AddDialogData2 addMeetingDialogData;
+static AddDialogData addBirthdayDialogData;
+static CalendarDialog calendarDialog = {NULL, NULL};
+static CalTimeDialog calTimeDialog = {NULL, NULL};
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/help/%s/windows/calendar/index.html", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static inline void CloseCalendar (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_CalendarWindow);
+}
+
+
+inline void GUI_ShowCalendar ()
+{
+  if (GetModelFeature(FN_CALENDAR)!=0)
+    gtk_widget_show (GUI_CalendarWindow);
+}
+
+
+static gint InsertCalendarEntry (GSM_CalendarNote *note)
+{
+  gchar *row[6];
+
+  row[0] = g_strdup_printf ("%d", note->Location);
+
+  switch (note->Type)
+  {
+    case GCN_REMINDER:
+       row[1] = _("Reminder");
+       row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
+                                  note->Time.Month, note->Time.Year);
+       row[5] = "";
+       break;
+
+    case GCN_CALL:
+       row[1] = _("Call");
+       row[2] = g_strdup_printf ("%02d/%02d/%04d  %02d:%02d", note->Time.Day,
+                                  note->Time.Month, note->Time.Year,
+                                  note->Time.Hour, note->Time.Minute);
+       row[5] = note->Phone;
+       break;
+
+    case GCN_MEETING:
+       row[1] = _("Meeting");
+       row[2] = g_strdup_printf ("%02d/%02d/%04d  %02d:%02d", note->Time.Day,
+                                  note->Time.Month, note->Time.Year,
+                                  note->Time.Hour, note->Time.Minute);
+       row[5] = "";
+       break;
+
+    case GCN_BIRTHDAY:
+       row[1] = _("Birthday");
+       row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
+                                  note->Time.Month, note->Time.Year);
+       row[5] = "";
+       break;
+
+    default:
+       row[1] = _("Unknown");
+       row[5] = "";
+       break;
+  }
+
+  row[3] = note->Text;
+
+  if (note->Alarm.Year == 0)
+    row[4] = "";
+  else
+    row[4] = g_strdup_printf ("%02d/%02d/%04d  %02d:%02d", note->Alarm.Day,
+                               note->Alarm.Month, note->Alarm.Year,
+                               note->Alarm.Hour, note->Alarm.Minute);
+
+  gtk_clist_freeze (GTK_CLIST (cal.notesClist));
+  gtk_clist_append (GTK_CLIST (cal.notesClist), row);
+  gtk_clist_sort (GTK_CLIST (cal.notesClist));
+  gtk_clist_thaw (GTK_CLIST (cal.notesClist));
+  
+  g_free (row[0]);
+  g_free (row[2]);
+  if (*row[4] != '\0')
+    g_free (row[4]);
+
+  return (GE_NONE);
+}
+
+static void ClickEntry (GtkWidget      *clist,
+                        gint            row,
+                        gint            column,
+                        GdkEventButton *event,
+                        gpointer        data )
+{
+  gchar *buf;
+
+  gtk_text_freeze (GTK_TEXT (cal.noteText));
+
+  gtk_text_set_point (GTK_TEXT (cal.noteText), 0);
+  gtk_text_forward_delete (GTK_TEXT (cal.noteText), gtk_text_get_length (GTK_TEXT (cal.noteText)));
+
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+                   _("Type: "), -1);
+  gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                   buf, -1);
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+                   _("Date: "), -1);
+  gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                   buf, -1);
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_calendar_select_month (GTK_CALENDAR (cal.calendar),
+                             atoi (buf + 3) - 1, atoi (buf + 6));
+  gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), atoi (buf));
+
+  gtk_clist_get_text (GTK_CLIST (clist), row, 4, &buf);
+  if (*buf != '\0')
+  {
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+                     _("Alarm: "), -1);
+  
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                     buf, -1);
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                     "\n", -1);
+  }
+  
+  gtk_clist_get_text (GTK_CLIST (clist), row, 5, &buf);
+  if (*buf != '\0')
+  {
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+                     _("Number: "), -1);
+  
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                     buf, -1);
+    gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                     "\n", -1);
+  }
+  
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+                   _("Text: "), -1);
+  gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
+  gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+                   buf, -1);
+
+  gtk_text_thaw (GTK_TEXT (cal.noteText));
+}
+
+static inline gint ReadCalendarFailed (gint i)
+{
+  return (0);
+}
+
+static void ReadCalNotes (void)
+{
+  PhoneEvent *e;
+  D_CalendarNoteAll *cna;
+  
+  gtk_clist_clear (GTK_CLIST (cal.notesClist));
+  
+  cna = (D_CalendarNoteAll *) g_malloc (sizeof (D_CalendarNoteAll));
+  cna->InsertEntry = InsertCalendarEntry;
+  cna->ReadFailed = ReadCalendarFailed;
+  
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetCalendarNoteAll;
+  e->data = cna;
+  GUI_InsertEvent (e);
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+  char *text1 = NULL;
+  char *text2 = NULL;
+
+  GtkCListRow *row1 = (GtkCListRow *) ptr1;
+  GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+  switch (row1->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+  switch (row2->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+
+  if (!text2)
+    return (text1 != NULL);
+
+  if (!text1)
+    return -1;
+
+  if (*text2 == '\0')
+    return (*text1 != '\0');
+
+  if (*text1 == '\0')
+    return (-1);
+
+  if (clist->sort_column == 0)
+  {
+    gint n1 = atoi (text1);
+    gint n2 = atoi (text2);
+    
+    if (n1 > n2)
+      return (1);
+    else if (n1 < n2)
+      return (-1);
+    else 
+      return 0;
+  }
+
+  if (clist->sort_column == 2 || clist->sort_column == 4)
+  {
+    GDate *date1, *date2;
+    gint time1, time2;
+    gint ret;
+
+    date1 = g_date_new_dmy (atoi (text1), atoi (text1 + 3), atoi (text1 + 6));
+    date2 = g_date_new_dmy (atoi (text2), atoi (text2 + 3), atoi (text2 + 6));
+
+    ret = g_date_compare (date1, date2);
+
+    g_date_free (date1);
+    g_date_free (date2);
+
+    if (ret)
+      return (ret);
+
+    if (strlen (text1) > 10)
+      time1 = atoi (text1 + 11) * 60 + atoi (text1 + 14);
+    else
+      time1 = 0;
+
+    if (strlen (text2) > 10)
+      time2 = atoi (text2 + 11) * 60 + atoi (text2 + 14);
+    else
+      time2 = 0;
+
+    if (time1 > time2)
+      return (1);
+    else if (time1 < time2)
+      return (-1);
+    else 
+      return 0;
+    
+/*    struct tm bdTime;
+    time_t time1, time2;
+
+    bdTime.tm_sec  = 0;
+    if (strlen (text1) > 10)
+    {
+      bdTime.tm_min  = atoi (text1 + 14);
+      bdTime.tm_hour = atoi (text1 + 11);
+    }
+    else
+      bdTime.tm_min  = bdTime.tm_hour = 0;
+    bdTime.tm_mday = atoi (text1);
+    bdTime.tm_mon  = atoi (text1 + 3);
+    bdTime.tm_year = atoi (text1 + 6) - 1900;
+    bdTime.tm_isdst = -1;
+
+    time1 = mktime (&bdTime);
+
+    bdTime.tm_sec  = 0;
+    if (strlen (text2) > 10)
+    {
+      bdTime.tm_min  = atoi (text2 + 14);
+      bdTime.tm_hour = atoi (text2 + 11);
+    }
+    else
+      bdTime.tm_min  = bdTime.tm_hour = 0;
+    bdTime.tm_mday = atoi (text2);
+    bdTime.tm_mon  = atoi (text2 + 3);
+    bdTime.tm_year = atoi (text2 + 6) - 1900;
+    bdTime.tm_isdst = -1;
+
+    time2 = mktime (&bdTime);
+
+    g_print ("Cas1: %s - %d, Cas2: %s - %d\n", text1, time1, text2, time2);
+
+    if (time1 > time2)
+      return (1);
+    else if (time1 < time2)
+      return (-1);
+    else 
+      return 0; */
+  }
+
+  return (g_strcasecmp (text1, text2));
+}
+
+
+static gint ReverseSelection (gconstpointer a, gconstpointer b)
+{
+  gchar *buf1, *buf2;
+  gint index1, index2;
+  gint row1 = GPOINTER_TO_INT (a);
+  gint row2 = GPOINTER_TO_INT (b);
+  
+  gtk_clist_get_text (GTK_CLIST (cal.notesClist), row1, 0, &buf1);
+  gtk_clist_get_text (GTK_CLIST (cal.notesClist), row2, 0, &buf2);
+  
+  index1 = atoi (buf1);
+  index2 = atoi (buf2);
+  
+  if (index1 < index2)
+    return (1);
+  else if (index1 > index2)
+    return (-1);
+  else
+    return (0);
+}
+
+
+static gint AddCalendarNote(GSM_CalendarNote *cnote)
+{
+       GSM_Error error;
+       PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+       D_CalendarNote *dnote = (D_CalendarNote *)g_malloc(sizeof(D_CalendarNote));
+
+       dnote->entry = cnote;
+       e->event = Event_WriteCalendarNote;
+       e->data = dnote;
+       GUI_InsertEvent (e);
+       pthread_mutex_lock (&calendarMutex);
+       pthread_cond_wait (&calendarCond, &calendarMutex);
+       pthread_mutex_unlock (&calendarMutex);
+
+#ifdef XDEBUG
+       g_print ("Saving calendar note\n");
+#endif
+
+       error = dnote->status;
+       g_free (dnote);
+
+       if (error != GE_NONE)
+       {
+               gchar *buf = g_strdup_printf (_("Saving failed failed\n(error=%d)"), error);
+               gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+               gtk_widget_show (errorDialog.dialog);
+               g_free (buf);
+       }
+       else
+               g_print ("Note saved\n");
+       
+       return (error);
+}
+
+static void OkAddReminderDialog (GtkWidget *widget, gpointer data)
+{
+       GSM_CalendarNote note;
+
+       note.Type = GCN_REMINDER;
+       note.Location = 0;
+       strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
+       note.Time.Year = ((AddDialogData *)data)->date.year;
+       note.Time.Month = ((AddDialogData *)data)->date.month;
+       note.Time.Day = ((AddDialogData *)data)->date.day;
+       note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
+       if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
+               note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
+               note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
+               note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
+               note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
+               note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
+               note.Alarm.Second = note.Alarm.Timezone = 0;
+       } else {
+               note.Alarm.Year = 0;
+       }
+       AddCalendarNote(&note);
+       gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
+       gtk_widget_hide (((AddDialogData *)data)->dialog);
+}
+
+static void OkAddCallDialog (GtkWidget *widget, gpointer data)
+{
+       GSM_CalendarNote note;
+
+       note.Type = GCN_CALL;
+       note.Location = 0;
+       strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
+       note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
+       note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
+       note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
+       note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
+       note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
+       note.Time.Second = note.Time.Timezone = 0;
+       if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
+               note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
+               note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
+               note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
+               note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
+               note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
+               note.Alarm.Second = note.Alarm.Timezone = 0;
+       } else {
+               note.Alarm.Year = 0;
+       }
+       AddCalendarNote(&note);
+       gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
+       gtk_widget_hide (((AddDialogData2 *)data)->dialog);
+}
+
+static void OkAddMeetingDialog (GtkWidget *widget, gpointer data)
+{
+       GSM_CalendarNote note;
+
+       note.Type = GCN_MEETING;
+       note.Location = 0;
+       strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
+       note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
+       note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
+       note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
+       note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
+       note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
+       note.Time.Second = note.Time.Timezone = 0;
+       if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
+               note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
+               note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
+               note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
+               note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
+               note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
+               note.Alarm.Second = note.Alarm.Timezone = 0;
+       } else {
+               note.Alarm.Year = 0;
+       }
+       AddCalendarNote(&note);
+       gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
+       gtk_widget_hide (((AddDialogData2 *)data)->dialog);
+}
+
+static void OkAddBdayDialog (GtkWidget *widget, gpointer data)
+{
+       GSM_CalendarNote note;
+
+       note.Type = GCN_BIRTHDAY;
+       note.Location = 0;
+       strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
+       note.Time.Year = ((AddDialogData *)data)->date.year;
+       note.Time.Month = ((AddDialogData *)data)->date.month;
+       note.Time.Day = ((AddDialogData *)data)->date.day;
+       note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
+       if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
+               note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
+               note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
+               note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
+               note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
+               note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
+               note.Alarm.Second = note.Alarm.Timezone = 0;
+       } else {
+               note.Alarm.Year = 0;
+       }
+       AddCalendarNote(&note);
+       gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
+       gtk_widget_hide (((AddDialogData *)data)->dialog);
+}
+
+
+static inline void SetDateButton (Date *date)
+{
+    gchar *buf = g_strdup_printf ("%d-%02d-%02d", date->year,
+                                   date->month, date->day);
+    gtk_label_set_text (GTK_LABEL (date->button), buf);
+    g_free (buf);
+}
+
+
+static inline void SetDateTimeButton (DateTime *date)
+{
+    gchar *buf = g_strdup_printf ("%d-%02d-%02d  %02d:%02d", date->date.year,
+                                   date->date.month, date->date.day,
+                                   date->hours, date->minutes);
+    gtk_label_set_text (GTK_LABEL (date->button), buf);
+    g_free (buf);
+}
+
+
+static void OkCalendarDialog (GtkWidget *widget, Date *date)
+{
+  gtk_calendar_get_date (GTK_CALENDAR (calendarDialog.cal), &(date->year),
+                         &(date->month), &(date->day));
+  date->month += 1;
+
+  SetDateButton (date);
+    
+  gtk_widget_hide (calendarDialog.dialog);
+}
+
+
+static void OkCalTimeDialog (GtkWidget *widget, DateTime *date)
+{
+  gtk_calendar_get_date (GTK_CALENDAR (calTimeDialog.cal), &(date->date.year),
+                         &(date->date.month), &(date->date.day));
+  date->date.month += 1;
+
+  date->hours = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->hButton));
+  date->minutes = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->mButton));
+  SetDateTimeButton (date);
+
+  gtk_widget_hide (calTimeDialog.dialog);
+}
+
+
+static void ShowCalendar (GtkWidget *widget, Date *date)
+{
+  GtkWidget *button;
+
+  if (calendarDialog.dialog == NULL)
+  {
+    calendarDialog.dialog = gtk_dialog_new ();
+    gtk_window_set_title (GTK_WINDOW (calendarDialog.dialog), _("Choose date"));
+    gtk_window_position (GTK_WINDOW (calendarDialog.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (calendarDialog.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (calendarDialog.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (calendarDialog.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkCalendarDialog), (gpointer) date);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calendarDialog.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), 5);
+
+    calendarDialog.cal = gtk_calendar_new ();
+
+    gtk_calendar_select_month (GTK_CALENDAR (calendarDialog.cal), date->month - 1, date->year);
+    gtk_calendar_select_day (GTK_CALENDAR (calendarDialog.cal), date->day);
+
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), calendarDialog.cal);
+    gtk_widget_show (calendarDialog.cal);  
+  }
+
+  gtk_widget_show (calendarDialog.dialog);  
+}
+
+
+static void ShowCalTime (GtkWidget *widget, DateTime *date)
+{
+  GtkWidget *button, *hbox, *label;
+  GtkAdjustment *adj;
+
+  if (calTimeDialog.dialog == NULL)
+  {
+    calTimeDialog.dialog = gtk_dialog_new ();
+    gtk_window_set_title (GTK_WINDOW (calTimeDialog.dialog), _("Choose date"));
+    gtk_window_position (GTK_WINDOW (calTimeDialog.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (calTimeDialog.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (calTimeDialog.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (calTimeDialog.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkCalTimeDialog), (gpointer) date);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calTimeDialog.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), 5);
+
+    calTimeDialog.cal = gtk_calendar_new ();
+
+    gtk_calendar_select_month (GTK_CALENDAR (calTimeDialog.cal), date->date.month - 1, date->date.year);
+    gtk_calendar_select_day (GTK_CALENDAR (calTimeDialog.cal), date->date.day);
+
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), calTimeDialog.cal);
+    gtk_widget_show (calTimeDialog.cal);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    label = gtk_label_new (_("Alarm time:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    adj = (GtkAdjustment *) gtk_adjustment_new (date->hours,
+                                                0.0, 23.0, 1.0, 4.0, 0.0);
+    date->hButton = gtk_spin_button_new (adj, 0, 0);
+    gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->hButton), TRUE);
+    gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->hButton), TRUE);
+    gtk_box_pack_start (GTK_BOX (hbox), date->hButton, FALSE, FALSE, 0);
+    gtk_widget_show (date->hButton);
+
+    label = gtk_label_new (":");
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    adj = (GtkAdjustment *) gtk_adjustment_new (date->minutes,
+                                                0.0, 59.0, 1.0, 10.0, 0.0);
+    date->mButton = gtk_spin_button_new (adj, 0, 0);
+    gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->mButton), TRUE);
+    gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->mButton), TRUE);
+    gtk_box_pack_start (GTK_BOX (hbox), date->mButton, FALSE, FALSE, 0);
+    gtk_widget_show (date->mButton);
+  }
+
+  gtk_widget_show (calTimeDialog.dialog);  
+}
+
+
+static void AddReminder (void)
+{
+  GtkWidget *button, *hbox, *vbox, *label;
+  time_t t;
+  struct tm *tm;
+  
+  if (addReminderDialogData.dialog == NULL)
+  {
+    addReminderDialogData.dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (addReminderDialogData.dialog), _("Add reminder"));
+    gtk_window_position (GTK_WINDOW (addReminderDialogData.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (addReminderDialogData.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (addReminderDialogData.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (addReminderDialogData.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkAddReminderDialog), (gpointer) &addReminderDialogData);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addReminderDialogData.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), 5);
+
+    vbox = gtk_vbox_new (FALSE, 10);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), vbox);
+    gtk_widget_show (vbox);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Date:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+    
+    t = time (NULL);
+    tm = localtime (&t);
+    
+    addReminderDialogData.date.year = addReminderDialogData.alarm.date.year =
+                                      tm->tm_year + 1900;
+    addReminderDialogData.date.month = addReminderDialogData.alarm.date.month =
+                                       tm->tm_mon + 1;
+    addReminderDialogData.date.day = addReminderDialogData.alarm.date.day = 
+                                     tm->tm_mday;
+    
+    addReminderDialogData.alarm.hours = tm->tm_hour;
+    addReminderDialogData.alarm.minutes = tm->tm_min;
+    
+    button = gtk_button_new ();
+    
+    addReminderDialogData.date.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.date.button);
+    SetDateButton (&(addReminderDialogData.date));
+    
+    gtk_widget_show (addReminderDialogData.date.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addReminderDialogData.date));
+    gtk_widget_show (button);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    label = gtk_label_new (_("Subject:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    addReminderDialogData.text = gtk_entry_new_with_max_length (30);
+    gtk_box_pack_end (GTK_BOX (hbox), addReminderDialogData.text, FALSE, FALSE, 2);
+    gtk_widget_show (addReminderDialogData.text);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    addReminderDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
+    gtk_box_pack_start (GTK_BOX(hbox), addReminderDialogData.alarmCheck, FALSE, FALSE, 2);
+//    gtk_signal_connect (GTK_OBJECT (addReminderDialogData.alarmCheck), "toggled",
+//                        GTK_SIGNAL_FUNC (TogleAlarm), &addReminderDialogData);
+    gtk_widget_show (addReminderDialogData.alarmCheck);
+
+    button = gtk_button_new ();
+    
+    addReminderDialogData.alarm.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.alarm.button);
+    SetDateTimeButton (&(addReminderDialogData.alarm));
+    
+    gtk_widget_show (addReminderDialogData.alarm.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addReminderDialogData.alarm));
+    gtk_widget_show (button);
+  }
+  
+  gtk_widget_show (GTK_WIDGET (addReminderDialogData.dialog));
+}
+
+
+static void AddCall (void)
+{
+  GtkWidget *button, *hbox, *vbox, *label;
+  time_t t;
+  struct tm *tm;
+  
+  if (addCallDialogData.dialog == NULL)
+  {
+    addCallDialogData.dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (addCallDialogData.dialog), _("Add Call"));
+    gtk_window_position (GTK_WINDOW (addCallDialogData.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (addCallDialogData.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (addCallDialogData.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (addCallDialogData.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkAddCallDialog), (gpointer) &addCallDialogData);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addCallDialogData.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), 5);
+
+    vbox = gtk_vbox_new (FALSE, 10);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), vbox);
+    gtk_widget_show (vbox);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Date:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+    
+    t = time (NULL);
+    tm = localtime (&t);
+    
+    addCallDialogData.date.date.year = addCallDialogData.alarm.date.year =
+                                      tm->tm_year + 1900;
+    addCallDialogData.date.date.month = addCallDialogData.alarm.date.month =
+                                       tm->tm_mon + 1;
+    addCallDialogData.date.date.day = addCallDialogData.alarm.date.day = 
+                                     tm->tm_mday;
+    
+    addCallDialogData.date.hours = addCallDialogData.alarm.hours = tm->tm_hour;
+    addCallDialogData.date.minutes = addCallDialogData.alarm.minutes = tm->tm_min;
+    
+    button = gtk_button_new ();
+    
+    addCallDialogData.date.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addCallDialogData.date.button);
+    SetDateTimeButton (&(addCallDialogData.date));
+    
+    gtk_widget_show (addCallDialogData.date.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.date));
+    gtk_widget_show (button);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    label = gtk_label_new (_("Number:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    addCallDialogData.text = gtk_entry_new_with_max_length (30);
+    gtk_box_pack_end (GTK_BOX (hbox), addCallDialogData.text, FALSE, FALSE, 2);
+    gtk_widget_show (addCallDialogData.text);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    addCallDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
+    gtk_box_pack_start (GTK_BOX(hbox), addCallDialogData.alarmCheck, FALSE, FALSE, 2);
+
+    gtk_widget_show (addCallDialogData.alarmCheck);
+
+    button = gtk_button_new ();
+    
+    addCallDialogData.alarm.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addCallDialogData.alarm.button);
+    SetDateTimeButton (&(addCallDialogData.alarm));
+    
+    gtk_widget_show (addCallDialogData.alarm.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.alarm));
+    gtk_widget_show (button);
+  }
+  
+  gtk_widget_show (GTK_WIDGET (addCallDialogData.dialog));
+}
+
+
+static void AddMeeting (void)
+{
+  GtkWidget *button, *hbox, *vbox, *label;
+  time_t t;
+  struct tm *tm;
+  
+  if (addMeetingDialogData.dialog == NULL)
+  {
+    addMeetingDialogData.dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (addMeetingDialogData.dialog), _("Add meeting"));
+    gtk_window_position (GTK_WINDOW (addMeetingDialogData.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (addMeetingDialogData.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (addMeetingDialogData.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkAddMeetingDialog), (gpointer) &addMeetingDialogData);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addMeetingDialogData.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), 5);
+
+    vbox = gtk_vbox_new (FALSE, 10);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), vbox);
+    gtk_widget_show (vbox);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Date:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+    
+    t = time (NULL);
+    tm = localtime (&t);
+    
+    addMeetingDialogData.date.date.year = addMeetingDialogData.alarm.date.year =
+                                      tm->tm_year + 1900;
+    addMeetingDialogData.date.date.month = addMeetingDialogData.alarm.date.month =
+                                       tm->tm_mon + 1;
+    addMeetingDialogData.date.date.day = addMeetingDialogData.alarm.date.day = 
+                                     tm->tm_mday;
+    
+    addMeetingDialogData.date.hours = addMeetingDialogData.alarm.hours = tm->tm_hour;
+    addMeetingDialogData.date.minutes = addMeetingDialogData.alarm.minutes = tm->tm_min;
+    
+    button = gtk_button_new ();
+    
+    addMeetingDialogData.date.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.date.button);
+    SetDateTimeButton (&(addMeetingDialogData.date));
+    
+    gtk_widget_show (addMeetingDialogData.date.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.date));
+    gtk_widget_show (button);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    label = gtk_label_new (_("Name:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    addMeetingDialogData.text = gtk_entry_new_with_max_length (30);
+    gtk_box_pack_end (GTK_BOX (hbox), addMeetingDialogData.text, FALSE, FALSE, 2);
+    gtk_widget_show (addMeetingDialogData.text);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    addMeetingDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
+    gtk_box_pack_start (GTK_BOX(hbox), addMeetingDialogData.alarmCheck, FALSE, FALSE, 2);
+//    gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.alarmCheck), "toggled",
+//                        GTK_SIGNAL_FUNC (TogleAlarm), &addMeetingDialogData);
+    gtk_widget_show (addMeetingDialogData.alarmCheck);
+
+    button = gtk_button_new ();
+    
+    addMeetingDialogData.alarm.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.alarm.button);
+    SetDateTimeButton (&(addMeetingDialogData.alarm));
+    
+    gtk_widget_show (addMeetingDialogData.alarm.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.alarm));
+    gtk_widget_show (button);
+  }
+  
+  gtk_widget_show (GTK_WIDGET (addMeetingDialogData.dialog));
+}
+
+
+static void AddBirthday (void)
+{
+  GtkWidget *button, *hbox, *vbox, *label;
+  time_t t;
+  struct tm *tm;
+  
+  if (addBirthdayDialogData.dialog == NULL)
+  {
+    addBirthdayDialogData.dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (addBirthdayDialogData.dialog), _("Add birthday"));
+    gtk_window_position (GTK_WINDOW (addBirthdayDialogData.dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (addBirthdayDialogData.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (addBirthdayDialogData.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkAddBdayDialog), (gpointer) &addBirthdayDialogData);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addBirthdayDialogData.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), 5);
+
+    vbox = gtk_vbox_new (FALSE, 10);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), vbox);
+    gtk_widget_show (vbox);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Date:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+    
+    t = time (NULL);
+    tm = localtime (&t);
+    
+    addBirthdayDialogData.date.year = addBirthdayDialogData.alarm.date.year =
+                                      tm->tm_year + 1900;
+    addBirthdayDialogData.date.month = addBirthdayDialogData.alarm.date.month =
+                                       tm->tm_mon + 1;
+    addBirthdayDialogData.date.day = addBirthdayDialogData.alarm.date.day = 
+                                     tm->tm_mday;
+    
+    addBirthdayDialogData.alarm.hours = tm->tm_hour;
+    addBirthdayDialogData.alarm.minutes = tm->tm_min;
+    
+    button = gtk_button_new ();
+    
+    addBirthdayDialogData.date.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.date.button);
+    SetDateButton (&(addBirthdayDialogData.date));
+    
+    gtk_widget_show (addBirthdayDialogData.date.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addBirthdayDialogData.date));
+    gtk_widget_show (button);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    label = gtk_label_new (_("Name:"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+    gtk_widget_show (label);
+
+    addBirthdayDialogData.text = gtk_entry_new_with_max_length (30);
+    gtk_box_pack_end (GTK_BOX (hbox), addBirthdayDialogData.text, FALSE, FALSE, 2);
+    gtk_widget_show (addBirthdayDialogData.text);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+    
+    addBirthdayDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
+    gtk_box_pack_start (GTK_BOX(hbox), addBirthdayDialogData.alarmCheck, FALSE, FALSE, 2);
+//    gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.alarmCheck), "toggled",
+//                        GTK_SIGNAL_FUNC (TogleAlarm), &addBirthdayDialogData);
+    gtk_widget_show (addBirthdayDialogData.alarmCheck);
+
+    button = gtk_button_new ();
+    
+    addBirthdayDialogData.alarm.button = gtk_label_new ("");
+    
+    gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.alarm.button);
+    SetDateTimeButton (&(addBirthdayDialogData.alarm));
+    
+    gtk_widget_show (addBirthdayDialogData.alarm.button);
+    
+    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addBirthdayDialogData.alarm));
+    gtk_widget_show (button);
+  }
+  
+  gtk_widget_show (GTK_WIDGET (addBirthdayDialogData.dialog));
+}
+
+
+static void OkDeleteNoteDialog (GtkWidget *widget, gpointer data)
+{
+  GSM_CalendarNote *note;
+  PhoneEvent *e;
+  GList *sel;
+  gint row;
+  gchar *buf;
+
+
+  sel = GTK_CLIST (cal.notesClist)->selection;
+
+  gtk_clist_freeze (GTK_CLIST (cal.notesClist));
+
+  sel = g_list_sort (sel, ReverseSelection);
+  
+  while (sel != NULL)
+  {
+    row = GPOINTER_TO_INT (sel->data);
+    sel = sel->next;
+
+    note = (GSM_CalendarNote *) g_malloc (sizeof (GSM_CalendarNote));
+    gtk_clist_get_text (GTK_CLIST (cal.notesClist), row, 0, &buf);
+    note->Location = atoi (buf);
+
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_DeleteCalendarNote;
+    e->data = note;
+    GUI_InsertEvent (e);
+  }
+
+  gtk_widget_hide (GTK_WIDGET (data));
+
+  gtk_clist_thaw (GTK_CLIST (cal.notesClist));
+
+  ReadCalNotes ();
+}
+
+
+static void DeleteNote (void)
+{
+  static GtkWidget *dialog = NULL;
+  GtkWidget *button, *hbox, *label, *pixmap;
+
+  if (dialog == NULL)
+  {
+    dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (dialog), _("Delete calendar note"));
+    gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkDeleteNoteDialog), (gpointer) dialog);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+
+    pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+    gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show (pixmap);
+
+    label = gtk_label_new (_("Do you want to delete selected note(s)?"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
+    gtk_widget_show (label);
+  }
+
+  gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>R",   ReadCalNotes, 0, NULL},
+  { NULL,              "<control>S",   NULL, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>X",   NULL, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>I",   NULL, 0, NULL},
+  { NULL,              "<control>E",   NULL, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>W",   CloseCalendar, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>N",   AddReminder, 0, NULL},
+  { NULL,              "<control>C",   AddCall, 0, NULL},
+  { NULL,              "<control>M",   AddMeeting, 0, NULL},
+  { NULL,              "<control>B",   AddBirthday, 0, NULL},
+  { NULL,              NULL,           NULL, 0, NULL},
+  { NULL,              "<control>D",   DeleteNote, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>A",   NULL, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<LastBranch>"},
+  { NULL,              NULL,           Help1, 0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout, 0, NULL},
+};
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+  menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+  menu_items[3].path = g_strdup (_("/File/Sep1"));
+  menu_items[4].path = g_strdup (_("/File/Send via S_MS"));
+  menu_items[5].path = g_strdup (_("/File/Sep2"));
+  menu_items[6].path = g_strdup (_("/File/_Import from file"));
+  menu_items[7].path = g_strdup (_("/File/_Export to file"));
+  menu_items[8].path = g_strdup (_("/File/Sep3"));
+  menu_items[9].path = g_strdup (_("/File/_Close"));
+  menu_items[10].path = g_strdup (_("/_Edit"));
+  menu_items[11].path = g_strdup (_("/Edit/Add _reminder"));
+  menu_items[12].path = g_strdup (_("/Edit/Add _call"));
+  menu_items[13].path = g_strdup (_("/Edit/Add _meeting"));
+  menu_items[14].path = g_strdup (_("/Edit/Add _birthday"));
+  menu_items[15].path = g_strdup (_("/Edit/_Edit"));
+  menu_items[16].path = g_strdup (_("/Edit/_Delete"));
+  menu_items[17].path = g_strdup (_("/Edit/Sep4"));
+  menu_items[18].path = g_strdup (_("/Edit/Select _all"));
+  menu_items[19].path = g_strdup (_("/_Help"));
+  menu_items[20].path = g_strdup (_("/Help/_Help"));
+  menu_items[21].path = g_strdup (_("/Help/_About"));
+}
+
+void GUI_CreateCalendarWindow ()
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar, *toolbar, *scrolledWindow, *hpaned;
+  GtkWidget *main_vbox;
+  GdkColormap *cmap;
+  time_t t;
+  struct tm *tm;
+  SortColumn *sColumn;
+  register gint i;
+  gchar *titles[6] = { _("#"), _("Type"), _("Date"), _("Text"),
+                       _("Alarm"), _("Number")};
+
+  InitMainMenu ();
+  GUI_CalendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_wmclass (GTK_WINDOW (GUI_CalendarWindow), "CalendarWindow", "Xgnokii");
+  gtk_window_set_title (GTK_WINDOW (GUI_CalendarWindow), _("Calendar"));
+  //gtk_widget_set_usize (GTK_WIDGET (GUI_CalendarWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (GUI_CalendarWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_CalendarWindow);
+  
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_CalendarWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_CalendarWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  /* Create the toolbar */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+                           NewPixmap(Read_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ReadCalNotes, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+                           NewPixmap(Send_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send via SMS"), NULL,
+                           NewPixmap(SendSMS_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+                           NewPixmap(Open_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+                           NewPixmap(Save_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit note"), NULL,
+                           NewPixmap(Edit_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add reminder"), NULL,
+                           NewPixmap(NewRem_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) AddReminder, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add call"), NULL,
+                           NewPixmap(NewCall_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) AddCall, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add meeting"), NULL,
+                           NewPixmap(NewMeet_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) AddMeeting, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add birthday"), NULL,
+                           NewPixmap(NewBD_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) AddBirthday, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete note"), NULL,
+                           NewPixmap(Delete_xpm, GUI_CalendarWindow->window,
+                           &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) DeleteNote, NULL);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  hpaned = gtk_hpaned_new ();
+  //gtk_paned_set_handle_size (GTK_PANED (hpaned), 10);
+  //gtk_paned_set_gutter_size (GTK_PANED (hpaned), 15);
+  gtk_box_pack_start (GTK_BOX (main_vbox), hpaned, TRUE, TRUE, 0);
+  gtk_widget_show (hpaned);
+
+  /* Note viewer */
+  cal.noteText = gtk_text_new (NULL, NULL);
+  gtk_text_set_editable (GTK_TEXT (cal.noteText), FALSE);
+  gtk_text_set_word_wrap (GTK_TEXT (cal.noteText), TRUE);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_NEVER,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
+
+  gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.noteText);
+  gtk_widget_show_all (scrolledWindow);
+
+  /* Calendar */
+  cal.calendar = gtk_calendar_new ();
+
+  t = time (NULL);
+  tm = localtime (&t);
+  gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), tm->tm_mon, tm->tm_year + 1900);
+  gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), tm->tm_mday);
+
+  gtk_paned_add2 (GTK_PANED (hpaned), cal.calendar);
+  gtk_widget_show (cal.calendar);  
+
+  /* Notes list */
+  cal.notesClist = gtk_clist_new_with_titles (6, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (cal.notesClist), GTK_SHADOW_OUT);
+  gtk_clist_set_compare_func (GTK_CLIST (cal.notesClist), CListCompareFunc);
+  gtk_clist_set_sort_column (GTK_CLIST (cal.notesClist), 0);
+  gtk_clist_set_sort_type (GTK_CLIST (cal.notesClist), GTK_SORT_ASCENDING);
+  gtk_clist_set_auto_sort (GTK_CLIST (cal.notesClist), FALSE);
+  gtk_clist_set_selection_mode (GTK_CLIST (cal.notesClist), GTK_SELECTION_EXTENDED);
+
+  gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 0, 15);
+  gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 1, 52);
+  gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 2, 110);
+  gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 3, 130);
+  gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 4, 110);
+  gtk_clist_set_column_justification (GTK_CLIST (cal.notesClist), 0, GTK_JUSTIFY_RIGHT);
+
+  for (i = 0; i < 6; i++)
+  {
+    if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+    {
+      g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      gtk_main_quit ();
+    }
+    sColumn->clist = cal.notesClist;
+    sColumn->column = i;
+    gtk_signal_connect (GTK_OBJECT (GTK_CLIST (cal.notesClist)->column[i].button), "clicked",
+                        GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+  }
+
+  gtk_signal_connect (GTK_OBJECT (cal.notesClist), "select_row",
+                      GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_usize (scrolledWindow, 550, 100);
+  gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.notesClist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  gtk_box_pack_end (GTK_BOX (main_vbox), scrolledWindow, 
+                      TRUE, TRUE, 0);
+
+  gtk_widget_show (cal.notesClist);
+  gtk_widget_show (scrolledWindow);
+
+  cmap = gdk_colormap_get_system();
+  cal.colour.red = 0xffff;
+  cal.colour.green = 0;
+  cal.colour.blue = 0;
+  if (!gdk_color_alloc (cmap, &(cal.colour)))
+    g_error (_("couldn't allocate colour"));
+
+  questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_CalendarWindow->window,
+                         &questMark.mask,
+                         &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL],
+                         quest_xpm);
+
+  CreateErrorDialog (&errorDialog, GUI_CalendarWindow);
+}
diff --git a/xgnokii/xgnokii_calendar.h b/xgnokii/xgnokii_calendar.h
new file mode 100644 (file)
index 0000000..d0c8b8f
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_CALENDAR_H
+#define XGNOKII_CALENDAR_H
+
+extern void GUI_CreateCalendarWindow ();
+
+extern void GUI_ShowCalendar ();
+
+#endif
diff --git a/xgnokii/xgnokii_cfg.c b/xgnokii/xgnokii_cfg.c
new file mode 100644 (file)
index 0000000..c4cf9cb
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "xgnokii_cfg.h"
+#include "xgnokii.h"
+
+ConfigEntry config[] = {
+ {"name",      &(xgnokiiConfig.user.name)},
+ {"title",     &(xgnokiiConfig.user.title)},
+ {"company",   &(xgnokiiConfig.user.company)},
+ {"telephone", &(xgnokiiConfig.user.telephone)},
+ {"fax",       &(xgnokiiConfig.user.fax)},
+ {"email",     &(xgnokiiConfig.user.email)},
+ {"address",   &(xgnokiiConfig.user.address)},
+ {"viewer",    &(xgnokiiConfig.helpviewer)},
+ {"mailbox",   &(xgnokiiConfig.mailbox)},
+ {"simlen",    &(xgnokiiConfig.maxSIMLen)},
+ {"phonelen",  &(xgnokiiConfig.maxPhoneLen)},
+ {"",          NULL}
+};
+
+
+static void GetDefaultValues ()
+{
+  gchar *homedir;
+  
+  xgnokiiConfig.user.name = g_strdup ("");
+  xgnokiiConfig.user.title = g_strdup ("");
+  xgnokiiConfig.user.company = g_strdup ("");
+  xgnokiiConfig.user.telephone = g_strdup ("");
+  xgnokiiConfig.user.fax = g_strdup ("");
+  xgnokiiConfig.user.email = g_strdup ("");
+  xgnokiiConfig.user.address = g_strdup ("");
+  xgnokiiConfig.helpviewer = g_strdup ("netscape");
+  if ((homedir = g_get_home_dir ()) == NULL)
+    homedir = "";
+  xgnokiiConfig.mailbox = g_strdup_printf ("%s/Mail/smsbox", homedir);
+  xgnokiiConfig.maxSIMLen = g_strdup ("14");
+  xgnokiiConfig.maxPhoneLen = g_strdup ("16");
+}
+
+
+void GUI_ReadXConfig ()
+{
+  FILE *file;
+  gchar *line;
+  gchar *homedir;
+  gchar *rcfile;
+  gchar *current;
+  register gint len;
+  register gint i;
+
+  GetDefaultValues ();
+
+#ifdef WIN32
+/*  homedir = getenv("HOMEDRIVE");
+  g_strconcat(homedir, getenv("HOMEPATH"), NULL); */
+  homedir = g_get_home_dir ();
+  rcfile=g_strconcat(homedir, "\\_xgnokiirc", NULL);
+#else
+  if ((homedir = g_get_home_dir ()) == NULL)
+  {
+    g_print (_("WARNING: Can't find HOME enviroment variable!\n"));
+    return;
+  }
+
+  if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+  {
+    g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+    return;
+  }
+#endif
+
+  if ((file = fopen (rcfile, "r")) == NULL)
+  {
+    g_free (rcfile);
+    return;
+  }
+
+  g_free (rcfile);
+
+  if ((line = (char *) g_malloc (255)) == NULL)
+  {
+    g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+    fclose (file);
+    return;
+  }
+
+  while (fgets (line, 255, file) != NULL)
+  {
+    gint v;
+    current = line;
+
+    /* Strip leading, trailing whitespace */
+    while (isspace ((gint) *current))
+      current++;
+
+    while ((strlen (current) > 0) && isspace ((gint) current[strlen (current) - 1]))
+      current[strlen (current) - 1] = '\0';
+
+    /* Ignore blank lines and comments */
+
+    if ((*current == '\n') || (*current == '\0') || (*current == '#'))
+      continue;
+
+    i = 0;
+    while (*config[i].key != '\0')
+    {
+      len = strlen (config[i].key);
+      if (g_strncasecmp (config[i].key, current, len) == 0)
+      {
+        current += len;
+        while (isspace ((int) *current))
+          current++;
+        if (*current == '=')
+        {
+          current++;
+          while(isspace ((int) *current))
+            current++;
+          g_free (*config[i].value);
+          switch (i)
+          {
+            case 3:
+            case 4: 
+              *config[i].value = g_strndup (current, max_phonebook_number_length);
+              break;
+
+            case 7:
+              *config[i].value = g_strndup (current, HTMLVIEWER_LENGTH);
+              break;
+
+            case 8:
+              *config[i].value = g_strndup (current, MAILBOX_LENGTH);
+              break;
+
+            case 9:
+            case 10:
+              v = atoi (current);
+              if ( v > 0 && v < 100 )
+                *config[i].value = g_strndup (current, 3);
+              break;
+
+            default:
+              *config[i].value = g_strndup (current, MAX_BUSINESS_CARD_LENGTH);
+              break;
+          }
+        }
+      }
+      i++;
+    }
+  }
+
+  fclose (file);
+  g_free (line);
+}
+
+
+gint GUI_SaveXConfig ()
+{
+  FILE *file;
+  gchar *line;
+  gchar *homedir;
+  gchar *rcfile;
+  register gint i;
+
+  if ((homedir = getenv ("HOME")) == NULL)
+  {
+    g_print (_("ERROR: Can't find HOME enviroment variable!\n"));
+    return (1);
+  }
+
+  if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+  {
+    g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+    return (2);
+  }
+
+  if ((file = fopen (rcfile, "w")) == NULL)
+  {
+    g_print (_("ERROR: Can't open file %s for writing!\n"), rcfile);
+    g_free (rcfile);
+    return (3);
+  }
+
+  g_free (rcfile);
+
+  i = 0;
+  while (*config[i].key != '\0')
+  {
+    if ((line = g_strdup_printf ("%s = %s\n", config[i].key, *config[i].value)) == NULL)
+    {
+      g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+      fclose (file);
+      return (2);
+    }
+    if (fputs (line, file) == EOF)
+    {
+      g_print (_("ERROR: Can't write config file!\n"));
+      g_free (line);
+      fclose (file);
+      return (4);
+    }
+    g_free (line);
+    i++;
+  }
+
+  fclose (file);
+  return (0);
+}
diff --git a/xgnokii/xgnokii_cfg.h b/xgnokii/xgnokii_cfg.h
new file mode 100644 (file)
index 0000000..f258a19
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_CFG_H
+#define XGNOKII_CFG_H
+
+#include <gtk/gtk.h>
+#include "xgnokii.h"
+
+#define                HTMLVIEWER_LENGTH       200
+#define                MAILBOX_LENGTH          200
+
+typedef struct {
+  gchar key[10];
+  gchar **value;
+} ConfigEntry;
+
+extern void GUI_ReadXConfig();
+extern gint GUI_SaveXConfig();
+
+#endif
diff --git a/xgnokii/xgnokii_common.c b/xgnokii/xgnokii_common.c
new file mode 100644 (file)
index 0000000..9f7acd4
--- /dev/null
@@ -0,0 +1,332 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef WIN32
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/wait.h>
+# include <signal.h>
+#endif
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"  /* for _() */
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xpm/quest.xpm"
+#include "xpm/stop.xpm"
+#include "xpm/info.xpm"
+
+typedef struct {
+  GUIEventType type;
+  void (*func)(void);
+} GUIEvent;
+
+static GSList *guiEvents = NULL;
+
+
+inline void DeleteEvent (const GtkWidget *widget, const GdkEvent *event, const gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (widget));
+}
+
+
+inline void CancelDialog (const GtkWidget *widget, const gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+void CreateErrorDialog (ErrorDialog *errorDialog, GtkWidget *window)
+{
+  GtkWidget *button, *hbox, *pixmap;
+
+  errorDialog->dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (errorDialog->dialog), _("Error"));
+  gtk_window_set_modal (GTK_WINDOW (errorDialog->dialog), TRUE);
+  gtk_window_position (GTK_WINDOW (errorDialog->dialog), GTK_WIN_POS_MOUSE);
+  gtk_container_set_border_width (GTK_CONTAINER (errorDialog->dialog), 5);
+  gtk_signal_connect (GTK_OBJECT (errorDialog->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  button = gtk_button_new_with_label (_("Cancel"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (errorDialog->dialog)->action_area),
+                      button, FALSE, FALSE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (CancelDialog), (gpointer) errorDialog->dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (errorDialog->dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  if (window)
+  {
+    pixmap = NewPixmap (stop_xpm, window->window,
+                        &window->style->bg[GTK_STATE_NORMAL]);
+    gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show (pixmap);
+  }
+
+  errorDialog->text = gtk_label_new ("");
+  gtk_box_pack_start (GTK_BOX(hbox), errorDialog->text, FALSE, FALSE, 10);
+  gtk_widget_show (errorDialog->text);
+}
+
+
+void CreateInfoDialog (InfoDialog *infoDialog, GtkWidget *window)
+{
+  GtkWidget *hbox, *pixmap;
+
+  infoDialog->dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (infoDialog->dialog), _("Info"));
+  gtk_window_set_modal (GTK_WINDOW (infoDialog->dialog), TRUE);
+  gtk_window_position (GTK_WINDOW (infoDialog->dialog), GTK_WIN_POS_MOUSE);
+  gtk_container_set_border_width (GTK_CONTAINER (infoDialog->dialog), 5);
+  gtk_signal_connect (GTK_OBJECT (infoDialog->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (infoDialog->dialog)->vbox), hbox);
+  gtk_widget_show_now (hbox);
+  
+  if (window)
+  {
+    pixmap = NewPixmap (info_xpm, window->window,
+                        &window->style->bg[GTK_STATE_NORMAL]);
+    gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show_now (pixmap);
+  }
+
+  infoDialog->text = gtk_label_new ("");
+  gtk_box_pack_start (GTK_BOX(hbox), infoDialog->text, FALSE, FALSE, 10);
+  gtk_widget_show_now (infoDialog->text);
+}
+
+
+void CreateYesNoDialog (YesNoDialog *yesNoDialog, const GtkSignalFunc yesFunc,
+                        const GtkSignalFunc noFunc, GtkWidget *window)
+{
+  GtkWidget *button, *hbox, *pixmap;
+
+  yesNoDialog->dialog = gtk_dialog_new ();
+  gtk_window_position (GTK_WINDOW (yesNoDialog->dialog), GTK_WIN_POS_MOUSE);
+  gtk_window_set_modal (GTK_WINDOW (yesNoDialog->dialog), TRUE);
+  gtk_container_set_border_width (GTK_CONTAINER (yesNoDialog->dialog), 5);
+  gtk_signal_connect (GTK_OBJECT (yesNoDialog->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+
+  button = gtk_button_new_with_label (_("Yes"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+                      button, FALSE, TRUE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (yesFunc), (gpointer) yesNoDialog->dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);                               
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("No"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+                      button, FALSE, TRUE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (noFunc), (gpointer) yesNoDialog->dialog);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("Cancel"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+                      button, FALSE, TRUE, 0);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (CancelDialog), (gpointer) yesNoDialog->dialog);
+  gtk_widget_show (button);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (yesNoDialog->dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+  
+  if (window)
+  {
+    pixmap = NewPixmap (quest_xpm, window->window,
+                        &window->style->bg[GTK_STATE_NORMAL]);
+    gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show (pixmap);
+  }
+
+  yesNoDialog->text = gtk_label_new ("");
+  gtk_box_pack_start (GTK_BOX (hbox), yesNoDialog->text, FALSE, FALSE, 10);
+  gtk_widget_show (yesNoDialog->text);
+}
+
+
+GtkWidget* NewPixmap (gchar **data, GdkWindow *window, GdkColor *background)
+{
+  GtkWidget *wpixmap;
+  GdkPixmap *pixmap;
+  GdkBitmap *mask;
+
+  pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, background, data);
+
+  wpixmap = gtk_pixmap_new (pixmap, mask);
+
+  return wpixmap;
+}
+
+
+gint LaunchProcess (const gchar *p, const gchar *arg, const gint infile,
+                    const gint outfile, const gint errfile)
+{
+  pid_t pid;
+
+  if (p == 0)
+    return (1);
+  pid = fork ();
+  if (pid == -1)
+    return (-1);
+  if (pid == 0)
+  {
+    pid = getpid ();
+    setpgid (pid, pid);
+    if (getuid () != geteuid ())
+      seteuid (getuid ());
+
+    signal (SIGINT, SIG_DFL);
+    signal (SIGQUIT, SIG_DFL);
+    signal (SIGTSTP, SIG_DFL);
+    signal (SIGTTIN, SIG_DFL);
+    signal (SIGTTOU, SIG_DFL);
+    signal (SIGCHLD, SIG_DFL);
+
+    if (infile != STDIN_FILENO)
+    {
+      dup2 (infile, STDIN_FILENO);
+      close (infile);
+    }
+    if (outfile != STDOUT_FILENO)
+    {
+      dup2 (outfile, STDOUT_FILENO);
+      close (outfile);
+    }
+    if (errfile != STDERR_FILENO)
+    {
+      dup2 (errfile, STDERR_FILENO);
+      close (errfile);
+    }
+
+    execlp (p, p, arg, NULL);
+    g_print (_("Can't exec %s\n"), p);
+    execlp ("/bin/false", p, NULL);
+    return (-1);
+  }
+
+  setpgid (pid, pid);
+  return (0);
+}
+
+
+void RemoveZombie (const gint sign)
+{
+  gint status;
+
+  wait (&status);
+}
+
+
+void Help (const GtkWidget *w, const gpointer data)
+{
+  gchar buf[255] = "file:";
+
+  strncat (buf, xgnokiiConfig.xgnokiidocsdir, 255 - strlen (buf));
+  buf[254] = '\0';
+  strncat (buf, (gchar *) data, 255 - strlen (buf));
+  buf[254] = '\0';
+  LaunchProcess (xgnokiiConfig.helpviewer, buf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO);
+}
+
+
+inline gint strrncmp (const gchar * const s1, const gchar * const s2, size_t n)
+{
+  gint l1 = strlen (s1);
+  gint l2 = strlen (s2);
+
+  if (l1 == 0 && l2 != 0)
+    return (-1);
+  else if (l1 != 0 && l2 == 0)
+    return (1);
+
+  while (l1-- > 0 && l2-- > 0 && n-- > 0)
+  {
+    if (s1[l1] < s2[l2])
+      return (-1);
+    else if (s1[l1] > s2[l2])
+      return (1);
+  }
+
+  return (0);
+}
+
+
+inline void GUI_Refresh (void)
+{
+  while (gtk_events_pending())
+    gtk_main_iteration();
+}
+
+
+inline void SetSortColumn (GtkWidget *widget, SortColumn *data)
+{
+  gtk_clist_set_sort_column (GTK_CLIST (data->clist), data->column);
+  gtk_clist_sort (GTK_CLIST (data->clist));
+}
+
+
+inline void GUIEventAdd (GUIEventType type, void (*func)(void))
+{
+  GUIEvent *event = g_malloc (sizeof (GUIEvent));
+  
+  event->type = type;
+  event->func = func;
+  
+  guiEvents = g_slist_append (guiEvents, event);
+}
+
+
+bool GUIEventRemove (GUIEventType type, void (*func)(void))
+{
+  GUIEvent event;
+  GSList *list;
+  
+  event.type = type;
+  event.func = func;
+  
+  list = g_slist_find (guiEvents, &event);
+  if (list)
+  {
+    g_print ("Nasiel som\n");
+    guiEvents = g_slist_remove_link (guiEvents, list);
+    g_slist_free_1 (list);
+    return (TRUE);
+  }
+  
+  return (FALSE);
+}
+
+static inline void CallEvent (gpointer data, gpointer user_data)
+{
+  GUIEvent *event = (GUIEvent *) data;
+  
+  if (event->type == GPOINTER_TO_INT (user_data))
+    event->func ();
+}
+
+inline void GUIEventSend (GUIEventType type)
+{
+  g_slist_foreach (guiEvents, CallEvent, GINT_TO_POINTER (type));
+}
diff --git a/xgnokii/xgnokii_common.h b/xgnokii/xgnokii_common.h
new file mode 100644 (file)
index 0000000..e90439a
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_COMMON_H
+#define XGNOKII_COMMON_H
+
+#include <gtk/gtk.h>
+#include <stdlib.h>  /* for size_t */
+
+typedef struct {
+  GtkWidget *clist;
+  gint       column;
+} SortColumn;
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *text;
+} ErrorDialog;
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *text;
+} InfoDialog;
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *text;
+} YesNoDialog;
+
+typedef struct {
+  GdkPixmap *pixmap;
+  GdkBitmap *mask;
+} QuestMark;
+
+typedef enum {
+  GUI_EVENT_CONTACTS_CHANGED,
+  GUI_EVENT_CALLERS_GROUPS_CHANGED,
+  GUI_EVENT_SMS_NUMBER_CHANGED,
+  GUI_EVENT_SMS_CENTERS_CHANGED,
+  GUI_EVENT_NETMON_CHANGED,
+  GUI_EVENT_SMS_FOLDERS_CHANGED
+} GUIEventType;
+
+extern void CancelDialog (const GtkWidget *, const gpointer);
+extern void CreateErrorDialog (ErrorDialog *, GtkWidget *);
+extern void CreateInfoDialog (InfoDialog *, GtkWidget *);
+extern void CreateYesNoDialog (YesNoDialog *, const GtkSignalFunc,
+                               const GtkSignalFunc, GtkWidget *);
+extern GtkWidget* NewPixmap (gchar **, GdkWindow *, GdkColor *);
+extern void DeleteEvent (const GtkWidget *, const GdkEvent *, const gpointer );
+extern gint LaunchProcess (const gchar *, const gchar *, const gint,
+                           const gint, const gint);
+extern void RemoveZombie (const gint);
+extern void Help (const GtkWidget *, const gpointer);
+extern gint strrncmp (const gchar * const, const gchar * const, size_t);
+extern gchar *GetModel (const gchar *);
+extern bool CallerGroupSupported (const gchar *);
+extern bool NetmonitorSupported (const gchar *);
+extern bool KeyboardSupported (const gchar *);
+extern bool SMSSupported (const gchar *);
+extern bool CalendarSupported (const gchar *);
+extern bool DTMFSupported (const gchar *);
+extern bool DataSupported (const gchar *);
+extern bool SpeedDialSupported (const gchar *);
+extern void GUI_Refresh (void);
+extern void SetSortColumn (GtkWidget *, SortColumn *);
+extern void GUIEventAdd (GUIEventType, void (*)(void));
+extern bool GUIEventRemove (GUIEventType, void (*)(void));
+extern void GUIEventSend (GUIEventType);
+#endif
diff --git a/xgnokii/xgnokii_contacts.c b/xgnokii/xgnokii_contacts.c
new file mode 100644 (file)
index 0000000..d7c5f78
--- /dev/null
@@ -0,0 +1,3433 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  $Id$
+  
+*/
+
+
+#include "misc.h"
+
+#include <stdio.h>
+#include <pthread.h>
+
+#ifndef WIN32
+# include <unistd.h>
+#else
+# include <windows.h>
+# define sleep(x) Sleep((x) * 1000)
+# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000))
+# define index strchr
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#if __unices__
+# include <strings.h>
+#endif
+#include <gtk/gtk.h>
+
+#include "gsm-api.h"
+#include "gsm-common.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_sms.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/New.xpm"
+#include "xpm/Duplicate.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/Dial.xpm"
+#include "xpm/sim.xpm"
+#include "xpm/phone.xpm"
+#include "xpm/quest.xpm"
+
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *entry;
+} DialVoiceDialog;
+
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *entry;
+  gint row;
+  GtkWidget *gbutton;
+  GtkWidget *mbutton;
+  GtkWidget *wbutton;
+  GtkWidget *fbutton;
+  GtkWidget *hbutton;
+  PhonebookEntry *pbEntry;
+} ExtPbkDialog;
+
+static GtkWidget *GUI_ContactsWindow;
+static bool fbus3810;
+static bool contactsMemoryInitialized;
+static MemoryStatus memoryStatus;
+static ContactsMemory contactsMemory;  /* Hold contacts. */
+static GtkWidget *clist;
+static StatusInfo statusInfo;
+static ProgressDialog progressDialog = {NULL, NULL, NULL};
+static ErrorDialog errorDialog = {NULL, NULL};
+static FindEntryStruct findEntryStruct = { "", 0};
+static ExportDialogData exportDialogData = {NULL};
+static MemoryPixmaps memoryPixmaps;
+static QuestMark questMark;
+static EditEntryData newEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditEntryData editEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditEntryData duplicateEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditNumbersData editNumbersData = {NULL, NULL};
+
+/* return != 0 if user has unsaved changes in contacts memory */
+inline gint GUI_ContactsIsChanged (void)
+{
+  return statusInfo.ch_ME | statusInfo.ch_SM;
+}
+
+
+/* return TRUE if Contacts memory was read from phone or from file */
+inline bool GUI_ContactsIsIntialized (void)
+{
+  return contactsMemoryInitialized;
+}
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/help/%s/windows/contacts/index.html", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+void RefreshStatusInfo (void)
+{
+  char p,s;
+  
+  if (statusInfo.ch_ME)
+    p = '*';
+  else
+    p = ' ';
+  
+  if (statusInfo.ch_SM)
+    s = '*';
+  else
+    s = ' ';
+  g_snprintf(statusInfo.text, STATUS_INFO_LENGTH, "SIM: %d/%d%c  Phone: %d/%d%c",
+              memoryStatus.UsedSM, memoryStatus.MaxSM, s,
+              memoryStatus.UsedME, memoryStatus.MaxME, p);
+  gtk_label_set_text(GTK_LABEL (statusInfo.label), statusInfo.text);
+}
+
+
+static inline void SetGroup0 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 0;
+}
+
+
+static inline void SetGroup1 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 1;
+}
+
+
+static inline void SetGroup2 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 2;
+}
+
+
+static inline void SetGroup3 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 3;
+}
+
+
+static inline void SetGroup4 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 4;
+}
+
+
+static inline void SetGroup5 (GtkWidget *item, gpointer data)
+{
+  ((EditEntryData *) data)->newGroup = 5;
+}
+
+
+PhonebookEntry *FindFreeEntry (GSM_MemoryType type)
+{
+  PhonebookEntry *entry;
+  gint start, end;
+  register gint i;
+
+  if (type == GMT_ME)
+  {
+    if (memoryStatus.FreeME == 0)
+      return NULL;
+    start = 0;
+    end = memoryStatus.MaxME;
+  }
+  else
+  {
+    if (memoryStatus.FreeSM == 0)
+      return NULL;
+    start = memoryStatus.MaxME;
+    end = memoryStatus.MaxME + memoryStatus.MaxSM;
+  }
+
+  for(i = start; i < end; i++)
+  {
+    entry = g_ptr_array_index(contactsMemory, i);
+    if (entry->status == E_Empty || entry->status == E_Deleted)
+      return entry;
+  }
+
+  return NULL;
+}
+
+
+inline PhonebookEntry *GUI_GetEntry (GSM_MemoryType type, gint nr)
+{
+  if ((type == GMT_ME && (nr < 1 || nr >= memoryStatus.MaxME)) ||
+      (type == GMT_SM && (nr < 1 || nr >= memoryStatus.MaxSM)))
+    return NULL;
+
+  if (type == GMT_ME)
+    return g_ptr_array_index (contactsMemory, nr - 1);
+  else
+    return g_ptr_array_index (contactsMemory, nr + memoryStatus.MaxME - 1);
+}
+
+
+static void CloseContacts (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_ContactsWindow);
+}
+
+
+/* I don't want to allow window to close */
+static void ProgressDialogDeleteEvent (GtkWidget *w, gpointer data)
+{
+  return;
+}
+
+
+static void CancelEditDialog (GtkWidget *widget, gpointer data )
+{
+  gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog));
+}
+
+
+
+static void OkEditEntryDialog (GtkWidget *widget, gpointer data)
+{
+  gchar *clist_row[4];
+  PhonebookEntry *entry;
+
+  if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active &&
+      ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM)
+  {
+    if ((entry = FindFreeEntry(GMT_ME)) == NULL)
+    {
+      gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Can't change memory type!"));  
+      gtk_widget_show (errorDialog.dialog);
+      return;
+    }
+    strncpy(entry->entry.Name, 
+            gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+            max_phonebook_name_length);
+    entry->entry.Name[max_phonebook_name_length] = '\0';
+
+    if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    {
+    }
+    else
+    {
+      strncpy(entry->entry.Number,
+              gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+              max_phonebook_number_length);
+      entry->entry.Name[max_phonebook_number_length] = '\0';
+    }
+
+    entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    entry->status = E_Changed;
+
+    ((EditEntryData*) data)->pbEntry->status = E_Deleted;
+
+    memoryStatus.UsedME++;
+    memoryStatus.FreeME--;
+    memoryStatus.UsedSM--;
+    memoryStatus.FreeSM++;
+    statusInfo.ch_ME = statusInfo.ch_SM = 1;
+
+    ((EditEntryData*) data)->pbEntry = entry;
+  }
+  else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active &&
+      ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+  {
+    if ((entry = FindFreeEntry(GMT_SM)) == NULL)
+    {
+      gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+      gtk_widget_show (errorDialog.dialog);
+      return;
+    }
+    strncpy(entry->entry.Name, 
+            gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+            max_phonebook_sim_name_length);
+    entry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+    if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+    {
+      gtk_label_set_text( GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\
+because you save it into SIM memory!"));
+      gtk_widget_show (errorDialog.dialog);
+    }
+
+    if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    {
+    }
+    else
+    {
+      strncpy(entry->entry.Number,
+              gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+              max_phonebook_sim_number_length);
+      entry->entry.Name[max_phonebook_sim_number_length] = '\0';
+    }
+
+    entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    entry->status = E_Changed;    
+
+    ((EditEntryData*) data)->pbEntry->status = E_Deleted;
+
+    memoryStatus.UsedME--;
+    memoryStatus.FreeME++;
+    memoryStatus.UsedSM++;
+    memoryStatus.FreeSM--;
+    statusInfo.ch_ME = statusInfo.ch_SM = 1;    
+
+    ((EditEntryData*) data)->pbEntry = entry;
+  }
+  else
+  {
+    if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active)
+    {
+      strncpy(((EditEntryData*) data)->pbEntry->entry.Name, 
+              gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+              max_phonebook_name_length);
+      ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0';
+
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      {
+      }
+      else
+      {
+        strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+                gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+                max_phonebook_number_length);
+        ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0';
+      }
+    }
+    else
+    {
+      strncpy(((EditEntryData*) data)->pbEntry->entry.Name, 
+              gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+              max_phonebook_sim_name_length);
+      ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+      if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+      {
+        gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\
+because you save it into SIM memory!"));
+        gtk_widget_show (errorDialog.dialog);
+      }
+
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      {
+      }
+      else
+      {
+        strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+                gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+                max_phonebook_sim_number_length);
+        ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0';
+      }
+    }
+
+    ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    ((EditEntryData*) data)->pbEntry->status = E_Changed;
+
+    if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+      statusInfo.ch_ME = 1;
+    else
+      statusInfo.ch_SM = 1;
+  }
+
+  gtk_widget_hide (GTK_WIDGET(((EditEntryData*) data)->dialog));
+
+  RefreshStatusInfo ();
+
+  gtk_clist_freeze (GTK_CLIST (clist));
+  gtk_clist_remove (GTK_CLIST (clist), ((EditEntryData*) data)->row);
+
+  clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name;
+
+  clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number;
+  
+  if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+    clist_row[2] = "P";
+  else
+    clist_row[2] = "S";
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+    clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group];
+  else
+    clist_row[3] = "";
+  gtk_clist_insert(GTK_CLIST (clist), ((EditEntryData*) data)->row, clist_row);
+  if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+    gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2,
+                          memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+  else
+    gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2,
+                          memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+  gtk_clist_set_row_data(GTK_CLIST (clist), ((EditEntryData*) data)->row, (gpointer) ((EditEntryData*) data)->pbEntry);
+
+  gtk_clist_sort(GTK_CLIST (clist));
+  gtk_clist_thaw(GTK_CLIST (clist));
+}
+
+
+static void OkDeleteEntryDialog(GtkWidget *widget, gpointer data )
+{
+  PhonebookEntry *pbEntry;
+  GList *sel;
+  gint row;
+
+  sel = GTK_CLIST (clist)->selection;
+
+  gtk_clist_freeze(GTK_CLIST (clist));
+
+  while (sel != NULL)
+  {
+    row = GPOINTER_TO_INT(sel->data); 
+    pbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row);
+    sel = sel->next;
+
+    pbEntry->status = E_Deleted;
+
+    if (pbEntry->entry.MemoryType == GMT_ME)
+    {
+      memoryStatus.UsedME--;
+      memoryStatus.FreeME++;
+      statusInfo.ch_ME = 1;
+    }
+    else
+    {
+      memoryStatus.UsedSM--;
+      memoryStatus.FreeSM++;
+      statusInfo.ch_SM = 1;
+    }
+
+    gtk_clist_remove(GTK_CLIST (clist), row);
+  }
+
+  RefreshStatusInfo ();
+
+  gtk_widget_hide(GTK_WIDGET (data));
+
+  gtk_clist_thaw(GTK_CLIST (clist));
+}
+
+
+static void OkNewEntryDialog(GtkWidget *widget, gpointer data )
+{
+  gchar *clist_row[4];
+  PhonebookEntry *entry;
+
+  if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active &&
+      ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM)
+  {
+    if ((entry = FindFreeEntry (GMT_ME)) == NULL)
+    {
+      gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+      gtk_widget_show (errorDialog.dialog);
+      return;
+    }
+    strncpy(entry->entry.Name, 
+            gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+            max_phonebook_name_length);
+    entry->entry.Name[max_phonebook_name_length] = '\0';
+
+    if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    {
+    }
+    else
+    {
+      strncpy(entry->entry.Number,
+              gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+              max_phonebook_number_length);
+      entry->entry.Name[max_phonebook_number_length] = '\0';
+    }
+
+    entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    entry->status = E_Changed;
+
+    ((EditEntryData*) data)->pbEntry = entry;
+  }
+  else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active &&
+      ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+  {
+    if ((entry = FindFreeEntry (GMT_SM)) == NULL)
+    {
+      gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+      gtk_widget_show (errorDialog.dialog);
+      return;
+    }
+    strncpy(entry->entry.Name, 
+            gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name)),
+            max_phonebook_sim_name_length);
+    entry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+    if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+    {
+      gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\
+because you save it into SIM memory!"));
+      gtk_widget_show (errorDialog.dialog);
+    }
+
+    if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    {
+    }
+    else
+    {
+      strncpy(entry->entry.Number,
+              gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+              max_phonebook_sim_number_length);
+      entry->entry.Name[max_phonebook_sim_number_length] = '\0';
+    }
+
+    entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    entry->status = E_Changed;
+
+    ((EditEntryData*) data)->pbEntry = entry;
+  }
+  else
+  {
+    if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active)
+    {
+      strncpy(((EditEntryData*) data)->pbEntry->entry.Name, 
+              gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+              max_phonebook_name_length);
+      ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0';
+
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      {
+      }
+      else
+      {
+        strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+                gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+                max_phonebook_number_length);
+        ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0';
+      }
+    }
+    else
+    {
+      strncpy (((EditEntryData*) data)->pbEntry->entry.Name, 
+              gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+              max_phonebook_sim_name_length);
+      ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+      if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+      {
+        gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\
+because you save it into SIM memory!"));
+        gtk_widget_show (errorDialog.dialog);
+      }
+
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      {
+      }
+      else
+      {
+        strncpy (((EditEntryData*) data)->pbEntry->entry.Number,
+                gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+                max_phonebook_sim_number_length);
+        ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0';
+      }
+    }
+
+    ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+    ((EditEntryData*) data)->pbEntry->status = E_Changed;
+  }
+
+  if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+  {
+    memoryStatus.UsedME++;
+    memoryStatus.FreeME--;
+    statusInfo.ch_ME = 1;
+  }
+  else
+  {
+    memoryStatus.UsedSM++;
+    memoryStatus.FreeSM--;
+    statusInfo.ch_SM = 1;
+  }
+
+  gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog));
+
+  RefreshStatusInfo ();
+
+  gtk_clist_freeze (GTK_CLIST (clist));
+  clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name;
+
+  clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number;
+
+  if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+    clist_row[2] = "P";
+  else
+    clist_row[2] = "S";
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+    clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group];
+  else
+    clist_row[3] = "";
+  gtk_clist_insert (GTK_CLIST (clist), 1, clist_row);
+
+  if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+    gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2,
+                          memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+  else
+    gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2,
+                          memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+  gtk_clist_set_row_data (GTK_CLIST (clist), 1, (gpointer) ((EditEntryData*) data)->pbEntry);
+
+  gtk_clist_sort (GTK_CLIST (clist));
+  gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static void OkChangeEntryDialog( GtkWidget *widget, gpointer data)
+{
+  gchar *clist_row[4];
+  gint row;
+  PhonebookEntry *oldPbEntry, *newPbEntry;
+  GList *sel;
+  gchar string[100];
+
+  sel = GTK_CLIST (clist)->selection;
+
+  gtk_widget_hide(GTK_WIDGET (data));
+
+  gtk_clist_freeze(GTK_CLIST (clist));
+
+  while (sel != NULL)
+  {
+    row = GPOINTER_TO_INT (sel->data);
+    oldPbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row);
+
+    sel = sel->next;
+
+    if (oldPbEntry->entry.MemoryType == GMT_SM)
+    {
+      if ((newPbEntry = FindFreeEntry (GMT_ME)) == NULL)
+      {
+        gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));  
+        gtk_widget_show (errorDialog.dialog);
+        return;
+      }
+
+      newPbEntry->entry = oldPbEntry->entry;
+      newPbEntry->entry.MemoryType = GMT_ME;
+
+      newPbEntry->status = E_Changed;
+      oldPbEntry->status = E_Deleted;
+
+      memoryStatus.UsedME++;
+      memoryStatus.FreeME--;
+      memoryStatus.UsedSM--;
+      memoryStatus.FreeSM++;
+      statusInfo.ch_ME = statusInfo.ch_SM = 1;
+
+    }
+    else
+    {
+      if ((newPbEntry = FindFreeEntry(GMT_SM)) == NULL)
+      {
+        gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+        gtk_widget_show (errorDialog.dialog);
+        return;
+      }
+
+      newPbEntry->entry = oldPbEntry->entry;
+      newPbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+      newPbEntry->entry.MemoryType = GMT_SM;
+
+      newPbEntry->status = E_Changed;
+      oldPbEntry->status = E_Deleted;
+
+      memoryStatus.UsedME--;
+      memoryStatus.FreeME++;
+      memoryStatus.UsedSM++;
+      memoryStatus.FreeSM--;
+      statusInfo.ch_ME = statusInfo.ch_SM = 1;
+    }
+
+    gtk_clist_remove(GTK_CLIST (clist), row);
+
+    clist_row[0] = newPbEntry->entry.Name;
+
+    if (newPbEntry->entry.SubEntriesCount>0) {
+      snprintf(string,100,"%s *",newPbEntry->entry.Number);
+      clist_row[1]=string;
+    } else clist_row[1] = newPbEntry->entry.Number;
+    
+    if( newPbEntry->entry.MemoryType == GMT_ME)
+      clist_row[2] = "P";
+    else
+      clist_row[2] = "S";
+    if (GetModelFeature(FN_CALLERGROUPS)!=0)
+      clist_row[3] = xgnokiiConfig.callerGroups[newPbEntry->entry.Group];
+    else
+      clist_row[3] = "";
+    gtk_clist_insert (GTK_CLIST (clist), row, clist_row);
+    if (newPbEntry->entry.MemoryType == GMT_ME)
+      gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2,
+                            memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+    else
+      gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2,
+                            memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+    gtk_clist_set_row_data (GTK_CLIST (clist), row, (gpointer) newPbEntry);
+  }
+
+  RefreshStatusInfo ();  
+  gtk_clist_sort (GTK_CLIST (clist));
+  gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static void SearchEntry (void)
+{
+  gchar *buf;
+  gchar *entry;
+  gint i;
+
+  if (!contactsMemoryInitialized || *findEntryStruct.pattern == '\0')
+    return;
+
+  gtk_clist_unselect_all( GTK_CLIST (clist));
+  g_strup(findEntryStruct.pattern);
+
+  gtk_clist_get_text( GTK_CLIST (clist), findEntryStruct.lastRow,
+                      findEntryStruct.type, &entry);
+  i = (findEntryStruct.lastRow + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM);
+
+  while (findEntryStruct.lastRow != i)
+  {
+    buf = g_strdup (entry);
+    g_strup (buf);
+
+    if (strstr( buf, findEntryStruct.pattern))
+    {
+      g_free(buf);
+      findEntryStruct.lastRow = i;
+      gtk_clist_select_row( GTK_CLIST (clist),
+                            (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1)
+                            % (memoryStatus.MaxME + memoryStatus.MaxSM),
+                            findEntryStruct.type);
+      gtk_clist_moveto( GTK_CLIST (clist),
+                       (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1)
+                        % (memoryStatus.MaxME + memoryStatus.MaxSM),
+                        findEntryStruct.type, 0.5, 0.5);
+      return;
+    }
+    g_free(buf);
+    gtk_clist_get_text (GTK_CLIST (clist), i, findEntryStruct.type, &entry);
+
+    i = (i + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM);
+  }
+
+  gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find pattern!"));
+  gtk_widget_show (errorDialog.dialog);  
+}
+
+
+static void OkFindEntryDialog (GtkWidget *widget, gpointer data)
+{
+  if (GTK_TOGGLE_BUTTON (((FindEntryData*) data)->nameB)->active)
+    findEntryStruct.type = FIND_NAME;
+  else
+    findEntryStruct.type = FIND_NUMBER;
+
+  strncpy(findEntryStruct.pattern, 
+          gtk_entry_get_text (GTK_ENTRY (((FindEntryData*) data)->pattern)),
+          max_phonebook_number_length);
+  findEntryStruct.pattern[max_phonebook_number_length] = '\0';
+
+  findEntryStruct.lastRow = 0;
+
+  gtk_widget_hide( ((FindEntryData*) data)->dialog);
+
+  SearchEntry ();
+}
+
+
+void CreateGroupMenu (EditEntryData *data)
+{
+  GtkWidget *item;
+
+  if (data->groupMenu)
+  {
+    gtk_option_menu_remove_menu (GTK_OPTION_MENU (data->group));
+    if (GTK_IS_WIDGET (data->groupMenu))
+      gtk_widget_destroy (GTK_WIDGET (data->groupMenu));
+    data->groupMenu = NULL;
+  }
+
+  data->groupMenu = gtk_menu_new ();
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[0]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup0),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[1]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup1),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[2]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup2),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[3]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup3),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[4]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup4),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[5]);
+  gtk_signal_connect (GTK_OBJECT (item), "activate",
+                      GTK_SIGNAL_FUNC (SetGroup5),
+                      (gpointer) data);
+  gtk_widget_show (item);
+  gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (data->group), data->groupMenu);
+}
+
+
+inline void GUI_RefreshGroupMenu (void)
+{
+  if (newEditEntryData.group)
+    CreateGroupMenu (&newEditEntryData);
+
+  if (editEditEntryData.group)
+    CreateGroupMenu (&editEditEntryData);
+
+  if (duplicateEditEntryData.group)
+    CreateGroupMenu (&duplicateEditEntryData);
+}
+
+
+static void EditSubEntries (GtkWidget      *clist,
+                            gint            row,
+                            gint            column,
+                            GdkEventButton *event,
+                            gpointer        data )
+{
+  if(event && event->type == GDK_2BUTTON_PRESS)
+//    EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row),
+//                row);
+  {
+    gchar *buf;
+
+    gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+    g_print (buf);
+  }
+}
+
+
+static void EditNumbers (GtkWidget *widget, void *data)
+{
+  GtkWidget *button, *clistScrolledWindow;
+  gchar *row[3];
+  register gint i;
+  
+  
+  if (editNumbersData.dialog == NULL)
+  {
+    editNumbersData.dialog = gtk_dialog_new ();
+    gtk_window_set_title (GTK_WINDOW (editNumbersData.dialog), _("Numbers"));
+    gtk_window_set_modal (GTK_WINDOW (editNumbersData.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (editNumbersData.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (editNumbersData.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+//    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+//                        GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    
+    button = gtk_button_new_with_label (_("New"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+//    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+//                        GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+    gtk_widget_show (button);
+    
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) editNumbersData.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox), 5);
+    
+    editNumbersData.clist = gtk_clist_new (3);
+    gtk_clist_set_shadow_type (GTK_CLIST (editNumbersData.clist), GTK_SHADOW_OUT);
+
+    gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 0, 4);
+    gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 1, 115);
+    gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 2, 10);
+    //gtk_clist_set_column_justification (GTK_CLIST (editNumbersData.clist), 2, GTK_JUSTIFY_CENTER);
+
+    gtk_signal_connect (GTK_OBJECT (editNumbersData.clist), "select_row",
+                        GTK_SIGNAL_FUNC (EditSubEntries), NULL);
+
+    clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+    gtk_container_add (GTK_CONTAINER (clistScrolledWindow), editNumbersData.clist);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox),
+                       clistScrolledWindow);
+                       
+    gtk_widget_show (editNumbersData.clist);
+    gtk_widget_show (clistScrolledWindow);
+  }
+
+  gtk_clist_freeze (GTK_CLIST (editNumbersData.clist));
+  gtk_clist_clear (GTK_CLIST (editNumbersData.clist));
+
+  for(i = 0; i < editNumbersData.pbEntry->entry.SubEntriesCount; i++)
+  {
+    if (strcmp (editNumbersData.pbEntry->entry.Number,
+                editNumbersData.pbEntry->entry.SubEntries[i].data.Number) == 0)
+      row[0] = "*";
+    else
+      row[0] = "";
+      
+    row[1] = editNumbersData.pbEntry->entry.SubEntries[i].data.Number;
+
+    switch (editNumbersData.pbEntry->entry.SubEntries[i].EntryType)
+    {
+      case GSM_Number:
+        switch (editNumbersData.pbEntry->entry.SubEntries[i].NumberType)
+        {
+          case GSM_General:
+            row[2] = "General";
+            break;
+
+          case GSM_Mobile:
+            row[2] = "Mobile";
+            break;
+
+          case GSM_Work:
+            row[2] = "Work";
+            break;
+
+          case GSM_Fax:
+            row[2] = "Fax";
+            break;
+
+          case GSM_Home:
+            row[2] = "Home";
+            break;
+
+          default:
+            row[2] = "Unknown";
+            break;
+        }
+        break;
+
+      case GSM_Note:
+        row[2] = "Note";
+        break;
+
+      case GSM_Postal:
+        row[2] = "Postal";
+        break;
+
+      case GSM_Email:
+        row[2] = "E-Mail";
+        break;
+
+      case GSM_Name:
+        row[2] = "Name";
+        break;
+
+      default:
+        row[2] = "Unknown";
+        break;
+    }
+    
+    gtk_clist_append (GTK_CLIST (editNumbersData.clist), row);
+/*      if (pbEntry->entry.MemoryType == GMT_ME)
+      gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+                            memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+    else
+      gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+                            memoryPixmaps.simMemPix, memoryPixmaps.mask);
+*/
+  }
+    
+  gtk_clist_thaw (GTK_CLIST (editNumbersData.clist));
+  
+  gtk_widget_show (editNumbersData.dialog);
+}
+
+
+static void CreateEditDialog (EditEntryData *editEntryData, gchar *title,
+                              GtkSignalFunc okFunc)
+{
+  GtkWidget *button, *label, *hbox;
+
+  editEntryData->dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (editEntryData->dialog), title);
+  gtk_window_set_modal (GTK_WINDOW (editEntryData->dialog), TRUE);
+  gtk_container_set_border_width (GTK_CONTAINER (editEntryData->dialog), 10);
+  gtk_signal_connect (GTK_OBJECT (editEntryData->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  button = gtk_button_new_with_label (_("Ok"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+  button = gtk_button_new_with_label (_("Cancel"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) editEntryData);
+  gtk_widget_show (button);
+
+  gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), 5);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Name:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  editEntryData->name = gtk_entry_new_with_max_length (100);
+
+  gtk_box_pack_end(GTK_BOX(hbox), editEntryData->name, FALSE, FALSE, 2);
+  gtk_widget_show (editEntryData->name);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Number:"));
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+  {
+    button = gtk_button_new ();
+    editEntryData->number = gtk_label_new ("");
+
+    gtk_container_add (GTK_CONTAINER (button), editEntryData->number);
+
+    gtk_box_pack_end(GTK_BOX(hbox), button, TRUE, TRUE, 2);
+
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (EditNumbers), NULL);
+    gtk_widget_show_all (button);
+  }
+  else
+  {
+    editEntryData->number = gtk_entry_new_with_max_length (max_phonebook_number_length);
+    gtk_box_pack_end(GTK_BOX(hbox), editEntryData->number, FALSE, FALSE, 2);
+    gtk_widget_show (editEntryData->number);
+  }
+
+/*  if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+//    gtk_widget_show (hbox);
+
+    label = gtk_label_new (_("Extended:"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+//    gtk_widget_show (label);
+    
+    editEntryData->extended = gtk_combo_new();
+    gtk_box_pack_end(GTK_BOX(hbox), editEntryData->extended, FALSE, FALSE, 2);
+//    gtk_widget_show (editEntryData->extended);
+
+    gtk_signal_connect (GTK_OBJECT (GTK_COMBO(editEntryData->extended)->entry), "activate",
+                       GTK_SIGNAL_FUNC (ExtPbkChanged), (gpointer) editEntryData);    
+  }
+*/
+    
+  editEntryData->memoryBox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox),
+                     editEntryData->memoryBox);
+    
+  label = gtk_label_new (_("Memory:"));
+  gtk_box_pack_start(GTK_BOX (editEntryData->memoryBox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  editEntryData->memoryTypePhone = gtk_radio_button_new_with_label (NULL, _("phone"));
+  gtk_box_pack_end (GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypePhone, TRUE, FALSE, 2);
+  gtk_widget_show (editEntryData->memoryTypePhone);
+
+  editEntryData->memoryTypeSIM = gtk_radio_button_new_with_label( 
+        gtk_radio_button_group (GTK_RADIO_BUTTON (editEntryData->memoryTypePhone)), "SIM");
+  gtk_box_pack_end(GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypeSIM, TRUE, FALSE, 2);
+  gtk_widget_show (editEntryData->memoryTypeSIM);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  editEntryData->groupLabel = gtk_label_new (_("Caller group:"));
+  gtk_box_pack_start (GTK_BOX (hbox), editEntryData->groupLabel, FALSE, FALSE, 2);
+
+  editEntryData->group = gtk_option_menu_new ();
+
+  CreateGroupMenu (editEntryData);
+
+  gtk_box_pack_start (GTK_BOX (hbox), editEntryData->group, TRUE, TRUE, 0);
+}
+
+
+static void EditPbEntry(PhonebookEntry *pbEntry, gint row)
+{
+  if (editEditEntryData.dialog == NULL)
+    CreateEditDialog(&editEditEntryData, _("Edit entry"), OkEditEntryDialog);
+
+  editEditEntryData.pbEntry = pbEntry;
+  editEditEntryData.newGroup = pbEntry->entry.Group;
+  editEditEntryData.row = row;
+  editNumbersData.pbEntry = pbEntry;
+
+  gtk_entry_set_text (GTK_ENTRY (editEditEntryData.name), pbEntry->entry.Name);
+
+  if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    gtk_label_set_text (GTK_LABEL (editEditEntryData.number), pbEntry->entry.Number);
+  else
+    gtk_entry_set_text (GTK_ENTRY (editEditEntryData.number), pbEntry->entry.Number);
+
+  if (pbEntry->entry.MemoryType == GMT_ME)
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypePhone), TRUE);
+  else
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypeSIM), TRUE);
+
+  gtk_option_menu_set_history( GTK_OPTION_MENU (editEditEntryData.group),
+                               pbEntry->entry.Group);
+
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    gtk_widget_show (editEditEntryData.group);
+    gtk_widget_show (editEditEntryData.groupLabel);
+  }
+  else
+  {
+    gtk_widget_hide (editEditEntryData.group);
+    gtk_widget_hide (editEditEntryData.groupLabel);
+  }
+
+  if (memoryStatus.MaxME > 0)
+    gtk_widget_show (GTK_WIDGET (editEditEntryData.memoryBox));
+  else
+    gtk_widget_hide (GTK_WIDGET (editEditEntryData.memoryBox));
+
+  gtk_widget_show (GTK_WIDGET (editEditEntryData.dialog));
+}
+
+
+void DeletePbEntry (void)
+{
+  static GtkWidget *dialog = NULL;
+  GtkWidget *button, *hbox, *label, *pixmap;
+
+  if (dialog == NULL)
+  {
+    dialog = gtk_dialog_new ();
+    gtk_window_set_title (GTK_WINDOW (dialog), _("Delete entries"));
+    gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkDeleteEntryDialog), (gpointer) dialog);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+
+    pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+    gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show(pixmap);
+
+    label = gtk_label_new(_("Do you want to delete selected entries?"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
+    gtk_widget_show(label);
+  }
+
+  gtk_widget_show(GTK_WIDGET (dialog));
+}
+
+
+void NewPbEntry(PhonebookEntry *pbEntry)
+{
+  if (newEditEntryData.dialog == NULL)
+    CreateEditDialog (&newEditEntryData, _("New entry"), OkNewEntryDialog);
+
+  newEditEntryData.pbEntry = pbEntry;
+  newEditEntryData.newGroup = 5;
+  editNumbersData.pbEntry = pbEntry;
+
+  gtk_entry_set_text (GTK_ENTRY (newEditEntryData.name), "");
+  
+  if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    gtk_label_set_text (GTK_LABEL (newEditEntryData.number), "");
+  else
+    gtk_entry_set_text (GTK_ENTRY (newEditEntryData.number), "");
+
+  if (pbEntry->entry.MemoryType == GMT_ME)
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypePhone), TRUE);
+  else
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypeSIM), TRUE);
+
+  gtk_option_menu_set_history( GTK_OPTION_MENU (newEditEntryData.group),
+                               pbEntry->entry.Group);
+
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    gtk_widget_show (newEditEntryData.group);
+    gtk_widget_show (newEditEntryData.groupLabel);
+  }
+  else
+  {
+    gtk_widget_hide (newEditEntryData.group);
+    gtk_widget_hide (newEditEntryData.groupLabel);
+  }
+
+  if (memoryStatus.MaxME > 0)
+    gtk_widget_show (GTK_WIDGET (newEditEntryData.memoryBox));
+  else
+    gtk_widget_hide (GTK_WIDGET (newEditEntryData.memoryBox));
+
+  gtk_widget_show(GTK_WIDGET (newEditEntryData.dialog));
+}
+
+
+void DuplicatePbEntry (PhonebookEntry *pbEntry)
+{
+  if (duplicateEditEntryData.dialog == NULL)
+    CreateEditDialog (&duplicateEditEntryData, _("Duplicate entry"), OkNewEntryDialog);
+
+  duplicateEditEntryData.pbEntry = pbEntry;
+  duplicateEditEntryData.newGroup = pbEntry->entry.Group;
+  editNumbersData.pbEntry = pbEntry;
+
+  gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.name), pbEntry->entry.Name);
+
+  if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+    gtk_label_set_text (GTK_LABEL (duplicateEditEntryData.number), pbEntry->entry.Number);
+  else
+    gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.number), pbEntry->entry.Number);
+
+  if (pbEntry->entry.MemoryType == GMT_ME)
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypePhone), TRUE);
+  else
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypeSIM), TRUE);
+
+  gtk_option_menu_set_history( GTK_OPTION_MENU (duplicateEditEntryData.group),
+                               pbEntry->entry.Group);
+
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
+  {
+    gtk_widget_show (duplicateEditEntryData.group);
+    gtk_widget_show (duplicateEditEntryData.groupLabel);
+  }
+  else
+  {
+    gtk_widget_hide (duplicateEditEntryData.group);
+    gtk_widget_hide (duplicateEditEntryData.groupLabel);
+  }
+
+  if (memoryStatus.MaxME > 0)
+    gtk_widget_show (GTK_WIDGET (duplicateEditEntryData.memoryBox));
+  else
+    gtk_widget_hide (GTK_WIDGET (duplicateEditEntryData.memoryBox));
+
+  gtk_widget_show(GTK_WIDGET (duplicateEditEntryData.dialog));
+}
+
+
+static void EditEntry (void)
+{
+  if (contactsMemoryInitialized)
+  {
+    if (GTK_CLIST (clist)->selection == NULL)
+      return;
+
+    EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist),
+                GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data)),
+                GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data));
+  }
+}
+
+
+static void DuplicateEntry (void)
+{
+  PhonebookEntry *new, *old;
+
+  if (contactsMemoryInitialized)
+  {
+    if (GTK_CLIST (clist)->selection == NULL)
+      return;
+
+    old = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist), GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data));
+
+    if ( old->entry.MemoryType == GMT_ME)
+    {
+      if ((new = FindFreeEntry (GMT_ME)) == NULL)
+        if ((new = FindFreeEntry (GMT_SM)) == NULL)
+        {
+          gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+          gtk_widget_show (errorDialog.dialog);
+          return;
+        }
+    }
+    else
+    {
+      if ((new = FindFreeEntry(GMT_SM)) == NULL)
+        if ((new = FindFreeEntry(GMT_ME)) == NULL)
+        {
+          gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+          gtk_widget_show (errorDialog.dialog);
+          return;
+        }
+    }
+
+    new->entry = old->entry;
+
+    DuplicatePbEntry (new);
+  }
+}
+
+
+static void NewEntry (void)
+{
+  PhonebookEntry *entry;
+
+  if (contactsMemoryInitialized)
+  {
+    if ((entry = FindFreeEntry (GMT_SM)) != NULL)
+      NewPbEntry(entry);
+    else if ((entry = FindFreeEntry (GMT_ME)) != NULL)
+      NewPbEntry(entry);
+    else
+    {
+      gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+      gtk_widget_show (errorDialog.dialog);
+    }
+  }
+}
+
+
+static inline void ClickEntry (GtkWidget      *clist,
+                 gint            row,
+                 gint            column,
+                 GdkEventButton *event,
+                 gpointer        data )
+{
+  if(event && event->type == GDK_2BUTTON_PRESS)
+    EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row),
+                row);
+}
+
+
+static inline void DeleteEntry (void)
+{
+  if (contactsMemoryInitialized)
+  {
+    if (GTK_CLIST (clist)->selection == NULL)
+      return;
+
+    DeletePbEntry ();
+  }
+}
+
+
+static void ChMemType (void)
+{
+  static GtkWidget *dialog = NULL;
+  GtkWidget *button, *hbox, *label;
+
+  if (contactsMemoryInitialized)
+  {
+    if (GTK_CLIST (clist)->selection == NULL)
+      return;
+
+    if (dialog == NULL)
+    {
+      dialog = gtk_dialog_new ();
+      gtk_window_set_title (GTK_WINDOW (dialog), _("Changing memory type"));
+      gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+      gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+      gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+      gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                          GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+      button = gtk_button_new_with_label (_("Continue"));
+      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                          button, FALSE, FALSE, 0);
+      gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                          GTK_SIGNAL_FUNC (OkChangeEntryDialog), (gpointer) dialog);
+      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+      gtk_widget_grab_default (button);
+      gtk_widget_show (button);
+
+      button = gtk_button_new_with_label (_("Cancel"));
+      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                          button, FALSE, FALSE, 0);
+      gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                          GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+      gtk_widget_show (button);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+      gtk_widget_show (hbox);
+
+      label = gtk_label_new (_("If you change from phone memory to SIM memory\nsome entries may be truncated."));
+      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
+      gtk_widget_show (label);
+    }
+
+    gtk_widget_show (dialog);
+  }
+}
+
+
+static void FindFirstEntry (void)
+{
+  static FindEntryData findEntryData = { NULL };
+  GtkWidget *button, *label, *hbox;
+
+  if (contactsMemoryInitialized)
+  {
+    if (findEntryData.dialog == NULL)
+    {
+      findEntryData.dialog = gtk_dialog_new ();
+      gtk_window_set_title (GTK_WINDOW (findEntryData.dialog), _("Find"));
+      gtk_window_set_modal (GTK_WINDOW (findEntryData.dialog), TRUE);
+      gtk_container_set_border_width (GTK_CONTAINER (findEntryData.dialog), 10);
+      gtk_signal_connect (GTK_OBJECT (findEntryData.dialog), "delete_event",
+                          GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+      button = gtk_button_new_with_label (_("Find"));
+      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area),
+                          button, TRUE, TRUE, 10);
+      gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                          GTK_SIGNAL_FUNC (OkFindEntryDialog), (gpointer) &findEntryData);
+      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+      gtk_widget_grab_default (button);
+      gtk_widget_show (button);
+
+      button = gtk_button_new_with_label (_("Cancel"));
+      gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area),
+                          button, TRUE, TRUE, 10);
+      gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                          GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) &findEntryData);
+      gtk_widget_show (button);
+
+      gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), 5);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox);
+      gtk_widget_show (hbox);
+
+      label = gtk_label_new (_("Pattern:"));
+      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+      gtk_widget_show (label);
+
+      findEntryData.pattern = gtk_entry_new_with_max_length (max_phonebook_name_length);
+
+      gtk_box_pack_end (GTK_BOX (hbox), findEntryData.pattern, FALSE, FALSE, 2);
+      gtk_widget_show (findEntryData.pattern);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox);
+      gtk_widget_show (hbox);
+
+      findEntryData.nameB = gtk_radio_button_new_with_label (NULL, _("Name"));
+      gtk_box_pack_start (GTK_BOX (hbox), findEntryData.nameB, TRUE, FALSE, 2);
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (findEntryData.nameB), TRUE);
+      gtk_widget_show (findEntryData.nameB);
+
+      findEntryData.numberB = gtk_radio_button_new_with_label ( 
+        gtk_radio_button_group (GTK_RADIO_BUTTON (findEntryData.nameB)), _("Number"));
+      gtk_box_pack_start (GTK_BOX(hbox), findEntryData.numberB, TRUE, FALSE, 2);
+      gtk_widget_show (findEntryData.numberB);
+    }
+
+    gtk_widget_show (findEntryData.dialog);
+  }
+}
+
+
+static inline void SelectAll (void)
+{
+  gtk_clist_select_all (GTK_CLIST (clist));
+}
+
+
+static inline void OkDialVoiceDialog (GtkWidget *w, gpointer data)
+{
+  PhoneEvent *e;
+  gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (((DialVoiceDialog *) data)->entry)));
+
+  if (strlen (buf) > 0)
+  {
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_DialVoice;
+    e->data = buf;
+    GUI_InsertEvent (e);
+  }
+  else
+    g_free (buf);
+
+  gtk_widget_hide (((DialVoiceDialog *) data)->dialog);
+}
+
+
+static void DialVoice (void)
+{
+  static DialVoiceDialog dialVoiceDialog = {NULL, NULL};
+  GtkWidget *button, *label;
+  PhonebookEntry *pbEntry;
+
+  if (dialVoiceDialog.dialog == NULL)
+  {
+    dialVoiceDialog.dialog = gtk_dialog_new ();
+    gtk_window_set_title (GTK_WINDOW (dialVoiceDialog.dialog), _("Dial voice"));
+    gtk_window_set_modal(GTK_WINDOW (dialVoiceDialog.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialVoiceDialog.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialVoiceDialog.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkDialVoiceDialog), (gpointer) &dialVoiceDialog);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialVoiceDialog.dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), 5);
+
+    label = gtk_label_new (_("Number:"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), label, FALSE, FALSE, 5);
+    gtk_widget_show (label);
+
+    dialVoiceDialog.entry = gtk_entry_new_with_max_length (GSM_MAX_PHONEBOOK_NUMBER_LENGTH);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), dialVoiceDialog.entry, FALSE, FALSE, 5);
+    gtk_widget_show (dialVoiceDialog.entry);
+  }
+
+  if (GTK_CLIST (clist)->selection != NULL)
+  {
+    pbEntry = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist),
+               GPOINTER_TO_INT (GTK_CLIST (clist)->selection->data));
+
+    gtk_entry_set_text (GTK_ENTRY (dialVoiceDialog.entry), pbEntry->entry.Number);
+  }
+
+  gtk_widget_show (dialVoiceDialog.dialog);  
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+  static gchar phoneText[] = "B";
+  static gchar simText[] = "A";
+  char *text1 = NULL;
+  char *text2 = NULL;
+  gint ret;
+
+  GtkCListRow *row1 = (GtkCListRow *) ptr1;
+  GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+  switch (row1->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+  switch (row2->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+
+  if (clist->sort_column == 2)
+  {
+    if (((PhonebookEntry *) row1->data)->entry.MemoryType == GMT_ME)
+      text1 = phoneText;
+    else
+      text1 = simText;
+    if (((PhonebookEntry *) row2->data)->entry.MemoryType == GMT_ME)
+      text2 = phoneText;
+    else
+      text2 = simText;
+  }
+
+  if (!text2)
+    return (text1 != NULL);
+
+  if (!text1)
+    return -1;
+
+  if ((ret = g_strcasecmp (text1, text2)) == 0)
+  {
+    if (((PhonebookEntry *) row1->data)->entry.MemoryType < ((PhonebookEntry *) row2->data)->entry.MemoryType)
+      ret = -1;
+    else if (((PhonebookEntry *) row1->data)->entry.MemoryType > ((PhonebookEntry *) row2->data)->entry.MemoryType)
+      ret = 1;
+  }
+
+  return ret;      
+}
+
+
+static void CreateProgressDialog (gint maxME, gint maxSM)
+{
+  GtkWidget *vbox, *label;
+  GtkAdjustment *adj;
+  
+  progressDialog.dialog = gtk_window_new (GTK_WINDOW_DIALOG);
+  gtk_window_position (GTK_WINDOW (progressDialog.dialog), GTK_WIN_POS_MOUSE);
+  gtk_window_set_modal (GTK_WINDOW (progressDialog.dialog), TRUE);
+  gtk_signal_connect (GTK_OBJECT (progressDialog.dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (ProgressDialogDeleteEvent), NULL);
+
+  vbox = gtk_vbox_new (FALSE, 10);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+  gtk_container_add (GTK_CONTAINER (progressDialog.dialog), vbox);
+
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new (_("Phone memory..."));
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+  gtk_widget_show (label);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxME, 0, 0, 0);
+  progressDialog.pbarME = gtk_progress_bar_new_with_adjustment (adj);
+
+  gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarME, FALSE, FALSE, 0);
+  gtk_widget_show (progressDialog.pbarME);
+
+  label = gtk_label_new (_("SIM memory..."));
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+  gtk_widget_show (label);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxSM, 0, 0, 0);
+  progressDialog.pbarSM = gtk_progress_bar_new_with_adjustment (adj);
+
+  gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarSM, FALSE, FALSE, 0);
+  gtk_widget_show (progressDialog.pbarSM);
+}
+
+
+static void SaveContacts (void)
+{
+  register gint i;
+  PhonebookEntry *pbEntry;
+  PhoneEvent *e;
+  D_MemoryLocation *ml;
+
+  if (progressDialog.dialog == NULL)
+  {
+    CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM);
+  }
+
+  if (contactsMemoryInitialized && progressDialog.dialog)
+  {
+    gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0);
+    gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0);
+    gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Saving entries"));  
+    gtk_widget_show_now (progressDialog.dialog);
+
+    /* Save Phone memory */
+    for(i = 0; i < memoryStatus.MaxME; i++)
+    {
+      pbEntry = g_ptr_array_index(contactsMemory, i);
+#ifdef XDEBUG    
+      g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+               pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+               (int) pbEntry->status);
+#endif
+      if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted)
+      {
+        if (pbEntry->status == E_Deleted)
+        {
+          pbEntry->entry.Name[0] = '\0';
+          pbEntry->entry.Number[0] = '\0';
+          pbEntry->entry.Group = 5;
+        }
+
+        pbEntry->entry.Location = i + 1;
+        ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation));
+        ml->entry = &(pbEntry->entry);
+        e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+        e->event = Event_WriteMemoryLocation;
+        e->data = ml;
+        GUI_InsertEvent (e);
+        pthread_mutex_lock (&memoryMutex);
+        pthread_cond_wait (&memoryCond, &memoryMutex);
+        pthread_mutex_unlock (&memoryMutex);
+
+        if (ml->status != GE_NONE)
+        {
+          g_print (_("%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"),
+                   __FILE__, __LINE__, i + 1, ml->status);
+        }
+        g_free (ml);
+      }
+      gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), i + 1);
+      GUI_Refresh ();
+    }
+
+    /* Save SIM memory */
+    for (i = memoryStatus.MaxME; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+    {
+      pbEntry = g_ptr_array_index (contactsMemory, i);
+
+#ifdef XDEBUG    
+      g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+               pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+               (int) pbEntry->status);
+#endif
+
+      if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted)
+      {
+        if (pbEntry->status == E_Deleted)
+        {
+          pbEntry->entry.Name[0] = '\0';
+          pbEntry->entry.Number[0] = '\0';
+          pbEntry->entry.Group = 5;
+        }
+
+        pbEntry->entry.Location = i - memoryStatus.MaxME + 1;
+        ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation));
+        ml->entry = &(pbEntry->entry);
+        e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+        e->event = Event_WriteMemoryLocation;
+        e->data = ml;
+        GUI_InsertEvent (e);
+        pthread_mutex_lock (&memoryMutex);
+        pthread_cond_wait (&memoryCond, &memoryMutex);
+        pthread_mutex_unlock (&memoryMutex);
+
+        if (ml->status != GE_NONE)
+        {
+          g_print(_("%s: line %d:Can't write SM memory entry number %d! Error: %d\n"),
+                   __FILE__, __LINE__, i - memoryStatus.MaxME + 1, ml->status);
+        }
+        g_free (ml);
+      }
+      gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), i - memoryStatus.MaxME + 1);
+      GUI_Refresh ();
+    }
+
+    statusInfo.ch_ME = statusInfo.ch_SM = 0;
+    RefreshStatusInfo ();
+    gtk_widget_hide (progressDialog.dialog);
+  }
+}
+
+
+static GtkWidget *CreateSaveQuestionDialog (GtkSignalFunc SaveFunc,
+                                            GtkSignalFunc DontSaveFunc)
+{
+  GtkWidget *dialog;
+  GtkWidget *button, *label, *hbox, *pixmap;
+
+  dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (dialog), _("Save changes?"));
+  gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+  gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+  gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  button = gtk_button_new_with_label (_("Save"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (SaveFunc), (gpointer) dialog);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("Don't save"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                      button, TRUE, TRUE, 10);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (DontSaveFunc), (gpointer) dialog);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label (_("Cancel"));
+  gtk_box_pack_start(GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                    button, TRUE, TRUE, 10);
+  gtk_signal_connect(GTK_OBJECT (button), "clicked",
+                     GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+  gtk_widget_show (button);
+
+  gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+  gtk_widget_show (hbox);
+
+  pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+  gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+  gtk_widget_show (pixmap);
+
+  label = gtk_label_new (_("You have made changes in your\ncontacts directory.\n\
+\n\nDo you want save these changes into phone?\n"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+  gtk_widget_show (label);
+
+  return dialog;
+}
+
+
+static void OkExtPbkDialog (GtkWidget *w, gpointer data) {
+
+  ExtPbkDialog *d=(ExtPbkDialog*)data;
+  GSM_NumberType numtype;
+  gint i, found=999;
+  gchar *chars;
+
+  if (w==d->gbutton) numtype=GSM_General;
+  else if (w==d->mbutton) numtype=GSM_Mobile;
+  else if (w==d->wbutton) numtype=GSM_Work;
+  else if (w==d->fbutton) numtype=GSM_Fax;
+  else if (w==d->hbutton) numtype=GSM_Home;
+  else numtype=GSM_General;
+
+  /* Search through subentries */
+
+  for (i=0;i<d->pbEntry->entry.SubEntriesCount;i++) {
+     if (d->pbEntry->entry.SubEntries[i].EntryType==GSM_Number)
+       if (d->pbEntry->entry.SubEntries[i].NumberType==numtype)
+        found=i;
+  }
+
+  if (found>i) { /* Not found */
+    found=d->pbEntry->entry.SubEntriesCount;
+    d->pbEntry->entry.SubEntriesCount++;
+    d->pbEntry->entry.SubEntries[found].EntryType=GSM_Number;
+    d->pbEntry->entry.SubEntries[found].NumberType=numtype;
+  }
+
+  chars=gtk_editable_get_chars(GTK_EDITABLE(d->entry),0,-1);
+  strcpy(d->pbEntry->entry.SubEntries[found].data.Number,chars);
+  g_free(chars);
+
+  /* Update the entry dialog */
+  EditPbEntry(d->pbEntry,d->row);
+
+  gtk_widget_hide (d->dialog);
+}
+
+
+void ExtPbkChanged (GtkWidget *widget, gpointer data )
+{
+  static ExtPbkDialog dialog = {NULL,NULL,0,NULL,NULL,NULL,NULL,NULL};
+  GtkWidget *button;
+  static GtkWidget *label;
+  gchar *chars;
+
+
+  if (dialog.dialog==NULL) {
+
+    dialog.dialog=gtk_dialog_new();
+    
+    gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Which Extended Phonebook Entry?"));
+    gtk_window_set_modal(GTK_WINDOW (dialog.dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog.dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    dialog.gbutton = gtk_button_new_with_label (_("General"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+                        dialog.gbutton, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.gbutton), "clicked",
+                        GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+    gtk_widget_show (dialog.gbutton);
+    dialog.mbutton = gtk_button_new_with_label (_("Mobile"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+                        dialog.mbutton, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.mbutton), "clicked",
+                        GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+    gtk_widget_show (dialog.mbutton);
+    dialog.wbutton = gtk_button_new_with_label (_("Work"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+                        dialog.wbutton, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.wbutton), "clicked",
+                        GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+    gtk_widget_show (dialog.wbutton);
+    dialog.fbutton = gtk_button_new_with_label (_("Fax"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+                        dialog.fbutton, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.fbutton), "clicked",
+                        GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+    gtk_widget_show (dialog.fbutton);
+    dialog.hbutton = gtk_button_new_with_label (_("Home"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+                        dialog.hbutton, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (dialog.hbutton), "clicked",
+                        GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+    gtk_widget_show (dialog.hbutton);
+
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog.dialog);
+    gtk_widget_show (button);
+
+    label = gtk_label_new("");
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), label, FALSE, FALSE, 5);
+    gtk_widget_show(label);
+  }
+
+  chars=gtk_editable_get_chars(GTK_EDITABLE(widget),0,-1);
+  gtk_label_set_text(GTK_LABEL(label),chars);
+  g_free(chars);
+  dialog.pbEntry=((EditEntryData*)data)->pbEntry;
+  dialog.row=((EditEntryData*)data)->row;
+  dialog.entry=widget;
+  gtk_widget_show(dialog.dialog);
+}
+
+
+
+void GUI_RefreshContacts (void)
+{
+  PhonebookEntry *pbEntry;
+  gint row_i = 0;
+  register gint i;
+
+  if (contactsMemoryInitialized == FALSE)
+    return;
+
+  gtk_clist_freeze (GTK_CLIST (clist));
+  gtk_clist_clear (GTK_CLIST (clist));
+
+  for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    gchar *row[4];
+
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+    if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted)
+    {
+      row[0] = pbEntry->entry.Name;
+
+      row[1] = pbEntry->entry.Number;
+
+      if (pbEntry->entry.MemoryType == GMT_ME)
+        row[2] = "P";
+      else
+        row[2] = "S";
+      if (GetModelFeature(FN_CALLERGROUPS)!=0)
+        row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group];
+      else
+        row[3] = "";
+      gtk_clist_append (GTK_CLIST (clist), row);
+      if (pbEntry->entry.MemoryType == GMT_ME)
+        gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+                              memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+      else
+        gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+                              memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+      gtk_clist_set_row_data (GTK_CLIST (clist), row_i++, (gpointer) pbEntry);
+    }
+#ifdef XDEBUG    
+    g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+            pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+            (int) pbEntry->status);
+#endif
+  }
+
+  gtk_clist_sort (GTK_CLIST (clist));
+  gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static gint InsertPBEntryME (GSM_PhonebookEntry *entry)
+{
+  PhonebookEntry *pbEntry;
+
+  if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+  {
+    g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+    g_ptr_array_free (contactsMemory, TRUE);
+    gtk_widget_hide (progressDialog.dialog);
+    return (-1);
+  }
+
+  pbEntry->entry = *entry;
+
+  if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0')
+    pbEntry->status = E_Empty;
+  else
+    pbEntry->status = E_Unchanged;
+
+  g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+  gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), entry->Location);
+  GUI_Refresh ();
+
+  return (GE_NONE);  
+}
+
+
+static gint InsertPBEntrySM (GSM_PhonebookEntry *entry)
+{
+  PhonebookEntry *pbEntry;
+
+  if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+  {
+    g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+    g_ptr_array_free (contactsMemory, TRUE);
+    gtk_widget_hide (progressDialog.dialog);
+    return (-1);
+  }
+
+  pbEntry->entry = *entry;
+
+  if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0')
+    pbEntry->status = E_Empty;
+  else
+  {
+    pbEntry->status = E_Unchanged;
+    if (fbus3810)
+    {
+      memoryStatus.UsedSM++;
+      memoryStatus.FreeSM--;
+    }
+  }
+
+  g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+  gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), entry->Location);
+  GUI_Refresh ();
+
+  return (GE_NONE);  
+}
+
+
+static inline gint ReadFailedPBEntry (gint i)
+{
+  g_ptr_array_free (contactsMemory, TRUE);
+  gtk_widget_hide (progressDialog.dialog);
+  return (0);
+}
+
+
+static void ReadContactsMain (void)
+{
+  PhoneEvent *e;
+  D_MemoryStatus *ms;
+  D_MemoryLocationAll *mla;
+  PhonebookEntry *pbEntry;
+  register gint i;
+
+  fbus3810 = FALSE;
+
+  if (contactsMemoryInitialized == TRUE)
+  {
+    for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+    {
+      pbEntry = g_ptr_array_index (contactsMemory, i);
+      g_free (pbEntry);
+    }
+    g_ptr_array_free (contactsMemory, TRUE);
+    contactsMemory = NULL;
+    gtk_clist_clear (GTK_CLIST (clist));
+    contactsMemoryInitialized = FALSE;
+    memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+    memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+    statusInfo.ch_ME = statusInfo.ch_SM = 0;
+    RefreshStatusInfo ();
+  }
+
+  ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus));
+  ms->memoryStatus.MemoryType = GMT_ME;
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetMemoryStatus;
+  e->data = ms;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&memoryMutex);
+  pthread_cond_wait (&memoryCond, &memoryMutex);
+  pthread_mutex_unlock (&memoryMutex);
+
+  if (ms->status != GE_NONE)
+    /* Phone don't support ME (5110) */
+    memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0;
+  else
+  {
+    memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free;
+    memoryStatus.UsedME = ms->memoryStatus.Used;
+    memoryStatus.FreeME = ms->memoryStatus.Free;
+  }
+
+  ms->memoryStatus.MemoryType = GMT_SM;
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetMemoryStatus;
+  e->data = ms;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&memoryMutex);
+  pthread_cond_wait (&memoryCond, &memoryMutex);
+  pthread_mutex_unlock (&memoryMutex);
+
+  if (ms->status != GE_NONE)
+  {
+    fbus3810 = TRUE; /* I try to recognize memoryStatus.UsedSM while reading */
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\
+Setting max SIM entries to 100!\n"));
+    memoryStatus.MaxSM = memoryStatus.FreeSM = 100;
+    memoryStatus.UsedSM = 0;
+    gtk_widget_show (errorDialog.dialog);
+  }
+  else
+  {
+    memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free;
+    memoryStatus.UsedSM = ms->memoryStatus.Used;
+    memoryStatus.FreeSM = ms->memoryStatus.Free;
+  }
+  g_free (ms);
+
+  statusInfo.ch_ME = statusInfo.ch_SM = 0;
+
+  RefreshStatusInfo ();
+
+  if (progressDialog.dialog == NULL)
+  {
+    CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM);
+  }
+
+  gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0);
+  gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0);
+  gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Getting entries"));
+  gtk_widget_show_now (progressDialog.dialog);
+
+  contactsMemory = g_ptr_array_new ();
+
+  mla = (D_MemoryLocationAll *) g_malloc (sizeof (D_MemoryLocationAll));
+  if (memoryStatus.MaxME > 0)
+  {
+    mla->min = 1;
+    mla->max = memoryStatus.MaxME;
+    mla->type = GMT_ME;
+    mla->used = memoryStatus.UsedME; //MW
+    mla->InsertEntry = InsertPBEntryME;
+    mla->ReadFailed = ReadFailedPBEntry;
+
+    e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+    e->event = Event_GetMemoryLocationAll;
+    e->data = mla;
+    GUI_InsertEvent (e);
+    pthread_mutex_lock (&memoryMutex);
+    pthread_cond_wait (&memoryCond, &memoryMutex);
+    pthread_mutex_unlock (&memoryMutex);
+
+    if (mla->status != GE_NONE)
+    {
+      g_free (mla);
+      gtk_widget_hide (progressDialog.dialog);
+      return;
+    }
+  }
+
+  mla->min = 1;
+  mla->max = memoryStatus.MaxSM;
+  mla->type = GMT_SM;
+  mla->used = memoryStatus.UsedSM; //MW
+  mla->InsertEntry = InsertPBEntrySM;
+  mla->ReadFailed = ReadFailedPBEntry;
+
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetMemoryLocationAll;
+  e->data = mla;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&memoryMutex);
+  pthread_cond_wait (&memoryCond, &memoryMutex);
+  pthread_mutex_unlock (&memoryMutex);
+
+  if (mla->status != GE_NONE)
+  {
+    g_free (mla);
+    gtk_widget_hide (progressDialog.dialog);
+    return;
+  }
+
+  g_free (mla);
+
+  gtk_widget_hide (progressDialog.dialog);
+
+  contactsMemoryInitialized = TRUE;
+  statusInfo.ch_ME = statusInfo.ch_SM = 0;
+  GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+  GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+}
+
+
+static void ReadSaveCallback (GtkWidget *widget, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  SaveContacts ();
+  ReadContactsMain ();
+}
+
+
+static void ReadDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  ReadContactsMain ();
+}
+
+
+static void ReadSaveContacts (void)
+{
+  static GtkWidget *dialog = NULL;
+
+  if (dialog == NULL)
+    dialog = CreateSaveQuestionDialog (ReadSaveCallback, ReadDontSaveCallback);
+
+  gtk_widget_show (dialog);
+}
+
+
+static void ReadContacts (void)
+{
+  if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM))
+    ReadSaveContacts ();
+  else
+    ReadContactsMain ();
+}
+
+
+inline void GUI_ReadContacts (void)
+{
+  ReadContacts ();
+}
+
+
+inline void GUI_SaveContacts (void)
+{
+  SaveContacts ();
+}
+
+
+inline void GUI_ShowContacts (void)
+{
+  if (xgnokiiConfig.callerGroups[0] == NULL)
+  {
+    GUI_Refresh ();
+    GUI_InitCallerGroupsInf ();
+  }
+  gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+  GUI_RefreshContacts ();
+  gtk_widget_show (GUI_ContactsWindow);
+//  if (!contactsMemoryInitialized)
+//    ReadContacts ();
+}
+
+static void ExportVCARD (FILE *f)
+{
+  gchar buf2[10];
+  register gint i,j;
+  PhonebookEntry *pbEntry;
+
+  for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status == E_Deleted || pbEntry->status == E_Empty)
+      continue;
+
+    fprintf (f, "BEGIN:VCARD\n");
+    fprintf (f, "VERSION:3.0\n");
+    fprintf (f, "FN:%s\n", pbEntry->entry.Name);
+    fprintf (f, "TEL;PREF:%s\n", pbEntry->entry.Number);
+
+    if (pbEntry->entry.MemoryType == GMT_ME)
+      sprintf (buf2, "ME%d", i + 1);
+    else
+      sprintf (buf2, "SM%d", i - memoryStatus.MaxME + 1);
+
+    fprintf (f, "X_GSM_STORE_AT:%s\n", buf2);
+    fprintf (f, "X_GSM_CALLERGROUP:%d\n", pbEntry->entry.Group);
+
+    /* Add ext. pbk info if required */
+    if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      for (j = 0; j < pbEntry->entry.SubEntriesCount; j++)
+      {
+       if (pbEntry->entry.SubEntries[j].EntryType == GSM_Number)
+          fprintf (f, "TEL;UNKNOWN_%d:%s\n", pbEntry->entry.SubEntries[j].NumberType,
+                   pbEntry->entry.SubEntries[j].data.Number);
+      }
+
+    fprintf (f, "END:VCARD\n\n");
+  }
+  
+  fclose (f);
+}
+
+
+static void ExportNative (FILE *f)
+{
+  gchar buf[IO_BUF_LEN], buf2[10];
+  register gint i,j;
+  PhonebookEntry *pbEntry;
+
+
+  for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status != E_Deleted && pbEntry->status != E_Empty)
+    {
+      if (index (pbEntry->entry.Name, ';') != NULL)
+      {
+        strcpy (buf, "\"");
+        strcat (buf, pbEntry->entry.Name);
+        strcat (buf, "\";");
+      }
+      else
+      {
+        strcpy (buf, pbEntry->entry.Name);
+        strcat (buf, ";");
+      }
+      
+      if (index (pbEntry->entry.Number, ';') != NULL)
+      {
+        strcat (buf, "\"");
+        strcat (buf, pbEntry->entry.Number);
+        strcat (buf, "\";");
+      }
+      else
+      {
+        strcat (buf, pbEntry->entry.Number);
+        strcat (buf, ";");
+      }
+
+      if (pbEntry->entry.MemoryType == GMT_ME)
+        sprintf (buf2, "B;%d;%d;", i + 1, pbEntry->entry.Group);
+      else
+        sprintf (buf2, "A;%d;%d;", i - memoryStatus.MaxME + 1, pbEntry->entry.Group);
+      strcat (buf, buf2);
+
+      /* Add ext. pbk info if required */
+      if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+      {
+        for (j = 0; j < pbEntry->entry.SubEntriesCount; j++)
+          if (pbEntry->entry.SubEntries[j].EntryType==GSM_Number)
+          {
+            sprintf(buf2,"%d;",pbEntry->entry.SubEntries[j].NumberType);
+            strcat(buf,buf2);
+
+           if (index (pbEntry->entry.SubEntries[j].data.Number, ';') != NULL)
+           {
+              strcat (buf, "\"");
+              strcat (buf, pbEntry->entry.SubEntries[j].data.Number);
+              strcat (buf, "\";");
+            }
+           else
+           {
+              strcat (buf, pbEntry->entry.SubEntries[j].data.Number);
+              strcat (buf, ";");
+            }
+         }
+      }
+      fprintf (f, "%s\n", buf);
+    }
+  }
+  
+  fclose(f);
+}
+
+
+static void ExportContactsMain (gchar *name)
+{
+  FILE *f;
+  gchar buf[IO_BUF_LEN];
+
+  if ((f = fopen (name, "w")) == NULL)
+  {
+    g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  if (strstr (name, ".vcard") || strstr (name, ".gcrd"))
+    ExportVCARD (f);
+  else
+    ExportNative (f);
+}
+
+
+static void YesExportDialog (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  ExportContactsMain (exportDialogData.fileName);
+}
+
+
+static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  static YesNoDialog dialog = { NULL, NULL};
+  FILE *f;
+  gchar err[80];
+
+  exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+  {
+    fclose (f);
+    if (dialog.dialog == NULL)
+    {
+      CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_ContactsWindow);
+      gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+      g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); 
+      gtk_label_set_text (GTK_LABEL(dialog.text), err);
+    }
+    gtk_widget_show (dialog.dialog);
+  }
+  else
+    ExportContactsMain (exportDialogData.fileName);
+}
+
+
+static void ExportContacts (void)
+{
+  static GtkWidget *fileDialog = NULL;
+
+  if (contactsMemoryInitialized)
+  {
+    if (fileDialog == NULL)
+    {
+      fileDialog = gtk_file_selection_new (_("Export"));
+      gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                          GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                          "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog);
+      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                          "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+    }
+
+    gtk_widget_show (fileDialog);
+  }
+}
+
+
+static bool ParseLine (GSM_PhonebookEntry *entry, gint *num, gchar *buf)
+{
+  register gint i = 0;
+  size_t len;
+  gchar s_num[5];
+  gchar *endptr;
+
+  entry->Empty = FALSE;
+  entry->SubEntriesCount=0;
+
+  len = strlen (buf);
+  if (buf[i] == '"')
+  {
+    i++;
+    while (i < len && i <= GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != '"')
+    {
+      entry->Name[i - 1] = buf[i];
+      i++;
+    }
+    entry->Name[i - 1] = '\0';
+    if (i >= len)
+      return FALSE;
+    if (buf[++i] != ';')
+      return FALSE;
+  }
+  else
+  {
+    while (i < len && i < GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != ';')
+    {
+      entry->Name[i] = buf[i];
+      i++;
+    }
+    entry->Name[i] = '\0';
+    if (buf[i] != ';')
+      return FALSE;
+    if (i >= len)
+      return FALSE;
+  }
+  buf += (i + 1);
+  i = 0;
+
+  len = strlen (buf);
+  if (buf[i] == '"')
+  {
+    i++;
+    while (i < len && i <= GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != '"')
+    {
+      entry->Number[i - 1] = buf[i];
+      i++;
+    }
+    entry->Number[i - 1] = '\0';
+    if (i >= len)
+      return FALSE;
+    if (buf[++i] != ';')
+      return FALSE;
+  }
+  else
+  {
+    while (i < len && i < GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != ';')
+    {
+      entry->Number[i] = buf[i];
+      i++;
+    }
+    entry->Number[i] = '\0';
+    if (buf[i] != ';')
+      return FALSE;
+    if (i >= len)
+      return FALSE;
+  }
+  buf += (i + 1);
+  i = 0;
+
+  if (!strncmp(buf, "B;", 2))
+  {
+    entry->MemoryType = GMT_ME;
+    buf += 2;
+  }
+  else
+  if (!strncmp(buf, "A;", 2))
+  {
+    entry->MemoryType = GMT_SM;
+    buf += 2;
+  }
+  else
+  if (!strncmp(buf, "ME;", 3))
+  {
+    entry->MemoryType = GMT_ME;
+    buf += 3;
+  }
+  else
+  if (!strncmp(buf, "SM;", 3))
+  {
+    entry->MemoryType = GMT_SM;
+    buf += 3;
+  }
+  else
+    return FALSE;
+
+  len = strlen (buf);
+  while (i < len && i < 4 && buf[i] != ';')
+  {
+    s_num[i] = buf[i];
+    i++;
+  }
+  s_num[i] = '\0';
+  if (buf[i] != ';')
+    return FALSE;
+  if (i >= len)
+    return FALSE;
+  buf += (i + 1);
+  i = 0;
+
+  *num = strtol (s_num, &endptr, 10);
+  if (s_num == endptr)
+    return FALSE;
+  if (*num == LONG_MIN || *num == LONG_MAX)
+    return FALSE;
+
+
+  if ( *buf == '\n' || *buf == '\r')   /* for compatibility with NCDS */
+    entry->Group = 5;
+  else
+  {
+    len = strlen (buf);
+    while (i < len && i < 4 && buf[i] != ';')
+    {
+      s_num[i] = buf[i];
+      i++;
+    }
+    s_num[i] = '\0';
+    if (buf[i] != ';')
+      return FALSE;
+    if (i >= len)
+      return FALSE;
+    
+    entry->Group = strtol (s_num, &endptr, 10);
+    if (s_num == endptr)
+      return FALSE;
+    if (entry->Group == LONG_MIN || entry->Group == LONG_MAX)
+      return FALSE;
+    if (entry->Group < 0 || entry->Group > 5)
+      return FALSE;
+
+    buf += (i + 1);
+    i = 0;
+
+    /* Ext Pbk Support */
+    
+    while (*buf!='\n')
+    {
+      entry->SubEntries[entry->SubEntriesCount].EntryType=GSM_Number;
+      len = strlen (buf);
+      while (i < len && i < 4 && buf[i] != ';')
+      {
+        s_num[i] = buf[i];
+        i++;
+      }
+      s_num[i] = '\0';
+      if (buf[i] != ';')
+        return FALSE;
+      if (i >= len)
+        return FALSE;
+      entry->SubEntries[entry->SubEntriesCount].NumberType=(GSM_NumberType)strtol (s_num, &endptr, 10);
+      if (s_num == endptr)
+        return FALSE;
+      buf += (i + 1);
+      i = 0;
+      len = strlen (buf);
+      while (i < len && i < GSM_MAX_PHONEBOOK_TEXT_LENGTH && buf[i] != ';')
+      {
+        entry->SubEntries[entry->SubEntriesCount].data.Number[i] = buf[i];
+        i++;
+      }
+      entry->SubEntries[entry->SubEntriesCount].data.Number[i] = '\0';
+      buf += (i + 1);
+      i = 0;
+      if (i >= len)
+        return FALSE;
+      entry->SubEntriesCount++;
+    }
+  }
+
+  return TRUE;
+}
+
+
+static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  FILE *f;
+  PhoneEvent *e;
+  D_MemoryStatus *ms;
+  PhonebookEntry *pbEntry;
+  GSM_PhonebookEntry gsmEntry;
+  gchar buf[IO_BUF_LEN];
+  gchar *fileName;
+  gint i;
+
+  fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (fileName, "r")) == NULL)
+  {
+    g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName);
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  if (contactsMemoryInitialized == TRUE)
+  {
+    for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+    {
+      pbEntry = g_ptr_array_index(contactsMemory, i);
+      g_free(pbEntry);
+    }
+    g_ptr_array_free (contactsMemory, TRUE);
+    contactsMemory = NULL;
+    gtk_clist_clear (GTK_CLIST (clist));
+    contactsMemoryInitialized = FALSE;
+    memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+    memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+    statusInfo.ch_ME = statusInfo.ch_SM = 0;
+    RefreshStatusInfo ();
+  }
+
+  ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus));
+  ms->memoryStatus.MemoryType = GMT_ME;
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetMemoryStatus;
+  e->data = ms;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&memoryMutex);
+  pthread_cond_wait (&memoryCond, &memoryMutex);
+  pthread_mutex_unlock (&memoryMutex);
+
+  if (ms->status != GE_NONE)
+    /* Phone don't support ME (5110) */
+    memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0;
+  else
+  {
+    memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free;
+    memoryStatus.UsedME = 0;
+    memoryStatus.FreeME = memoryStatus.MaxME;
+  }
+
+  ms->memoryStatus.MemoryType = GMT_SM;
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_GetMemoryStatus;
+  e->data = ms;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&memoryMutex);
+  pthread_cond_wait (&memoryCond, &memoryMutex);
+  pthread_mutex_unlock (&memoryMutex);
+
+  if (ms->status != GE_NONE)
+  {
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\
+Setting max SIM entries set to 100!\n"));
+    memoryStatus.MaxSM = memoryStatus.FreeSM = 100;
+    memoryStatus.UsedSM = 0;
+    gtk_widget_show (errorDialog.dialog);
+  }
+  else
+  {
+    memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free;
+    memoryStatus.UsedSM = 0;
+    memoryStatus.FreeSM = memoryStatus.MaxSM;
+  }
+  g_free (ms);
+
+  statusInfo.ch_ME = statusInfo.ch_SM = 0;
+
+  RefreshStatusInfo ();
+
+  contactsMemory = g_ptr_array_new ();
+
+  for (i = 1; i <= memoryStatus.MaxME; i++)
+  {
+    if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+    {
+      fclose (f);
+      g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      g_ptr_array_free (contactsMemory, TRUE);
+      return;
+    }
+
+    pbEntry->entry.Empty = FALSE;
+    pbEntry->entry.Name[0] = '\0';
+    pbEntry->entry.Number[0] = '\0';
+    pbEntry->entry.MemoryType = GMT_ME;
+    pbEntry->entry.Group = 5;
+    pbEntry->status = E_Deleted; /* I must set status to E_Deleted, since I   */
+                                 /* I want clear empty entries when saving to */
+                                 /* to phone                                  */
+    pbEntry->entry.SubEntriesCount=0;
+
+    g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+    pbEntry = NULL;
+  }
+
+  for (i = 1; i <= memoryStatus.MaxSM; i++)
+  {
+    if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+    {
+      fclose (f);
+      g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      g_ptr_array_free (contactsMemory, TRUE);
+      return;
+    }
+
+    pbEntry->entry.Empty = FALSE;
+    pbEntry->entry.Name[0] = '\0';
+    pbEntry->entry.Number[0] = '\0';
+    pbEntry->entry.MemoryType = GMT_SM;
+    pbEntry->entry.Group = 5;
+    pbEntry->status = E_Deleted;
+    pbEntry->entry.SubEntriesCount=0;
+
+    g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+    pbEntry = NULL;
+  }
+
+
+  while (fgets (buf, IO_BUF_LEN, f))
+  {
+    if (ParseLine (&gsmEntry, &i, buf))
+    {
+      if (gsmEntry.MemoryType == GMT_ME && memoryStatus.FreeME > 0 
+          && i > 0 && i <= memoryStatus.MaxME)
+      {
+        pbEntry = g_ptr_array_index (contactsMemory, i - 1);
+
+        if (pbEntry->status == E_Deleted)
+        {
+          pbEntry->entry = gsmEntry;
+          pbEntry->status = E_Changed;
+          memoryStatus.UsedME++;
+          memoryStatus.FreeME--;
+          statusInfo.ch_ME = 1;
+        }
+      }
+      else if (gsmEntry.MemoryType == GMT_SM && memoryStatus.FreeSM > 0
+               && i > 0 && i <= memoryStatus.MaxSM)
+      {
+        pbEntry = g_ptr_array_index (contactsMemory, memoryStatus.MaxME + i - 1);
+
+        if (pbEntry->status == E_Deleted)
+        {
+          pbEntry->entry = gsmEntry;
+          pbEntry->status = E_Changed;
+          memoryStatus.UsedSM++;
+          memoryStatus.FreeSM--;
+          statusInfo.ch_SM = 1;
+        }
+      }
+    }
+  }
+
+  contactsMemoryInitialized = TRUE;
+  RefreshStatusInfo ();
+  GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+  GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+}
+
+
+static void ImportContactsFileDialog ()
+{
+  static GtkWidget *fileDialog = NULL;
+
+  if (fileDialog == NULL)
+  {
+    fileDialog = gtk_file_selection_new (_("Import"));
+    gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                        "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                        "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+  }
+
+  gtk_widget_show (fileDialog);
+}
+
+
+static void ImportSaveCallback (GtkWidget *widget, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  SaveContacts ();
+  ImportContactsFileDialog ();
+}
+
+
+static void ImportDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  ImportContactsFileDialog ();
+}
+
+
+void static ImportSaveContacts (void)
+{
+  static GtkWidget *dialog = NULL;
+
+  if (dialog == NULL)
+    dialog = CreateSaveQuestionDialog (ImportSaveCallback, ImportDontSaveCallback);
+
+  gtk_widget_show (dialog);
+}
+
+
+static void ImportContacts (void)
+{
+  if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM))
+    ImportSaveContacts ();
+  else
+    ImportContactsFileDialog ();
+}
+
+
+static void QuitSaveCallback (GtkWidget *widget, gpointer data)
+{
+  PhoneEvent *e;
+
+  gtk_widget_hide (GTK_WIDGET (data));
+  SaveContacts ();
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_Exit;
+  e->data = NULL;
+  GUI_InsertEvent (e);
+  pthread_join (monitor_th, NULL); 
+  gtk_main_quit ();
+}
+
+
+static void QuitDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+  PhoneEvent *e;
+
+  gtk_widget_hide (GTK_WIDGET (data));
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_Exit;
+  e->data = NULL;
+  GUI_InsertEvent (e);
+  pthread_join (monitor_th, NULL); 
+  gtk_main_quit ();
+}
+
+
+void GUI_QuitSaveContacts (void)
+{
+  static GtkWidget *dialog = NULL;
+
+  if (dialog == NULL)
+    dialog = CreateSaveQuestionDialog (QuitSaveCallback, QuitDontSaveCallback);
+
+  gtk_widget_show (dialog);
+}
+
+
+/* Function take number and return name belonged to number.
+   If no name is found, return NULL;
+   Do not modify returned name!
+*/
+gchar *GUI_GetName (gchar *number)
+{
+  PhonebookEntry *pbEntry;
+  register gint i;
+
+  if (contactsMemoryInitialized == FALSE || number == NULL)
+    return (gchar *)NULL;
+
+  for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+      continue;
+
+    if (strcmp (pbEntry->entry.Number, number) == 0)
+      return pbEntry->entry.Name;
+  }
+
+  for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+      continue;
+
+    if (strrncmp (pbEntry->entry.Number, number, 9) == 0)
+      return pbEntry->entry.Name;
+  }
+
+  return NULL;
+}
+
+
+gchar *GUI_GetNameExact (gchar *number)
+{
+  PhonebookEntry *pbEntry;
+  register gint i;
+
+  if (contactsMemoryInitialized == FALSE || number == NULL)
+    return (gchar *)NULL;
+
+  for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+      continue;
+
+    if (strcmp (pbEntry->entry.Number, number) == 0)
+      return pbEntry->entry.Name;
+  }
+
+  return NULL;
+}
+
+
+gchar *GUI_GetNumber (gchar *name)
+{
+  PhonebookEntry *pbEntry;
+  register gint i;
+
+  if (contactsMemoryInitialized == FALSE || name == NULL || *name == '\0')
+    return (gchar *)NULL;
+
+  for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+
+    if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+      continue;
+
+    if (strcmp (pbEntry->entry.Name, name) == 0)
+      return pbEntry->entry.Number;
+  }
+
+  return NULL;
+}
+
+
+static void SelectDialogClickEntry (GtkWidget        *clist,
+                                    gint              row,
+                                    gint              column,
+                                    GdkEventButton   *event,
+                                    SelectContactData *data )
+{
+  if(event && event->type == GDK_2BUTTON_PRESS)
+    gtk_signal_emit_by_name(GTK_OBJECT (data->okButton), "clicked");
+}
+
+
+SelectContactData *GUI_SelectContactDialog (void)
+{
+  PhonebookEntry *pbEntry;
+  static SelectContactData selectContactData;
+  SortColumn *sColumn;
+  gchar *titles[4] = { "Name", "Number", "Memory", "Group"};
+  gint row_i = 0;
+  register gint i;
+  gchar string[100];
+
+  if (contactsMemoryInitialized == FALSE)
+    return NULL;
+
+  selectContactData.dialog = gtk_dialog_new ();
+  gtk_widget_set_usize (GTK_WIDGET (selectContactData.dialog), 436, 200);
+  gtk_window_set_title (GTK_WINDOW (selectContactData.dialog), _("Select contacts"));
+  gtk_window_set_modal (GTK_WINDOW (selectContactData.dialog), TRUE);
+
+  selectContactData.okButton = gtk_button_new_with_label (_("Ok"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area),
+                      selectContactData.okButton, TRUE, TRUE, 10);
+  GTK_WIDGET_SET_FLAGS (selectContactData.okButton, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (selectContactData.okButton);
+  gtk_widget_show (selectContactData.okButton);
+
+  selectContactData.cancelButton = gtk_button_new_with_label (_("Cancel"));
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area),
+                      selectContactData.cancelButton, TRUE, TRUE, 10);
+  gtk_widget_show (selectContactData.cancelButton);
+
+  selectContactData.clist = gtk_clist_new_with_titles (4, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (selectContactData.clist), GTK_SHADOW_OUT);
+  gtk_clist_set_compare_func (GTK_CLIST (selectContactData.clist), CListCompareFunc);
+  gtk_clist_set_sort_column (GTK_CLIST (selectContactData.clist), 0);
+  gtk_clist_set_sort_type (GTK_CLIST (selectContactData.clist), GTK_SORT_ASCENDING);
+  gtk_clist_set_auto_sort (GTK_CLIST (selectContactData.clist), FALSE);
+  gtk_clist_set_selection_mode (GTK_CLIST (selectContactData.clist), GTK_SELECTION_EXTENDED);
+
+  gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 0, 150);
+  gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 1, 115);
+  gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 3, 70);
+  gtk_clist_set_column_justification (GTK_CLIST(selectContactData.clist), 2, GTK_JUSTIFY_CENTER);
+  gtk_clist_set_column_visibility (GTK_CLIST(selectContactData.clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+
+  for (i = 0; i < 4; i++)
+  {
+    if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+    {
+      g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      return NULL;
+    }
+    sColumn->clist = selectContactData.clist;
+    sColumn->column = i;
+    gtk_signal_connect (GTK_OBJECT (GTK_CLIST (selectContactData.clist)->column[i].button), "clicked",
+                        GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+  }
+
+  gtk_signal_connect (GTK_OBJECT (selectContactData.clist), "select_row",
+                      GTK_SIGNAL_FUNC (SelectDialogClickEntry),
+                      (gpointer) &selectContactData);
+
+  selectContactData.clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (selectContactData.clistScrolledWindow),
+                     selectContactData.clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (selectContactData.clistScrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->vbox),
+                      selectContactData.clistScrolledWindow, 
+                      TRUE, TRUE, 0);
+
+  gtk_widget_show (selectContactData.clist);
+  gtk_widget_show (selectContactData.clistScrolledWindow);
+
+  if (xgnokiiConfig.callerGroups[0] == NULL)
+    GUI_InitCallerGroupsInf ();
+
+  gtk_clist_freeze (GTK_CLIST (selectContactData.clist));
+  for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+  {
+    gchar *row[4];
+
+    pbEntry = g_ptr_array_index (contactsMemory, i);
+    if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted)
+    {
+      row[0] = pbEntry->entry.Name;
+      if (pbEntry->entry.SubEntriesCount>0) {
+       snprintf(string,100,"%s *",pbEntry->entry.Number);
+       row[1]=string;
+      } else row[1] = pbEntry->entry.Number;
+
+
+      if (pbEntry->entry.MemoryType == GMT_ME)
+        row[2] = "P";
+      else
+        row[2] = "S";
+      if (GetModelFeature(FN_CALLERGROUPS)!=0)
+        row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group];
+      else
+        row[3] = "";
+      gtk_clist_append (GTK_CLIST (selectContactData.clist), row);
+      if (pbEntry->entry.MemoryType == GMT_ME)
+        gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2,
+                              memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+      else
+        gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2,
+                              memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+     gtk_clist_set_row_data (GTK_CLIST (selectContactData.clist), row_i++, (gpointer) pbEntry);
+    }
+  }
+
+  gtk_clist_sort (GTK_CLIST (selectContactData.clist));
+  gtk_clist_thaw (GTK_CLIST (selectContactData.clist));
+
+  gtk_widget_show (selectContactData.dialog);
+
+  return &selectContactData;
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>R",   ReadContacts, 0, NULL},
+  { NULL,              "<control>S",   SaveContacts, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>I",   ImportContacts, 0, NULL},
+  { NULL,              "<control>E",   ExportContacts, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>W",   CloseContacts, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>N",   NewEntry, 0, NULL},
+  { NULL,              "<control>U",   DuplicateEntry, 0, NULL},
+  { NULL,              NULL,           EditEntry, 0, NULL},
+  { NULL,              "<control>D",   DeleteEntry, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>C",   ChMemType, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>F",   FindFirstEntry, 0, NULL},
+  { NULL,              "<control>L",   SearchEntry, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>A",   SelectAll, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>V",   DialVoice, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<LastBranch>"},
+  { NULL,              NULL,           Help1, 0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+  menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+  menu_items[3].path = g_strdup (_("/File/Sep1"));
+  menu_items[4].path = g_strdup (_("/File/_Import from file"));
+  menu_items[5].path = g_strdup (_("/File/_Export to file"));
+  menu_items[6].path = g_strdup (_("/File/Sep2"));
+  menu_items[7].path = g_strdup (_("/File/_Close"));
+  menu_items[8].path = g_strdup (_("/_Edit"));
+  menu_items[9].path = g_strdup (_("/Edit/_New"));
+  menu_items[10].path = g_strdup (_("/Edit/D_uplicate"));
+  menu_items[11].path = g_strdup (_("/Edit/_Edit"));
+  menu_items[12].path = g_strdup (_("/Edit/_Delete"));
+  menu_items[13].path = g_strdup (_("/Edit/Sep3"));
+  menu_items[14].path = g_strdup (_("/Edit/_Change memory type"));
+  menu_items[15].path = g_strdup (_("/Edit/Sep4"));
+  menu_items[16].path = g_strdup (_("/Edit/_Find"));
+  menu_items[17].path = g_strdup (_("/Edit/Find ne_xt"));
+  menu_items[18].path = g_strdup (_("/Edit/Sep5"));
+  menu_items[19].path = g_strdup (_("/Edit/Select _all"));
+  menu_items[20].path = g_strdup (_("/_Dial"));
+  menu_items[21].path = g_strdup (_("/Dial/Dial _voice"));
+  menu_items[22].path = g_strdup (_("/_Help"));
+  menu_items[23].path = g_strdup (_("/Help/_Help"));
+  menu_items[24].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateContactsWindow (void)
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  SortColumn *sColumn;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *toolbar;
+  GtkWidget *clistScrolledWindow;
+  GtkWidget *status_hbox;
+  register gint i;
+  gchar *titles[4] = { _("Name"), _("Number"), _("Memory"), _("Group")};
+
+  InitMainMenu ();
+  contactsMemoryInitialized = FALSE;
+  GUI_ContactsWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_ContactsWindow), _("Contacts"));
+  gtk_widget_set_usize (GTK_WIDGET (GUI_ContactsWindow), 436, 220);
+  //gtk_container_set_border_width (GTK_CONTAINER (GUI_ContactsWindow), 10);
+  gtk_signal_connect (GTK_OBJECT (GUI_ContactsWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_ContactsWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_ContactsWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_ContactsWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  /* Create the toolbar */
+
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+                           NewPixmap(Read_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ReadContacts, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+                           NewPixmap(Send_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) SaveContacts, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+                           NewPixmap(Open_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ImportContacts, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+                           NewPixmap(Save_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ExportContacts, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New entry"), NULL,
+                           NewPixmap(New_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NewEntry, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Duplicate entry"), NULL,
+                           NewPixmap(Duplicate_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) DuplicateEntry, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL,
+                           NewPixmap(Edit_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) EditEntry, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete entry"), NULL,
+                           NewPixmap(Delete_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) DeleteEntry, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Dial voice"), NULL,
+                           NewPixmap(Dial_xpm, GUI_ContactsWindow->window,
+                           &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) DialVoice, NULL);
+
+//  gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+
+  clist = gtk_clist_new_with_titles (4, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT);
+  gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc);
+  gtk_clist_set_sort_column (GTK_CLIST (clist), 0);
+  gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING);
+  gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE);
+  gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+  gtk_clist_set_column_width (GTK_CLIST (clist), 0, 150);
+  gtk_clist_set_column_width (GTK_CLIST (clist), 1, 115);
+  gtk_clist_set_column_width (GTK_CLIST (clist), 3, 70);
+  gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER);
+//  gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+
+  for (i = 0; i < 4; i++)
+  {
+    if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+    {
+      g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      gtk_main_quit ();
+    }
+    sColumn->clist = clist;
+    sColumn->column = i;
+    gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked",
+                        GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+  }
+
+  gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+                      GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+  clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow, 
+                      TRUE, TRUE, 0);
+
+  gtk_widget_show (clist);
+  gtk_widget_show (clistScrolledWindow);
+
+  status_hbox = gtk_hbox_new (FALSE,20);
+  gtk_box_pack_start (GTK_BOX (main_vbox), status_hbox, FALSE, FALSE, 0);
+  gtk_widget_show (status_hbox);
+
+  memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+  memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+  statusInfo.ch_ME = statusInfo.ch_SM = 0; 
+
+  statusInfo.label = gtk_label_new ("");
+  RefreshStatusInfo ();
+  gtk_box_pack_start (GTK_BOX (status_hbox), statusInfo.label, FALSE, FALSE, 10);
+  gtk_widget_show (statusInfo.label);
+
+  memoryPixmaps.simMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+                                &memoryPixmaps.mask,
+                                &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+                                sim_xpm);
+
+  memoryPixmaps.phoneMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+                                  &memoryPixmaps.mask,
+                                  &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+                                  phone_xpm);
+
+  questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+                         &questMark.mask,
+                         &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+                         quest_xpm);
+
+  CreateErrorDialog (&errorDialog, GUI_ContactsWindow);
+  GUIEventAdd (GUI_EVENT_CONTACTS_CHANGED, GUI_RefreshContacts);
+  GUIEventAdd (GUI_EVENT_CALLERS_GROUPS_CHANGED, GUI_RefreshGroupMenu);
+}
+
diff --git a/xgnokii/xgnokii_contacts.h b/xgnokii/xgnokii_contacts.h
new file mode 100644 (file)
index 0000000..66a4dcf
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  $Id$
+  
+*/
+
+#ifndef XGNOKII_CONTACTS_H
+#define XGNOKII_CONTACTS_H
+
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+
+#define IO_BUF_LEN     160
+
+/* Structure to keep memory status information */
+typedef struct {
+  int MaxME;           /* Maximum Phone memory entries. */
+  int UsedME;          /* Actualy used Phone memory entries. */
+  int FreeME;          /* FreeME = MaxME - UsedME */
+  int MaxSM;           /* Maximum SIM memory entries. */
+  int UsedSM;
+  int FreeSM;
+} MemoryStatus;
+
+/* Array to hold contacts entry */
+typedef GPtrArray* ContactsMemory;
+
+/* Structure to keep contacts memory entry status */
+typedef enum {
+  E_Unchanged,         /* Entry is not empty and is unchanged. */
+  E_Changed,           /* Entry is not empty and is changed. */
+  E_Deleted,           /* Entry was deleted. */
+  E_Empty              /* Entry is empty. */
+} EntryStatus;
+
+/* Memory entry data */
+typedef struct {
+  GSM_PhonebookEntry entry;    /* Phonebook entry self. */
+  EntryStatus status;          /* Entry status. */
+} PhonebookEntry;
+
+/* Structure to hold information of Edit and New dialogs */
+typedef struct {
+  PhonebookEntry *pbEntry;
+  GtkWidget *dialog;
+  GtkWidget *name;
+  GtkWidget *number;
+  GtkWidget *extended;
+  GtkWidget *memoryBox;
+  GtkWidget *memoryTypePhone;
+  GtkWidget *memoryTypeSIM;
+  GtkWidget *group;
+  GtkWidget *groupLabel;
+  GtkWidget *groupMenu;
+  gint      newGroup;
+  gint      row;
+} EditEntryData;
+
+
+typedef struct {
+  PhonebookEntry *pbEntry;
+  GtkWidget *dialog;
+  GtkWidget *clist;
+} EditNumbersData;
+
+
+/* Structure to hold information for FindEntry dialog. */
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *pattern;
+  GtkWidget *nameB;
+  GtkWidget *numberB;
+} FindEntryData;
+
+
+/* Contains fileName for Export dialog. */
+typedef struct {
+  gchar *fileName;
+} ExportDialogData;
+
+
+/* Hold widgets for SelectContactDialog */
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *clist;                    /* list of contacts */
+  GtkWidget *clistScrolledWindow;
+  GtkWidget *okButton;                 /* Ok and Cancel button widgets */
+  GtkWidget *cancelButton;
+} SelectContactData;
+
+
+/* Max length for status line. (Line that shows used/max information for
+   memories). */
+#define STATUS_INFO_LENGTH     40
+
+
+/* Structure to hold information for status line (bottom line of window) */
+typedef struct {
+  GtkWidget *label;
+  gchar text[STATUS_INFO_LENGTH];      /* Status line text. */
+  gint ch_ME:1;                                /* 1 if phone memory was changed */
+  gint ch_SM:1;                                /* 1 if phone SIM was changed */
+} StatusInfo;
+
+
+/* Structure to hold information for progress dialog */
+typedef struct {
+  GtkWidget *dialog;
+  GtkWidget *pbarME;
+  GtkWidget *pbarSM;
+} ProgressDialog;
+
+
+/* Search type. */
+typedef enum {
+  FIND_NAME = 0,
+  FIND_NUMBER
+} FindType;
+
+
+typedef struct {
+  gchar pattern[GSM_MAX_PHONEBOOK_NAME_LENGTH + 1];
+  gint lastRow;
+  FindType type;
+} FindEntryStruct;
+
+
+typedef struct {
+  GdkPixmap *simMemPix, *phoneMemPix;
+  GdkBitmap *mask;
+} MemoryPixmaps;
+
+
+extern void GUI_CreateContactsWindow (void);
+
+extern void GUI_ShowContacts (void);
+
+/* return != 0 if user has unsaved changes in contacts memory */ 
+extern gint GUI_ContactsIsChanged (void);
+
+/* return TRUE if Contacts memory was read from phone or from file */
+extern bool GUI_ContactsIsIntialized (void);
+
+/* Read contacts from phone */
+extern void GUI_ReadContacts (void);
+
+/* Save contacts to phone */
+extern void GUI_SaveContacts (void);
+
+/* Create save question dialog and can end application */
+extern void GUI_QuitSaveContacts (void);
+
+extern void GUI_RefreshContacts (void);
+
+/* Function take number and return name belonged to number.
+   If no name is found, return NULL;
+   Do not modify returned name!                                        */
+extern gchar *GUI_GetName (gchar *number);
+
+extern gchar *GUI_GetNameExact (gchar *number);
+
+extern gchar *GUI_GetNumber (gchar *name);
+/* Function show dialog with contacts and let select entries.
+   See xgnokii_contacts.c for sample of use.                   */
+extern SelectContactData *GUI_SelectContactDialog (void);
+
+extern void GUI_RefreshGroupMenu (void);
+
+extern PhonebookEntry *GUI_GetEntry (GSM_MemoryType, gint);
+
+void ExtPbkChanged (GtkWidget *widget, gpointer data );
+
+#endif
diff --git a/xgnokii/xgnokii_data.c b/xgnokii/xgnokii_data.c
new file mode 100644 (file)
index 0000000..fb0aa34
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_data.h"
+#include "data/virtmodem.h"
+
+static GtkWidget *GUI_DataWindow;
+bool TerminateThread = false;
+bool enabled = false;
+static GtkWidget *label = NULL;
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/data/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+static void UpdateStatus (void)
+{
+  gchar *buf;
+
+  if (!enabled)
+    buf = g_strdup_printf (_("Data calls are currently\nDisabled\n "));
+  else
+    buf = g_strdup_printf (_("Data calls are currently\nEnabled\n "));
+  
+  if (label != NULL)
+    gtk_label_set_text (GTK_LABEL (label), buf);
+
+  g_free (buf);
+}
+
+
+inline void GUI_ShowData (void)
+{
+  if (GetModelFeature(FN_DATACALLS)==0)
+    return;
+    
+  if (TerminateThread)
+  { 
+    VM_Terminate ();
+    enabled = false;
+    TerminateThread = false;
+  }
+  UpdateStatus ();
+  
+  gtk_widget_show (GUI_DataWindow);
+}
+
+
+inline void GUI_HideData(void)
+{
+  gtk_widget_hide (GUI_DataWindow);
+}
+
+static inline void DisableData (GtkWidget *widget,
+                               gpointer   data )
+{
+  VM_Terminate ();
+  enabled = false;
+  UpdateStatus ();
+}
+
+
+static inline void EnableData (GtkWidget *widget,
+                               gpointer   data)
+{
+
+  TerminateThread = false;
+  VM_Initialise (xgnokiiConfig.model,  xgnokiiConfig.port, 
+                0, 0, xgnokiiConfig.bindir, false, false,
+                xgnokiiConfig.synchronizetime);
+  enabled = true;
+  UpdateStatus ();
+}
+
+
+void GUI_CreateDataWindow (void)
+{
+  GtkWidget *button, *hbox, *vbox;
+  
+  GUI_DataWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
+  gtk_window_set_title (GTK_WINDOW (GUI_DataWindow), _("Virtual Modem"));
+  gtk_container_set_border_width (GTK_CONTAINER (GUI_DataWindow), 10);
+  gtk_signal_connect (GTK_OBJECT (GUI_DataWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+  vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_DataWindow), vbox);
+  gtk_widget_show (vbox);
+
+  label = gtk_label_new ("");
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_widget_show (hbox);
+
+  button = gtk_button_new_with_label (_("Enable"));
+  gtk_box_pack_start (GTK_BOX (hbox),
+                      button, TRUE, FALSE, 5);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (EnableData), NULL);
+  gtk_widget_show (button);
+  button = gtk_button_new_with_label (_("Disable"));
+  gtk_box_pack_start (GTK_BOX (hbox),
+                      button, TRUE, FALSE, 5);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (DisableData), NULL);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+}
diff --git a/xgnokii/xgnokii_data.h b/xgnokii/xgnokii_data.h
new file mode 100644 (file)
index 0000000..75c33a3
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_DATA_H
+#define XGNOKII_DATA_H
+
+void GUI_CreateDataWindow (void);
+inline void GUI_ShowData (void);
+inline void GUI_HideData (void);
+
+#endif
+
+
diff --git a/xgnokii/xgnokii_dtmf.c b/xgnokii/xgnokii_dtmf.c
new file mode 100644 (file)
index 0000000..7022db8
--- /dev/null
@@ -0,0 +1,336 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_dtmf.h"
+#include "xpm/Send.xpm"
+#include "xpm/Delete.xpm"
+
+#define MAX_DTMF_LENGTH                50
+
+static GtkWidget *GUI_DTMFWindow;
+static GtkWidget *displayEntry;
+static ErrorDialog errorDialog = {NULL, NULL};
+static gchar *saveFileName;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/dtmf/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static inline void ButtonCB (GtkWidget *widget,
+                      gpointer   data )
+{
+  gchar buf[2] = " ";
+
+  *buf = GPOINTER_TO_INT (data);
+  gtk_entry_append_text (GTK_ENTRY (displayEntry), buf);
+}
+
+
+static inline void ClearCB (GtkWidget *widget,
+                            gpointer   data )
+{
+  gtk_entry_set_text (GTK_ENTRY (displayEntry), "");
+}
+
+
+static inline void SendCB (GtkWidget *widget,
+                            gpointer   data )
+{
+  PhoneEvent *e;
+  gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry)));
+
+  if (*buf == '\0')
+  {
+    g_free (buf);
+    return;
+  }
+
+  e = g_malloc (sizeof (PhoneEvent));
+  e->event = Event_SendDTMF;
+  e->data = buf;
+  GUI_InsertEvent (e);
+}
+
+
+static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  FILE *f;
+  gchar *fileName;
+  gchar line[MAX_DTMF_LENGTH + 1];
+  gchar buf[80];
+
+  fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (fileName, "r")) == NULL)
+  {
+    g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName);
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  fgets (line, MAX_DTMF_LENGTH + 1, f);
+  gtk_entry_set_text (GTK_ENTRY (displayEntry), line);
+  fclose (f);
+}
+
+
+static void LoadFileDialog ()
+{  
+  static GtkWidget *fileDialog = NULL;
+
+  if (fileDialog == NULL)
+  {
+    fileDialog = gtk_file_selection_new (_("Load"));
+    gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                        "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                        "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+  }
+
+  gtk_widget_show (fileDialog);
+}
+
+
+static void SaveDTMF ()
+{
+  FILE *f;
+  gchar buf[80];
+
+  if ((f = fopen (saveFileName, "w")) == NULL)
+  {
+    g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName);
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f);
+  fclose (f);
+}
+
+
+static inline void YesSaveDialog (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  SaveDTMF();
+}
+
+
+static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  FILE *f;
+  static YesNoDialog dialog = { NULL, NULL};
+  gchar err[80]; 
+
+  saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (saveFileName, "r")) != NULL)
+  {
+    fclose (f);
+    if (dialog.dialog == NULL)
+    {
+      CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow);
+      gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+      g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName); 
+      gtk_label_set_text (GTK_LABEL(dialog.text), err);
+    }
+    gtk_widget_show (dialog.dialog);
+  }
+  else
+    SaveDTMF ();
+}
+
+
+static void SaveFileDialog ()
+{
+  static GtkWidget *fileDialog = NULL;
+
+  if (fileDialog == NULL)
+  {
+    fileDialog = gtk_file_selection_new (_("Save"));
+    gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                        "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                        "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+  }
+
+  gtk_widget_show (fileDialog);
+}
+
+
+static inline void CloseDTMF (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_DTMFWindow);
+}
+
+
+inline void GUI_ShowDTMF ()
+{
+  gtk_widget_show (GUI_DTMFWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>O",   LoadFileDialog, 0, NULL},
+  { NULL,              "<control>S",   SaveFileDialog, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>W",   CloseDTMF, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<LastBranch>"},
+  { NULL,              NULL,           Help1, 0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Open"));
+  menu_items[2].path = g_strdup (_("/File/_Save"));
+  menu_items[3].path = g_strdup (_("/File/Sep1"));
+  menu_items[4].path = g_strdup (_("/File/_Close"));
+  menu_items[5].path = g_strdup (_("/_Help"));
+  menu_items[6].path = g_strdup (_("/Help/_Help"));
+  menu_items[7].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateDTMFWindow ()
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *table;
+  GtkWidget *frame;
+  GtkWidget *button;
+  GtkWidget *pixmap;
+  gchar buf[2];
+  gint i,j;
+
+
+  InitMainMenu ();
+  GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone"));
+  //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_DTMFWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  table = gtk_table_new (8, 3, TRUE);
+
+  frame = gtk_frame_new (NULL);
+  gtk_container_add (GTK_CONTAINER (frame), table);
+  gtk_container_border_width (GTK_CONTAINER (frame), 10);
+  gtk_container_border_width (GTK_CONTAINER (table), 3);
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+  gtk_widget_show (frame);
+
+  gtk_table_set_row_spacings (GTK_TABLE (table), 2);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 2);
+
+  displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH);
+  gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1);
+  gtk_widget_set_usize (displayEntry, 110, 22);
+
+  for (i = 0; i < 3; i++)
+    for (j = 0; j < 3; j++)
+    {
+      g_snprintf (buf, 2, "%d", j * 3 + i + 1);
+      button = gtk_button_new_with_label (buf);
+      gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                          GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf));
+      gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3);
+    }
+
+  button = gtk_button_new_with_label ("*");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*');
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
+
+  button = gtk_button_new_with_label ("0");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0');
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6);
+
+  button = gtk_button_new_with_label ("#");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#');
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6);
+
+
+  button = gtk_button_new_with_label ("Pause");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p');
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
+
+  button = gtk_button_new_with_label ("Wait");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w');
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7);
+
+  button = gtk_button_new ();
+  pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window,
+                     &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
+  gtk_container_add (GTK_CONTAINER (button), pixmap);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL);
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8);
+
+  button = gtk_button_new ();
+  pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window,
+                     &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
+  gtk_container_add (GTK_CONTAINER (button), pixmap);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL);
+  gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7);
+
+  gtk_widget_show_all (table);
+
+  CreateErrorDialog (&errorDialog, GUI_DTMFWindow);
+}
diff --git a/xgnokii/xgnokii_dtmf.h b/xgnokii/xgnokii_dtmf.h
new file mode 100644 (file)
index 0000000..2bc2649
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_DTMF_H
+#define XGNOKII_DTMF_H
+
+extern void GUI_CreateDTMFWindow ();
+
+extern void GUI_ShowDTMF ();
+
+#endif
diff --git a/xgnokii/xgnokii_logos.c b/xgnokii/xgnokii_logos.c
new file mode 100644 (file)
index 0000000..5f806cf
--- /dev/null
@@ -0,0 +1,1739 @@
+#include <stdlib.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "gsm-networks.h"
+#include "files/gsm-filetypes.h"
+#include "gsm-bitmaps.h"
+
+#include "xgnokii_logos.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+
+#include "xpm/Operator_logo.xpm"
+#include "xpm/Startup_logo.xpm"
+#include "xpm/Caller_logo.xpm"
+
+#include "xpm/Black_point.xpm"
+#include "xpm/Green_point.xpm"
+#include "xpm/Green_pixel.xpm"
+
+#include "xpm/New.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Read.xpm"
+
+#include "xpm/Edit_invert.xpm"
+#include "xpm/Edit_flip_horizontal.xpm"
+#include "xpm/Edit_flip_vertical.xpm"
+
+#include "xpm/Tool_brush.xpm"
+#include "xpm/Tool_line.xpm"
+#include "xpm/Tool_rectangle.xpm"
+#include "xpm/Tool_filled_rectangle.xpm"
+
+extern GSM_Network GSM_Networks[];
+
+static GtkWidget *GUI_LogosWindow;
+
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+
+/* stuff for drawingArea */
+static GtkWidget *drawingArea = NULL;
+static GdkPixmap *drawingPixmap = NULL;
+static GdkPixmap *greenPointPixmap, *blackPointPixmap;
+static int drawingAreaWidth, drawingAreaHeight; /* in pixels */
+static int mouseButtonPushed = 0;
+
+/* stuff for previewArea */
+static GtkWidget *previewArea = NULL;
+static GdkPixmap *previewPixmap = NULL;
+static GdkPixmap *greenPixelPixmap;
+static int previewPixmapWidth, previewPixmapHeight;
+static int previewAvailable = 1, showPreviewErrorDialog = 1;
+static int previewPixmapNumber = 0;
+
+static GSM_Bitmap bitmap, oldBitmap;
+static GSM_NetworkInfo networkInfo;
+
+/* widgets for toolbar - some, need global variables */
+static GtkWidget *buttonStartup, *buttonOperator, *buttonCaller, *buttonPicture;
+static GtkWidget *networkCombo, *callerCombo;
+
+static int activeTool = TOOL_BRUSH;
+static int toolStartX, toolStartY, toolLastX, toolLastY;
+
+/* tools for drawing */
+static GtkWidget *buttonBrush, *buttonLine, *buttonRectangle;
+static GtkWidget *buttonFilledRectangle;
+
+/* Contains fileName for Export dialog. */
+typedef struct {
+  gchar *fileName;
+} ExportDialogData;
+
+static ExportDialogData exportDialogData = {NULL};
+
+GtkWidget *FileSelection;
+
+static int callersGroupsInitialized = 0;
+
+/* returns lowest number from three numbers */
+int GetMinFrom3(int a, int b, int c) {
+  if (a > b) {
+    if (b > c)
+      return c;
+    else
+      return b;
+  } else {
+    if (a > c)
+      return c;
+    else
+      return a;    
+  }
+}
+
+/* returns highest number from three numbers */
+int GetMaxFrom3(int a, int b, int c) {
+  if (a > b) {
+    if (c > a)
+      return c;
+    else
+      return a;
+  } else {
+    if (c > b)
+      return c;
+    else
+      return b;
+  }
+}
+
+/* load preview pixmap from file */
+GdkPixmap *GetPreviewPixmap (GtkWidget *widget) {
+  GdkPixmap *pixmap;
+  GdkBitmap *mask;
+  gchar *file;
+
+  if (previewPixmapNumber == 0)
+  {
+    if (!strcmp (xgnokiiConfig.model, "6110") ||
+        !strcmp (xgnokiiConfig.model, "6120"))
+    {
+      file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_6110.xpm");
+      previewPixmapNumber = 1;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "6130") ||
+             !strcmp (xgnokiiConfig.model, "6150") ||
+             !strcmp (xgnokiiConfig.model, "616x") ||
+             !strcmp (xgnokiiConfig.model, "6185") ||
+             !strcmp (xgnokiiConfig.model, "6190"))
+    {
+      file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_6150.xpm");
+      previewPixmapNumber = 2;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "3210"))
+    {
+      file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_3210.xpm");
+      previewPixmapNumber = 3;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "3310") ||
+             !strcmp (xgnokiiConfig.model, "3330"))
+    {
+      file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_3310.xpm");
+      previewPixmapNumber = 4;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "5110") ||
+             !strcmp (xgnokiiConfig.model, "5130"))
+    {
+      file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_5110.xpm");
+      previewPixmapNumber = 5;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "6250"))
+    {
+      file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_6250.xpm");
+      previewPixmapNumber = 6;
+    }
+    else if (!strcmp (xgnokiiConfig.model, "7110"))
+    {
+      file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_7110.xpm");
+      previewPixmapNumber = 7;
+    }
+    else
+    {
+      file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                             "/xpm/Preview_6210.xpm");
+      previewPixmapNumber = 8;
+    }
+  }
+  else
+    switch (previewPixmapNumber)
+    {
+      case 1: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_6110.xpm"); 
+              break;
+      case 2: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_6150.xpm"); 
+              break;
+      case 3: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_3210.xpm"); 
+              break;
+      case 4: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_3310.xpm"); 
+              break;
+      case 5: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_5110.xpm"); 
+              break;
+      case 6: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_6250.xpm"); 
+              break;
+      case 7: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                     "/xpm/Preview_7110.xpm"); 
+              break;
+      default: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+                                      "/xpm/Preview_6210.xpm");
+              break;
+    }
+
+  pixmap = gdk_pixmap_create_from_xpm(widget->window,&mask,
+                                      &widget->style->bg[GTK_STATE_NORMAL],
+                                      file);
+  g_free(file);
+
+  return pixmap;
+}
+
+/* ********************************************************
+ * ** SET/CLEAR POINTS ************************************
+ * ********************************************************
+ */
+void SetPreviewPoint(GtkWidget *widget, int x, int y, int update) {
+  if (!previewAvailable) return;
+  
+  /* there is difference between positiong of startupLogo and others */
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
+    x += PREVIEWJUMPX;
+    y += PREVIEWJUMPY;
+  }
+
+  /* draw point to pixmap */
+  if (previewPixmap)
+    gdk_draw_point(previewPixmap,widget->style->black_gc,
+                   x+PREVIEWSTARTX,y+PREVIEWSTARTY);
+
+  if (update) {
+    GdkRectangle updateRect;
+
+    /* update point on screen */
+    updateRect.width = 1;
+    updateRect.height = 1;
+    updateRect.x = PREVIEWSTARTX+x;
+    updateRect.y = PREVIEWSTARTY+y;
+
+    gtk_widget_draw(previewArea,&updateRect);
+  }  
+}
+
+void ClearPreviewPoint(GtkWidget *widget, int x, int y, int update) {
+  if (!previewAvailable) return;
+  
+  /* there is difference between positiong of startupLogo and others */
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
+    x += PREVIEWJUMPX;
+    y += PREVIEWJUMPY;
+  }
+
+  /* clean point from pixmap - any idea how to draw green point without pixmap? */
+  if (previewPixmap)
+    gdk_draw_pixmap(previewPixmap,
+                    widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                    greenPixelPixmap,0,0,x+PREVIEWSTARTX,y+PREVIEWSTARTY,1,1);
+  if (update) {
+    GdkRectangle updateRect;
+
+    /* clean from screen too */
+    updateRect.width = 1;
+    updateRect.height = 1;
+    updateRect.x = PREVIEWSTARTX+x;
+    updateRect.y = PREVIEWSTARTY+y;
+
+    gtk_widget_draw(previewArea,&updateRect);
+  }
+}
+
+int IsPoint(int x, int y) {
+  return GSM_IsPointBitmap(&bitmap,x,y);
+}
+
+void SetPoint(GtkWidget *widget, int x, int y, int update) {
+
+  GSM_SetPointBitmap(&bitmap,x,y);
+
+  /* draw point to pixmap */
+  gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+         blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+  if (update) {
+    GdkRectangle updateRect;
+
+    /* calculate update rectangle */
+    updateRect.width = POINTSIZE+2;
+    updateRect.height = POINTSIZE+2;
+    updateRect.x = x * (POINTSIZE+1);
+    updateRect.y = y * (POINTSIZE+1);
+
+    /* update on screen */
+    gtk_widget_draw(drawingArea,&updateRect);
+  }
+
+  /* draw preview point too */
+  if (previewAvailable) SetPreviewPoint(widget,x,y,update); 
+}
+
+void ClearPoint(GtkWidget *widget, int x, int y, int update) {
+
+  GSM_ClearPointBitmap(&bitmap,x,y);
+
+  /* clear point from pixmap */
+  gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+          greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+  if (update) {
+    GdkRectangle updateRect;
+
+    /* calculate update rectangle */
+    updateRect.width = POINTSIZE+2;
+    updateRect.height = POINTSIZE+2;
+    updateRect.x = x * (POINTSIZE+1);
+    updateRect.y = y * (POINTSIZE+1);
+          
+    /* update on screen */
+    gtk_widget_draw(drawingArea,&updateRect);
+  }
+
+  /* clear point from previewArea too */
+  if (previewAvailable) ClearPreviewPoint(widget,x,y,update); 
+}
+
+/* ****************************************************
+ * *** UPDATES - PREVIEW & DRAWING AREAS **************
+ * ****************************************************
+ */
+
+/* this redraw all logo points - preview & drawing area */
+void UpdatePointsRectangle(GtkWidget *widget, int x1, int y1, int x2, int y2) {
+  GdkRectangle updateRect;
+  int x, y, dx = 0, dy = 0;
+
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
+    dx = PREVIEWJUMPX;
+    dy = PREVIEWJUMPY;
+  }
+
+  if (x1 > x2) {
+    x = x1;
+    x1 = x2;
+    x2 = x;
+  }
+
+  if (y1 > y2) {
+    y = y1;
+    y1 = y2;
+    y2 = y;
+  }
+  
+  for (y = y1;y <= y2;y++)
+    for (x = x1;x <= x2;x++) {
+      if (IsPoint(x,y)) {
+        /* set on drawing area */
+        gdk_draw_pixmap(drawingPixmap,
+                        drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)],
+                        blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+        /* set on preview */
+        if (previewAvailable && previewPixmap) 
+          gdk_draw_point(previewPixmap,previewArea->style->black_gc,
+                         x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy);
+      } else {
+        /* clear from drawing */
+        gdk_draw_pixmap(drawingPixmap,
+                        drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)],
+                        greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+        /* clear from preview */
+        if (previewAvailable && previewPixmap) 
+          gdk_draw_pixmap(previewPixmap,
+                          previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)],
+                          greenPixelPixmap,0,0,x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy,
+                          1,1);
+      }
+    }
+     
+  if (previewAvailable) {  
+    updateRect.x = PREVIEWSTARTX+dx+x1;
+    updateRect.y = PREVIEWSTARTY+dy+y1;
+    updateRect.width = x2-x1+1;
+    updateRect.height = y2-y1+1;
+    gtk_widget_draw(previewArea,&updateRect);
+  }  
+
+  updateRect.x = x1*(POINTSIZE+1);
+  updateRect.y = y1*(POINTSIZE+1);
+  updateRect.width = (x2-x1+1)*(POINTSIZE+1)+1;
+  updateRect.height = (y2-y1+1)*(POINTSIZE+1)+1;
+  gtk_widget_draw(drawingArea,&updateRect); 
+}
+
+void UpdatePoints(GtkWidget *widget) {
+  UpdatePointsRectangle(widget,0,0,bitmap.width-1,bitmap.height-1);
+}
+
+/* this redraw all logo points in previewArea, NO DRAWING AREA */
+void UpdatePreviewPoints (void) {
+  GdkRectangle updateRect;
+  int x, y, dx = 0, dy = 0;
+
+  if (!previewPixmap || !previewAvailable) return;  
+
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
+    dx = PREVIEWJUMPX;
+    dy = PREVIEWJUMPY;
+  }
+
+  for (y = 0;y < bitmap.height;y++)
+    for (x = 0;x < bitmap.width;x++) {
+      if (IsPoint(x,y)) {
+        gdk_draw_point(previewPixmap,previewArea->style->black_gc,
+                       x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy);
+      } else {
+        gdk_draw_pixmap(previewPixmap,
+                        previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)],
+                        greenPixelPixmap,0,0,
+                        x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy,1,1);
+      }
+    }
+              
+  updateRect.x = dx; 
+  updateRect.y = dy;
+  updateRect.width = bitmap.width;
+  updateRect.height = bitmap.height;
+  gtk_widget_draw(previewArea,&updateRect);
+}
+
+/* ******************************************************
+ * **** DRAWING TOOLS ***********************************
+ * ******************************************************
+ */
+
+/* TOOL - BRUSH */
+void ToolBrush(GtkWidget *widget, int column, int row, int button) {
+  /* only this tool directly update bitmap & screen */
+  if (button > 1) 
+    ClearPoint(widget,column,row,1);
+  else
+    SetPoint(widget,column,row,1);
+}
+
+/* TOOL - LINE */
+/* going to rewrite to Bresenham algorithm */ 
+static void ToolLineUpdate(GtkWidget *widget, int column, int row) {
+  double delta, y, x;
+  int i, x1, y1, x2, y2;
+  
+  if (abs(toolStartX-toolLastX) >= abs(toolStartY-toolLastY)) {
+    if (toolStartX > toolLastX) {
+      x1 = toolLastX;
+      x2 = toolStartX;
+      y1 = toolLastY;
+      y2 = toolStartY;
+    } else {
+      x1 = toolStartX;
+      x2 = toolLastX;
+      y1 = toolStartY;
+      y2 = toolLastY;
+    }
+    delta = ((double)(y2-y1))/((double)(x2-x1));
+    y = (double)y1;
+    for (i = x1;i <= x2;i++) {
+      if (!GSM_IsPointBitmap(&oldBitmap,i,(int)y)) ClearPoint(widget,i,(int)y,0);
+      y += delta;
+    }
+  } else {
+    if (toolStartY > toolLastY) {
+      x1 = toolLastX;
+      x2 = toolStartX;
+      y1 = toolLastY;
+      y2 = toolStartY;      
+    } else {
+      x1 = toolStartX;
+      x2 = toolLastX;
+      y1 = toolStartY;
+      y2 = toolLastY;
+    }
+    delta = ((double)(x2-x1))/((double)(y2-y1));
+
+    x = (double)x1;
+    for (i = y1;i <= y2;i++) {
+      if (!GSM_IsPointBitmap(&oldBitmap,(int)x,i)) ClearPoint(widget,(int)x,i,0);
+      x += delta;
+    }
+  } 
+
+  if (abs(toolStartX-column) >= abs(toolStartY-row)) {
+    if (toolStartX > column) {
+      x1 = column;
+      x2 = toolStartX;
+      y1 = row;
+      y2 = toolStartY;
+    } else {
+      x1 = toolStartX;
+      x2 = column;
+      y1 = toolStartY;
+      y2 = row;
+    }
+
+    delta = ((double)(y2-y1))/((double)(x2-x1));
+    y = (double)y1;
+    for (i = x1;i <= x2;i++) {
+      SetPoint(widget,i,(int)y,0);
+      y += delta;
+    }
+  } else {
+    if (toolStartY > row) {
+      x1 = column;
+      x2 = toolStartX;
+      y1 = row;
+      y2 = toolStartY;
+    } else {
+      x1 = toolStartX;
+      x2 = column;
+      y1 = toolStartY;
+      y2 = row;
+    }
+
+    delta = ((double)(x2-x1))/((double)(y2-y1));
+
+    x = (double)x1;
+    for (i = y1;i <= y2;i++) {
+      SetPoint(widget,(int)x,i,0);
+      x += delta;
+    }
+  }
+}
+
+/* TOOL - FILLED RECT */
+static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) {
+  int i, j, x1, y1, x2, y2;
+
+  if (toolStartX > toolLastX) {
+    x1 = toolLastX;
+    x2 = toolStartX;
+  } else {
+    x1 = toolStartX;
+    x2 = toolLastX;
+  }
+
+  if (toolStartY > toolLastY) {
+    y1 = toolLastY;
+    y2 = toolStartY;
+  } else {
+    y1 = toolStartY;
+    y2 = toolLastY;
+  }
+
+  for (j = y1;j <= y2;j++)
+    for (i = x1;i <= x2;i++)
+      if (!GSM_IsPointBitmap(&oldBitmap,i,j)) ClearPoint(widget,i,j,0);
+
+  if (toolStartX > column) {
+    x1 = column;
+    x2 = toolStartX;
+  } else {
+    x1 = toolStartX;
+    x2 = column;
+  }
+
+  if (toolStartY > row) {
+    y1 = row;
+    y2 = toolStartY;
+  } else {
+    y1 = toolStartY;
+    y2 = row;
+  }
+
+  for (j = y1;j <= y2;j++)
+    for (i = x1;i <= x2;i++)
+      SetPoint(widget,i,j,0);
+}
+
+/* TOOL - RECTANGLE */
+static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
+  int i, j, x1, y1, x2, y2;
+
+  /* clear old rectangle */
+  if (toolStartX > toolLastX) {
+    x1 = toolLastX;
+    x2 = toolStartX;
+  } else {
+    x1 = toolStartX;
+    x2 = toolLastX;
+  }
+
+  if (toolStartY > toolLastY) {
+    y1 = toolLastY;
+    y2 = toolStartY;
+  } else {
+    y1 = toolStartY;
+    y2 = toolLastY;
+  }
+
+  for (i = x1;i <= x2;i++) {
+    if (!GSM_IsPointBitmap(&oldBitmap,i,y1)) ClearPoint(widget,i,y1,0);
+    if (!GSM_IsPointBitmap(&oldBitmap,i,y2)) ClearPoint(widget,i,y2,0);                
+  }
+
+  for (j = y1;j <= y2;j++) {
+    if (!GSM_IsPointBitmap(&oldBitmap,x1,j)) ClearPoint(widget,x1,j,0);
+    if (!GSM_IsPointBitmap(&oldBitmap,x2,j)) ClearPoint(widget,x2,j,0);
+  }
+
+  /* draw new rectangle */
+  if (toolStartX > column) {
+    x1 = column;
+    x2 = toolStartX;
+  } else {
+    x1 = toolStartX;
+    x2 = column;
+  }
+
+  if (toolStartY > row) {
+    y1 = row;
+    y2 = toolStartY;
+  } else {
+    y1 = toolStartY;
+    y2 = row;
+  }
+
+  for (i = x1;i <= x2;i++) {
+    if (!IsPoint(i,y1)) SetPoint(widget,i,y1,0);
+    if (!IsPoint(i,y2)) SetPoint(widget,i,y2,0);
+  }
+
+  for (j = y1;j <= y2;j++) {
+    if (!IsPoint(x1,j)) SetPoint(widget,x1,j,0);
+    if (!IsPoint(x2,j)) SetPoint(widget,x2,j,0);
+  }
+}
+
+static void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) {
+  GdkRectangle updateRect;
+
+  /* update preview area */
+  updateRect.x = PREVIEWSTARTX+x1;
+  updateRect.y = PREVIEWSTARTY+y1;
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
+    updateRect.x += PREVIEWJUMPX;
+    updateRect.y += PREVIEWJUMPY;
+  }
+  updateRect.width = x2-x1+1;
+  updateRect.height = y2-y1+1;
+  gtk_widget_draw(previewArea,&updateRect);
+
+  /* update drawing area */
+  updateRect.x = x1 * (POINTSIZE+1);
+  updateRect.y = y1 * (POINTSIZE+1);
+  updateRect.width = (x2-x1+1)*(POINTSIZE+2);
+  updateRect.height = (y2-y1+1)*(POINTSIZE+2);
+  gtk_widget_draw(drawingArea,&updateRect);
+}
+
+/* *************************************
+ * ** PREVIEW AREA EVENTS **************
+ * *************************************
+ */
+
+static gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+  previewPixmapNumber = (previewPixmapNumber % 8) + 1;
+
+  gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+                        previewPixmapWidth,previewPixmapHeight);
+
+  return TRUE;
+}
+
+static gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+  if (previewPixmap) gdk_pixmap_unref(previewPixmap);
+  previewPixmap = GetPreviewPixmap(widget);
+
+  UpdatePreviewPoints();
+        
+  return TRUE;
+}
+
+static gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+  /* got previewPixmap? */
+  if (previewPixmap)
+    /* yes - simply redraw some rectangle */      
+    gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                    previewPixmap,event->area.x,event->area.y,event->area.x,
+                    event->area.y,event->area.width,event->area.height);
+
+  return FALSE;
+}
+
+/* ********************************
+ * ** DRAWING AREA EVENTS *********
+ * ********************************
+ */
+
+static gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+  /* got drawingPixmap? */
+  if (drawingPixmap == NULL) return TRUE;
+
+  if (!mouseButtonPushed) {
+    if ((event->button == 1 && activeTool != TOOL_BRUSH) || 
+        (activeTool == TOOL_BRUSH)) {
+      /* position from we starting drawing */
+      toolStartX = event->x / (POINTSIZE+1);
+      if (toolStartX < 0) toolStartX = 0;
+      if (toolStartX > bitmap.width-1) toolStartX = bitmap.width-1;
+    
+      toolStartY = event->y / (POINTSIZE+1);
+      if (toolStartY < 0) toolStartY = 0;
+      if (toolStartY > bitmap.height-1) toolStartY = bitmap.height-1;
+
+      toolLastX = toolStartX;
+      toolLastY = toolStartY;
+
+      /* store old bitmap for drawing, resp. for moving, resizing primitive */
+      memcpy(&oldBitmap,&bitmap,sizeof(oldBitmap));
+    }
+
+    if (event->button == 1) mouseButtonPushed = 1;
+  
+    switch (activeTool) { 
+      case TOOL_BRUSH:
+        ToolBrush(widget,toolStartX,toolStartY,event->button);
+        break;
+      case TOOL_LINE:
+      case TOOL_RECTANGLE:
+        if (event->button == 1) ToolBrush(widget,toolStartX,toolStartY,event->button);
+        break;
+    }
+  }
+
+  /* user is drawing some tool other than TOOL_BRUSH and pushed mouse button
+   * another than first => cancel tool and redraw to oldBitmap (bitmap when
+   * user start drawing)
+   */
+  if (mouseButtonPushed && activeTool != TOOL_BRUSH && event->button != 1) {
+    int lowestX, lowestY, highestX, highestY;
+    int i, j;
+
+    lowestX  = GetMinFrom3(toolStartX,toolLastX,toolLastX);
+    lowestY  = GetMinFrom3(toolStartY,toolLastY,toolLastY);
+    highestX = GetMaxFrom3(toolStartX,toolLastX,toolLastX);
+    highestY = GetMaxFrom3(toolStartY,toolLastY,toolLastY);
+
+    for (j = lowestY;j <= highestY;j++)
+      for (i = lowestX;i <= highestX;i++)
+        if (GSM_IsPointBitmap(&oldBitmap,i,j))
+          SetPoint(widget,i,j,0);
+        else
+          ClearPoint(widget,i,j,0);
+    UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY);
+
+    mouseButtonPushed = 0;
+  }
+
+  return TRUE;
+}
+
+static gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) {
+  if (event->button == 1)
+    mouseButtonPushed = 0;
+
+  return TRUE;
+}
+
+static gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) {
+  int x,y;
+  GdkModifierType state;
+  
+  if (!mouseButtonPushed && activeTool != TOOL_BRUSH) return TRUE;
+  
+  if (event->is_hint)
+    gdk_window_get_pointer(event->window,&x,&y,&state);
+  else {
+    x = event->x;
+    y = event->y;
+    state = event->state;
+  }
+
+  x = x / (POINTSIZE+1);
+  y = y / (POINTSIZE+1);
+  if (x < 0) x = 0;
+  if (y < 0) y = 0;
+  if (x > bitmap.width-1) x = bitmap.width-1;
+  if (y > bitmap.height-1) y = bitmap.height-1;
+
+  if (y == toolLastY && x == toolLastX) return TRUE;
+  
+  switch (activeTool) {
+    case TOOL_BRUSH:
+      if (state & GDK_BUTTON1_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,1);
+      if (state & GDK_BUTTON2_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,2);
+      if (state & GDK_BUTTON3_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,3);
+      break;
+    case TOOL_RECTANGLE:
+      if (drawingPixmap != NULL) ToolRectangleUpdate(widget,x,y);
+      break;
+    case TOOL_FILLED_RECTANGLE:
+      if (drawingPixmap != NULL) ToolFilledRectangleUpdate(widget,x,y); 
+      break; 
+    case TOOL_LINE:
+      if (drawingPixmap != NULL) ToolLineUpdate(widget,x,y); 
+      break; 
+  }   
+
+  /* what is this?
+   * it's simple, above tools updates only bitmap in memory and this
+   * function update from bitmap to screen, it's made as non-blinking
+   * drawing functions with this, simply draw everything we need and
+   * after that, redraw to screen rectangle in which we made changes 
+   * it's not redrawing pixel by pixel (blinking)
+   */
+  if (activeTool != TOOL_BRUSH) {
+    int lowestX, lowestY, highestX, highestY;
+
+    lowestX  = GetMinFrom3(toolStartX,toolLastX,x);
+    lowestY  = GetMinFrom3(toolStartY,toolLastY,y);
+    highestX = GetMaxFrom3(toolStartX,toolLastX,x);
+    highestY = GetMaxFrom3(toolStartY,toolLastY,y);
+  
+    UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY);  
+  }
+
+  toolLastX = x;
+  toolLastY = y; 
+  return TRUE;  
+}
+
+/* configureEvent? -> event when someone resize windows, ... */
+static gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+  int x, y;
+  /* got drawingPixmap? */
+  if (drawingPixmap) gdk_pixmap_unref(drawingPixmap); /* got, erase it */
+
+  /* make a new pixmap */
+  drawingPixmap = gdk_pixmap_new(widget->window,drawingAreaWidth,
+                 drawingAreaHeight,-1);
+
+  /* draw grid into pixmap */
+  for (y = 0;y < bitmap.height;y++)
+    for (x = 0;x < bitmap.width;x++)
+      if (IsPoint(x,y))
+        gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                        blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+      else
+        gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                        greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+  
+  return TRUE;
+}
+
+static gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+  /* got drawingPixmap? */
+  if (drawingPixmap)
+    /* got - draw it */
+    gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                   drawingPixmap,
+                   event->area.x,event->area.y,event->area.x,event->area.y,
+                   event->area.width,event->area.height);
+  return FALSE; 
+}
+
+/* *****************************************
+ * ** TOOLBAR & MENU EVENTS ****************
+ * *****************************************
+ */
+
+static void GetNetworkInfoEvent(GtkWidget *widget) {
+  GSM_Error error;
+  PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
+  D_NetworkInfo *data = (D_NetworkInfo *)g_malloc(sizeof(D_NetworkInfo));
+
+  /* prepare data for event */
+  data->info = &networkInfo;
+  e->event = Event_GetNetworkInfo;
+  e->data = data;
+
+  /* launch event and wait for result */
+  GUI_InsertEvent(e);
+  pthread_mutex_lock(&getNetworkInfoMutex);
+  pthread_cond_wait(&getNetworkInfoCond,&getNetworkInfoMutex);
+  pthread_mutex_unlock(&getNetworkInfoMutex);
+  error = data->status;
+  g_free(data);
+
+  /* watch for errors */
+  if (error != GE_NONE) {
+    gchar *buf = g_strdup_printf(_("Error getting network info\n(error=%d)"),error);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+  }
+
+  /* set new operator name to combo */
+  gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry),
+               GSM_GetNetworkName(networkInfo.NetworkCode));
+}
+
+static void GetLogoEvent(GtkWidget *widget) {
+  int i;
+  GSM_Error error;
+  PhoneEvent *e = (PhoneEvent *) g_malloc(sizeof(PhoneEvent));
+  D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap));
+  char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry));
+
+  /* prepare data for event */
+  strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7);
+  data->bitmap = &bitmap;
+  e->event = Event_GetBitmap;
+  e->data = data;
+  if (GetModelFeature(FN_CALLERGROUPS)!=0) {
+    for (i = 0;i < 6;i++) 
+      if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)),
+                 xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; 
+  }
+  
+  /* launch event and wait for result */
+  GUI_InsertEvent(e);
+  pthread_mutex_lock(&getBitmapMutex);
+  pthread_cond_wait(&getBitmapCond,&getBitmapMutex);
+  pthread_mutex_unlock(&getBitmapMutex);
+  error = data->status;
+  g_free(data);
+
+  /* watch for errors */
+  if (error != GE_NONE) {
+    gchar *buf = g_strdup_printf(_("Error getting bitmap\n(error=%d)"),error);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+  } else {
+    /* no error, draw logo from phone */
+    UpdatePoints(drawingArea);
+  }
+}
+
+static void SetLogoEvent(GtkWidget *widget) {
+  GSM_Error error;
+  PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
+  D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap));
+  char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry));
+  int i;
+
+  /* prepare data */
+  strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7);
+  if (bitmap.type == GSM_CallerLogo) {
+    /* above condition must be there, because if you launch logos before
+     * callerGroups are available, you will see segfault - callerGroups not initialized 
+     */
+    if (GetModelFeature(FN_CALLERGROUPS)!=0) {
+      for (i = 0;i < 6;i++) 
+        if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)),
+                   xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; 
+    }  
+  }
+  if (bitmap.type == GSM_StartupLogo) {
+    bitmap.number=0;
+  }
+  
+  data->bitmap = &bitmap;
+  e->event = Event_SetBitmap;
+  e->data = data;
+
+  /* launch event and wait for result */
+  GUI_InsertEvent(e);
+  pthread_mutex_lock(&setBitmapMutex);
+  pthread_cond_wait(&setBitmapCond,&setBitmapMutex);
+  pthread_mutex_unlock(&setBitmapMutex);
+  error = data->status;
+  g_free(data);
+
+  /* watch for errors */
+  if (error != GE_NONE) {
+    gchar *buf = g_strdup_printf(_("Error setting bitmap\n(error=%d)"),error);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+  }
+}
+
+static void ClearLogoEvent(GtkWidget *widget) {
+  
+  bitmap.size=bitmap.width*bitmap.height/8;
+  
+  GSM_ClearBitmap(&bitmap);
+
+  UpdatePoints(widget);
+}
+
+static void InvertLogoEvent(GtkWidget *widget) {
+  int column, row;
+
+  for (column = 0;column < bitmap.width;column++)
+    for (row = 0;row < bitmap.height;row++)
+      if (IsPoint(column,row))
+       GSM_ClearPointBitmap(&bitmap,column,row);
+      else
+       GSM_SetPointBitmap(&bitmap,column,row);
+
+  UpdatePoints(widget);
+}
+
+static void UpLogoEvent(GtkWidget *widget) {
+  int column, row;
+
+  GSM_Bitmap tbitmap;
+  
+  tbitmap=bitmap;
+  
+  for (row = 0;row < bitmap.height-1;row++)
+    for (column = 0;column < bitmap.width;column++)
+      if (IsPoint(column,row+1))
+       GSM_SetPointBitmap(&bitmap,column,row);
+      else
+       GSM_ClearPointBitmap(&bitmap,column,row);
+
+  for (column = 0;column < bitmap.width;column++)
+    if (GSM_IsPointBitmap(&tbitmap,column,0))
+      GSM_SetPointBitmap(&bitmap,column,row);
+    else
+      GSM_ClearPointBitmap(&bitmap,column,row);    
+
+  UpdatePoints(widget); 
+}
+
+static void DownLogoEvent(GtkWidget *widget) {
+  int column, row;
+
+  GSM_Bitmap tbitmap;
+  
+  tbitmap=bitmap;
+
+  for (row = bitmap.height-1;row > 0;row--)
+    for (column = 0;column < bitmap.width;column++)
+      if (IsPoint(column,row-1))
+        GSM_SetPointBitmap(&bitmap,column,row);
+      else
+        GSM_ClearPointBitmap(&bitmap,column,row);
+
+  for (column = 0;column < bitmap.width;column++)
+    if (GSM_IsPointBitmap(&tbitmap,column,bitmap.height-1))
+      GSM_SetPointBitmap(&bitmap,column,0);
+    else
+      GSM_ClearPointBitmap(&bitmap,column,0);
+
+  UpdatePoints(widget);
+}
+
+static void LeftLogoEvent(GtkWidget *widget) {
+  int column, row;
+
+  GSM_Bitmap tbitmap;
+  
+  tbitmap=bitmap;
+
+  for (column = 0; column < bitmap.width-1;column++)
+    for (row = 0;row < bitmap.height;row++)
+      if (IsPoint(column+1,row))
+        GSM_SetPointBitmap(&bitmap,column,row);
+      else
+       GSM_ClearPointBitmap(&bitmap,column,row);
+
+  for (row = 0;row < bitmap.height;row++)
+    if (GSM_IsPointBitmap(&tbitmap,0,row))
+      GSM_SetPointBitmap(&bitmap,bitmap.width-1,row);
+    else
+      GSM_ClearPointBitmap(&bitmap,bitmap.width-1,row);
+
+  UpdatePoints(widget);
+}
+
+static void RightLogoEvent(GtkWidget *widget) {
+  int column, row;
+
+  GSM_Bitmap tbitmap;
+  
+  tbitmap=bitmap;
+
+  for (column = bitmap.width-1;column > 0;column--)
+    for (row = 0;row < bitmap.height;row++)
+      if (IsPoint(column-1,row))
+        GSM_SetPointBitmap(&bitmap,column,row);
+      else
+        GSM_ClearPointBitmap(&bitmap,column,row);
+
+  for (row = 0;row < bitmap.height;row++)
+    if (GSM_IsPointBitmap(&tbitmap,bitmap.width-1,row))
+      GSM_SetPointBitmap(&bitmap,0,row);
+    else
+      GSM_ClearPointBitmap(&bitmap,0,row);
+
+  UpdatePoints(widget);
+}
+
+static void FlipVerticalLogoEvent(GtkWidget *widget) {
+  int row, column, temp;
+
+  for (row = 0;row < (bitmap.height/2);row++)
+    for (column = 0;column < bitmap.width;column++) {
+      temp = IsPoint(column,row);
+      if (IsPoint(column,bitmap.height-1-row))
+       GSM_SetPointBitmap(&bitmap,column,row);
+      else
+       GSM_ClearPointBitmap(&bitmap,column,row);
+
+      if (temp)
+       GSM_SetPointBitmap(&bitmap,column,bitmap.height-1-row);
+      else
+       GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1-row);
+    }
+
+  UpdatePoints(widget);
+}
+
+static void FlipHorizontalLogoEvent(GtkWidget *widget) {
+  int row, column, temp;
+
+  for (row = 0;row < bitmap.height;row++)
+    for (column = 0;column < (bitmap.width/2);column++) {
+      temp = IsPoint(column,row);
+
+      if (IsPoint(bitmap.width-1-column,row))
+       GSM_SetPointBitmap(&bitmap,column,row);
+      else
+        GSM_ClearPointBitmap(&bitmap,column,row);
+
+      if (temp)
+       GSM_SetPointBitmap(&bitmap,bitmap.width-1-column,row);
+      else
+       GSM_ClearPointBitmap(&bitmap,bitmap.width-1-column,row);
+    }
+
+  UpdatePoints(widget);
+} 
+
+/* this is launched when tool was changed */
+static gint ToolTypeEvent(GtkWidget *widget) {
+  if (GTK_TOGGLE_BUTTON(buttonBrush)->active) activeTool = TOOL_BRUSH; else
+  if (GTK_TOGGLE_BUTTON(buttonLine)->active) activeTool = TOOL_LINE; else
+  if (GTK_TOGGLE_BUTTON(buttonRectangle)->active) activeTool = TOOL_RECTANGLE; else
+  if (GTK_TOGGLE_BUTTON(buttonFilledRectangle)->active)
+    activeTool = TOOL_FILLED_RECTANGLE;
+
+  return 0;
+}
+
+/* this is launched when logo type was change by buttons on toolbar */
+static gint LogoTypeEvent(GtkWidget *widget) {
+  int clear = 0;
+
+  /* is startupLogo? */
+  if (GTK_TOGGLE_BUTTON(buttonStartup)->active &&
+      bitmap.type != GSM_StartupLogo && bitmap.type != GSM_6210StartupLogo &&
+      bitmap.type != GSM_7110StartupLogo) {
+    /* look for old bitmap type, clean if another */
+    clear = 1;
+    
+    if (!strcmp(xgnokiiConfig.model,"7110")) {
+      GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+    } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) {
+      GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+    } else {
+      GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+    }
+  }
+  
+  /* new type is PictureImage */
+  if (GTK_TOGGLE_BUTTON(buttonPicture)->active && bitmap.type != GSM_PictureImage) {
+    /* look for old bitmap type, clean if another */
+    clear = 1;
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+  }
+  
+  /* new type is callerLogo */
+  if (GTK_TOGGLE_BUTTON(buttonCaller)->active && bitmap.type != GSM_CallerLogo) {
+    /* previous was startup or Picture ? clear and draw batteries, signal, ... */      
+    if (bitmap.type != GSM_OperatorLogo) clear = 1;
+    GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+  }
+
+  /* is new type operatorLogo? */
+  if (GTK_TOGGLE_BUTTON(buttonOperator)->active && bitmap.type != GSM_OperatorLogo &&
+      bitmap.type != GSM_7110OperatorLogo) {
+
+    /* previous startup or Picture ? clear and draw batteries, signal, ... */      
+    if (bitmap.type != GSM_CallerLogo) clear = 1;
+
+    if (!strcmp(xgnokiiConfig.model,"7110")) {
+      GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+    } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) {
+      GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+    } else {
+      GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+    }
+  }
+
+  /* must clear? */
+  if (clear) {
+    if (previewAvailable) {
+      /* configure event reload pixmap from disk and redraws */
+      gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+                            previewPixmapWidth,previewPixmapHeight);
+    }   
+
+    /* change new drawingArea size */
+    drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1;
+    drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1;
+
+    gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea),
+                          drawingAreaWidth,drawingAreaHeight);
+  }
+
+  return 0;
+}
+
+static inline void CloseLogosWindow (void) {
+  gtk_widget_hide(GUI_LogosWindow);
+}
+
+void ExportLogoFileMain(gchar *name)
+{
+  GSM_Bitmap tbitmap;
+  GSM_Error error;
+  
+  tbitmap=bitmap;
+
+  strncpy(tbitmap.netcode,GSM_GetNetworkCode(networkInfo.NetworkCode),7);
+
+  error=GSM_SaveBitmapFile(name,&tbitmap);
+  if (error!=GE_NONE) {
+    gchar *buf = g_strdup_printf(_("Error saving file\n(error=%d)"),error);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+  }
+}
+
+static void YesLogoFileExportDialog (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  ExportLogoFileMain(exportDialogData.fileName);
+}
+
+static void ExportFileSelected (GtkWidget *w, GtkFileSelection *fs)
+{
+  static YesNoDialog dialog = { NULL, NULL};
+  FILE *f;
+  gchar err[80];
+
+  exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+  {
+    fclose (f);
+    if (dialog.dialog == NULL)
+    {
+      CreateYesNoDialog (&dialog, YesLogoFileExportDialog, CancelDialog, GUI_LogosWindow);
+      gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+      g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); 
+      gtk_label_set_text (GTK_LABEL(dialog.text), err);
+    }
+    gtk_widget_show (dialog.dialog);
+  }
+  else
+    ExportLogoFileMain(exportDialogData.fileName);
+}
+
+void ImportFileSelected(GtkWidget *w, GtkFileSelection *fs)
+{
+  GSM_Bitmap tbitmap;
+  GSM_Error error=0;
+  
+  gchar *fileName;
+  FILE *f;
+
+  fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (fileName, "r")) == NULL) {
+    gchar *buf = g_strdup_printf(_("Can't open file %s for reading !"),fileName);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+    return;
+  }
+
+  error=GSM_ReadBitmapFile(fileName,&tbitmap);
+  if (error!=GE_NONE) {
+    gchar *buf = g_strdup_printf(_("Error reading file\n(error=%d)"),error);
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+    return;
+  }
+
+  exportDialogData.fileName=fileName;
+  
+  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),false);
+  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),false);
+  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),false);
+  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),false);  
+
+  if (tbitmap.type==GSM_OperatorLogo || tbitmap.type==GSM_7110OperatorLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),true);
+  if (tbitmap.type==GSM_StartupLogo || tbitmap.type==GSM_7110StartupLogo || tbitmap.type==GSM_6210StartupLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),true);
+  if (tbitmap.type==GSM_CallerLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),true);
+  if (tbitmap.type==GSM_PictureImage) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),true);  
+  
+  memcpy(&bitmap,&tbitmap,sizeof(GSM_Bitmap));
+
+  if (!strcmp(xgnokiiConfig.model,"7110")) { //7110
+    if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_6210StartupLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+
+    if (bitmap.type==GSM_OperatorLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+
+  } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250
+    if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_7110StartupLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+
+    if (bitmap.type==GSM_OperatorLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+
+  } else {
+    if (bitmap.type==GSM_6210StartupLogo || bitmap.type==GSM_7110StartupLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+    if (bitmap.type==GSM_7110OperatorLogo)
+      GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+  }  
+  
+  UpdatePoints(drawingArea);
+}
+
+void SaveLogoAs(GtkWidget *widget)
+{
+  FileSelection=gtk_file_selection_new ("Save logo as ...");
+
+  gtk_signal_connect (
+       GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button),
+       "clicked", (GtkSignalFunc) ExportFileSelected, FileSelection);
+    
+  gtk_signal_connect_object (
+       GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button),
+       "clicked", (GtkSignalFunc) gtk_widget_destroy,
+        GTK_OBJECT (FileSelection));
+    
+  gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection));
+
+  gtk_widget_show(FileSelection);
+}
+
+void SaveLogo(GtkWidget *widget)
+{
+  if (exportDialogData.fileName==NULL) {
+    SaveLogoAs(widget);
+  } else {
+    ExportLogoFileMain(exportDialogData.fileName);
+  }
+}
+
+void OpenLogo(GtkWidget *widget)
+{
+  FileSelection=gtk_file_selection_new ("Open logo...");
+
+  gtk_signal_connect (
+       GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button),
+       "clicked", (GtkSignalFunc) ImportFileSelected, FileSelection);
+    
+  gtk_signal_connect_object (
+       GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button),
+       "clicked", (GtkSignalFunc) gtk_widget_destroy,
+        GTK_OBJECT (FileSelection));
+    
+  gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection));
+
+  gtk_widget_show(FileSelection);
+}
+
+static GtkItemFactoryEntry logosMenuItems[] = {
+  { NULL,      NULL,           NULL,                    0, "<Branch>"},
+  { NULL,       "<control>O",   OpenLogo,               0, NULL},
+  { NULL,       "<control>S",   SaveLogo,               0, NULL},
+  { NULL,      NULL,           SaveLogoAs,              0, NULL},
+  { NULL,       NULL,           NULL,                    0, "<Separator>"},
+  { NULL,       "<control>G",   GetNetworkInfoEvent,     0, NULL},
+  { NULL,       NULL,           GetLogoEvent,            0, NULL},
+  { NULL,       "<control>T",   SetLogoEvent,            0, NULL},
+  { NULL,       NULL,           NULL,                    0, "<Separator>"},
+  { NULL,       "<control>W",   CloseLogosWindow,        0, NULL},
+  { NULL,      NULL,           NULL,                    0, "<Branch>"},
+  { NULL,      "<control>C",   ClearLogoEvent,          0, NULL},
+  { NULL,      "<control>I",   InvertLogoEvent,         0, NULL},
+  { NULL,      NULL,           NULL,                    0, "<Separator>"},
+  { NULL,      "<control>U",   UpLogoEvent,             0, NULL},
+  { NULL,      "<control>D",   DownLogoEvent,           0, NULL},
+  { NULL,      "<control>L",   LeftLogoEvent,           0, NULL},
+  { NULL,      "<control>R",   RightLogoEvent,          0, NULL},
+  { NULL,      NULL,           NULL,                    0, "<Separator>"},
+  { NULL,      "<control>H",   FlipHorizontalLogoEvent, 0, NULL},
+  { NULL,      "<control>V",   FlipVerticalLogoEvent,   0, NULL},
+};
+
+static void InitLogosMenu (void) {
+ logosMenuItems[0].path = g_strdup(_("/_File"));
+ logosMenuItems[1].path = g_strdup(_("/File/_Open"));
+ logosMenuItems[2].path = g_strdup(_("/File/_Save"));
+ logosMenuItems[3].path = g_strdup(_("/File/Save _as ..."));
+ logosMenuItems[4].path = g_strdup(_("/File/Sep1"));
+ logosMenuItems[5].path = g_strdup(_("/File/_Get operator"));
+ logosMenuItems[6].path = g_strdup(_("/File/Get _logo"));
+ logosMenuItems[7].path = g_strdup(_("/File/Se_t logo"));
+ logosMenuItems[8].path = g_strdup(_("/File/Sep2"));
+ logosMenuItems[9].path = g_strdup(_("/File/_Close"));
+ logosMenuItems[10].path = g_strdup(_("/_Edit"));
+ logosMenuItems[11].path = g_strdup(_("/Edit/_Clear"));
+ logosMenuItems[12].path = g_strdup(_("/Edit/_Invert"));
+ logosMenuItems[13].path = g_strdup(_("/Edit/Sep3"));
+ logosMenuItems[14].path = g_strdup(_("/Edit/_Up logo"));
+ logosMenuItems[15].path = g_strdup(_("/Edit/_Down logo"));
+ logosMenuItems[16].path = g_strdup(_("/Edit/_Left logo"));
+ logosMenuItems[17].path = g_strdup(_("/Edit/_Right logo"));
+ logosMenuItems[18].path = g_strdup(_("/Edit/Sep4"));
+ logosMenuItems[19].path = g_strdup(_("/Edit/Flip _horizontal"));
+ logosMenuItems[20].path = g_strdup(_("/Edit/Flip _vertical"));
+}
+
+void GUI_CreateLogosWindow (void) {
+  int nMenuItems = sizeof (logosMenuItems) / sizeof (logosMenuItems[0]);
+  GtkAccelGroup *accelGroup;
+  GtkItemFactory *itemFactory;
+  GtkWidget *menuBar;
+  GtkWidget *toolBar, *vertToolBar;
+  GtkWidget *vbox;
+  GtkWidget *hbox;
+  GtkWidget *drawingBox;
+  GtkWidget *separator;
+  GdkBitmap *mask;
+
+  GList *glistNetwork = NULL;
+
+  int i = 0;
+  previewPixmapWidth = PREVIEWWIDTH;
+  previewPixmapHeight = PREVIEWHEIGHT;
+  
+  InitLogosMenu();
+
+  /* realize top level window for logos */
+  GUI_LogosWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_policy(GTK_WINDOW(GUI_LogosWindow),1,1,1);
+  gtk_window_set_title(GTK_WINDOW(GUI_LogosWindow),_("Logos"));
+  gtk_signal_connect(GTK_OBJECT(GUI_LogosWindow),"delete_event",
+                     GTK_SIGNAL_FUNC(DeleteEvent),NULL);
+  gtk_widget_realize(GUI_LogosWindow);
+
+  CreateErrorDialog(&errorDialog,GUI_LogosWindow);
+  CreateInfoDialog(&infoDialog,GUI_LogosWindow);
+
+  accelGroup = gtk_accel_group_new();
+  gtk_accel_group_attach(accelGroup,GTK_OBJECT(GUI_LogosWindow));
+  
+  /* create main vbox */
+  vbox = gtk_vbox_new(FALSE,1);
+  gtk_container_add(GTK_CONTAINER(GUI_LogosWindow),vbox);
+  gtk_widget_show(vbox);
+  itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accelGroup);
+  gtk_item_factory_create_items(itemFactory,nMenuItems,logosMenuItems,NULL);
+  menuBar = gtk_item_factory_get_widget(itemFactory,"<main>");
+
+  gtk_box_pack_start(GTK_BOX(vbox),menuBar,FALSE,FALSE,0);
+  gtk_widget_show(menuBar);
+
+  /* toolbar */
+  toolBar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolBar),GTK_RELIEF_NORMAL);
+  gtk_toolbar_set_style(GTK_TOOLBAR(toolBar),GTK_TOOLBAR_ICONS);
+
+  gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Clear logo",NULL,
+                 NewPixmap(New_xpm,GUI_LogosWindow->window,
+                 &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 (GtkSignalFunc)ClearLogoEvent,toolBar);
+
+  gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+
+  gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Get logo",NULL,
+                 NewPixmap(Read_xpm,GUI_LogosWindow->window,
+                 &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 (GtkSignalFunc)GetLogoEvent,toolBar);
+
+  gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Set logo",NULL,
+                 NewPixmap(Send_xpm,GUI_LogosWindow->window,
+                 &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 (GtkSignalFunc)SetLogoEvent,toolBar);
+
+  gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+
+  buttonStartup = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+                 GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Startup logo",
+                 "",NewPixmap(Startup_logo_xpm,GUI_LogosWindow->window,
+                  &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+  buttonOperator = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+                  GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonStartup,NULL,"Operator logo",
+                 "",NewPixmap(Operator_logo_xpm,GUI_LogosWindow->window,
+                 &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+  buttonCaller = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+                 GTK_TOOLBAR_CHILD_RADIOBUTTON,
+                buttonOperator,
+                NULL,"Caller logo",
+                "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window,
+                &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+  buttonPicture = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+                  GTK_TOOLBAR_CHILD_RADIOBUTTON,
+                 buttonOperator,
+                 NULL,"Picture image",
+                 "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window,
+                 &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                 GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+  gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+  
+  networkCombo = gtk_combo_new();
+  gtk_combo_set_use_arrows_always(GTK_COMBO(networkCombo),1);
+  while (strcmp(GSM_Networks[i].Name,"unknown"))
+    glistNetwork = g_list_insert_sorted(glistNetwork,GSM_Networks[i++].Name,
+                   (GCompareFunc)strcmp);
+  gtk_combo_set_popdown_strings(GTK_COMBO(networkCombo),glistNetwork);
+  gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(networkCombo)->entry),FALSE);
+  gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),networkCombo,"","");
+  gtk_widget_show(networkCombo);
+  g_list_free(glistNetwork);
+
+  callerCombo = gtk_combo_new();
+  gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(callerCombo)->entry),FALSE);
+  gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),callerCombo,"","");
+  gtk_widget_show(callerCombo);
+  
+  gtk_box_pack_start(GTK_BOX(vbox),toolBar,FALSE,FALSE,0);
+  gtk_widget_show(toolBar); 
+
+  /* vertical separator */
+  separator = gtk_hseparator_new();
+  gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(separator),FALSE,FALSE,0);
+  
+  /* create horizontal box for preview and drawing areas */
+  hbox = gtk_hbox_new(FALSE,5);
+  gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
+  gtk_widget_show(hbox);
+  /* set GSM_Bitmap width,height needed for creating drawinArea
+   * we are starting, default is startupLogo
+   */
+  bitmap.type = GSM_7110StartupLogo;
+  bitmap.height = 65;
+  bitmap.width = 96;
+  bitmap.size = bitmap.height * bitmap.width / 8;
+  if (!strcmp(xgnokiiConfig.model,"7110")) { //7110
+    GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+  } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250
+    GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+  } else {
+    GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+  }
+  drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1;
+  drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1;
+  /* previewArea */
+  previewPixmap = GetPreviewPixmap(GUI_LogosWindow);
+
+  if (previewPixmap != NULL) {
+    previewArea = gtk_drawing_area_new();
+    gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+                          previewPixmapWidth,previewPixmapHeight);
+    
+    greenPixelPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+                       &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],
+                       Green_pixel_xpm);
+
+    gtk_signal_connect(GTK_OBJECT(previewArea),"expose_event",
+                      (GtkSignalFunc)PreviewAreaExposeEvent,NULL);
+    gtk_signal_connect(GTK_OBJECT(previewArea),"configure_event",
+                       (GtkSignalFunc)PreviewAreaConfigureEvent,NULL);
+    gtk_signal_connect(GTK_OBJECT(previewArea),"button_press_event",
+                       (GtkSignalFunc)PreviewAreaButtonPressEvent,NULL);
+
+    gtk_widget_set_events(previewArea,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK );
+
+    gtk_box_pack_start(GTK_BOX(hbox),previewArea,FALSE,FALSE,0);
+    gtk_widget_show(previewArea);
+    
+    /* clear battery, signal, menu & names from preview phone */
+    UpdatePreviewPoints (); 
+
+  } else previewAvailable = 0;
+
+  /* drawingArea */
+  greenPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+                 &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Green_point_xpm);
+  blackPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+                 &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Black_point_xpm);
+  
+  drawingBox = gtk_vbox_new(FALSE,3);
+  gtk_box_pack_start(GTK_BOX(hbox),drawingBox,FALSE,FALSE,0);
+  gtk_widget_show(drawingBox);
+
+  drawingArea = gtk_drawing_area_new();
+  gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea),
+                 drawingAreaWidth,drawingAreaHeight);
+
+  gtk_signal_connect(GTK_OBJECT(drawingArea),"configure_event",
+                 (GtkSignalFunc)DrawingAreaConfigureEvent,NULL);
+  gtk_signal_connect(GTK_OBJECT(drawingArea),"expose_event",
+                 (GtkSignalFunc)DrawingAreaExposeEvent,NULL);
+  gtk_signal_connect(GTK_OBJECT(drawingArea),"button_press_event",
+                 (GtkSignalFunc)DrawingAreaButtonPressEvent,NULL);
+  gtk_signal_connect(GTK_OBJECT(drawingArea),"button_release_event",
+                  (GtkSignalFunc)DrawingAreaButtonReleaseEvent,NULL);
+  gtk_signal_connect(GTK_OBJECT(drawingArea),"motion_notify_event",
+                 (GtkSignalFunc)DrawingAreaMotionNotifyEvent,NULL);
+  
+  gtk_widget_set_events(drawingArea,GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK |
+                 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | 
+                  GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
+
+  gtk_box_pack_start(GTK_BOX(drawingBox),drawingArea,FALSE,FALSE,0);
+  gtk_widget_show(drawingArea);
+
+  /* vertical tool bar */
+  vertToolBar = gtk_toolbar_new(GTK_ORIENTATION_VERTICAL,GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief(GTK_TOOLBAR(vertToolBar),GTK_RELIEF_NORMAL);
+  gtk_toolbar_set_style(GTK_TOOLBAR(vertToolBar),GTK_TOOLBAR_ICONS);
+
+  buttonBrush = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+                GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Brush tool",
+                "",NewPixmap(Tool_brush_xpm,GUI_LogosWindow->window,
+                &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+  buttonLine = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+               GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonBrush,NULL,"Line tool",
+               "",NewPixmap(Tool_line_xpm,GUI_LogosWindow->window,
+               &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+               GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+  buttonRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+                    GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonLine,NULL,"Rectangle tool",
+                    "",NewPixmap(Tool_rectangle_xpm,GUI_LogosWindow->window,
+                    &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                    GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+  buttonFilledRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+                          GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonRectangle,NULL,
+                          "Filled rectangle tool",
+                          "",NewPixmap(Tool_filled_rectangle_xpm,
+                          GUI_LogosWindow->window,
+                          &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                          GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+  gtk_toolbar_append_space(GTK_TOOLBAR(vertToolBar));
+  gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Invert logo",NULL,
+                          NewPixmap(Edit_invert_xpm,GUI_LogosWindow->window,
+                          &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                          (GtkSignalFunc)InvertLogoEvent,vertToolBar);
+
+  gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Horizontal flip",NULL,
+                          NewPixmap(Edit_flip_horizontal_xpm,GUI_LogosWindow->window,
+                          &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                          (GtkSignalFunc)FlipHorizontalLogoEvent,vertToolBar);
+
+  gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Vertical flip",NULL,
+                          NewPixmap(Edit_flip_vertical_xpm,GUI_LogosWindow->window,
+                          &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+                          (GtkSignalFunc)FlipVerticalLogoEvent,vertToolBar);
+
+  
+  gtk_box_pack_start(GTK_BOX(hbox),vertToolBar,FALSE,FALSE,0);
+  gtk_widget_show(vertToolBar);
+
+  GUIEventAdd(GUI_EVENT_CALLERS_GROUPS_CHANGED,&GUI_RefreshLogosGroupsCombo);
+}
+
+void GUI_RefreshLogosGroupsCombo (void) {
+  GList *callerList = NULL;
+  int i;
+  
+  for (i = 0;i < 6;i++)
+    callerList = g_list_insert(callerList,xgnokiiConfig.callerGroups[i],i);
+  
+  gtk_combo_set_popdown_strings(GTK_COMBO(callerCombo),callerList);
+  g_list_free(callerList);
+
+  if (!callersGroupsInitialized) callersGroupsInitialized = 1;
+}
+
+void GUI_ShowLogosWindow (void) {
+
+  gtk_widget_show(buttonCaller);
+  gtk_widget_show(callerCombo); 
+
+  if (xgnokiiConfig.callerGroups[0] == NULL) {
+    GUI_Refresh(); 
+    GUI_InitCallerGroupsInf ();
+  }
+
+  if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo ();           
+  
+  gtk_widget_show(GUI_LogosWindow);
+
+  if (!previewAvailable && showPreviewErrorDialog) {
+    gchar *buf = g_strdup(_("Load preview pixmap error, feature disabled."));
+    gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+    gtk_widget_show(errorDialog.dialog);
+    g_free(buf);
+
+    showPreviewErrorDialog = 0;
+  }
+}
diff --git a/xgnokii/xgnokii_logos.h b/xgnokii/xgnokii_logos.h
new file mode 100644 (file)
index 0000000..9d7c780
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef XGNOKII_LOGOS_H
+#define XGNOKII_LOGOS_H
+
+/* drawable point size - depends on .xpm file */
+#define POINTSIZE 5
+
+/* maximal size for drawing area */
+#define MAXWIDTH 82
+#define MAXHEIGHT 48
+
+/* where to draw preview logos in previewPixmap */
+#define PREVIEWSTARTX 28 
+#define PREVIEWSTARTY 160
+
+#define PREVIEWWIDTH 138
+#define PREVIEWHEIGHT 289
+
+/* relative movement caller & operator logo from startuplogo */
+#define PREVIEWJUMPX 6 
+#define PREVIEWJUMPY 6 
+
+#define TOOL_BRUSH 0
+#define TOOL_LINE 1
+#define TOOL_RECTANGLE 2 
+#define TOOL_FILLED_RECTANGLE 3
+#define TOOL_CIRCLE 4
+#define TOOL_FILLED_CIRCLE 5
+#define TOOL_ELIPSE 6 
+#define TOOL_FILLED_ELIPSE 7 
+#define TOOL_TEXT 8 
+
+extern void GUI_ShowLogosWindow (void);
+extern void GUI_CreateLogosWindow (void);
+
+/* this is called from optionsApplyCallback when some changes
+ * caller groups names */
+extern void GUI_RefreshLogosGroupsCombo (void);
+
+#endif
diff --git a/xgnokii/xgnokii_lowlevel.c b/xgnokii/xgnokii_lowlevel.c
new file mode 100644 (file)
index 0000000..78a9ba4
--- /dev/null
@@ -0,0 +1,1000 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+#include <glib.h>
+#include "gsm-api.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+
+pthread_t monitor_th;
+PhoneMonitor phoneMonitor;
+pthread_mutex_t memoryMutex;
+pthread_cond_t  memoryCond;
+pthread_mutex_t calendarMutex;
+pthread_cond_t  calendarCond;
+pthread_mutex_t smsMutex;
+pthread_mutex_t sendSMSMutex;
+pthread_cond_t  sendSMSCond;
+pthread_mutex_t callMutex;
+pthread_mutex_t netMonMutex;
+pthread_mutex_t speedDialMutex;
+pthread_cond_t  speedDialCond;
+pthread_mutex_t callerGroupMutex;
+pthread_cond_t  callerGroupCond;
+pthread_mutex_t smsCenterMutex;  
+pthread_cond_t  smsCenterCond;
+pthread_mutex_t alarmMutex;  
+pthread_cond_t  alarmCond;
+pthread_mutex_t getBitmapMutex;
+pthread_cond_t  getBitmapCond;
+pthread_mutex_t setBitmapMutex;
+pthread_cond_t  setBitmapCond;
+pthread_mutex_t getNetworkInfoMutex;
+pthread_cond_t  getNetworkInfoCond;
+static pthread_mutex_t eventsMutex;
+static GSList *ScheduledEvents = NULL;
+
+
+inline void GUI_InsertEvent (PhoneEvent *event)
+{
+  while (phoneMonitor.working) {
+    usleep(1);
+  }
+
+# ifdef XDEBUG
+  g_print ("Inserting Event: %d\n", event->event);
+# endif
+  pthread_mutex_lock (&eventsMutex);
+  ScheduledEvents = g_slist_prepend (ScheduledEvents, event);
+  pthread_mutex_unlock (&eventsMutex);
+}
+
+
+inline static PhoneEvent *RemoveEvent (void)
+{
+  GSList *list;
+  PhoneEvent *event = NULL;
+
+  pthread_mutex_lock (&eventsMutex);
+  list = g_slist_last (ScheduledEvents);
+  if (list)
+  {
+    event = (PhoneEvent *) list->data;
+    ScheduledEvents = g_slist_remove_link (ScheduledEvents, list);
+    g_slist_free_1 (list);
+  }
+  pthread_mutex_unlock (&eventsMutex);
+
+  return (event);
+}
+
+
+static void InitModelInf (void)
+{
+  gchar buf[64];
+  GSM_Error error;
+  register gint i = 0;
+
+  while ((error = GSM->GetModel(buf)) != GE_NONE && i++ < 15)
+    sleep(1);
+
+  if (error == GE_NONE)
+  {
+    g_free (phoneMonitor.phone.model);
+    phoneMonitor.phone.version = g_strdup (buf);
+    phoneMonitor.phone.model = GetModelName (buf);
+    if (phoneMonitor.phone.model == NULL)
+      phoneMonitor.phone.model = g_strdup (_("unknown"));
+  }
+
+  i = 0;
+  while ((error = GSM->GetRevision (buf)) != GE_NONE && i++ < 5)
+    sleep(1);
+
+  if (error == GE_NONE)
+  {
+    g_free (phoneMonitor.phone.revision);
+    phoneMonitor.phone.revision = g_strdup (buf);
+  }
+
+  i = 0;
+  while ((error = GSM->GetIMEI (buf)) != GE_NONE && i++ < 5)
+    sleep(1);
+
+  if (error == GE_NONE)
+  {
+    g_free (phoneMonitor.phone.imei);
+    phoneMonitor.phone.imei = g_strdup (buf);
+  }
+
+
+#ifdef XDEBUG
+  g_print ("Version: %s\n", phoneMonitor.phone.version);
+  g_print ("Model: %s\n", phoneMonitor.phone.model);
+  g_print ("IMEI: %s\n", phoneMonitor.phone.imei);
+  g_print ("Revision: %s\n", phoneMonitor.phone.revision);
+#endif
+}
+
+static GSM_Error fbusinit(bool enable_monitoring)
+{
+  int count=0;
+  static GSM_Error error=GE_NOLINK;
+
+#ifndef WIN32
+  if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+    fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of xgnokii (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+  /* Initialise the code for the GSM interface. */     
+  if (error == GE_NOLINK)
+    error = GSM_Initialise (xgnokiiConfig.model, xgnokiiConfig.port,
+                            xgnokiiConfig.initlength,
+                           GetConnectionTypeFromString(xgnokiiConfig.connection),
+                           RLP_DisplayF96Frame,
+                           xgnokiiConfig.synchronizetime);
+
+#ifdef XDEBUG
+  g_print ("fbusinit: error %d\n", error);
+#endif
+
+  if (error != GE_NONE) {
+    g_print (_("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+    /* FIXME: should popup some message... */
+    return (error);
+  }
+
+  while (count++ < 40 && *GSM_LinkOK == false)
+    usleep(50000);
+#ifdef XDEBUG
+  g_print("After usleep. GSM_LinkOK: %d\n", *GSM_LinkOK);
+#endif
+
+  if (*GSM_LinkOK == true)
+    InitModelInf ();
+
+  return *GSM_LinkOK;
+}
+
+
+void GUI_InitPhoneMonitor (void)
+{
+  phoneMonitor.phone.model = g_strdup (_("unknown"));
+  phoneMonitor.phone.version = phoneMonitor.phone.model;
+  phoneMonitor.phone.revision = g_strdup (_("unknown"));
+  phoneMonitor.phone.imei = g_strdup (_("unknown"));
+  phoneMonitor.rfLevel = phoneMonitor.batteryLevel = -1;
+  phoneMonitor.powerSource = GPS_BATTERY;
+  phoneMonitor.working = FALSE;
+  phoneMonitor.alarm = FALSE;
+  phoneMonitor.sms.unRead = phoneMonitor.sms.number = phoneMonitor.sms.number2 = 0;
+  phoneMonitor.sms.messages = NULL;
+  phoneMonitor.call.callInProgress = CS_Idle;
+  *phoneMonitor.call.callNum = '\0';
+  phoneMonitor.netmonitor.number = 0;
+  *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 = 
+  *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0';
+  pthread_mutex_init (&memoryMutex, NULL);
+  pthread_cond_init (&memoryCond, NULL);
+  pthread_mutex_init (&calendarMutex, NULL);
+  pthread_cond_init (&calendarCond, NULL);
+  pthread_mutex_init (&smsMutex, NULL);
+  pthread_mutex_init (&sendSMSMutex, NULL);
+  pthread_cond_init (&sendSMSCond, NULL);
+  pthread_mutex_init (&callMutex, NULL);
+  pthread_mutex_init (&eventsMutex, NULL);
+  pthread_mutex_init (&callMutex, NULL);
+  pthread_mutex_init (&netMonMutex, NULL);
+  pthread_mutex_init (&speedDialMutex, NULL);
+  pthread_cond_init (&speedDialCond, NULL);
+  pthread_mutex_init (&callerGroupMutex, NULL);
+  pthread_cond_init (&callerGroupCond, NULL);
+  pthread_mutex_init (&smsCenterMutex, NULL);
+  pthread_cond_init (&smsCenterCond, NULL);
+  pthread_mutex_init (&getBitmapMutex, NULL);
+  pthread_cond_init (&getBitmapCond, NULL);
+  pthread_mutex_init (&setBitmapMutex, NULL);
+  pthread_cond_init (&setBitmapCond, NULL);
+  pthread_mutex_init (&getNetworkInfoMutex, NULL);
+  pthread_cond_init (&getNetworkInfoCond, NULL);
+}
+
+
+static inline void FreeElement (gpointer data, gpointer userData)
+{
+  g_free ((GSM_SMSMessage *) data);
+}
+
+
+static inline void FreeArray (GSList **array)
+{
+  if (*array)
+  {
+    g_slist_foreach (*array, FreeElement, NULL);
+    g_slist_free (*array);
+    *array = NULL;
+  }
+}
+
+
+void RefreshSMS (const gint number)
+{
+  GSM_Error error;
+  GSM_SMSMessage *msg;
+  register gint i;
+
+# ifdef XDEBUG
+  g_print ("RefreshSMS is running...\n");
+# endif
+
+  pthread_mutex_lock (&smsMutex);
+  FreeArray (&(phoneMonitor.sms.messages));
+  phoneMonitor.sms.number = 0;
+  phoneMonitor.sms.number2 = 0;
+  pthread_mutex_unlock (&smsMutex);
+
+  i = 1;
+  while (1)
+  {
+    msg = g_malloc (sizeof (GSM_SMSMessage));
+    msg->MemoryType = GMT_SM;
+    msg->Location = i;
+#ifdef XDEBUG
+    fprintf(stdout, _("test: %d %i %i %i\n"),msg->Location,phoneMonitor.sms.number,phoneMonitor.sms.number2,number);
+#endif
+    pthread_mutex_lock (&smsMutex);
+    if( GetModelFeature(FN_SMS)==F_SMS71 ) msg->Location = 0;  /* read next sms for 6210/7110 */
+    error = GSM->GetSMSMessage (msg);
+    pthread_mutex_unlock (&smsMutex);
+    switch (error) {
+      case GE_NONE:
+        pthread_mutex_lock (&smsMutex);
+#ifdef XDEBUG
+    fprintf(stdout, _("Refresh SMS: g_slist_append: sms message"));
+    fprintf(stdout, _(" Location: %d"),msg->Location);
+    fprintf(stdout, _(" folder: %d"),msg->folder);
+    if ( msg-> SMSData) fprintf(stdout, _(" SMSData true\n"));
+       else  fprintf(stdout, _(" SMSData false\n"));
+#endif
+       /* RTH:  unread sms from folder 0 to INBOX */
+        phoneMonitor.sms.messages = g_slist_append (phoneMonitor.sms.messages, msg);
+        phoneMonitor.sms.number++;
+        phoneMonitor.sms.number2++;
+        pthread_mutex_unlock (&smsMutex);
+        if (phoneMonitor.sms.number2 == number) return;
+       break;
+      case GE_SMSTOOLONG: /* Picture Image in 7110 comp phone */
+        g_free (msg);
+        phoneMonitor.sms.number2++;
+        if (phoneMonitor.sms.number2 == number) return;
+       break;
+      default:
+        g_free (msg);
+       break;
+    }
+    i++;
+  }
+}
+
+
+static gint A_GetMemoryStatus (gpointer data)
+{
+  GSM_Error error;
+  D_MemoryStatus *ms = (D_MemoryStatus *) data;
+
+  error = ms->status = GE_UNKNOWN;
+
+  if (ms)
+  {
+    pthread_mutex_lock (&memoryMutex);
+    error = ms->status = GSM->GetMemoryStatus (&(ms->memoryStatus));
+    pthread_cond_signal (&memoryCond);
+    pthread_mutex_unlock (&memoryMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_GetMemoryLocation (gpointer data)
+{
+  GSM_Error error;
+  D_MemoryLocation *ml = (D_MemoryLocation *) data;
+
+  error = ml->status = GE_UNKNOWN;
+
+  if (ml)
+  {
+    pthread_mutex_lock (&memoryMutex);
+    error = ml->status = GSM->GetMemoryLocation (ml->entry);
+    pthread_cond_signal (&memoryCond);
+    pthread_mutex_unlock (&memoryMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_GetMemoryLocationAll (gpointer data)
+{
+  GSM_PhonebookEntry entry;
+  GSM_Error error;
+  D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data;
+  register gint i;
+  gint readed=0;
+
+  error = mla->status = GE_NONE;
+  entry.MemoryType = mla->type;
+
+  pthread_mutex_lock (&memoryMutex);
+  for (i = mla->min; i <= mla->max; i++)
+  {
+    entry.Location = i;
+    if (readed<mla->used) {
+      error = GSM->GetMemoryLocation (&entry);
+      if (error != GE_NONE)
+      {
+        gint err_count = 0;
+
+        while (error != GE_NONE &&
+              error != GE_INVALIDPHBOOKLOCATION && error != GE_UNKNOWN) //n7110.c
+        {
+          g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"),
+                   __FILE__, __LINE__, i, entry.MemoryType, error);
+          if (err_count++ > 3)
+          {
+            mla->ReadFailed (i);
+            mla->status = error;
+            pthread_cond_signal (&memoryCond);
+            pthread_mutex_unlock (&memoryMutex);
+            return (error);
+          }
+
+          error = GSM->GetMemoryLocation (&entry);
+          sleep (2);
+        }
+      }
+      
+      if (strcmp(entry.Number, "\0") || strcmp(entry.Name, "\0"))
+        readed++;
+
+    } else {
+      entry.Number[0]='\0';
+      entry.Name[0]='\0';
+    }
+
+    error = mla->InsertEntry (&entry);
+    if (error != GE_NONE)
+      break;
+  }
+  mla->status = error;
+  pthread_cond_signal (&memoryCond);
+  pthread_mutex_unlock (&memoryMutex);
+  return (error);
+}
+
+
+static gint A_WriteMemoryLocation (gpointer data)
+{
+  GSM_Error error;
+  D_MemoryLocation *ml = (D_MemoryLocation *) data;
+
+  error = ml->status = GE_UNKNOWN;
+
+  if (ml)
+  {
+    pthread_mutex_lock (&memoryMutex);
+    error = ml->status = GSM->WritePhonebookLocation (ml->entry);
+    pthread_cond_signal (&memoryCond);
+    pthread_mutex_unlock (&memoryMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_WriteMemoryLocationAll (gpointer data)
+{
+/*  GSM_PhonebookEntry entry; */
+  GSM_Error error;
+  D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data;
+/*  register gint i;
+*/
+  error = mla->status = GE_NONE;
+/*  entry.MemoryType = mla->type;
+
+  pthread_mutex_lock (&memoryMutex);
+  for (i = mla->min; i <= mla->max; i++)
+  {
+    entry.Location = i;
+    error = GSM->GetMemoryLocation (&entry);
+    if (error != GE_NONE)
+    {
+      gint err_count = 0;
+
+      while (error != GE_NONE)
+      {
+        g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"),
+                 __FILE__, __LINE__, i, entry.MemoryType, error);
+        if (err_count++ > 3)
+        {
+          mla->ReadFailed (i);
+          mla->status = error;
+          pthread_cond_signal (&memoryCond);
+          pthread_mutex_unlock (&memoryMutex);
+          return (error);
+        }
+
+        error = GSM->GetMemoryLocation (&entry);
+        sleep (2);
+      }
+    }
+    error = mla->InsertEntry (&entry);
+    if (error != GE_NONE)
+      break;
+  }
+  mla->status = error;
+  pthread_cond_signal (&memoryCond);
+  pthread_mutex_unlock (&memoryMutex); */
+  return (error);
+}
+
+
+static gint A_GetCalendarNote (gpointer data)
+{
+  GSM_Error error;
+  D_CalendarNote *cn = (D_CalendarNote *) data;
+
+  error = cn->status = GE_UNKNOWN;
+
+  if (cn)
+  {
+    pthread_mutex_lock (&calendarMutex);
+    error = cn->status = GSM->GetCalendarNote (cn->entry);
+    pthread_cond_signal (&calendarCond);
+    pthread_mutex_unlock (&calendarMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_GetCalendarNoteAll (gpointer data)
+{
+  GSM_CalendarNote entry;
+  D_CalendarNoteAll *cna = (D_CalendarNoteAll *) data;
+  GSM_Error e;
+  register gint i = 1;
+
+  pthread_mutex_lock (&calendarMutex);
+  while (1)
+  {
+    entry.Location = i++;
+
+    if ((e = GSM->GetCalendarNote (&entry)) != GE_NONE)
+      break;
+
+    if (cna->InsertEntry (&entry) != GE_NONE)
+      break;
+  }
+
+  pthread_mutex_unlock (&calendarMutex);
+  g_free (cna);
+  if (e == GE_INVALIDCALNOTELOCATION)
+    return (GE_NONE);
+  else
+    return (e);
+}
+
+static gint A_WriteCalendarNote (gpointer data)
+{
+  GSM_Error error;
+  D_CalendarNote *cn = (D_CalendarNote *) data;
+
+  error = cn->status = GE_UNKNOWN;
+
+  if (cn)
+  {
+    pthread_mutex_lock (&calendarMutex);
+    error = cn->status = GSM->WriteCalendarNote (cn->entry);
+    pthread_cond_signal (&calendarCond);
+    pthread_mutex_unlock (&calendarMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_DeleteCalendarNote (gpointer data)
+{
+  GSM_CalendarNote *note = (GSM_CalendarNote *) data;
+  GSM_Error error = GE_UNKNOWN;
+
+  if (note)
+  {
+    error = GSM->DeleteCalendarNote (note);
+    g_free (note);
+  }
+
+  return (error);
+}
+
+static gint A_GetCallerGroup (gpointer data)
+{
+  GSM_Bitmap bitmap;
+  GSM_Error error;
+  D_CallerGroup *cg = (D_CallerGroup *) data;
+
+  error = cg->status = GE_UNKNOWN;
+
+  if (cg)
+  {
+    bitmap.type = GSM_CallerLogo;
+    bitmap.number = cg->number;
+
+    pthread_mutex_lock (&callerGroupMutex);
+    error = cg->status = GSM->GetBitmap (&bitmap);
+    strncpy (cg->text, bitmap.text, 256);
+    cg->text[255] = '\0';
+    pthread_cond_signal (&callerGroupCond);
+    pthread_mutex_unlock (&callerGroupMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SendCallerGroup (gpointer data)
+{
+  GSM_Bitmap bitmap;
+  D_CallerGroup *cg = (D_CallerGroup *) data;
+  GSM_Error error;
+
+  if (!cg)
+    return (GE_UNKNOWN);
+
+  bitmap.type = GSM_CallerLogo;
+  bitmap.number = cg->number;
+  if ((error = GSM->GetBitmap (&bitmap)) != GE_NONE)
+  {
+    g_free (cg);
+    return (error);
+  }
+  strncpy (bitmap.text, cg->text, 256);
+  bitmap.text[255] = '\0';
+  g_free (cg);
+  return (GSM->SetBitmap (&bitmap));
+}
+
+
+static gint A_GetSMSCenter (gpointer data)
+{
+  D_SMSCenter *c = (D_SMSCenter *) data;
+  GSM_Error error;
+
+  error = c->status = GE_UNKNOWN;
+  if (c)
+  {
+    pthread_mutex_lock (&smsCenterMutex);
+    error = c->status = GSM->GetSMSCenter (c->center);
+    pthread_cond_signal (&smsCenterCond);
+    pthread_mutex_unlock (&smsCenterMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SetSMSCenter (gpointer data)
+{
+  D_SMSCenter *c = (D_SMSCenter *) data;
+  GSM_Error error;
+
+  error = c->status = GE_UNKNOWN;
+  if (c)
+  {
+    //pthread_mutex_lock (&smsCenterMutex);
+    error = c->status = GSM->SetSMSCenter (c->center);
+    g_free (c);
+    //pthread_cond_signal (&smsCenterCond);
+    //pthread_mutex_unlock (&smsCenterMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SendSMSMessage (gpointer data)
+{
+  D_SMSMessage *d = (D_SMSMessage *) data;
+  GSM_Error error;
+
+  error = d->status = GE_UNKNOWN;
+  if (d)
+  {
+    pthread_mutex_lock (&sendSMSMutex);
+    error = d->status = GSM->SendSMSMessage (d->sms);
+    pthread_cond_signal (&sendSMSCond);
+    pthread_mutex_unlock (&sendSMSMutex);
+  }
+
+  if (d->status == GE_SMSSENDOK)
+    return (GE_NONE);
+  else
+    return (error);
+}
+
+
+static gint A_DeleteSMSMessage (gpointer data)
+{
+  GSM_SMSMessage *sms = (GSM_SMSMessage *) data;
+  GSM_Error error = GE_UNKNOWN;
+
+  if (sms)
+  {
+    error = GSM->DeleteSMSMessage(sms);
+    g_free (sms);
+  }
+
+  return (error);
+}
+
+
+static gint A_GetSpeedDial (gpointer data)
+{
+  D_SpeedDial *d = (D_SpeedDial *) data;
+  GSM_Error error;
+
+  error = d->status = GE_UNKNOWN;
+
+  if (d)
+  {
+    pthread_mutex_lock (&speedDialMutex);
+    error = d->status = GSM->GetSpeedDial (&(d->entry));
+    pthread_cond_signal (&speedDialCond);
+    pthread_mutex_unlock (&speedDialMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SendSpeedDial (gpointer data)
+{
+  D_SpeedDial *d = (D_SpeedDial *) data;
+  GSM_Error error;
+
+  error = d->status = GE_UNKNOWN;
+
+  if (d)
+  {
+    //pthread_mutex_lock (&speedDialMutex);
+    error = d->status = GSM->SetSpeedDial (&(d->entry));
+    g_free (d);
+    //pthread_cond_signal (&speedDialCond);
+    //pthread_mutex_unlock (&speedDialMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SendDTMF (gpointer data)
+{
+  gchar *buf = (gchar *) data;
+  GSM_Error error = GE_UNKNOWN;
+
+  if (buf) 
+  {
+    error = GSM->SendDTMF (buf);
+    g_free (buf);
+  }
+
+  return (error);
+}
+
+
+static gint A_NetMonOnOff (gpointer data)
+{
+  gchar screen[50];
+  gint mode = GPOINTER_TO_INT (data);
+  GSM_Error error = GE_UNKNOWN;
+
+  if (mode)
+    error = GSM->NetMonitor (0xf3, screen);
+  else
+    error = GSM->NetMonitor (0xf1, screen);
+
+  return (error);
+}
+
+
+static gint A_NetMonitor (gpointer data)
+{
+  gint number = GPOINTER_TO_INT (data);
+
+  if (data == 0)
+    phoneMonitor.netmonitor.number = 0;
+  else
+    phoneMonitor.netmonitor.number = number;
+    
+  return (0);
+}
+
+
+static gint A_DialVoice (gpointer data)
+{
+  gchar *number = (gchar *) data;
+  GSM_Error error = GE_UNKNOWN;
+
+  if (number)
+  {
+    error = GSM->DialVoice (number);
+    g_free (number);
+  }
+
+  return (error);
+}
+
+
+static gint A_GetAlarm (gpointer data)
+{
+  D_Alarm *a = (D_Alarm *) data;
+  GSM_Error error;
+
+  error = a->status = GE_UNKNOWN;
+
+  if (a)
+  {
+    pthread_mutex_lock (&alarmMutex);
+    error = a->status = GSM->GetAlarm (0, &(a->time));
+    pthread_cond_signal (&alarmCond);
+    pthread_mutex_unlock (&alarmMutex);
+  }
+
+  return (error);
+}
+
+
+static gint A_SetAlarm (gpointer data)
+{
+  D_Alarm *a = (D_Alarm *) data;
+  GSM_Error error;
+
+  error = a->status = GE_UNKNOWN;
+
+  if (a)
+  {
+    error = a->status = GSM->SetAlarm (0, &(a->time));
+    g_free (a);
+  }
+
+  return (error);
+}
+
+
+static gint A_SendKeyStroke (gpointer data)
+{
+  gchar *buf = (gchar *) data;
+
+  if (buf) 
+  {
+    GSM->PressKey(buf[1], buf[0]);
+    g_free (buf);
+  }
+
+  return (0);
+}
+
+static gint A_GetBitmap(gpointer data) {
+  GSM_Error error;
+  D_Bitmap *d = (D_Bitmap *)data;
+
+  pthread_mutex_lock(&getBitmapMutex);
+  error = d->status = GSM->GetBitmap(d->bitmap);
+  pthread_cond_signal(&getBitmapCond);
+  pthread_mutex_unlock(&getBitmapMutex);
+  return error;
+}
+
+static gint A_SetBitmap(gpointer data) {
+  GSM_Error error;
+  D_Bitmap *d = (D_Bitmap *)data;
+  GSM_Bitmap bitmap;
+  
+  pthread_mutex_lock(&setBitmapMutex);
+  if (d->bitmap->type == GSM_CallerLogo) {
+    bitmap.type = d->bitmap->type;
+    bitmap.number = d->bitmap->number;
+    error = d->status = GSM->GetBitmap(&bitmap);
+    if (error == GE_NONE) {
+      strncpy(d->bitmap->text,bitmap.text,sizeof(bitmap.text));
+      d->bitmap->ringtone = bitmap.ringtone;
+      error = d->status = GSM->SetBitmap(d->bitmap);
+    }
+  } else {
+    error = d->status = GSM->SetBitmap(d->bitmap);
+  }
+  pthread_cond_signal(&setBitmapCond);
+  pthread_mutex_unlock(&setBitmapMutex);
+  return error;
+}
+
+static gint A_GetNetworkInfo(gpointer data) {
+  GSM_Error error;
+  D_NetworkInfo *d = (D_NetworkInfo *)data;
+
+  pthread_mutex_lock(&getNetworkInfoMutex);
+  error = d->status = GSM->GetNetworkInfo(d->info);
+  pthread_cond_signal(&getNetworkInfoCond);
+  pthread_mutex_unlock(&getNetworkInfoMutex);
+  return error;
+}
+
+static gint A_Exit (gpointer data)
+{
+  pthread_exit (0);
+  return (0); /* just to be proper */
+}
+
+
+gint (*DoAction[])(gpointer) = {
+  A_GetMemoryStatus,
+  A_GetMemoryLocation,
+  A_GetMemoryLocationAll,
+  A_WriteMemoryLocation,
+  A_WriteMemoryLocationAll,
+  A_GetCalendarNote,
+  A_GetCalendarNoteAll,
+  A_WriteCalendarNote,
+  A_DeleteCalendarNote,
+  A_GetCallerGroup,
+  A_SendCallerGroup,
+  A_GetSMSCenter,
+  A_SetSMSCenter,
+  A_SendSMSMessage,
+  A_DeleteSMSMessage,
+  A_GetSpeedDial,
+  A_SendSpeedDial,
+  A_SendDTMF,
+  A_NetMonOnOff,
+  A_NetMonitor,
+  A_DialVoice,
+  A_GetAlarm,
+  A_SetAlarm,
+  A_SendKeyStroke,
+  A_GetBitmap,
+  A_SetBitmap,
+  A_GetNetworkInfo,
+  A_Exit
+};
+
+void *GUI_Connect (void *a)
+{
+  /* Define required unit types for RF and Battery level meters. */
+  GSM_RFUnits rf_units = GRF_Arbitrary;
+  GSM_BatteryUnits batt_units = GBU_Arbitrary;
+
+  GSM_DateTime Alarm;
+  gchar number[INCALL_NUMBER_LENGTH];
+  PhoneEvent *event=NULL;
+  GSM_Error error;
+  gint status;
+
+
+# ifdef XDEBUG
+  g_print ("Initializing connection...\n");
+# endif
+
+  phoneMonitor.working = _("Connecting...");
+  while (!fbusinit (true))
+    sleep (1);
+
+# ifdef XDEBUG
+  g_print ("Phone connected. Starting monitoring...\n");
+# endif
+
+  while (1)
+  {
+    if (event != NULL) {
+      phoneMonitor.working = _("Working...");
+    } else {
+      phoneMonitor.working = NULL;
+
+      if (GSM->GetRFLevel (&rf_units, &phoneMonitor.rfLevel) != GE_NONE)
+        phoneMonitor.rfLevel = -1;
+
+      if (rf_units == GRF_Arbitrary)
+        phoneMonitor.rfLevel *= 25;
+
+      if (GSM->GetPowerSource (&phoneMonitor.powerSource) == GE_NONE 
+          && phoneMonitor.powerSource == GPS_ACDC)
+        phoneMonitor.batteryLevel = ((gint) phoneMonitor.batteryLevel + 25) % 125;
+      else
+      {
+        if (GSM->GetBatteryLevel (&batt_units, &phoneMonitor.batteryLevel) != GE_NONE)
+          phoneMonitor.batteryLevel = -1;
+        if (batt_units == GBU_Arbitrary)
+          phoneMonitor.batteryLevel *= 25;
+      }
+
+      if (GSM->GetAlarm (0, &Alarm) == GE_NONE && Alarm.IsSet != 0)
+        phoneMonitor.alarm = TRUE;
+      else
+        phoneMonitor.alarm = FALSE;
+
+      if (GSM->GetIncomingCallNr (number) == GE_NONE)
+      {
+#   ifdef XDEBUG
+        g_print ("Call in progress: %s\n", phoneMonitor.call.callNum);
+#   endif
+
+        if (GSM->GetDisplayStatus (&status)==GE_NONE) {
+          if (status & (1<<DS_Call_In_Progress))
+          {
+            pthread_mutex_lock (&callMutex);
+            phoneMonitor.call.callInProgress = CS_InProgress;
+            pthread_mutex_unlock (&callMutex);
+          }
+          else
+          {
+            pthread_mutex_lock (&callMutex);
+            phoneMonitor.call.callInProgress = CS_Waiting;
+            strncpy (phoneMonitor.call.callNum, number, INCALL_NUMBER_LENGTH);
+            pthread_mutex_unlock (&callMutex);
+         }
+        } else {
+          pthread_mutex_lock (&callMutex);
+          phoneMonitor.call.callInProgress = CS_Idle;
+          *phoneMonitor.call.callNum = '\0';
+          pthread_mutex_unlock (&callMutex);
+       }
+      }
+      else
+      {
+        pthread_mutex_lock (&callMutex);
+        phoneMonitor.call.callInProgress = CS_Idle;
+        *phoneMonitor.call.callNum = '\0';
+        pthread_mutex_unlock (&callMutex);
+      }
+
+      pthread_mutex_lock (&netMonMutex);
+      if (phoneMonitor.netmonitor.number)
+      {
+        GSM->NetMonitor (phoneMonitor.netmonitor.number,
+                         phoneMonitor.netmonitor.screen);
+        GSM->NetMonitor (3, phoneMonitor.netmonitor.screen3);
+        GSM->NetMonitor (4, phoneMonitor.netmonitor.screen4);
+        GSM->NetMonitor (5, phoneMonitor.netmonitor.screen5);
+      }
+      else
+      {
+        *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 = 
+        *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0';
+      }
+      pthread_mutex_unlock (&netMonMutex);
+    }
+    while ((event = RemoveEvent ()) != NULL)
+    {
+#     ifdef XDEBUG      
+      g_print ("Processing Event: %d\n", event->event);
+#     endif
+      phoneMonitor.working = _("Working...");
+      if (event->event <= Event_Exit)
+        if ((error = DoAction[event->event] (event->data)) != GE_NONE)
+          g_print (_("Event %d failed with return code %d!\n"), event->event, error);
+      g_free (event);
+    }
+  }
+}
diff --git a/xgnokii/xgnokii_lowlevel.h b/xgnokii/xgnokii_lowlevel.h
new file mode 100644 (file)
index 0000000..44201fd
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_LOWLEVEL_H
+#define XGNOKII_LOWLEVEL_H
+
+#include <pthread.h>
+#include <glib.h>
+#include "gsm-api.h"
+
+#define INCALL_NUMBER_LENGTH   20
+#define NETMON_SCREEN_LENGTH   60
+
+typedef enum {
+  CS_Idle,
+  CS_Waiting,
+  CS_InProgress
+} CallState;
+
+typedef enum {
+  Event_GetMemoryStatus,
+  Event_GetMemoryLocation,
+  Event_GetMemoryLocationAll,
+  Event_WriteMemoryLocation,
+  Event_WriteMemoryLocationAll,
+  Event_GetCalendarNote,
+  Event_GetCalendarNoteAll,
+  Event_WriteCalendarNote,
+  Event_DeleteCalendarNote,
+  Event_GetCallerGroup,
+  Event_SendCallerGroup,
+  Event_GetSMSCenter,
+  Event_SetSMSCenter,
+  Event_SendSMSMessage,
+  Event_DeleteSMSMessage,
+  Event_GetSpeedDial,
+  Event_SendSpeedDial,
+  Event_SendDTMF,
+  Event_NetMonitorOnOff,
+  Event_NetMonitor,
+  Event_DialVoice,
+  Event_GetAlarm,
+  Event_SetAlarm,
+  Event_SendKeyStroke,
+  Event_GetBitmap,
+  Event_SetBitmap,
+  Event_GetNetworkInfo,
+  Event_Exit
+} PhoneAction;
+
+typedef struct {
+  PhoneAction event;
+  gpointer    data;
+} PhoneEvent;
+
+typedef struct {
+  GSM_SpeedDial entry;
+  GSM_Error status;
+} D_SpeedDial;
+
+typedef struct {
+  GSM_SMSMessage *sms;
+  GSM_Error status;
+} D_SMSMessage;
+
+typedef struct {
+  GSM_MessageCenter *center;
+  GSM_Error status;
+} D_SMSCenter;
+
+typedef struct {
+  guchar number;
+  gchar  text[256];
+  gint   status;
+} D_CallerGroup;
+
+typedef struct {
+  GSM_DateTime time;
+  gint status;
+} D_Alarm;
+
+typedef struct {
+  GSM_MemoryStatus memoryStatus;
+  gint status;
+} D_MemoryStatus;
+
+typedef struct {
+  GSM_PhonebookEntry *entry;
+  gint status;
+} D_MemoryLocation;
+
+typedef struct {
+  gint min;
+  gint max;
+  gint used;
+  GSM_MemoryType type;
+  gint status;
+  gint (*InsertEntry)(GSM_PhonebookEntry *);
+  gint (*ReadFailed)(gint);
+} D_MemoryLocationAll;
+
+typedef struct {
+  GSM_CalendarNote *entry;
+  gint status;
+} D_CalendarNote;
+
+typedef struct {
+  gint status;
+  gint (*InsertEntry)(GSM_CalendarNote *);
+  gint (*ReadFailed)(gint);
+} D_CalendarNoteAll;
+
+typedef struct {
+  GSM_Error status;
+  GSM_Bitmap *bitmap;
+} D_Bitmap;
+
+typedef struct {
+  GSM_Error status;
+  GSM_NetworkInfo *info;
+} D_NetworkInfo;
+
+typedef struct {
+  gfloat rfLevel;
+  gfloat batteryLevel;
+  GSM_PowerSource powerSource;
+  gchar *working;
+  bool alarm;
+  struct {
+    gchar *model;
+    gchar *imei;
+    gchar *revision;
+    gchar *version;
+  } phone;
+  struct {
+    gint    unRead;
+    gint    number;
+    gint    number2;
+    GSList *messages;
+  } sms;
+  struct {
+    CallState callInProgress;
+    gchar     callNum[INCALL_NUMBER_LENGTH];
+  } call;
+  struct {
+    gint  number;
+    gchar screen[NETMON_SCREEN_LENGTH];
+    gchar screen3[NETMON_SCREEN_LENGTH];
+    gchar screen4[NETMON_SCREEN_LENGTH];
+    gchar screen5[NETMON_SCREEN_LENGTH];
+  } netmonitor;
+} PhoneMonitor;
+
+extern pthread_t monitor_th;
+extern PhoneMonitor phoneMonitor;
+extern pthread_mutex_t memoryMutex;
+extern pthread_cond_t  memoryCond;
+extern pthread_mutex_t calendarMutex;
+extern pthread_cond_t  calendarCond;
+extern pthread_mutex_t smsMutex;
+extern pthread_mutex_t sendSMSMutex;
+extern pthread_cond_t  sendSMSCond;
+extern pthread_mutex_t callMutex;
+extern pthread_mutex_t netMonMutex;
+extern pthread_mutex_t speedDialMutex;
+extern pthread_cond_t  speedDialCond;
+extern pthread_mutex_t callerGroupMutex;
+extern pthread_cond_t  callerGroupCond;
+extern pthread_mutex_t smsCenterMutex;
+extern pthread_cond_t  smsCenterCond;
+extern pthread_mutex_t alarmMutex;
+extern pthread_cond_t  alarmCond;
+extern pthread_mutex_t getBitmapMutex;
+extern pthread_cond_t  getBitmapCond;
+extern pthread_mutex_t setBitmapMutex;
+extern pthread_cond_t  setBitmapCond;
+extern pthread_mutex_t getNetworkInfoMutex;
+extern pthread_cond_t  getNetworkInfoCond;
+extern void GUI_InitPhoneMonitor (void);
+extern void *GUI_Connect (void *a);
+extern void GUI_InsertEvent (PhoneEvent *event);
+
+extern void RefreshSMS (const gint number);
+
+#endif
diff --git a/xgnokii/xgnokii_netmon.c b/xgnokii/xgnokii_netmon.c
new file mode 100644 (file)
index 0000000..30a7be0
--- /dev/null
@@ -0,0 +1,579 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef WIN32
+# include <unistd.h>
+#endif
+#include <pthread.h>
+#include <stdlib.h>  /* for atoi */
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_netmon.h"
+#include "xpm/Display.xpm"
+
+static GtkWidget *GUI_NetmonWindow;
+static DisplayData displayData = {NULL, 0};
+static GtkWidget *tableLabels[4][7];
+static GtkWidget *tableProgress[7];
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/netmon/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static inline void CloseNetmon (GtkWidget *w, gpointer data)
+{
+  PhoneEvent *e;
+
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_NetMonitor;
+  e->data = (gpointer) 0;
+  GUI_InsertEvent (e);
+  gtk_widget_hide (GUI_NetmonWindow);
+}
+
+
+static inline void NetmonOnOff (GtkWidget *w, gpointer data)
+{
+  PhoneEvent *e;
+
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_NetMonitorOnOff;
+  e->data = data;
+  GUI_InsertEvent (e);
+}
+
+
+static inline void RefreshDisplay ()
+{
+  static gchar number[3];
+
+  if (!GTK_WIDGET_VISIBLE(GUI_NetmonWindow))
+    return;
+
+  g_snprintf (number, 3, "%.2d", displayData.curDisp);
+  if (displayData.number)
+    gtk_label_set_text (GTK_LABEL (displayData.number), number);
+
+  pthread_mutex_lock (&netMonMutex);
+  if (phoneMonitor.netmonitor.screen && displayData.label)
+    gtk_label_set_text (GTK_LABEL (displayData.label),
+                        g_strchomp (phoneMonitor.netmonitor.screen));
+  pthread_mutex_unlock (&netMonMutex);
+}
+
+
+static void SetDisplay (GtkWidget *widget, gpointer data)
+{
+  PhoneEvent *e;
+
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_NetMonitor;
+  e->data = data;
+  GUI_InsertEvent (e);
+  displayData.curDisp = GPOINTER_TO_INT (data);
+
+  RefreshDisplay ();
+}
+
+static void ChangedSpinner (GtkWidget *widget, GtkSpinButton *spin)
+{
+  PhoneEvent *e;
+
+  displayData.curDisp = gtk_spin_button_get_value_as_int (spin);
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_NetMonitor;
+  e->data = (gpointer) displayData.curDisp;
+  GUI_InsertEvent (e);
+
+  RefreshDisplay ();
+}
+
+
+static void ParseScreen (gchar *screen, gint i)
+{
+  gchar buf[5];
+  gchar *ptr = screen;
+
+  if (ptr == NULL || *ptr == '\0')
+    return;
+
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+  ptr += 3;
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+  ptr += 3;
+  if (*ptr != '-')
+  {
+    buf[0] = '-';
+    strncpy (buf + 1, ptr, 3);
+    buf[4] = '\0';
+  }
+  else
+  {
+    strncpy (buf, ptr, 3);
+    buf[3] = '\0';
+  }
+  gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+  ptr += 3;
+  gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+  ptr += 4;
+
+  if (i == 6)
+    return;
+
+  i++;
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+  ptr += 3;
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+  ptr += 3;
+  if (*ptr != '-')
+  {
+    buf[0] = '-';
+    strncpy (buf + 1, ptr, 3);
+    buf[4] = '\0';
+  }
+  else
+  {
+    strncpy (buf, ptr, 3);
+    buf[3] = '\0';
+  }
+  gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+  ptr += 3;
+  gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+  ptr += 4;
+
+  i++;
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+  ptr += 3;
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+  ptr += 3;
+  if (*ptr != '-')
+  {
+    buf[0] = '-';
+    strncpy (buf + 1, ptr, 3);
+    buf[4] = '\0';
+  }
+  else
+  {
+    strncpy (buf, ptr, 3);
+    buf[3] = '\0';
+  }
+  gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+  ptr += 3;
+  gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+  strncpy (buf, ptr, 3);
+  buf[3] = '\0';
+  gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+}
+
+
+void GUI_RefreshNetmon ()
+{
+  if (!GTK_WIDGET_VISIBLE (GUI_NetmonWindow))
+    return;
+
+  pthread_mutex_lock (&netMonMutex);
+  ParseScreen (phoneMonitor.netmonitor.screen3, 0);
+  ParseScreen (phoneMonitor.netmonitor.screen4, 3);
+  ParseScreen (phoneMonitor.netmonitor.screen5, 6);
+  pthread_mutex_unlock (&netMonMutex);
+
+  RefreshDisplay ();
+}
+
+
+void AddToBorder (GtkWidget* table, gchar *text, gint i, gint j, gint k, gint l)
+{
+  GtkWidget *label = gtk_label_new (text);
+  GtkWidget *frame = gtk_frame_new (NULL);
+
+  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_table_attach_defaults (GTK_TABLE (table), frame, i, j, k, l);
+}
+
+
+inline void GUI_ShowNetmon ()
+{
+  PhoneEvent *e;
+
+  e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  e->event = Event_NetMonitor;
+  e->data = (gpointer) displayData.curDisp;;
+  GUI_InsertEvent (e);
+  gtk_widget_show (GUI_NetmonWindow);
+}
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL, NULL,                NULL, 0, "<Branch>"},
+  { NULL, "<control>W",        CloseNetmon, 0, NULL},
+  { NULL, NULL,                NULL, 0, "<Branch>"},
+  { NULL, NULL,                NetmonOnOff, 1, NULL},
+  { NULL, NULL,                NetmonOnOff, 0, NULL},
+  { NULL, NULL,                NULL, 0, "<LastBranch>"},
+  { NULL, NULL,                Help1, 0, NULL},
+  { NULL, NULL,                GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Close"));
+  menu_items[2].path = g_strdup (_("/_Tools"));
+  menu_items[3].path = g_strdup (_("/Tools/Net monitor o_n"));
+  menu_items[4].path = g_strdup (_("/Tools/Net monitor o_ff"));
+  menu_items[5].path = g_strdup (_("/_Help"));
+  menu_items[6].path = g_strdup (_("/Help/_Help"));
+  menu_items[7].path = g_strdup (_("/Help/_About"));
+}
+
+
+#define DISPLAY_X      12
+#define DISPLAY_Y      15
+  
+static inline gint ExposeDisplay (GtkWidget *widget, GdkEventExpose *event)
+{
+  GdkRectangle rec;
+  GtkRequisition r;
+
+  gtk_widget_size_request (displayData.number, &r);
+  rec.x = DISPLAY_X;
+  rec.y = DISPLAY_Y;
+  rec.width = r.width;
+  rec.height = r.height;
+  gtk_widget_draw (displayData.number, &rec);
+
+  gtk_widget_size_request (displayData.label, &r);
+  rec.x += 3;
+  rec.y += 12;
+  rec.width = r.width;
+  rec.height = r.height;
+  gtk_widget_draw (displayData.label, &rec);
+
+  return FALSE;
+}
+
+
+void GUI_CreateNetmonWindow ()
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *hbox, *vbox;
+  GtkWidget *toolbar;
+  GtkWidget *table;
+  GtkWidget *display;
+  GtkWidget *label;
+  GtkWidget *frame;
+  GtkWidget *button;
+  GtkWidget *pixmap;
+  GtkAdjustment *adj;
+  gint i,j;
+
+
+  InitMainMenu ();
+  GUI_NetmonWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_NetmonWindow), _("Net Monitor"));
+  //gtk_widget_set_usize (GTK_WIDGET (GUI_NetmonWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (GUI_NetmonWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_NetmonWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_NetmonWindow));
+  
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_NetmonWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  frame = gtk_frame_new (NULL);
+  gtk_container_border_width (GTK_CONTAINER (frame), 10);
+  gtk_widget_show (frame);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_border_width (GTK_CONTAINER (hbox), 3);
+  gtk_container_add (GTK_CONTAINER (frame), hbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  display = gtk_fixed_new ();
+  gtk_box_pack_start (GTK_BOX (hbox), display, FALSE, FALSE, 10);
+  gtk_widget_show (display);
+
+  pixmap = NewPixmap (Display_xpm, GUI_NetmonWindow->window,
+                      &GUI_NetmonWindow->style->bg[GTK_STATE_NORMAL]);
+
+  gtk_signal_connect_after (GTK_OBJECT (pixmap), "expose_event",
+                      (GtkSignalFunc) ExposeDisplay, NULL);
+
+  gtk_fixed_put (GTK_FIXED (display), pixmap, 0 , 0);
+  gtk_widget_show (pixmap);
+
+  displayData.number = gtk_label_new ("");
+  gtk_fixed_put (GTK_FIXED (display), displayData.number, DISPLAY_X, DISPLAY_Y);
+  gtk_widget_show (displayData.number);
+  displayData.label = gtk_label_new ("");
+  gtk_fixed_put (GTK_FIXED (display), displayData.label, DISPLAY_X + 3, DISPLAY_Y + 12);
+  gtk_widget_show (displayData.label);
+  displayData.curDisp = 0x01;
+
+  vbox = gtk_vbox_new (TRUE, 0);
+
+  /* 1. line */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "1", _("Active cell"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 1);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "2", _("Active cell"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 2);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "3", _("NCELL list I"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 3);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "4", _("NCELL list II"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 4);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "5", _("NCELL list III"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 5);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "6", _("Prefered/Denied networks"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 6);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "7", _("System information bits"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 7);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "10", _("TMSI, Paging, PLU"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 10);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "11", _("Cells info"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 11);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "12", _("DTX, Cipher, Hopping"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 12);
+
+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  /* 2. line */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "13", _("Uplink DTX"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 13);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "17", _("BTS TEST"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 17);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "19", _("CELL BARR-Flag"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 19);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "20", _("Accumulator, Charge status"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 20);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "21", _("?Constant voltage charging display"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 21);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "22", _("?Battery full detection"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 22);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "23", _("Accumulator"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 23);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "35", _("SW-Resets"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 35);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "36", _("Reset-Counter"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 36);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "39", _("Cause codes for last connection abortion"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 39);
+
+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  /* 3. line */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "40", _("Reset handover counters"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 40);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "41", _("Handover Counter"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 41);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "42", _("Handover Counter (Dual)"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 42);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "43", _("L2-Timeouts"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 43);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "51", _("SIM"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 51);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "54", _("?Block display 1"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 54);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "56", NULL,
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 56);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "57", _("Memory status before reset"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 57);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "60", _("Reset Counters"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 60);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "61", _("Counter for PLMN Search and Cell reselection (Singleband)"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 61);
+
+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  /* 4. line */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "62", _("Neighbourhood measurement"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 62);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "63", _("Calls"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 63);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "70", _("Temporary counters of DSP"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 70);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "83", _("Control of task information displays"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 83);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "84", _("Information about task numbers 0-7"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 84);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "85", _("Information about task numbers 8-15"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 85);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "86", _("Information about task numbers 16-23"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 86);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "87", _("Information about OS_SYSTEM_STACK"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 87);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "88", _("Information about current MCU and DSP software versions"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 88);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "89", _("Hardware version"),
+                           NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 89);
+
+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 10);
+  gtk_widget_show (vbox);
+
+  table = gtk_table_new (6, 8, FALSE);
+
+  frame = gtk_frame_new (NULL);
+  gtk_container_add (GTK_CONTAINER (frame), table);
+  gtk_container_border_width (GTK_CONTAINER (frame), 10);
+  gtk_container_border_width (GTK_CONTAINER (table), 3);
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+  gtk_widget_show (frame);
+
+  AddToBorder (table, "", 0, 1, 0, 1);
+  AddToBorder (table, _("Chan"), 1, 2, 0, 1);
+  AddToBorder (table, _("RxLv"), 2, 3, 0, 1);  
+  AddToBorder (table, _("C1"), 3, 4, 0, 1);  
+  AddToBorder (table, _("C2"), 4, 5, 0, 1);  
+  AddToBorder (table, _("ACT"), 0, 1, 1, 2);  
+  AddToBorder (table, _("NC2"), 0, 1, 2, 3);  
+  AddToBorder (table, _("NC3"), 0, 1, 3, 4);  
+  AddToBorder (table, _("NC4"), 0, 1, 4, 5);  
+  AddToBorder (table, _("NC5"), 0, 1, 5, 6);  
+  AddToBorder (table, _("NC6"), 0, 1, 6, 7);  
+  AddToBorder (table, _("NC7"), 0, 1, 7, 8);  
+
+  for (i = 0; i < 4; i++)
+    for (j = 0; j < 7; j++)
+    {
+      tableLabels[i][j] = gtk_label_new ("");
+      frame = gtk_frame_new (NULL);
+      gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+      gtk_container_add (GTK_CONTAINER (frame), tableLabels[i][j]);
+      gtk_table_attach_defaults (GTK_TABLE (table), frame, i + 1, i + 2, j + 1, j + 2);
+    }
+
+  for (i = 0; i < 7; i++)
+  {
+    adj = (GtkAdjustment *) gtk_adjustment_new (-114, -114, -40, 0, 0, 0);
+    tableProgress[i] = gtk_progress_bar_new_with_adjustment (adj);
+    gtk_table_attach_defaults (GTK_TABLE (table),  tableProgress[i], 5, 6, i + 1, i + 2);
+  }
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_table_attach_defaults (GTK_TABLE (table), hbox, 5, 6, 0, 1);
+
+  adj = (GtkAdjustment *) gtk_adjustment_new (1, 1, 89, 1, 10, 0);
+  button = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (button), TRUE);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (button), TRUE);
+  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (button), GTK_SHADOW_OUT);
+  gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+                      GTK_SIGNAL_FUNC (ChangedSpinner), (gpointer) button);
+  gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+  label = gtk_label_new (_("Page:"));
+  gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 5);
+
+  gtk_table_set_col_spacing (GTK_TABLE (table), 4, 10);
+  gtk_widget_show_all (table);
+  GUIEventAdd (GUI_EVENT_NETMON_CHANGED, GUI_RefreshNetmon);
+}
diff --git a/xgnokii/xgnokii_netmon.h b/xgnokii/xgnokii_netmon.h
new file mode 100644 (file)
index 0000000..c226f13
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_NETMON_H
+#define XGNOKII_NETMON_H
+
+#include <gtk/gtk.h>
+
+typedef struct {
+  GtkWidget *number;
+  GtkWidget *label;
+  gint       curDisp;
+} DisplayData;
+
+extern void GUI_CreateNetmonWindow ();
+
+extern void GUI_ShowNetmon ();
+
+extern void GUI_RefreshNetmon ();
+
+#endif
diff --git a/xgnokii/xgnokii_sms.c b/xgnokii/xgnokii_sms.c
new file mode 100644 (file)
index 0000000..d5da1f4
--- /dev/null
@@ -0,0 +1,1662 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+#include <unistd.h>
+#include <locale.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include "misc.h"
+#include "gsm-api.h"
+#include "gsm-datetime.h"
+#include "gsm-sms.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_sms.h"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/Forward.xpm"
+#include "xpm/Reply.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/SendSMS.xpm"
+#include "xpm/Check.xpm"
+#include "xpm/Names.xpm"
+#include "xpm/BCard.xpm"
+#include "xpm/quest.xpm"
+
+typedef struct {
+  gint  count;         // Messages count
+  gint  number;                // Number of tail in Long SMS;
+  gint *msgPtr;                // Array of MessageNumber;
+  gint  validity;
+  gint  class;
+  gchar sender[GSM_MAX_SENDER_LENGTH + 1];
+} MessagePointers;
+
+typedef struct {
+  gchar *number;
+  gchar *name;
+  gint used:1;
+} AddressPar;
+
+typedef struct {
+  GtkWidget *smsClist;
+  GtkWidget *smsText;
+  GSList    *messages;
+  GdkColor   colour;
+  gint       row_i;
+  gint       currentBox;
+} SMSWidget;
+
+typedef struct {
+  GtkWidget *SMSSendWindow;
+  GtkWidget *smsSendText;
+  GtkWidget *addr;
+  GtkWidget *status;
+  GtkWidget *report;
+  GtkWidget *longSMS;
+  GtkWidget *class;
+  GtkWidget *smscOptionMenu;
+  GtkTooltips *addrTip;
+  gint       center;
+  GSList    *addressLine;
+} SendSMSWidget;
+
+int prev_num_of_folders=0;
+
+static GtkWidget *GUI_SMSWindow;
+static SMSWidget SMS = {NULL, NULL, NULL};
+static SendSMSWidget sendSMS = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL};
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static QuestMark questMark;
+static GtkWidget *treeFolderItem[MAX_SMS_FOLDERS], *subTree;
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/sms/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static inline void Help2 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/help/%s/sms_send.html", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static inline void CloseSMS (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_SMSWindow);
+}
+
+
+static inline void CloseSMSSend (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (sendSMS.SMSSendWindow);
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+  gchar *text1 = NULL;
+  gchar *text2 = NULL;
+
+  GtkCListRow *row1 = (GtkCListRow *) ptr1;
+  GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+  switch (row1->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+  switch (row2->cell[clist->sort_column].type)
+  {
+    case GTK_CELL_TEXT:
+      text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+      break;
+    case GTK_CELL_PIXTEXT:
+      text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+      break;
+    default:
+      break;
+  }
+
+  if (!text2)
+    return (text1 != NULL);
+
+  if (!text1)
+    return -1;
+
+  if (clist->sort_column == 1 && !SMS.currentBox)
+  {
+    struct tm bdTime;
+    time_t time1, time2;
+
+    bdTime.tm_sec  = atoi (text1 + 15);
+    bdTime.tm_min  = atoi (text1 + 12);
+    bdTime.tm_hour = atoi (text1 + 9);
+    bdTime.tm_mday = atoi (text1);
+    bdTime.tm_mon  = atoi (text1 + 3) - 1;
+    bdTime.tm_year = atoi (text1 + 6);
+    if (bdTime.tm_year < 70)
+      bdTime.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+    if (text1[17] != '\0')
+      bdTime.tm_gmtoff = atoi (text1 + 18) * 3600;
+#endif
+    bdTime.tm_isdst = -1;
+
+    time1 = mktime (&bdTime);
+
+    bdTime.tm_sec  = atoi (text2 + 15);
+    bdTime.tm_min  = atoi (text2 + 12);
+    bdTime.tm_hour = atoi (text2 + 9);
+    bdTime.tm_mday = atoi (text2);
+    bdTime.tm_mon  = atoi (text2 + 3) - 1;
+    bdTime.tm_year = atoi (text2 + 6);
+    if (bdTime.tm_year < 70)
+      bdTime.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+    if (text2[17] != '\0')
+      bdTime.tm_gmtoff = atoi (text2 + 18) * 3600;
+#endif
+    bdTime.tm_isdst = -1;
+
+    time2 = mktime (&bdTime);
+
+    if (time1 < time2)
+      return (1);
+    else if (time1 > time2)
+      return (-1);
+    else 
+      return 0;
+  }
+
+  return (g_strcasecmp (text1, text2));
+}
+
+
+static inline void DestroyMsgPtrs (gpointer data)
+{
+  g_free (((MessagePointers *) data)->msgPtr);
+  g_free ((MessagePointers *) data);
+}
+
+
+static void InsertFolderElement (gpointer d, gpointer userData)
+{
+  GSM_SMSMessage *data = (GSM_SMSMessage *) d;
+  MessagePointers *msgPtrs;
+  GSM_DateTime *dt;
+
+  if (data->folder == SMS.currentBox)
+  {
+    gchar *row[4];
+
+    if (data->Type == GST_DR)
+    {
+      row[0] = g_strdup (_("report"));
+      dt = &(data->SMSCTime);
+    }
+    else
+    {
+        dt = &(data->Time);
+       switch (data->Status)
+       {
+            case  GSS_SENTREAD:
+               if (data->folder==0) //GST_INBOX
+                       row[0] = g_strdup (_("read"));
+               else
+                       row[0] = g_strdup (_("sent"));
+                break;
+            case  GSS_NOTSENTREAD:
+               if (data->folder==0) //GST_INBOX
+                       row[0] = g_strdup (_("unread"));
+               else
+                       row[0] = g_strdup (_("not sent"));
+                break;
+            case  GSS_UNKNOWN:
+               row[0] = g_strdup (_("not known :-("));
+                break;
+            case  GSS_TEMPLATE:
+               row[0] = g_strdup (_("template"));
+                break;
+            default:
+               row[0] = g_strdup (_("unknown"));
+                break;
+       }
+    }
+
+    if (data->SMSData) {
+      if (dt->Timezone)
+          row[1] = g_strdup_printf ("%s %02d/%02d/%02d %02d:%02d:%02d %c%02d00",
+                                 DayOfWeek(dt->Year, dt->Month, dt->Day),
+                                  dt->Day, dt->Month, dt->Year,
+                                  dt->Hour, dt->Minute, dt->Second,
+                                  dt->Timezone > 0 ? '+' : '-', abs (dt->Timezone));
+      else
+          row[1] = g_strdup_printf ("%s %02d/%02d/%02d %02d:%02d:%02d",
+                                 DayOfWeek(dt->Year, dt->Month, dt->Day),
+                                  dt->Day, dt->Month, dt->Year,
+                                  dt->Hour, dt->Minute, dt->Second);
+    } else {
+      row[1] = g_strdup_printf ("unknown");
+    }
+      
+    row[2] = GUI_GetName (data->Sender);
+    if (row[2] == NULL || row[2][0]==0) row[2] = data->Sender;
+
+    row[3] = data->MessageText;
+
+    msgPtrs = (MessagePointers *) g_malloc (sizeof (MessagePointers));
+    msgPtrs->validity = data->Validity;
+    msgPtrs->class = data->Class;
+    strcpy (msgPtrs->sender, data->Sender);
+
+//    if (data->UDHType == GSM_ConcatenatedMessages)
+//    {
+//      msgPtrs->count = data->UDH[5];
+//      msgPtrs->number = data->UDH[4];
+//      msgPtrs->msgPtr = (gint *) g_malloc (msgPtrs->count * sizeof (gint));
+//      *(msgPtrs->msgPtr + msgPtrs->number - 1) = data->MessageNumber;
+//    } else {
+      msgPtrs->count = msgPtrs->number = 1;
+      msgPtrs->msgPtr = (gint *) g_malloc (sizeof (gint));
+      *(msgPtrs->msgPtr) = data->MessageNumber;
+
+      gtk_clist_append (GTK_CLIST (SMS.smsClist), row);
+      gtk_clist_set_row_data_full (GTK_CLIST (SMS.smsClist), SMS.row_i++,
+                                   msgPtrs, DestroyMsgPtrs);
+//    }
+
+    g_free (row[0]);
+    g_free (row[1]);
+  }
+}
+
+static inline void RefreshFolder (void)
+{
+  gtk_clist_freeze (GTK_CLIST (SMS.smsClist));
+
+  gtk_clist_clear (GTK_CLIST (SMS.smsClist));
+
+  SMS.row_i = 0;
+  g_slist_foreach (phoneMonitor.sms.messages, InsertFolderElement, (gpointer) NULL);
+
+  gtk_clist_sort (GTK_CLIST (SMS.smsClist));
+  gtk_clist_thaw (GTK_CLIST (SMS.smsClist));
+}
+
+
+inline void GUI_RefreshMessageWindow (void)
+{
+  if (!GTK_WIDGET_VISIBLE (GUI_SMSWindow))
+    return;
+
+  RefreshFolder();
+}
+
+
+static void SelectTreeItem (GtkWidget *item, gpointer data)
+{
+  SMS.currentBox = GPOINTER_TO_INT (data);
+  GUI_RefreshMessageWindow ();
+}
+
+
+static void ClickEntry (GtkWidget      *clist,
+                        gint            row,
+                        gint            column,
+                        GdkEventButton *event,
+                        gpointer        data )
+{
+  gchar *buf;
+
+  /* FIXME - We must mark SMS as readed */
+  gtk_text_freeze (GTK_TEXT (SMS.smsText));
+
+  gtk_text_set_point (GTK_TEXT (SMS.smsText), 0);
+  gtk_text_forward_delete (GTK_TEXT (SMS.smsText), gtk_text_get_length (GTK_TEXT (SMS.smsText)));
+
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL,
+                   _("From: "), -1);
+  gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+                   buf, -1);
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL,
+                   _("Date: "), -1);
+  gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+                   buf, -1);
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+                   "\n\n", -1);
+
+  gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
+  gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+                   buf, -1);
+
+  gtk_text_thaw (GTK_TEXT (SMS.smsText));
+}
+
+
+inline void GUI_ShowSMS (void)
+{
+  int i,j;
+  
+  GUI_InitSMSFoldersInf();
+  
+  for (i=1;i<folders.number+1;i++) {
+    if (i>prev_num_of_folders) {
+      treeFolderItem[i-1] = gtk_tree_item_new_with_label (_(folders.Folder[i-1].Name));
+      gtk_tree_append (GTK_TREE (subTree), treeFolderItem[i-1]);
+      gtk_signal_connect (GTK_OBJECT (treeFolderItem[i-1]), "select",
+                          GTK_SIGNAL_FUNC (SelectTreeItem), GINT_TO_POINTER (i-1));
+      gtk_widget_show (treeFolderItem[i-1]);
+    } else {
+      gtk_widget_set_name(treeFolderItem[i-1],_(folders.Folder[i-1].Name));
+    }
+  }
+  
+  for (j=i+1;j<prev_num_of_folders;j++)
+    gtk_widget_hide (treeFolderItem[j-1]);
+      
+  prev_num_of_folders=folders.number;
+  
+  gtk_widget_show (GUI_SMSWindow);
+  GUI_RefreshMessageWindow ();
+}
+
+
+static void OkDeleteSMSDialog (GtkWidget *widget, gpointer data)
+{
+  GSM_SMSMessage *message;
+  PhoneEvent *e;
+  GList *sel;
+//  GSM_Error error;
+  gint row;
+  gint count;
+
+
+  sel = GTK_CLIST (SMS.smsClist)->selection;
+
+  gtk_clist_freeze (GTK_CLIST (SMS.smsClist));
+
+  while (sel != NULL)
+  {
+    row = GPOINTER_TO_INT (sel->data);
+    sel = sel->next;
+    for (count = 0; count < ((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->count; count++)
+    {
+      message = (GSM_SMSMessage *) g_malloc (sizeof (GSM_SMSMessage));
+      message->Location = *(((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->msgPtr + count);
+      if (message->Location == -1)
+      {
+        g_free (message);
+        continue;
+      }
+      message->MemoryType = GMT_SM;
+
+      e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+      e->event = Event_DeleteSMSMessage;
+      e->data = message;
+      GUI_InsertEvent (e);
+
+/*      error = GSM->DeleteSMSMessage(&message);
+
+      if (error != GE_NONE)
+      {
+        if (error == GE_NOTIMPLEMENTED)
+        {
+          gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Function not implemented!"));  
+          gtk_widget_show(errorDialog.dialog);
+        }
+        else
+        {
+          gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Delete SMS failed!"));  
+          gtk_widget_show(errorDialog.dialog);
+        }
+      }
+*/
+    }
+  }
+
+  gtk_widget_hide (GTK_WIDGET (data));
+
+  gtk_clist_thaw (GTK_CLIST (SMS.smsClist));
+}
+
+static void ReadFromPhone (void)
+{
+  GSM_SMSStatus SMSStatus;
+
+  SMSStatus.UnRead = 0;
+  SMSStatus.Number = 0;
+  
+  if (GSM->GetSMSStatus (&SMSStatus) == GE_NONE) {
+    if (phoneMonitor.sms.unRead  != SMSStatus.UnRead ||
+        phoneMonitor.sms.number2 != SMSStatus.Number)
+    {
+      phoneMonitor.working = _("Refreshing SMSes...");
+#ifdef XDEBUG
+   printf("Refreshing %d SMSes...\n",SMSStatus.Number);
+#endif
+      RefreshSMS (SMSStatus.Number);
+      phoneMonitor.working = NULL;
+    }
+
+    phoneMonitor.sms.unRead = SMSStatus.UnRead;
+  }
+}
+
+static void DeleteSMS (void)
+{
+  static GtkWidget *dialog = NULL;
+  GtkWidget *button, *hbox, *label, *pixmap;
+
+  if (dialog == NULL)
+  {
+    dialog = gtk_dialog_new();
+    gtk_window_set_title (GTK_WINDOW (dialog), _("Delete SMS"));
+    gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+    gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+    gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+    button = gtk_button_new_with_label (_("Ok"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (OkDeleteSMSDialog), (gpointer) dialog);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    button = gtk_button_new_with_label (_("Cancel"));
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+                        button, TRUE, TRUE, 10);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+    gtk_widget_show (button);
+
+    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+    gtk_widget_show (hbox);
+
+    pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+    gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+    gtk_widget_show (pixmap);
+
+    label = gtk_label_new (_("Do you want to delete selected SMS?"));
+    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
+    gtk_widget_show (label);
+  }
+
+  gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+
+static void SaveToMailbox (void)
+{
+  gchar buf[255];
+  FILE *f;
+  gint fd;
+  GList *sel;
+  struct tm t, *loctime;
+  struct flock lock;
+  time_t caltime;
+  gint row;
+  gchar *number, *text, *loc;
+
+
+  if ((f = fopen (xgnokiiConfig.mailbox, "a")) == NULL)
+  {
+    snprintf (buf, 255, _("Cannot open mailbox %s for appending!"), xgnokiiConfig.mailbox);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  fd = fileno (f);
+  lock.l_type = F_WRLCK;
+  lock.l_whence = SEEK_SET;
+  lock.l_start = 0;
+  lock.l_len = 0;
+  
+  if (fcntl (fd, F_GETLK, &lock) != -1 && lock.l_type != F_UNLCK)
+  {
+    snprintf (buf, 255, _("Cannot save to mailbox %s.\n\
+%s is locked for process %d!"), xgnokiiConfig.mailbox, xgnokiiConfig.mailbox,
+              lock.l_pid);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    fclose (f);
+    return;
+  }
+  
+  lock.l_type = F_WRLCK;
+  lock.l_whence = SEEK_SET;
+  lock.l_start = 0;
+  lock.l_len = 0;
+  if (fcntl (fd, F_SETLK, &lock) == -1)
+  {
+    snprintf (buf, 255, _("Cannot lock mailbox %s!"), xgnokiiConfig.mailbox);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    fclose (f);
+    return;
+  }
+  
+  sel = GTK_CLIST (SMS.smsClist)->selection;
+
+  while (sel != NULL)
+  {
+    row = GPOINTER_TO_INT (sel->data);
+    sel = sel->next;
+    gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 1, &text);
+    t.tm_sec  = atoi (text + 15);
+    t.tm_min  = atoi (text + 12);
+    t.tm_hour = atoi (text + 9);
+    t.tm_mday = atoi (text);
+    t.tm_mon  = atoi (text + 3) - 1;
+    t.tm_year = atoi (text + 6);
+    if (t.tm_year < 70)
+      t.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+    if (text[17] != '\0')
+      t.tm_gmtoff = atoi (text + 18) * 3600;
+#endif
+
+    caltime = mktime (&t);
+    loctime = localtime (&caltime);
+
+    gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 2, &number);
+    gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 3, &text);
+
+    fprintf (f, "From %s@xgnokii %s", number, asctime (loctime));
+    loc = setlocale (LC_ALL, "C");
+    strftime (buf, 255, "Date: %a, %d %b %Y %H:%M:%S %z (%Z)\n", loctime);
+    setlocale (LC_ALL, loc);
+    fprintf (f, "%s", buf);
+    fprintf (f, "From: %s@xgnokii\n", number);
+    strncpy (buf, text, 20);
+    buf[20] = '\0'; 
+    fprintf (f, "Subject: %s\n\n", buf);
+    fprintf (f, "%s\n\n", text);
+  }
+
+  lock.l_type = F_UNLCK;
+  lock.l_whence = SEEK_SET;
+  lock.l_start = 0;
+  lock.l_len = 0;
+  if (fcntl (fd, F_SETLK, &lock) == -1)
+  {
+    snprintf (buf, 255, _("Cannot unlock mailbox %s!"), xgnokiiConfig.mailbox);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+  }
+
+  fclose (f);
+}
+
+
+static inline void RefreshSMSStatus (void)
+{
+  gchar *buf;
+  guint l, m;
+
+  l = gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText));
+
+  if (l <= GSM_MAX_SMS_LENGTH)
+    buf = g_strdup_printf ("%d/1", l);
+  else
+  {
+    m = l % 153;
+    buf = g_strdup_printf ("%d/%d", l > 0 && !m ? 153 : m, l == 0 ? 1 : ((l - 1) / 153) + 1);
+  }
+
+  gtk_frame_set_label (GTK_FRAME (sendSMS.status), buf);
+  g_free (buf);
+}
+
+
+static inline gint RefreshSMSLength (GtkWidget   *widget,
+                                     GdkEventKey *event,
+                                     gpointer     callback_data)
+{
+  RefreshSMSStatus ();
+  if (GTK_EDITABLE (widget)->editable == FALSE)
+    return (FALSE);
+  if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear ||
+      event->keyval == GDK_Insert || event->keyval == GDK_Delete ||
+      event->keyval == GDK_Home || event->keyval == GDK_End ||
+      event->keyval == GDK_Left || event->keyval == GDK_Right ||
+      event->keyval == GDK_Up || event->keyval == GDK_Down ||
+      event->keyval == GDK_Return ||
+      (event->keyval >= 0x20 && event->keyval <= 0xFF))
+    return (TRUE);
+  
+  return (FALSE);
+}
+
+
+static inline void SetActiveCenter (GtkWidget *item, gpointer data)
+{
+  sendSMS.center = GPOINTER_TO_INT (data);
+}
+
+
+void GUI_RefreshSMSCenterMenu (void)
+{
+  static GtkWidget *smscMenu = NULL;
+  GtkWidget *item;
+  register gint i;
+
+  if (!sendSMS.smscOptionMenu)
+    return;
+
+  if (smscMenu)
+  {
+    gtk_option_menu_remove_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu));
+    if (GTK_IS_WIDGET (smscMenu))
+      gtk_widget_destroy (GTK_WIDGET (smscMenu));
+    smscMenu = NULL;
+  }
+
+  smscMenu = gtk_menu_new();
+
+  for (i = 0; i < xgnokiiConfig.smsSets; i++)
+  {
+    if (*(xgnokiiConfig.smsSetting[i].Name) == '\0')
+    {
+      gchar *buf = g_strdup_printf (_("Set %d"), i + 1);
+      item = gtk_menu_item_new_with_label (buf);
+      g_free (buf);
+    }
+    else
+      item = gtk_menu_item_new_with_label (xgnokiiConfig.smsSetting[i].Name);
+
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        GTK_SIGNAL_FUNC (SetActiveCenter),
+                        (gpointer) i);
+
+    gtk_widget_show (item);
+    gtk_menu_append (GTK_MENU (smscMenu), item);
+  }
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu), smscMenu);
+}
+
+
+static inline void InitAddressLine (gpointer d, gpointer userData)
+{
+  ((AddressPar *) d)->used = 0;
+}
+
+
+#ifdef XDEBUG
+static inline void PrintAddressLine (gpointer d, gpointer userData)
+{
+  g_print ("Name: %s\nNumber: %s\nUsed: %d\n",
+           ((AddressPar *) d)->name,
+           ((AddressPar *) d)->number,
+           ((AddressPar *) d)->used);
+}
+#endif
+
+
+static inline gint CompareAddressLineName (gconstpointer a, gconstpointer b)
+{
+  return strcmp (((AddressPar *) a)->name, ((AddressPar *) b)->name);
+}
+
+
+static inline gint CompareAddressLineUsed (gconstpointer a, gconstpointer b)
+{
+  return !(((AddressPar *) a)->used == ((AddressPar *) b)->used);
+}
+
+
+static gint CheckAddressMain (void)
+{
+  AddressPar aps;
+  GSList *r;
+  register gint i = 0;
+  gint ret = 0;
+  gchar *buf;
+  GString *tooltipBuf;
+  gchar **strings = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0);
+
+  tooltipBuf = g_string_new ("");
+  gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+  g_slist_foreach (sendSMS.addressLine, InitAddressLine, (gpointer) NULL);
+
+  while (strings[i])
+  {
+    g_strstrip (strings[i]);
+    if (*strings[i] == '\0')
+    { 
+      i++;
+      continue;
+    }
+    if ((buf = GUI_GetName (strings[i])) != NULL)
+    {
+      AddressPar *ap = g_malloc (sizeof (AddressPar));
+      ap->number = g_strdup (strings[i]);
+      ap->name = g_strdup (buf);
+      ap->used = 1;
+      sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap);
+      gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), buf);
+      g_string_append (tooltipBuf, ap->number);
+    }
+    else 
+    if ((buf = GUI_GetNumber (strings[i])) != NULL)
+    {
+      aps.name = strings[i];
+      r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName);
+      if (r)
+      {
+        ((AddressPar *) r->data)->used = 1;
+        g_string_append (tooltipBuf, ((AddressPar *) r->data)->number);
+      }
+      else
+        g_string_append (tooltipBuf, buf);
+      gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]);
+    }
+    else
+    {
+      gint len = strlen (strings[i]);
+      gint j;
+
+      for (j = 0; j < len; j++)
+        if (strings[i][j] != '*' && strings[i][j] != '#' && strings[i][j] != '+'
+            && (strings[i][j] < '0' || strings[i][j] > '9'))
+          ret = 1;
+      gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]);
+      g_string_append (tooltipBuf, strings[i]);
+    }
+    if (strings[i + 1] != NULL)
+    {
+      gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", ");
+      g_string_append (tooltipBuf, ", ");
+    }
+    i++;
+  }
+
+  aps.used = 0;
+  while ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineUsed)))
+    sendSMS.addressLine = g_slist_remove (sendSMS.addressLine, r->data);
+  
+  if (tooltipBuf->len > 0)
+  {
+    gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, tooltipBuf->str, NULL);
+    gtk_tooltips_enable (sendSMS.addrTip);
+  }
+  else
+    gtk_tooltips_disable (sendSMS.addrTip);
+
+#ifdef XDEBUG  
+  g_slist_foreach (sendSMS.addressLine, PrintAddressLine, (gpointer) NULL);
+#endif
+
+  g_strfreev (strings);
+  g_string_free (tooltipBuf, TRUE);
+
+  return ret;
+}
+
+
+static inline void CheckAddress (void)
+{
+  if (CheckAddressMain ())
+  {
+    gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!"));
+    gtk_widget_show(errorDialog.dialog);
+  }
+}
+
+
+static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event,
+                                       SelectContactData *data)
+{
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (widget));
+}
+
+
+static void CancelSelectContactDialog (GtkWidget *widget,
+                                       SelectContactData *data)
+{
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+
+static void OkSelectContactDialog (GtkWidget *widget,
+                                   SelectContactData *data)
+{
+  GList *sel;
+  PhonebookEntry *pbEntry;
+
+  if ((sel = GTK_CLIST (data->clist)->selection) != NULL)
+    while (sel != NULL)
+    {
+      AddressPar *ap = g_malloc (sizeof (AddressPar));
+      
+      pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist),
+                                        GPOINTER_TO_INT (sel->data));
+      ap->number = g_strdup (pbEntry->entry.Number);
+      ap->name = g_strdup (pbEntry->entry.Name);
+      ap->used = 1;
+      sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap);
+      if (strlen (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr))) > 0)
+        gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", ");
+      gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ap->name);
+
+      sel = sel->next;
+    }
+
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (data->dialog));
+
+  CheckAddressMain ();
+}
+
+
+static void ShowSelectContactsDialog (void)
+{
+  SelectContactData *r;
+
+  if (!GUI_ContactsIsIntialized ())
+    GUI_ReadContacts ();
+
+  if ((r = GUI_SelectContactDialog ()) == NULL)
+    return;
+
+  gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r);
+
+  gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked",
+                      GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r);
+  gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked",
+                      GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r);
+}
+
+
+static gint SendSMSCore (GSM_SMSMessage *sms)
+{
+  GSM_Error error;
+  PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+  D_SMSMessage *m = (D_SMSMessage *) g_malloc (sizeof (D_SMSMessage));
+  
+  m->sms = sms;
+  e->event = Event_SendSMSMessage;
+  e->data = m;
+  GUI_InsertEvent (e);
+  pthread_mutex_lock (&sendSMSMutex);
+  pthread_cond_wait (&sendSMSCond, &sendSMSMutex);
+  pthread_mutex_unlock (&sendSMSMutex);
+
+#ifdef XDEBUG
+  g_print ("Address: %s\nText: %s\nDelivery report: %d\nSMS Center: %d\n",
+           sms->Destination,
+           sms->MessageText,
+           GTK_TOGGLE_BUTTON (sendSMS.report)->active,
+           sendSMS.center);
+#endif
+
+  error = m->status;
+  g_free (m);
+
+  if (error != GE_SMSSENDOK)
+  {
+    gchar *buf = g_strdup_printf (_("SMS send to %s failed\n(error=%d)"),
+                                  sms->Destination, error);
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    g_free (buf);
+  }
+  else
+    g_print ("Message sent to: %s\n", sms->Destination);
+
+  return (error);
+}
+
+
+static void SendSMS (void)
+{
+  GSM_UDH UDHType;
+  GSM_MultiSMSMessage Multisms;
+  int chars_read;
+  AddressPar aps;
+  GSList *r;
+  gchar *text, *number;
+  gchar **addresses;
+  gchar *buf;
+  gint l;
+  gint longSMS;
+  register gint i = 0, j;
+
+  if (CheckAddressMain ())
+  {
+    gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!"));
+    gtk_widget_show(errorDialog.dialog);
+    return;
+  }
+
+  text = gtk_editable_get_chars (GTK_EDITABLE (sendSMS.smsSendText), 0, -1);
+  l = strlen (text);
+
+  addresses = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0);
+
+  longSMS = GTK_TOGGLE_BUTTON (sendSMS.longSMS)->active;
+
+  while (addresses[i])
+  {
+    g_strstrip (addresses[i]);
+    if ((number = GUI_GetNumber (addresses[i])))
+    {
+      aps.name = addresses[i];
+      if ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName)))
+        number = ((AddressPar *) r->data)->number;
+    }
+    else
+      number = addresses[i];
+
+    chars_read=strlen(text);
+    UDHType = GSM_NoUDH;
+    if (l > GSM_MAX_SMS_LENGTH && longSMS) UDHType = GSM_ConcatenatedMessages;
+    if (UDHType == GSM_NoUDH && chars_read>160) chars_read=160;
+
+    GSM_MakeMultiPartSMS2(&Multisms,text,chars_read,UDHType,GSM_Coding_Default);
+    
+    for (j=0;j<Multisms.number;j++) {
+      Multisms.SMS[j].MessageCenter = xgnokiiConfig.smsSetting[sendSMS.center];
+      Multisms.SMS[j].MessageCenter.No = 0;
+
+      if (GTK_TOGGLE_BUTTON (sendSMS.report)->active) Multisms.SMS[j].Type = GST_DR;
+
+      if (GTK_TOGGLE_BUTTON (sendSMS.class)->active)\r Multisms.SMS[j].Class = 0;\r
+
+      Multisms.SMS[j].Validity = Multisms.SMS[j].MessageCenter.Validity;
+
+      strncpy (Multisms.SMS[j].Destination, number, GSM_MAX_DESTINATION_LENGTH + 1);
+      Multisms.SMS[j].Destination[GSM_MAX_DESTINATION_LENGTH] = '\0';      
+
+      buf = g_strdup_printf (_("Sending SMS to %s (%d/%d) ...\n"),
+                                 Multisms.SMS[j].Destination, j + 1, Multisms.number);
+      gtk_label_set_text (GTK_LABEL (infoDialog.text), buf);
+      gtk_widget_show_now (infoDialog.dialog);
+      g_free (buf);
+      GUI_Refresh ();
+
+      if (SendSMSCore (&Multisms.SMS[j]) != GE_SMSSENDOK)
+      {
+        gtk_widget_hide (infoDialog.dialog);
+        GUI_Refresh ();
+        break;
+      }
+
+      gtk_widget_hide (infoDialog.dialog);
+      GUI_Refresh ();
+
+      sleep (1);
+    }
+    
+    i++;
+  }
+
+  g_strfreev (addresses);
+
+  g_free (text);
+}
+
+
+static GtkItemFactoryEntry send_menu_items[] = {
+  { NULL,              NULL,           NULL,           0, "<Branch>"},
+  { NULL,              "<control>X",   SendSMS,        0, NULL},
+  { NULL,              "<control>S",   NULL,           0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Separator>"},
+  { NULL,              "<control>N",   CheckAddress,   0, NULL},
+  { NULL,              "<control>C",   ShowSelectContactsDialog, 0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Separator>"},
+  { NULL,              "<control>W",   CloseSMSSend,   0, NULL},
+  { NULL,              NULL,           NULL,           0, "<LastBranch>"},
+  { NULL,              NULL,           Help2,          0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout,  0, NULL},
+};
+
+
+static void InitSendMenu (void)
+{
+  send_menu_items[0].path = g_strdup (_("/_File"));
+  send_menu_items[1].path = g_strdup (_("/File/Sen_d"));
+  send_menu_items[2].path = g_strdup (_("/File/_Save"));
+  send_menu_items[3].path = g_strdup (_("/File/Sep1"));
+  send_menu_items[4].path = g_strdup (_("/File/Check _Names"));
+  send_menu_items[5].path = g_strdup (_("/File/C_ontacts"));
+  send_menu_items[6].path = g_strdup (_("/File/Sep2"));
+  send_menu_items[7].path = g_strdup (_("/File/_Close"));
+  send_menu_items[8].path = g_strdup (_("/_Help"));
+  send_menu_items[9].path = g_strdup (_("/Help/_Help"));
+  send_menu_items[10].path = g_strdup (_("/Help/_About"));
+}
+
+
+static void CreateSMSSendWindow (void)
+{
+  int nmenu_items = sizeof (send_menu_items) / sizeof (send_menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *hbox, *vbox;
+  GtkWidget *button;
+  GtkWidget *pixmap;
+  GtkWidget *label;
+  GtkWidget *toolbar;
+  GtkWidget *scrolledWindow;
+  GtkTooltips *tooltips;
+
+  if (sendSMS.SMSSendWindow)
+    return;
+
+  InitSendMenu ();
+  sendSMS.SMSSendWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  //gtk_widget_set_usize (GTK_WIDGET (sendSMS.SMSSendWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (sendSMS.SMSSendWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (sendSMS.SMSSendWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, send_menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (sendSMS.SMSSendWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (sendSMS.SMSSendWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  /* Create the toolbar */
+
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send message"), NULL,
+                           NewPixmap(SendSMS_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) SendSMS, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save message to outbox"), NULL,
+                           NewPixmap(Send_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NULL, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Check names"), NULL,
+                           NewPixmap(Check_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) CheckAddress, NULL);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  /* Address line */
+  hbox = gtk_hbox_new (FALSE, 3);
+  gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 3);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("To:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 3);
+  gtk_widget_show (label);
+
+  sendSMS.addr = gtk_entry_new ();
+  gtk_box_pack_start (GTK_BOX (hbox), sendSMS.addr, TRUE, TRUE, 1);
+
+  sendSMS.addrTip = gtk_tooltips_new ();
+  gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, "", NULL);
+  gtk_tooltips_disable (sendSMS.addrTip);
+
+  gtk_widget_show (sendSMS.addr);
+
+  button = gtk_button_new ();
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (ShowSelectContactsDialog), (gpointer) NULL);
+
+  pixmap = NewPixmap(Names_xpm, sendSMS.SMSSendWindow->window,
+                     &sendSMS.SMSSendWindow->style->bg[GTK_STATE_NORMAL]);
+  gtk_container_add (GTK_CONTAINER (button), pixmap);
+  gtk_widget_show (pixmap);
+  gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 5);
+
+  tooltips = gtk_tooltips_new ();
+  gtk_tooltips_set_tip (tooltips, button, _("Select contacts"), NULL);
+
+  gtk_widget_show (button);
+
+  hbox = gtk_hbox_new (FALSE, 3);
+  gtk_box_pack_end (GTK_BOX (main_vbox), hbox, TRUE, TRUE, 3);
+  gtk_widget_show (hbox);
+
+  /* Edit SMS widget */
+  vbox = gtk_vbox_new (FALSE, 3);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 3);
+  gtk_widget_show (vbox);
+
+  sendSMS.status = gtk_frame_new ("0/1");
+  gtk_frame_set_label_align (GTK_FRAME (sendSMS.status), 1.0, 0.0);
+  gtk_frame_set_shadow_type (GTK_FRAME (sendSMS.status), GTK_SHADOW_OUT);
+
+  gtk_box_pack_end (GTK_BOX (vbox), sendSMS.status, TRUE, TRUE, 5);
+  gtk_widget_show (sendSMS.status);
+
+  sendSMS.smsSendText = gtk_text_new (NULL, NULL);
+  gtk_widget_set_usize (GTK_WIDGET (sendSMS.smsSendText), 0, 120);
+  gtk_text_set_editable (GTK_TEXT (sendSMS.smsSendText), TRUE);
+  gtk_text_set_word_wrap (GTK_TEXT (sendSMS.smsSendText), TRUE);
+  gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText),
+                      "key_press_event",
+                      GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL);
+  gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_set_border_width (GTK_CONTAINER (scrolledWindow), 5);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_NEVER,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_container_add (GTK_CONTAINER (scrolledWindow), sendSMS.smsSendText);
+  gtk_container_add (GTK_CONTAINER (sendSMS.status), scrolledWindow);
+
+  gtk_widget_show (sendSMS.smsSendText);
+  gtk_widget_show (scrolledWindow);
+
+  /* Options widget */
+  vbox = gtk_vbox_new (FALSE, 3);
+  gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 5);
+  gtk_widget_show (vbox);
+
+  sendSMS.report = gtk_check_button_new_with_label (_("Delivery report"));
+  gtk_box_pack_start (GTK_BOX (vbox), sendSMS.report, FALSE, FALSE, 3);
+  gtk_widget_show (sendSMS.report);
+
+  sendSMS.longSMS = gtk_check_button_new_with_label (_("Send as Long SMS"));
+  gtk_box_pack_start (GTK_BOX (vbox), sendSMS.longSMS, FALSE, FALSE, 3);
+  gtk_widget_show (sendSMS.longSMS);
+
+  sendSMS.class = gtk_check_button_new_with_label (_("Send as Flash SMS (Class 0)"));\r
+  gtk_box_pack_start (GTK_BOX (vbox), sendSMS.class, FALSE, FALSE, 3);\r
+  gtk_widget_show (sendSMS.class);\r
+
+  label = gtk_label_new (_("SMS Center:"));
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 1);
+  gtk_widget_show (label);
+
+  GUI_InitSMSSettings ();
+  sendSMS.smscOptionMenu = gtk_option_menu_new();
+
+  GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED);
+
+  gtk_box_pack_start (GTK_BOX (vbox), sendSMS.smscOptionMenu, FALSE, FALSE, 1);
+  gtk_widget_show (sendSMS.smscOptionMenu);
+}
+
+
+static void NewSMS (void)
+{
+  if (!sendSMS.SMSSendWindow)
+    CreateSMSSendWindow ();
+
+  gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("New Message"));
+
+  gtk_tooltips_disable (sendSMS.addrTip);
+
+  gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+  gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+  gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+  gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+  gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+  RefreshSMSStatus ();
+
+  gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static void ForwardSMS (void)
+{
+  gchar *buf;
+
+  if (GTK_CLIST (SMS.smsClist)->selection == NULL)
+    return;
+
+  if (!sendSMS.SMSSendWindow)
+    CreateSMSSendWindow ();
+
+  gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Forward Message"));
+
+  gtk_tooltips_disable (sendSMS.addrTip);
+
+  gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+  gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+  gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+  gtk_clist_get_text (GTK_CLIST (SMS.smsClist),
+                      GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data),
+                      3, &buf);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   buf, -1);
+
+  gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+  gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+  RefreshSMSStatus ();
+
+  gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+/*
+static inline gint CompareSMSMessageLocation (gconstpointer a, gconstpointer b)
+{
+  return !(((GSM_SMSMessage *) a)->Location == ((GSM_SMSMessage *) b)->Location);
+}
+*/
+
+
+static void ReplySMS (void)
+{
+  gchar *buf;
+//  GSList *r;
+//  GSM_SMSMessage msg;
+
+  if (GTK_CLIST (SMS.smsClist)->selection == NULL)
+    return;
+
+  if (!sendSMS.SMSSendWindow)
+    CreateSMSSendWindow ();
+
+  gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Reply Message"));
+
+  gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+  gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+  gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText),
+                           gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+  gtk_clist_get_text (GTK_CLIST (SMS.smsClist),
+                      GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data),
+                      3, &buf);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL,
+                   &(sendSMS.smsSendText->style->black), NULL, buf, -1);
+
+  gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+  //msg.Location = *(((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist),
+  //               GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->msgPtr);
+
+  //r = g_slist_find_custom (SMS.messages, &msg, CompareSMSMessageLocation);
+  //if (r)
+  gtk_entry_set_text (GTK_ENTRY (sendSMS.addr),
+                      ((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist),
+                      GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->sender);
+
+  CheckAddressMain ();
+  RefreshSMSStatus ();
+
+  gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static void NewBC (void)
+{
+  if (!sendSMS.SMSSendWindow)
+    CreateSMSSendWindow ();
+
+  gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Bussiness Card"));
+
+  gtk_tooltips_disable (sendSMS.addrTip);
+
+  gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+  gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+  gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+                   "Business Card\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.name, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   ", ", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.title, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.company, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+                   "tel ", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.telephone, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+                   "fax ", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.fax, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.email, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   xgnokiiConfig.user.address, -1);
+
+  gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+                   "\n", -1);
+
+  gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+  gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+  RefreshSMSStatus ();
+
+  gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL,              NULL,           NULL,           0, "<Branch>"},
+  { NULL,              NULL,           ReadFromPhone,  0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Separator>"},
+  { NULL,              "<control>S",   NULL,           0, NULL},
+  { NULL,              "<control>M",   SaveToMailbox,  0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Separator>"},
+  { NULL,              "<control>W",   CloseSMS,       0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Branch>"},
+  { NULL,              "<control>N",   NewSMS,         0, NULL},
+  { NULL,              "<control>F",   ForwardSMS,     0, NULL},
+  { NULL,              "<control>R",   ReplySMS,       0, NULL},
+  { NULL,              "<control>D",   DeleteSMS,      0, NULL},
+  { NULL,              NULL,           NULL,           0, "<Separator>"},
+  { NULL,              "<control>B",   NewBC,          0, NULL},
+  { NULL,              NULL,           NULL,           0, "<LastBranch>"},
+  { NULL,              NULL,           Help1,          0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout,  0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+  register gint i = 0;
+  
+  menu_items[i++].path = g_strdup (_("/_File"));
+  menu_items[i++].path = g_strdup (_("/File/Read from phone"));
+  menu_items[i++].path = g_strdup (_("/File/Sep0"));
+  menu_items[i++].path = g_strdup (_("/File/_Save"));
+  menu_items[i++].path = g_strdup (_("/File/Save to mailbo_x"));
+  menu_items[i++].path = g_strdup (_("/File/Sep1"));
+  menu_items[i++].path = g_strdup (_("/File/_Close"));
+  menu_items[i++].path = g_strdup (_("/_Messages"));
+  menu_items[i++].path = g_strdup (_("/_Messages/_New"));
+  menu_items[i++].path = g_strdup (_("/_Messages/_Forward"));
+  menu_items[i++].path = g_strdup (_("/_Messages/_Reply"));
+  menu_items[i++].path = g_strdup (_("/_Messages/_Delete"));
+  menu_items[i++].path = g_strdup (_("/Messages/Sep3"));
+  menu_items[i++].path = g_strdup (_("/_Messages/_Bussiness card"));
+  menu_items[i++].path = g_strdup (_("/_Help"));
+  menu_items[i++].path = g_strdup (_("/Help/_Help"));
+  menu_items[i++].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateSMSWindow (void)
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *toolbar;
+  GtkWidget *scrolledWindow;
+  GtkWidget *vpaned, *hpaned;
+  GtkWidget *tree, *treeSMSItem;
+  SortColumn *sColumn;
+  GdkColormap *cmap;
+  register gint i;
+  gchar *titles[4] = { _("Status"), _("Date / Time"), _("Sender"), _("Message")};
+
+  InitMainMenu ();
+  GUI_SMSWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_SMSWindow), _("Short Message Service"));
+  //gtk_widget_set_usize (GTK_WIDGET (GUI_SMSWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (GUI_SMSWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_SMSWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SMSWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_SMSWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  /* Create the toolbar */
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New message"), NULL,
+                           NewPixmap(Edit_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NewSMS, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Forward message"), NULL,
+                           NewPixmap(Forward_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ForwardSMS, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Reply message"), NULL,
+                           NewPixmap(Reply_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ReplySMS, NULL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Bussiness Card"), NULL,
+                           NewPixmap(BCard_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) NewBC, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete message"), NULL,
+                           NewPixmap(Delete_xpm, GUI_SMSWindow->window,
+                           &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) DeleteSMS, NULL);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  vpaned = gtk_vpaned_new ();
+  gtk_paned_set_handle_size (GTK_PANED (vpaned), 10);
+  gtk_paned_set_gutter_size (GTK_PANED (vpaned), 15);
+  gtk_box_pack_end (GTK_BOX (main_vbox), vpaned, TRUE, TRUE, 0);
+  gtk_widget_show (vpaned);
+
+  hpaned = gtk_hpaned_new ();
+  gtk_paned_set_handle_size (GTK_PANED (hpaned), 8);
+  gtk_paned_set_gutter_size (GTK_PANED (hpaned), 10);                       
+  gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
+  gtk_widget_show (hpaned);
+
+  /* Navigation tree */
+  tree = gtk_tree_new ();
+  gtk_tree_set_selection_mode (GTK_TREE (tree), GTK_SELECTION_SINGLE);
+  gtk_widget_show (tree);
+
+  treeSMSItem = gtk_tree_item_new_with_label (_("SMS's"));
+  gtk_tree_append (GTK_TREE (tree), treeSMSItem);
+  gtk_widget_show (treeSMSItem);
+
+  subTree = gtk_tree_new ();
+  gtk_tree_set_selection_mode (GTK_TREE (subTree), GTK_SELECTION_SINGLE);
+  gtk_tree_set_view_mode (GTK_TREE (subTree), GTK_TREE_VIEW_ITEM);
+  gtk_tree_item_set_subtree (GTK_TREE_ITEM (treeSMSItem), subTree);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_usize (scrolledWindow, 75, 80);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
+
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                         tree);
+  gtk_widget_show (scrolledWindow);
+
+  /* Message viewer */
+  SMS.smsText = gtk_text_new (NULL, NULL);
+  gtk_text_set_editable (GTK_TEXT (SMS.smsText), FALSE);
+  gtk_text_set_word_wrap (GTK_TEXT (SMS.smsText), TRUE);
+  //gtk_text_set_line_wrap (GTK_TEXT (SMS.smsText), TRUE);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_NEVER,
+                                  GTK_POLICY_AUTOMATIC);
+
+  gtk_paned_add2 (GTK_PANED (hpaned), scrolledWindow);
+
+  gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsText);
+  gtk_widget_show_all (scrolledWindow);
+
+  /* Messages list */
+  SMS.smsClist = gtk_clist_new_with_titles (4, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (SMS.smsClist), GTK_SHADOW_OUT);
+  gtk_clist_set_compare_func (GTK_CLIST (SMS.smsClist), CListCompareFunc);
+  gtk_clist_set_sort_column (GTK_CLIST (SMS.smsClist), 1);
+  gtk_clist_set_sort_type (GTK_CLIST (SMS.smsClist), GTK_SORT_ASCENDING);
+  gtk_clist_set_auto_sort (GTK_CLIST (SMS.smsClist), FALSE);
+  gtk_clist_set_selection_mode (GTK_CLIST (SMS.smsClist), GTK_SELECTION_EXTENDED);
+
+  gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 0, 40);
+  gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 1, 142);
+  gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 2, 135);
+  //gtk_clist_set_column_justification (GTK_CLIST (SMS.smsClist), 2, GTK_JUSTIFY_CENTER);
+
+  for (i = 0; i < 4; i++)
+  {
+    if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+    {
+      g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      gtk_main_quit ();
+    }
+    sColumn->clist = SMS.smsClist;
+    sColumn->column = i;
+    gtk_signal_connect (GTK_OBJECT (GTK_CLIST (SMS.smsClist)->column[i].button), "clicked",
+                        GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+  }
+
+  gtk_signal_connect (GTK_OBJECT (SMS.smsClist), "select_row",
+                      GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+  scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_usize (scrolledWindow, 550, 100);
+  gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsClist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  gtk_paned_add2 (GTK_PANED (vpaned), scrolledWindow);
+
+  gtk_widget_show (SMS.smsClist);
+  gtk_widget_show (scrolledWindow);
+
+  CreateErrorDialog (&errorDialog, GUI_SMSWindow);
+  CreateInfoDialog (&infoDialog, GUI_SMSWindow);
+
+  gtk_signal_emit_by_name(GTK_OBJECT (treeSMSItem), "expand");
+
+  cmap = gdk_colormap_get_system();
+  SMS.colour.red = 0xffff;
+  SMS.colour.green = 0;
+  SMS.colour.blue = 0;
+  if (!gdk_color_alloc (cmap, &(SMS.colour)))
+    g_error (_("couldn't allocate colour"));
+
+  questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SMSWindow->window,
+                         &questMark.mask,
+                         &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL],
+                         quest_xpm);
+
+  GUIEventAdd (GUI_EVENT_SMS_CENTERS_CHANGED, GUI_RefreshSMSCenterMenu);
+  GUIEventAdd (GUI_EVENT_SMS_NUMBER_CHANGED, GUI_RefreshMessageWindow);
+}
diff --git a/xgnokii/xgnokii_sms.h b/xgnokii/xgnokii_sms.h
new file mode 100644 (file)
index 0000000..d03398c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_SMS_H
+#define XGNOKII_SMS_H
+
+extern void GUI_CreateSMSWindow (void);
+
+extern void GUI_ShowSMS (void);
+
+extern void GUI_RefreshMessageWindow (void);
+
+extern void GUI_RefreshSMSCenterMenu (void);
+
+#endif
diff --git a/xgnokii/xgnokii_speed.c b/xgnokii/xgnokii_speed.c
new file mode 100644 (file)
index 0000000..d4bb32b
--- /dev/null
@@ -0,0 +1,662 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <gtk/gtk.h>
+#include "xgnokii_contacts.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_common.h"
+#include "xgnokii_speed.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/quest.xpm"
+
+
+static GtkWidget *GUI_SpeedDialWindow;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static ExportDialogData exportDialogData = {NULL};
+static GtkWidget *clist;
+static QuestMark questMark;
+static gint selectedKey;
+static bool speedDialInitialized;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/speeddial/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static void CloseSpeedDial (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_SpeedDialWindow);
+}
+
+
+static inline void DestroyCListData (gpointer data)
+{
+  if (data)
+    g_free ((D_SpeedDial *) data);
+}
+
+
+static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event,
+                                       SelectContactData *data)
+{
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (widget));
+}
+
+
+static void CancelSelectContactDialog (GtkWidget *widget,
+                                       SelectContactData *data)
+{
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+
+static void OkSelectContactDialog (GtkWidget *widget,
+                                   SelectContactData *data)
+{
+  GList *sel;
+  PhonebookEntry *pbEntry;
+  gchar *key;
+
+  if ((sel = GTK_CLIST (data->clist)->selection) != NULL)
+  {
+    D_SpeedDial *d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial));
+
+    gtk_clist_freeze (GTK_CLIST (clist));
+
+    pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist),
+                                      GPOINTER_TO_INT (sel->data));
+
+    gtk_clist_get_text (GTK_CLIST (clist), selectedKey, 0, &key);
+
+    gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 1, pbEntry->entry.Name);
+    gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 2, pbEntry->entry.Number);
+
+    d->entry.Number = *key - '0';
+    d->entry.MemoryType = pbEntry->entry.MemoryType + 2;
+    d->entry.Location = pbEntry->entry.Location;
+
+    gtk_clist_set_row_data_full (GTK_CLIST (clist), selectedKey,
+                                 (gpointer) d, DestroyCListData);
+
+    gtk_clist_sort (GTK_CLIST (clist));
+    gtk_clist_thaw (GTK_CLIST (clist));
+  }
+
+  gtk_widget_destroy (GTK_WIDGET (data->clist));
+  gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+  gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+static void ShowSelectContactsDialog (void)
+{
+  SelectContactData *r;
+
+  if (!GUI_ContactsIsIntialized ())
+    GUI_ReadContacts ();
+
+  if ((r = GUI_SelectContactDialog ()) == NULL)
+    return;
+
+  gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r);
+
+  gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked",
+                      GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r);
+  gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked",
+                      GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r);
+}
+
+
+static inline void EditKey (void)
+{
+  GList *sel;
+
+  if ((sel = GTK_CLIST (clist)->selection) != NULL)
+  {
+    selectedKey = GPOINTER_TO_INT (sel->data);
+    ShowSelectContactsDialog ();
+  }
+}
+
+
+static inline void ClickEntry (GtkWidget      *clist,
+                 gint            row,
+                 gint            column,
+                 GdkEventButton *event,
+                 gpointer        data )
+{
+  if(event && event->type == GDK_2BUTTON_PRESS)
+  {
+    selectedKey = row;
+    ShowSelectContactsDialog ();
+  }
+}
+
+
+static void ReadSpeedDial (void)
+{
+  PhonebookEntry *pbEntry;
+  D_SpeedDial *d;
+  PhoneEvent *e;
+  gchar *row[3];
+  gchar buf[2] = " ";
+  gint location;
+  register gint i, row_i = 0;
+
+
+  if (!GUI_ContactsIsIntialized ())
+    GUI_ReadContacts ();
+
+  gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading data ..."));
+  gtk_widget_show_now (infoDialog.dialog);
+  GUI_Refresh ();
+
+  gtk_clist_freeze (GTK_CLIST (clist));
+  gtk_clist_clear (GTK_CLIST (clist));
+
+  for (i = 1; i < 10; i++)
+  {
+    if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+    {
+      g_print (_("Cannot allocate memory!"));
+      return;
+    }
+    d->entry.Number = i;
+    if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+    {
+      g_print (_("Cannot allocate memory!"));
+      g_free (d);
+      return;   
+    }
+    e->event = Event_GetSpeedDial;
+    e->data = d;
+    GUI_InsertEvent (e);
+    pthread_mutex_lock (&speedDialMutex);
+    pthread_cond_wait (&speedDialCond, &speedDialMutex);
+    pthread_mutex_unlock (&speedDialMutex);
+
+    if (d->status != GE_NONE)
+      g_print ("Cannot read speed dial key %d!\n", i);
+    else
+    {
+      if (d->entry.Location == 0)
+        location = i;
+      else
+        location = d->entry.Location;
+      if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+      {
+        g_free (d);
+        continue;
+      }
+      *buf = i + '0';
+      row[0] = buf;
+      row[1] = pbEntry->entry.Name;
+      row[2] = pbEntry->entry.Number;
+
+      gtk_clist_append (GTK_CLIST (clist), row);
+      gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+                                   (gpointer) d, DestroyCListData);
+    }
+    //GUI_Refresh ();
+    gtk_widget_hide (infoDialog.dialog);
+  }
+
+  gtk_clist_sort (GTK_CLIST (clist));
+  gtk_clist_thaw (GTK_CLIST (clist));
+  speedDialInitialized = TRUE;
+}
+
+
+static void SaveSpeedDial (void)
+{
+  //gchar buf[80];
+  D_SpeedDial *d;
+  PhoneEvent *e;
+  register gint i;
+
+  if (speedDialInitialized)
+    for(i = 1; i < 10; i++)
+    {
+      if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+      {
+        if (d->entry.Location == 0)
+          continue;
+        if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+        {
+          g_print (_("Cannot allocate memory!"));
+          return;   
+        }
+        e->event = Event_SendSpeedDial;
+        e->data = d;
+        GUI_InsertEvent (e);
+/*        pthread_mutex_lock (&speedDialMutex);
+        pthread_cond_wait (&speedDialCond, &speedDialMutex);
+        pthread_mutex_unlock (&speedDialMutex);
+
+        if (d->status != GE_NONE)
+        {
+          g_snprintf (buf, 80, _("Error writing speed\ndial for key %d!\n"),
+                      d->entry.Number);
+          gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+          gtk_widget_show (errorDialog.dialog);
+        } */
+      }
+//      GUI_Refresh ();
+    }
+}
+
+
+static bool ParseLine (D_SpeedDial *d, gchar *buf)
+{
+  gchar **strings = g_strsplit (buf, ";", 3);
+
+  d->entry.Number = *strings[0] - '0';
+  if (d->entry.Number < 1 || d->entry.Number > 9)
+  {
+    g_strfreev (strings);
+    return FALSE;
+  }
+
+  d->entry.MemoryType = *strings[1] - '0';
+  if (d->entry.MemoryType < 2 || d->entry.MemoryType > 3)
+  {
+    g_strfreev (strings);
+    return FALSE;
+  }
+
+  d->entry.Location = atoi (strings[2]);
+  if (d->entry.Location == LONG_MIN || d->entry.Location == LONG_MAX ||
+      d->entry.Location < 0)
+  {
+    g_strfreev (strings);
+    return FALSE;
+  }
+
+  g_strfreev (strings);
+  return TRUE;
+}
+
+
+static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  FILE *f;
+  D_SpeedDial *d;
+  PhonebookEntry *pbEntry;
+  gchar buf[IO_BUF_LEN];
+  gchar *row[3];
+  gchar *fileName;
+  gint location;
+  register gint i, row_i = 0;
+
+  fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (fileName, "r")) == NULL)
+  {
+    g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName);
+    gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  if (!GUI_ContactsIsIntialized ())
+    GUI_ReadContacts ();
+
+  gtk_clist_freeze (GTK_CLIST (clist));
+  gtk_clist_clear (GTK_CLIST (clist));
+  speedDialInitialized = FALSE;
+
+  i = 0;
+  while (fgets (buf, IO_BUF_LEN, f) && i++ < 9)
+  {
+    if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+    {
+      g_print (_("Cannot allocate memory!\n"));
+      gtk_clist_clear (GTK_CLIST (clist));
+      gtk_clist_sort (GTK_CLIST (clist));
+      gtk_clist_thaw (GTK_CLIST (clist));
+      return;
+    }
+    if (ParseLine (d, buf))
+    {
+      if (d->entry.Number != i)
+      {
+        g_free (d);
+        gtk_clist_clear (GTK_CLIST (clist));
+        gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+        gtk_widget_show (errorDialog.dialog);
+        gtk_clist_sort (GTK_CLIST (clist));
+        gtk_clist_thaw (GTK_CLIST (clist));
+        return;
+      }
+      if (d->entry.Location == 0)
+        location = i;
+      else
+        location = d->entry.Location;
+      if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+      {
+        g_free (d);
+        continue;
+      }
+      *buf = i + '0';
+      *(buf + 1) = '\0';
+      row[0] = buf;
+      row[1] = pbEntry->entry.Name;
+      row[2] = pbEntry->entry.Number;
+      gtk_clist_append (GTK_CLIST (clist), row);
+      gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+                                   (gpointer) d, DestroyCListData);
+    }
+    else
+    {
+      g_free (d);
+      gtk_clist_clear (GTK_CLIST (clist));
+      gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+      gtk_widget_show (errorDialog.dialog);
+      gtk_clist_sort (GTK_CLIST (clist));
+      gtk_clist_thaw (GTK_CLIST (clist));
+      return;
+    }
+  }
+
+  gtk_clist_sort (GTK_CLIST (clist));
+  gtk_clist_thaw (GTK_CLIST (clist));
+  speedDialInitialized = TRUE;
+}
+
+
+static void ImportSpeedDial (void)
+{
+  static GtkWidget *fileDialog = NULL;
+
+  if (fileDialog == NULL)
+  {
+    fileDialog = gtk_file_selection_new (_("Import"));
+    gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                        GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                        "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog);
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                        "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+  }  
+
+  gtk_widget_show (fileDialog);
+}
+
+
+static void ExportSpeedDialMain (gchar *name)
+{
+  FILE *f;
+  D_SpeedDial *d;
+  gchar buf[IO_BUF_LEN];
+  register gint i;
+
+  if ((f = fopen( name, "w")) == NULL)
+  {
+    g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name);
+    gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+    gtk_widget_show (errorDialog.dialog);
+    return;
+  }
+
+  for(i = 1; i < 10; i++)
+  {
+    if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+    {
+      sprintf (buf, "%d;%d;%d;", d->entry.Number, d->entry.MemoryType, d->entry.Location);
+      fprintf (f, "%s\n", buf);
+    }
+  }
+
+  fclose(f);
+}
+
+
+static void YesExportDialog (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GTK_WIDGET (data));
+  ExportSpeedDialMain (exportDialogData.fileName);
+}
+
+
+static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+  static YesNoDialog dialog = { NULL, NULL};
+  FILE *f;
+  gchar err[80];
+
+
+  exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+  gtk_widget_hide (GTK_WIDGET (fs));
+
+  if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+  {
+    fclose (f);
+    if (dialog.dialog == NULL)
+    {
+      CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_SpeedDialWindow);
+      gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+      g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); 
+      gtk_label_set_text (GTK_LABEL(dialog.text), err);
+    }
+    gtk_widget_show (dialog.dialog);
+  }
+  else
+    ExportSpeedDialMain (exportDialogData.fileName);
+}    
+
+
+static void ExportSpeedDial (void)
+{
+  static GtkWidget *fileDialog = NULL;
+
+  if (speedDialInitialized)
+  {
+    if (fileDialog == NULL)
+    {
+      fileDialog = gtk_file_selection_new (_("Export"));
+      gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+                          GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+                          "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog);
+      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+                          "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+    }
+
+    gtk_widget_show (fileDialog);
+  }
+}
+
+
+inline void GUI_ShowSpeedDial (void)
+{
+  ReadSpeedDial ();
+  gtk_widget_show (GUI_SpeedDialWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              "<control>R",   ReadSpeedDial, 0, NULL},
+  { NULL,              "<control>S",   SaveSpeedDial, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL, "<control>I", ImportSpeedDial, 0, NULL},
+  { NULL, "<control>E", ExportSpeedDial, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Separator>"},
+  { NULL,              "<control>W",   CloseSpeedDial, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<Branch>"},
+  { NULL,              NULL,           EditKey, 0, NULL},
+  { NULL,              NULL,           NULL, 0, "<LastBranch>"},
+  { NULL,              NULL,           Help1, 0, NULL},
+  { NULL,              NULL,           GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+  menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+  menu_items[3].path = g_strdup (_("/File/Sep1"));
+  menu_items[4].path = g_strdup (_("/File/_Import from file"));
+  menu_items[5].path = g_strdup (_("/File/_Export to file"));
+  menu_items[6].path = g_strdup (_("/File/Sep2"));
+  menu_items[7].path = g_strdup (_("/File/_Close"));
+  menu_items[8].path = g_strdup (_("/_Edit"));
+  menu_items[9].path = g_strdup (_("/Edit/_Edit"));
+  menu_items[10].path = g_strdup (_("/_Help"));
+  menu_items[11].path = g_strdup (_("/Help/_Help"));
+  menu_items[12].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateSpeedDialWindow (void)
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  SortColumn *sColumn;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+  GtkWidget *toolbar;
+  GtkWidget *clistScrolledWindow;
+  register gint i;
+  gchar *titles[3] = {_("Key"), _("Name"), _("Number")};
+
+
+  InitMainMenu ();
+  GUI_SpeedDialWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_SpeedDialWindow), _("Speed Dial"));
+  gtk_widget_set_usize (GTK_WIDGET (GUI_SpeedDialWindow), 332, 220);
+  //gtk_container_set_border_width (GTK_CONTAINER (GUI_SpeedDialWindow), 10);
+  gtk_signal_connect (GTK_OBJECT (GUI_SpeedDialWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_SpeedDialWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SpeedDialWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_SpeedDialWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  /* Create the toolbar */
+
+  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+                           NewPixmap(Read_xpm, GUI_SpeedDialWindow->window,
+                           &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ReadSpeedDial, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+                           NewPixmap(Send_xpm, GUI_SpeedDialWindow->window,
+                           &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) SaveSpeedDial, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+                           NewPixmap(Open_xpm, GUI_SpeedDialWindow->window,
+                           &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ImportSpeedDial, NULL);
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+                           NewPixmap(Save_xpm, GUI_SpeedDialWindow->window,
+                           &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) ExportSpeedDial, NULL);
+
+  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL,
+                           NewPixmap(Edit_xpm, GUI_SpeedDialWindow->window,
+                           &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+                           (GtkSignalFunc) EditKey, NULL);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+  gtk_widget_show (toolbar);
+
+  clist = gtk_clist_new_with_titles (3, titles);
+  gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT);
+//  gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc);
+  gtk_clist_set_sort_column (GTK_CLIST (clist), 0);
+  gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING);
+  gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE);
+  //gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+  gtk_clist_set_column_width (GTK_CLIST (clist), 1, 150);
+  gtk_clist_set_column_width (GTK_CLIST (clist), 2, 115);
+  gtk_clist_set_column_justification (GTK_CLIST (clist), 0, GTK_JUSTIFY_CENTER);
+//  gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, xgnokiiConfig.callerGroupsSupported);
+
+  for (i = 0; i < 3; i++)
+  {
+    if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+    {
+      g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+      gtk_main_quit ();
+    }
+    sColumn->clist = clist;
+    sColumn->column = i;
+    gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked",
+                        GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+  }
+
+  gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+                      GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+  clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow, 
+                      TRUE, TRUE, 0);
+
+  gtk_widget_show (clist);
+  gtk_widget_show (clistScrolledWindow);
+
+  questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SpeedDialWindow->window,
+                         &questMark.mask,
+                         &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL],
+                         quest_xpm);
+
+  CreateErrorDialog (&errorDialog, GUI_SpeedDialWindow);
+  CreateInfoDialog (&infoDialog, GUI_SpeedDialWindow);
+  speedDialInitialized = FALSE;
+}
diff --git a/xgnokii/xgnokii_speed.h b/xgnokii/xgnokii_speed.h
new file mode 100644 (file)
index 0000000..a454bf5
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_SPEED_H
+#define XGNOKII_SPEED_H
+
+extern void GUI_CreateSpeedDialWindow (void);
+
+extern void GUI_ShowSpeedDial (void);
+
+#endif
diff --git a/xgnokii/xgnokii_xkeyb.c b/xgnokii/xgnokii_xkeyb.c
new file mode 100644 (file)
index 0000000..3ecf9f6
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_xkeyb.h"
+
+typedef struct {
+  int top_left_x, top_left_y;
+  int bottom_right_x, bottom_right_y;
+  int code;
+} ButtonT;
+
+
+static GtkWidget *GUI_XkeybWindow;
+static GtkWidget *pixArea;
+static GtkWidget *phonePixmap = NULL;
+static ErrorDialog errorDialog = {NULL, NULL};
+static ButtonT *button = NULL;
+
+static ButtonT button_6110[30] = {
+  { 103,  91, 114, 107, PHONEKEY_POWER          }, /* Power */
+  {  28, 240,  54, 263, PHONEKEY_MENU           }, /* Menu */
+  {  84, 240, 110, 263, PHONEKEY_NAMES          }, /* Names */
+  {  58, 245,  82, 258, PHONEKEY_UP             }, /* Up */
+  {  55, 263,  85, 276, PHONEKEY_DOWN           }, /* Down */
+  {  22, 271,  50, 289, PHONEKEY_GREEN          }, /* Green */
+  {  91, 271, 115, 289, PHONEKEY_RED            }, /* Red */
+  {  18, 294,  44, 310, PHONEKEY_1              }, /* 1 */
+  {  56, 294,  85, 310, PHONEKEY_2              }, /* 2 */
+  {  98, 294, 121, 310, PHONEKEY_3              }, /* 3 */
+  {  18, 317,  44, 333, PHONEKEY_4              }, /* 4 */
+  {  56, 317,  85, 333, PHONEKEY_5              }, /* 5 */
+  {  98, 317, 121, 333, PHONEKEY_6              }, /* 6 */
+  {  18, 342,  44, 356, PHONEKEY_7              }, /* 7 */
+  {  56, 342,  85, 356, PHONEKEY_8              }, /* 8 */
+  {  98, 342, 121, 356, PHONEKEY_9              }, /* 9 */
+  {  18, 365,  44, 380, PHONEKEY_ASTERISK       }, /* * */
+  {  56, 365,  85, 380, PHONEKEY_0              }, /* 0 */
+  {  98, 365, 121, 380, PHONEKEY_HASH           }, /* # */
+  {   1, 138,  10, 150, PHONEKEY_INCREASEVOLUME }, /* Volume + */
+  {   1, 165,  10, 176, PHONEKEY_DECREASEVOLUME }, /* Volume - */
+  {   0,   0,   0,   0, 0x00 }
+};
+
+static ButtonT button_6150[30] = {
+  {  99,  78, 114,  93, PHONEKEY_POWER          }, /* Power */
+  {  20, 223,  49, 245, PHONEKEY_MENU           }, /* Menu */
+  {  90, 223, 120, 245, PHONEKEY_NAMES          }, /* Names */
+  {  59, 230,  83, 247, PHONEKEY_UP             }, /* Up */
+  {  56, 249,  84, 265, PHONEKEY_DOWN           }, /* Down */
+  {  14, 254,  51, 273, PHONEKEY_GREEN          }, /* Green */
+  {  90, 255, 126, 273, PHONEKEY_RED            }, /* Red */
+  {  18, 281,  53, 299, PHONEKEY_1              }, /* 1 */
+  {  55, 280,  86, 299, PHONEKEY_2              }, /* 2 */
+  {  90, 281, 122, 299, PHONEKEY_3              }, /* 3 */
+  {  18, 303,  53, 323, PHONEKEY_4              }, /* 4 */
+  {  55, 303,  87, 323, PHONEKEY_5              }, /* 5 */
+  {  90, 303, 122, 323, PHONEKEY_6              }, /* 6 */
+  {  18, 327,  53, 346, PHONEKEY_7              }, /* 7 */
+  {  53, 327,  87, 346, PHONEKEY_8              }, /* 8 */
+  {  90, 327, 122, 346, PHONEKEY_9              }, /* 9 */
+  {  18, 349,  53, 370, PHONEKEY_ASTERISK       }, /* * */
+  {  56, 349,  87, 370, PHONEKEY_0              }, /* 0 */
+  {  98, 349, 122, 370, PHONEKEY_HASH           }, /* # */
+  {   2, 131,  10, 147, PHONEKEY_INCREASEVOLUME }, /* Volume + */
+  {   2, 155,  10, 173, PHONEKEY_DECREASEVOLUME }, /* Volume - */
+  {   0,   0,   0,   0, 0x00 }
+};
+
+static ButtonT button_5110[30] = {
+  { 100,  85, 114,  99, PHONEKEY_POWER    }, /* Power */
+  {  50, 240,  85, 265, PHONEKEY_MENU     }, /* Menu */
+  {  20, 240,  45, 260, PHONEKEY_NAMES    }, /* Names */
+  { 100, 240, 117, 258, PHONEKEY_UP       }, /* Up */
+  {  93, 267, 112, 287, PHONEKEY_DOWN     }, /* Down */
+  {  14, 294,  44, 312, PHONEKEY_1        }, /* 1 */
+  {  54, 294,  83, 312, PHONEKEY_2        }, /* 2 */
+  {  94, 294, 122, 312, PHONEKEY_3        }, /* 3 */
+  {  14, 320,  44, 338, PHONEKEY_4        }, /* 4 */
+  {  54, 320,  83, 338, PHONEKEY_5        }, /* 5 */
+  {  94, 320, 122, 338, PHONEKEY_6        }, /* 6 */
+  {  14, 345,  44, 363, PHONEKEY_7        }, /* 7 */
+  {  54, 345,  83, 363, PHONEKEY_8        }, /* 8 */
+  {  94, 345, 122, 363, PHONEKEY_9        }, /* 9 */
+  {  18, 374,  49, 389, PHONEKEY_ASTERISK }, /* * */
+  {  53, 371,  82, 387, PHONEKEY_0        }, /* 0 */
+  {  96, 374, 119, 389, PHONEKEY_HASH     }, /* # */
+  {   0,   0,   0,   0, 0x00 }
+};
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/xkeyb/index.htm", xgnokiiConfig.locale);
+  Help (w, indx);
+  g_free (indx);
+}
+
+
+static GtkWidget *GetPixmap (void)
+{
+  GtkWidget *wpixmap;
+  GdkPixmap *pixmap;
+  GdkBitmap *mask;
+  gchar *file;
+
+  if (!strcmp (phoneMonitor.phone.model, "6110") ||
+      !strcmp (phoneMonitor.phone.model, "6120"))
+  {
+    button = button_6110;
+    file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6110.xpm");
+  }
+  else if (!strcmp (phoneMonitor.phone.model, "6130") ||
+           !strcmp (phoneMonitor.phone.model, "6150") ||
+           !strcmp (phoneMonitor.phone.model, "616x") ||
+           !strcmp (phoneMonitor.phone.model, "6185") ||
+           !strcmp (phoneMonitor.phone.model, "6190"))
+  {
+    button = button_6150;
+    file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6150.xpm");
+  }
+  else if (!strcmp (phoneMonitor.phone.model, "5110") ||
+           !strcmp (phoneMonitor.phone.model, "5130") ||
+           !strcmp (phoneMonitor.phone.model, "5160") ||
+           !strcmp (phoneMonitor.phone.model, "5190"))
+  {
+    button = button_5110;
+    file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/5110.xpm");
+  }
+  else
+    return NULL;
+
+  pixmap = gdk_pixmap_create_from_xpm (pixArea->window, &mask,
+                                       &pixArea->style->bg[GTK_STATE_NORMAL],
+                                       file);
+  g_free (file);
+
+  if (pixmap == NULL)
+    return NULL;
+    
+  wpixmap = gtk_pixmap_new (pixmap, mask);
+  
+  return wpixmap;
+}
+
+
+static inline void CloseXkeyb (GtkWidget *w, gpointer data)
+{
+  gtk_widget_hide (GUI_XkeybWindow);
+}
+
+
+void GUI_ShowXkeyb (void)
+{
+  if (phonePixmap == NULL)
+  {
+    phonePixmap = GetPixmap ();
+    if (phonePixmap != NULL)
+    {
+      gtk_fixed_put (GTK_FIXED (pixArea), phonePixmap, 0 , 0);
+      gtk_widget_show (phonePixmap);
+    }
+    else
+    {
+      gtk_label_set_text (GTK_LABEL (errorDialog.text),
+                          _("Cannot load background pixmap!"));
+      gtk_widget_show (errorDialog.dialog);
+    }
+  }
+  gtk_widget_show (GUI_XkeybWindow);
+}
+
+
+static gint ButtonEvent (GtkWidget *widget, GdkEventButton *event)
+{
+  unsigned char req[] = {0x00,0x00};
+  register gint i = 0;
+
+  if (button == NULL)
+    return TRUE;
+
+  if (event->button != 1)
+    return TRUE;
+
+  if (event->type == GDK_BUTTON_PRESS) 
+    req[0] = PRESSPHONEKEY;
+  else if (event->type == GDK_BUTTON_RELEASE)
+    req[0] = RELEASEPHONEKEY;
+  else
+    return TRUE;
+
+//  g_print ("%f %f\n", event->x, event->y);
+
+  while (button[i].top_left_x != 0) {
+    if (button[i].top_left_x <= event->x &&
+       event->x <= button[i].bottom_right_x &&
+       button[i].top_left_y <= event->y &&
+       event->y <= button[i].bottom_right_y)
+    {
+      PhoneEvent *e = g_malloc (sizeof (PhoneEvent));
+      
+      req[1]=button[i].code;
+      e->event = Event_SendKeyStroke;
+      e->data = g_memdup (req, sizeof (req));
+      GUI_InsertEvent (e);
+    }
+
+    i++;
+  }
+
+  return TRUE;
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+  {NULL,       NULL,           NULL, 0, "<Branch>"},
+  {NULL,       "<control>W",   CloseXkeyb, 0, NULL},
+  {NULL,       NULL,           NULL, 0, "<LastBranch>"},
+  {NULL,       NULL,           Help1, 0, NULL},
+  {NULL,       NULL,           GUI_ShowAbout, 0, NULL},
+};
+
+static void InitMainMenu (void)
+{
+  menu_items[0].path = g_strdup (_("/_File"));
+  menu_items[1].path = g_strdup (_("/File/_Close"));
+  menu_items[2].path = g_strdup (_("/_Help"));
+  menu_items[3].path = g_strdup (_("/Help/_Help"));
+  menu_items[4].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateXkeybWindow (void)
+{
+  int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  GtkWidget *menubar;
+  GtkWidget *main_vbox;
+
+  InitMainMenu ();
+  GUI_XkeybWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (GUI_XkeybWindow), _("XGnokii Keyboard"));
+  //gtk_widget_set_usize (GTK_WIDGET (GUI_XkeybWindow), 436, 220);
+  gtk_signal_connect (GTK_OBJECT (GUI_XkeybWindow), "delete_event",
+                      GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+  gtk_widget_realize (GUI_XkeybWindow);
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 
+                                       accel_group);
+
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_XkeybWindow));
+
+  /* Finally, return the actual menu bar created by the item factory. */ 
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (GUI_XkeybWindow), main_vbox);
+  gtk_widget_show (main_vbox);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  pixArea = gtk_fixed_new ();
+  gtk_signal_connect (GTK_OBJECT (pixArea), "button_press_event",
+                     (GtkSignalFunc) ButtonEvent, NULL);
+  gtk_signal_connect (GTK_OBJECT (pixArea), "button_release_event",
+                     (GtkSignalFunc) ButtonEvent, NULL);
+  gtk_widget_set_events (pixArea, GDK_EXPOSURE_MASK
+                        | GDK_LEAVE_NOTIFY_MASK
+                        | GDK_BUTTON_PRESS_MASK
+                        | GDK_BUTTON_RELEASE_MASK
+                        | GDK_POINTER_MOTION_MASK
+                        | GDK_POINTER_MOTION_HINT_MASK);
+
+  gtk_box_pack_start (GTK_BOX (main_vbox), pixArea, FALSE, FALSE, 3);
+  gtk_widget_show (pixArea);
+
+  CreateErrorDialog (&errorDialog, GUI_XkeybWindow);
+}
diff --git a/xgnokii/xgnokii_xkeyb.h b/xgnokii/xgnokii_xkeyb.h
new file mode 100644 (file)
index 0000000..6060e09
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+
+  X G N O K I I
+
+  A Linux/Unix GUI for Nokia mobile phones.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_XKEYB_H
+#define XGNOKII_XKEYB_H
+
+extern void GUI_CreateXkeybWindow ();
+
+extern void GUI_ShowXkeyb ();
+
+#endif
diff --git a/xgnokii/xpm/6110mini.xpm b/xgnokii/xpm/6110mini.xpm
new file mode 100644 (file)
index 0000000..4eee2e6
--- /dev/null
@@ -0,0 +1,68 @@
+/* XPM */
+static char *icon6110mini_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    18    45       16            1",
+/* colors */
+". c #ffffff",
+"# c #e0e6f3",
+"a c #bfcce5",
+"b c #bfc0bc",
+"c c #90a6d3",
+"d c #899c77",
+"e c #8b8eba",
+"f c #6571a2",
+"g c #4066b3",
+"h c #48607d",
+"i c #5a5c44",
+"j c #3f5266",
+"k c #2c304e",
+"l c #003399",
+"m c #2a2a22",
+"n c #081116",
+/* pixels */
+"..................",
+".............#b...",
+".............mna..",
+".............mna..",
+".............nnb..",
+".............mnb..",
+"......bbbbb#.nnb..",
+"....bnkfeeeb#bmb..",
+"....nnhfffeea#bb..",
+"...dnkhffffeiiab..",
+"...mnkhhhkjffjcb..",
+"..#nkjhchknheaca..",
+"..bnkjhefjhhfbcb..",
+"..bnkhfhffffeacb..",
+"..enmmmnnnmmkheb..",
+"..hnnnniiiinnnna..",
+"..hnnnnmmmmmmnna..",
+"..eni#bbbdbbbdnb..",
+"..hndbdimidnmdnc..",
+"..fni#dniiiiddnc..",
+"..enibimiiiiidnc..",
+"..enidddddidddnc..",
+"..enmddddddddinc..",
+"..eknmmmmmmmmnje..",
+"..ekknkknnnkhhhe..",
+"..emmmmjjihnkkhe..",
+"..enknnmnnjknhhf..",
+"..enkkknmmmhhhhf..",
+"..enmiknnnmkiijf..",
+"..eknnmkhjhmmmhe..",
+"..ekmmkjjjjhjffe..",
+"..enmikkmikjmije..",
+"..eknnjjknjfjkfe..",
+"..ckiikkiijjidhe..",
+"..bkmmkkmnkhmmhe..",
+"..bkmkjjjkhhhffe..",
+"..aniikmiikjmijc..",
+"..aknnjjknjfkkhb..",
+"..akmkkkiijjjdhb..",
+"..annnkkmnkhmmjb..",
+"..akkkjjjjhhhhhb..",
+"..#kkkkjjjjjhhhb..",
+"..#nmkkkkkjjjhkb..",
+"...jnnnnnnnnnnj...",
+"....#........#...."
+};
diff --git a/xgnokii/xpm/BCard.xpm b/xgnokii/xpm/BCard.xpm
new file mode 100644 (file)
index 0000000..f761ea9
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * BCard_xpm[] = {
+"16 16 7 1",
+"      s None  c None",
+".     c steelblue1",
+"X     c black",
+"o     c white",
+"O     c gray60",
+"+     c gray45",
+"@     c gray85",
+"                ",
+"  ............  ",
+"  .X.X.X..X.X.  ",
+"  ............  ",
+"  .oooooooooo.  ",
+"  .oO+OoOOooo.  ",
+"  .ooo+Ooo++O.  ",
+"  .o++Ooooooo.  ",
+"  .oooOoO@@oo.  ",
+"  .oO++@@OOOo.  ",
+"  .oooooooooo.  ",
+"  ............  ",
+"                ",
+"                ",
+"                ",
+"                "};
diff --git a/xgnokii/xpm/Black_point.xpm b/xgnokii/xpm/Black_point.xpm
new file mode 100644 (file)
index 0000000..a573b79
--- /dev/null
@@ -0,0 +1,13 @@
+/* XPM */
+static char * Black_point_xpm[] = {
+"7 7 3 1",
+"      c None",
+".     c #397939",
+"+     c #000000",
+".......",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+"......."};
diff --git a/xgnokii/xpm/Caller.xpm b/xgnokii/xpm/Caller.xpm
new file mode 100644 (file)
index 0000000..8a5dd95
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for CallerLogo.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Caller_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+"  c None",
+"l c #ffffff",
+
+"                    ",
+"                    ",
+"     *********      ",
+"    ***********     ",
+"   **        **     ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **               ",
+"   **        **     ",
+"    ***********     ",
+"     *********      ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Caller_logo.xpm b/xgnokii/xpm/Caller_logo.xpm
new file mode 100644 (file)
index 0000000..2546503
--- /dev/null
@@ -0,0 +1,31 @@
+/* XPM */
+static char * Caller_logo_xpm[] = {
+"20 19 9 1",
+"      c None",
+".     c #000000",
+"+     c #808080",
+"@     c #FFFFFF",
+"#     c #00FF00",
+"$     c #008000",
+"%     c #0B256B",
+"&     c #D4D0C8",
+"*     c #86000A",
+"                    ",
+"                    ",
+"       .            ",
+"       .            ",
+"    ....    .....+  ",
+"   .++++.   ......  ",
+"   .............@+  ",
+"   .#$$.....+.++%+  ",
+"   . $$....+@+@@@+  ",
+"   .......+@%+@@@+  ",
+"   ......@@@@++@+   ",
+"   ......@@@@+&.+   ",
+"   ......+...+@++   ",
+"   ......@@+.*****  ",
+"   ......%++%**++   ",
+"   ......%%%%+      ",
+"    ....            ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Check.xpm b/xgnokii/xpm/Check.xpm
new file mode 100644 (file)
index 0000000..511bbee
--- /dev/null
@@ -0,0 +1,25 @@
+/* XPM */
+static char * Check_xpm[] = {
+"16 17 5 1",
+"      c None",
+".     c black",
+"X     c gray50",
+"o     c gray85",
+"#     c white",
+"      .   .     ",
+"       ...      ",
+"     X.....X    ",
+"    XX.....XX   ",
+"    ..#...X..   ",
+"   X.#.XXX...X  ",
+"  ...#..o...... ",
+"   .....o.....  ",
+"   .....o.....  ",
+"  .X....o....X. ",
+"    ....o....   ",
+"   .X...o...X.  ",
+"     X..o..X    ",
+"       XoX      ",
+"                ",
+"                ",
+"                "};
diff --git a/xgnokii/xpm/Delete.xpm b/xgnokii/xpm/Delete.xpm
new file mode 100644 (file)
index 0000000..b8824ac
--- /dev/null
@@ -0,0 +1,36 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Delete_xpm[] = {
+"16 17 4 1",
+"      c None",
+".     c red",
+"X     c gray50",
+"o     c black",
+"                ",
+"           .    ",
+"   ..X    ...   ",
+"    ..X  .....  ",
+"     .......oo  ",
+"      .....o    ",
+"      ....o     ",
+"     ......     ",
+"     ..o ...    ",
+"    ..o   ...   ",
+"    .o     ..X  ",
+"   .o       .o  ",
+"   o         o  ",
+"                ",
+"                ",
+"                ",
+"                "};
diff --git a/xgnokii/xpm/Dial.xpm b/xgnokii/xpm/Dial.xpm
new file mode 100644 (file)
index 0000000..c076d65
--- /dev/null
@@ -0,0 +1,34 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+/* XPM */
+static char * Dial_xpm[] = {
+"14 16 2 1",
+"      c None",
+".     c #0000FFFF0000",
+"  ....        ",
+" .......      ",
+" .........    ",
+"...........   ",
+"..... ......  ",
+" ...    ..... ",
+"   .     .....",
+"          ....",
+"         .....",
+"        ......",
+"         .... ",
+"          ..  ",
+"              ",
+"              ",
+"              ",
+"              "};
diff --git a/xgnokii/xpm/Display.xpm b/xgnokii/xpm/Display.xpm
new file mode 100644 (file)
index 0000000..4a80808
--- /dev/null
@@ -0,0 +1,115 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+/* XPM */
+static char * Display_xpm[] = {
+"109 96 3 1",
+"      c #000000000000",
+".     c #FFFFFFFFFFFF",
+"X     c #0000DF7D0000",
+"                                                                                                             ",
+"                                                                                                             ",
+"                                                                                                             ",
+"                                                                                                             ",
+"                                  ... .  ..    ...  ....   ... ... ... ...                                   ",
+"                                 .   ..   ..    .  ..  ..   .   .   .   .                                    ",
+"                                .     .   ..    .  .    .   .  .    .   .                                    ",
+"                                .         . .   . .      .  . .     .   .                                    ",
+"                                .    ...  .  .  . .      .  ...     .   .                                    ",
+"                                .     .   .  .  . .      .  . ..    .   .                                    ",
+"                                .     .   .   . .  .    .   .  ..   .   .                                    ",
+"                                 .   ..   .    ..  ..  ..   .   ..  .   .                                    ",
+"                                  ....   ...    .   ....   ...  ...... ...                                   ",
+"                                                                                                             ",
+"                                                                                                             ",
+"                                                                                                             ",
+"                          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                          ",
+"             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX              ",
+"        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX         ",
+"      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ",
+"     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ",
+"     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ",
+"     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ",
+"     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ",
+"      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ",
+"      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ",
+"      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ",
+"       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ",
+"        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        ",
+"           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX          ",
+"                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX              ",
+"                         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                        ",
+"                                                                                                             ",
+"                                                                                                             ",
+"                                                                                                             "};
diff --git a/xgnokii/xpm/Duplicate.xpm b/xgnokii/xpm/Duplicate.xpm
new file mode 100644 (file)
index 0000000..87b60d9
--- /dev/null
@@ -0,0 +1,36 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+static char * Duplicate_xpm[] = {
+"16 18 4 1",
+"      c None",
+".     c black",
+"X     c gray50",
+"o     c white",
+"    .......     ",
+"    .XXXXXX.    ",
+"  .......XXX.   ",
+"  .ooooo..XXX.  ",
+"  .ooooo.o.XX.  ",
+"  .ooooo....X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo.X.  ",
+"  .oooooooo...  ",
+"  .oooooooo.    ",
+"  ..........    ",
+"                ",
+"                "};
diff --git a/xgnokii/xpm/Edit.xpm b/xgnokii/xpm/Edit.xpm
new file mode 100644 (file)
index 0000000..4b1ebc8
--- /dev/null
@@ -0,0 +1,37 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Edit_xpm[] = {
+"16 17 5 1",
+"      c #84207BDE7BDE",
+".     c None",
+"X     c #FFFFFFFFFFFF",
+"o     c #000000000000",
+"O     c #52945294FFFF",
+"         .......",
+" XXXXXXX o......",
+" X     X Xo....O",
+" XXXXXXX ooo..OO",
+" X     XXXXo.OOo",
+" XXXXXXXXXXoOOo.",
+" X        XOOo..",
+" XXXXXXXXXOOo...",
+" X       oOo....",
+" XXXXXXXoooo....",
+" X     oooXo....",
+" XXXXXoXXXXo....",
+" XXXXXXXXXXo....",
+"oooooooooooo....",
+"................",
+"................",
+"................"};
diff --git a/xgnokii/xpm/Edit_flip_horizontal.xpm b/xgnokii/xpm/Edit_flip_horizontal.xpm
new file mode 100644 (file)
index 0000000..11dcff2
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * Edit_flip_horizontal_xpm[] = {
+"20 19 4 1",
+"      c None",
+".     c #000000",
+"+     c #35773A",
+"@     c #5ACA62",
+"                    ",
+"                    ",
+"                    ",
+"        . .         ",
+"       .. ..        ",
+"      .+. . .       ",
+"      .+. . .       ",
+"     .@+. .  .      ",
+"     .@+. .  .      ",
+"    .@@+. .   .     ",
+"    .@@+. .   .     ",
+"   .@@@+. .    .    ",
+"   .@@@+. .    .    ",
+"  .@@@@+. .     .   ",
+"  ....... .......   ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Edit_flip_vertical.xpm b/xgnokii/xpm/Edit_flip_vertical.xpm
new file mode 100644 (file)
index 0000000..ad0a951
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * Edit_flip_vertical_xpm[] = {
+"20 19 4 1",
+"      c None",
+".     c #000000",
+"+     c #5ACA62",
+"@     c #35773A",
+"                    ",
+"                    ",
+"    ..              ",
+"    .+..            ",
+"    .+++..          ",
+"    .+++++..        ",
+"    .+++++++..      ",
+"    .@@@@@@@@@.     ",
+"    ............    ",
+"                    ",
+"    ............    ",
+"    .         .     ",
+"    .       ..      ",
+"    .     ..        ",
+"    .   ..          ",
+"    . ..            ",
+"    ..              ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Edit_invert.xpm b/xgnokii/xpm/Edit_invert.xpm
new file mode 100644 (file)
index 0000000..ae63410
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * Edit_invert_xpm[] = {
+"20 19 4 1",
+"      c None",
+".     c #000000",
+"+     c #5ACA62",
+"@     c #35773A",
+"                    ",
+"                    ",
+"  ........... ..    ",
+"  .+++++++++.   .   ",
+"  .+++++++++.   .   ",
+"  .+++@@@+++. . . . ",
+"  .+++@@@+++.  ...  ",
+"  .+++++++++.   .   ",
+"  .+++++++++.       ",
+"  ................  ",
+"       .@@@@@@@@@.  ",
+"   .   .@@@@@@@@@.  ",
+"  ...  .@@@+++@@@.  ",
+" . . . .@@@+++@@@.  ",
+"   .   .@@@@@@@@@.  ",
+"   .   .@@@@@@@@@.  ",
+"    .. ...........  ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Flip.xpm b/xgnokii/xpm/Flip.xpm
new file mode 100644 (file)
index 0000000..a37801f
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * Flip_xpm[] = {
+"20 18 3 1",
+"      c None",
+".     c #000000",
+"+     c #FFFFFF",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"     .        .     ",
+"    ..        ..    ",
+"   ..............   ",
+"  ...++++++++++...  ",
+"   ..............   ",
+"    ..        ..    ",
+"     .        .     ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Forward.xpm b/xgnokii/xpm/Forward.xpm
new file mode 100644 (file)
index 0000000..57786ec
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char *Forward_xpm[]={
+"16 16 5 1",
+"c c #ffa858",
+"a c #c3c3c3",
+"b c #000000",
+". c None",
+"# c #ff0000",
+".####a..........",
+".#.aaa..........",
+".###..a......a..",
+".#aa..a.b...aa..",
+".#a....abb.aa...",
+".#a....ab#ba....",
+".a......b##b....",
+"bbbbbbbbb###b...",
+"#############b..",
+"bbbbbbbbb###bc..",
+".cccccccb##bc...",
+"........b#bc....",
+"........bbc.....",
+"........bc......",
+"........c.......",
+"................"};
diff --git a/xgnokii/xpm/Green_pixel.xpm b/xgnokii/xpm/Green_pixel.xpm
new file mode 100644 (file)
index 0000000..693ed9c
--- /dev/null
@@ -0,0 +1,6 @@
+/* XPM */
+static char * Green_pixel_xpm[] = {
+"1 1 2 1",
+"      c None",
+".     c #5ACA62",
+"."};
diff --git a/xgnokii/xpm/Green_point.xpm b/xgnokii/xpm/Green_point.xpm
new file mode 100644 (file)
index 0000000..0f479a7
--- /dev/null
@@ -0,0 +1,13 @@
+/* XPM */
+static char * Green_point_xpm[] = {
+"7 7 3 1",
+"      c None",
+".     c #397939",
+"+     c #5ACA62",
+".......",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+"......."};
diff --git a/xgnokii/xpm/Invert.xpm b/xgnokii/xpm/Invert.xpm
new file mode 100644 (file)
index 0000000..cd9fbb2
--- /dev/null
@@ -0,0 +1,46 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the logo of the GUI utility.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Invert_xpm[] = {
+
+"20 18 4 1",
+
+"* c #000000",
+"  c None",
+"b c #dfdfdf",
+". c #ffffff",
+
+"                    ",
+"     ********       ",
+"     *......**      ",
+"     *......*.*     ",
+"     *......****    ",
+"     *.........*    ",
+"     *.........*    ",
+"     ***********    ",
+"     ***********    ",
+"     ***********    ",
+"     ***********    ",
+"     ***********    ",
+"     ***********    ",
+"     ***********    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Names.xpm b/xgnokii/xpm/Names.xpm
new file mode 100644 (file)
index 0000000..a3533a6
--- /dev/null
@@ -0,0 +1,21 @@
+/* XPM */
+static char * Names_xpm[] = {
+"16 14 4 1",
+"      c None",
+".     c black",
+"X     c gray50",
+"o     c white",
+"  ..            ",
+" .Xo.    ...    ",
+" .Xoo. ..oo.    ",
+" .Xooo.Xooo...  ",
+" .Xooo.oooo.X.  ",
+" .Xooo.Xooo.X.  ",
+" .Xooo.oooo.X.  ",
+" .Xooo.Xooo.X.  ",
+" .Xooo.oooo.X.  ",
+"  .Xoo.Xoo..X.  ",
+"   .Xo.o..ooX.  ",
+"    .X..XXXXX.  ",
+"    ..X.......  ",
+"     ..         "};
diff --git a/xgnokii/xpm/New.xpm b/xgnokii/xpm/New.xpm
new file mode 100644 (file)
index 0000000..0aa41d1
--- /dev/null
@@ -0,0 +1,45 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for New.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *New_xpm[] = {
+
+"20 18 3 1",
+
+"* c #000000",
+"  c None",
+". c #ffffff",
+
+"                    ",
+"     ********       ",
+"     *......**      ",
+"     *......*.*     ",
+"     *......****    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     *.........*    ",
+"     ***********    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/NewBD.xpm b/xgnokii/xpm/NewBD.xpm
new file mode 100644 (file)
index 0000000..6b94a0a
--- /dev/null
@@ -0,0 +1,47 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Open.
+
+  Last modification: Wed Jun 14 18:04:00 CEST 2000
+  Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewBD_xpm[]={
+"20 18 9 1",
+"d c #ffa858",
+"e c #c05800",
+"# c #000000",
+"g c #ff8000",
+"b c #ffff00",
+"f c #ffdca8",
+"c c #0000ff",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaabaaaaa#....",
+"...#aaabacabaaa#....",
+"...#aaacacacaaa#....",
+"...#aaacccacaaa#....",
+"...#aadcdcdceaa#....",
+"...#adfcfcfcfea#....",
+"...#aeeeeeeeeea#....",
+"...#adggdddggea#....",
+"...#adggdddggea#....",
+"...#aaeeeeeeeaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
diff --git a/xgnokii/xpm/NewCall.xpm b/xgnokii/xpm/NewCall.xpm
new file mode 100644 (file)
index 0000000..3f1fef0
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Open.
+
+  Last modification: Wed Jun 14 18:04:00 CEST 2000
+  Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewCall_xpm[]={
+"20 18 3 1",
+"# c #000000",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aa###aaaaaa#....",
+"...#a######aaaa#....",
+"...#a#######aaa#....",
+"...#aa##a####aa#....",
+"...#aaaaaa###aa#....",
+"...#aaaaaaa###a#....",
+"...#aaaaaa####a#....",
+"...#aaaaaa####a#....",
+"...#aaaaaaa##aa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
diff --git a/xgnokii/xpm/NewMeet.xpm b/xgnokii/xpm/NewMeet.xpm
new file mode 100644 (file)
index 0000000..826b18e
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Open.
+
+  Last modification: Wed Jun 14 18:04:00 CEST 2000
+  Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewMeet_xpm[]={
+"20 18 3 1",
+"# c #000000",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aa#aaaaa#aa#....",
+"...#aaa#aaa#aaa#....",
+"...#a####a####a#....",
+"...#aaa#aaa#aaa#....",
+"...#aa#aaaaa#aa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
diff --git a/xgnokii/xpm/NewRem.xpm b/xgnokii/xpm/NewRem.xpm
new file mode 100644 (file)
index 0000000..1363893
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Open.
+
+  Last modification: Wed Jun 14 18:04:00 CEST 2000
+  Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewRem_xpm[]={
+"20 18 5 1",
+"c c #c3c3c3",
+"# c #000000",
+"b c #ffff00",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaaaaaaaa#....",
+"...#aaaa###aaaa#....",
+"...#aaa#bbb#aaa#....",
+"...#aa#bbbbb#aa#....",
+"...#aa#bbbbb#aa#....",
+"...#aa#bbbbb#aa#....",
+"...#aaa#bbb#aaa#....",
+"...#aaa#ccc#aaa#....",
+"...#aaaa#c#aaaa#....",
+"...#aaaa###aaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
diff --git a/xgnokii/xpm/Op.xpm b/xgnokii/xpm/Op.xpm
new file mode 100644 (file)
index 0000000..31c9fd6
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Operator Logo.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Op_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+"  c None",
+"l c #ffffff",
+
+"                    ",
+"                    ",
+"     **********     ",
+"    ************    ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"   **          **   ",
+"    ************    ",
+"     **********     ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Open.xpm b/xgnokii/xpm/Open.xpm
new file mode 100644 (file)
index 0000000..e3d9cd2
--- /dev/null
@@ -0,0 +1,47 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Open.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Open_xpm[] = {
+
+"20 18 5 1",
+
+"* c #000000",
+". c #808000",
+"a c #ffff00",
+"  c None",
+"e c #ffffff",
+
+"                    ",
+"            ***     ",
+"           *   * *  ",
+"                **  ",
+"    ***        ***  ",
+"   *eae*******      ",
+"   *aeaeaeaea*      ",
+"   *eaeaeaeae*      ",
+"   *aeae**********  ",
+"   *eae*.........*  ",
+"   *ae*.........*   ",
+"   *e*.........*    ",
+"   **.........*     ",
+"   ***********      ",
+"                    ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Operator_logo.xpm b/xgnokii/xpm/Operator_logo.xpm
new file mode 100644 (file)
index 0000000..67ee2af
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * Operator_logo_xpm[] = {
+"20 19 5 1",
+"      c None",
+".     c #000000",
+"+     c #808080",
+"@     c #00FF00",
+"#     c #008000",
+"                    ",
+"                    ",
+"      .             ",
+"      .             ",
+"   ....             ",
+"  .++++.            ",
+"  ......  .......   ",
+"  .@##.. .       .  ",
+"  . ##..   .....    ",
+"  ......  .     .   ",
+"  ......            ",
+"  ......   .....    ",
+"  ......   . . .    ",
+"  ......    ...     ",
+"  ......     .      ",
+"  ......     .      ",
+"   ....      .      ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Read.xpm b/xgnokii/xpm/Read.xpm
new file mode 100644 (file)
index 0000000..2db3e37
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Read_xpm[] = {
+"13 19 7 1",
+"      c None",
+".     c #000000000000",
+"X     c #861782078617",
+"o     c #61859A694924",
+"O     c #000082070000",
+"+     c #C71BC30BC71B",
+"@     c #FFFFFBEEFFFF",
+"             ",
+"          .  ",
+"          .  ",
+"       ....  ",
+"      .XXXX. ",
+"      ...... ",
+"      .oOO.. ",
+"      .+OO.. ",
+"      ...... ",
+"      .X.... ",
+" .   .@..... ",
+" .. .@@+.... ",
+" .@.@@+..... ",
+" .@@@+.X.... ",
+" .@@+..X.... ",
+" .++++.....  ",
+" .......     ",
+"             ",
+"             "};
diff --git a/xgnokii/xpm/Reply.xpm b/xgnokii/xpm/Reply.xpm
new file mode 100644 (file)
index 0000000..a6c1296
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char*Reply_xpm[]={
+"16 16 5 1",
+"b c #ffa858",
+"c c #c3c3c3",
+"# c #000080",
+"a c #000000",
+". c None",
+".####.....aaaa..",
+".#..#.....a##ab.",
+".#..#.....a##ab.",
+".###c.....a##ab.",
+".#c#c.....a##ab.",
+".#.c#.....a##ab.",
+".#..#c....a##ab.",
+"....a.....a##ab.",
+"...aa.....a##ab.",
+"..a#aaaaaaa##ab.",
+".a###########ab.",
+"a############ab.",
+".a###########ab.",
+"..a#aaaaaaaaaab.",
+"...aabbbbbbbbbb.",
+"....a....ccc...."};
diff --git a/xgnokii/xpm/Save.xpm b/xgnokii/xpm/Save.xpm
new file mode 100644 (file)
index 0000000..da91c44
--- /dev/null
@@ -0,0 +1,45 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Save.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Save_xpm[] = {
+
+"20 18 3 1",
+
+"* c #000000",
+"# c #808000",
+"  c None",
+
+"                    ",
+"   **************   ",
+"   *#*        * *   ",
+"   *#*        ***   ",
+"   *#*        *#*   ",
+"   *#*        *#*   ",
+"   *#*        *#*   ",
+"   *#*        *#*   ",
+"   *##********##*   ",
+"   *############*   ",
+"   *##*********#*   ",
+"   *##******  *#*   ",
+"   *##******  *#*   ",
+"   *##******  *#*   ",
+"    *************   ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Send.xpm b/xgnokii/xpm/Send.xpm
new file mode 100644 (file)
index 0000000..cdcf4c8
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Send.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Send_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+"  c None",
+"l c #ffffff",
+
+"                    ",
+"              *     ",
+"              *     ",
+"           ****     ",
+"          *iiii*    ",
+"          ******    ",
+"          *cbb**    ",
+"          * bb**    ",
+"          ******    ",
+"     ***********    ",
+"      *lll *****    ",
+"       *ll *****    ",
+"      *lll *****    ",
+"     *ll * *****    ",
+"    *ll * ******    ",
+"     * *   ****     ",
+"      *             ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/SendSMS.xpm b/xgnokii/xpm/SendSMS.xpm
new file mode 100644 (file)
index 0000000..cc7d6f1
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * SendSMS_xpm[] = {
+"16 17 4 1",
+"      c None",
+".     c black",
+"X     c white",
+"o     c gray50",
+"                ",
+"                ",
+" .............  ",
+" .XXXXXXXXXXX.o ",
+" ..XXXXXXXXX..o ",
+" .X.XXXXXXX.X.o ",
+" .XX.XXXXX.XX.o ",
+" .XX..XXX..XX.o ",
+" .X.XX...XX.X.o ",
+" ..XXXXXXXXX..o ",
+" .............o ",
+"  ooooooooooooo ",
+"                ",
+"                ",
+"                ",
+"                ",
+"                "};
diff --git a/xgnokii/xpm/Startup.xpm b/xgnokii/xpm/Startup.xpm
new file mode 100644 (file)
index 0000000..af78ec9
--- /dev/null
@@ -0,0 +1,50 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the icon for Startup Logo.
+
+  Last modification: Sat Jul 24 14:30:37 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Startup_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+"  c None",
+"l c #ffffff",
+
+"                    ",
+"                    ",
+"     *********      ",
+"    ***********     ",
+"   **        **     ",
+"   **               ",
+"   **               ",
+"    *               ",
+"    **********      ",
+"     **********     ",
+"              **    ",
+"              **    ",
+"              **    ",
+"    **        **    ",
+"    ***********     ",
+"     *********      ",
+"                    ",
+"                    ",
+"                    "
+};
diff --git a/xgnokii/xpm/Startup_logo.xpm b/xgnokii/xpm/Startup_logo.xpm
new file mode 100644 (file)
index 0000000..ca707b1
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char * Startup_logo_xpm[] = {
+"20 19 10 1",
+"      c None",
+".     c #000000",
+"+     c #808080",
+"@     c #00FF00",
+"#     c #008000",
+"$     c #009D00",
+"%     c #1C5CFF",
+"&     c #FFFF1E",
+"*     c #913615",
+"=     c #0B256B",
+"                    ",
+"                    ",
+"      .             ",
+"      .             ",
+"   ....             ",
+"  .++++. ...        ",
+"  ......    .       ",
+"  .@##..   ...      ",
+"  . ##..    .       ",
+"  ......            ",
+"  ...... .......... ",
+"  ...... .$$$%%%&&. ",
+"  ...... .$*$%%%%&. ",
+"  ...... .%*%%%%%%. ",
+"  ...... .****====. ",
+"  ...... .***=====. ",
+"   ....  .......... ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Tool_brush.xpm b/xgnokii/xpm/Tool_brush.xpm
new file mode 100644 (file)
index 0000000..eb5dea9
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * Tool_brush_xpm[] = {
+"20 19 4 1",
+"      c None",
+".     c #000000",
+"+     c #949194",
+"@     c #FFFFFF",
+"                    ",
+"                    ",
+"                    ",
+"           ....     ",
+"           .   .    ",
+"          .    .    ",
+"          ..  .+    ",
+"         .@@...+    ",
+"         .@  .++    ",
+"        .@@  .+     ",
+"        .@  .++     ",
+"       .@@  .+      ",
+"       .@  .++      ",
+"       ..  .+       ",
+"       ....++       ",
+"       ...++        ",
+"       ..++         ",
+"       .++          ",
+"                    "};
diff --git a/xgnokii/xpm/Tool_filled_rectangle.xpm b/xgnokii/xpm/Tool_filled_rectangle.xpm
new file mode 100644 (file)
index 0000000..ad4a15f
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * Tool_filled_rectangle_xpm[] = {
+"20 19 2 1",
+"      c None",
+".     c #000000",
+"                    ",
+"                    ",
+"                    ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"   ..............   ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Tool_line.xpm b/xgnokii/xpm/Tool_line.xpm
new file mode 100644 (file)
index 0000000..936a666
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * Tool_line_xpm[] = {
+"20 19 2 1",
+"      c None",
+".     c #000000",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"               .    ",
+"              .     ",
+"             .      ",
+"            .       ",
+"           .        ",
+"          .         ",
+"         .          ",
+"        .           ",
+"       .            ",
+"      .             ",
+"     .              ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/Tool_rectangle.xpm b/xgnokii/xpm/Tool_rectangle.xpm
new file mode 100644 (file)
index 0000000..d60065e
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * Tool_rectangle_xpm[] = {
+"20 19 2 1",
+"      c None",
+".     c #000000",
+"                    ",
+"                    ",
+"                    ",
+"   ..............   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"   ..............   ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
diff --git a/xgnokii/xpm/alarm.xpm b/xgnokii/xpm/alarm.xpm
new file mode 100644 (file)
index 0000000..efb08be
--- /dev/null
@@ -0,0 +1,36 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This icon is used for alarm notification.
+
+  Last modification: Sat Jul 10 21:30:28 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_alarm[] = {
+
+"9 9 3 1",
+
+"  c None",
+"# c #000000",
+"+ c #d0dae8",
+
+"#########",
+"##  #  ##",
+"#   #   #",
+"#   #   #",
+"#   ### #",
+"#       #",
+"#       #",
+"##     ##",
+"#########"
+};
diff --git a/xgnokii/xpm/background.xpm b/xgnokii/xpm/background.xpm
new file mode 100644 (file)
index 0000000..3f5922e
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the background of the GUI.
+
+  Copyright (C) 1999 Petr Vostøel <pisi@parscom.cz>
+        
+  Last modification: Sat Jun 26 07:30:06 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+/* XPM */
+static char *XPM_background[] = {
+"261 96 129 2",
+"      c None",
+".     c #FFFFFF",
+"+     c #FCFCFC",
+"@     c #F9F9F9",
+"#     c #F9F2F2",
+"$     c #F4EAEA",
+"%     c #F3F3F3",
+"&     c #EEF2F7",
+"*     c #EEF1F7",
+"=     c #EDF1F6",
+"-     c #EDEDED",
+";     c #EBEFF5",
+">     c #E8EDF4",
+",     c #E8CECD",
+"'     c #E6EBF3",
+")     c #E6E6E6",
+"!     c #DFE6EF",
+"~     c #DEDEDE",
+"{     c #DCE4EE",
+"]     c #D9E1ED",
+"^     c #D7DFEB",
+"/     c #D6DEEB",
+"(     c #D6D6D6",
+"_     c #D3DCE9",
+":     c #D2ADAC",
+"<     c #D1DBE9",
+"[     c #D0DAE8",
+"}     c #CFD9E8",
+"|     c #CF9A98",
+"1     c #CECECE",
+"2     c #CDD8E6",
+"3     c #CAD5E5",
+"4     c #C9C9C9",
+"5     c #C7C5C5",
+"6     c #C6D2E3",
+"7     c #C5CEDB",
+"8     c #C2CFE1",
+"9     c #C1C1C1",
+"0     c #C0C9D6",
+"a     c #BFCCDF",
+"b     c #BF7C7B",
+"c     c #BDC6D3",
+"d     c #BBC9DD",
+"e     c #BABABA",
+"f     c #B8C7DC",
+"g     c #B8C0CB",
+"h     c #B7C6DC",
+"i     c #B6C6DB",
+"j     c #B4C4DA",
+"k     c #B3C3DA",
+"l     c #B3BBC7",
+"m     c #B2C2D9",
+"n     c #B2B2B2",
+"o     c #B10707",
+"p     c #AF5F5D",
+"q     c #ACB4BF",
+"r     c #ABABAB",
+"s     c #A5ADB8",
+"t     c #A4A4A4",
+"u     c #A23C3A",
+"v     c #9BA3AD",
+"w     c #9B9B9B",
+"x     c #949494",
+"y     c #939AA4",
+"z     c #8C929C",
+"A     c #8B8B8B",
+"B     c #848383",
+"C     c #7D838B",
+"D     c #7B7B7B",
+"E     c #786463",
+"F     c #757B83",
+"G     c #757575",
+"H     c #725655",
+"I     c #6F7070",
+"J     c #6F0302",
+"K     c #6A6A6A",
+"L     c #686D74",
+"M     c #656565",
+"N     c #61666C",
+"O     c #606161",
+"P     c #5C5C5C",
+"Q     c #575B61",
+"R     c #575758",
+"S     c #545454",
+"T     c #505151",
+"U     c #4E4F4F",
+"V     c #4C4C4C",
+"W     c #4B2726",
+"X     c #484848",
+"Y     c #446BA4",
+"Z     c #444444",
+"`     c #4369A1",
+" .    c #41669C",
+"..    c #414449",
+"+.    c #404040",
+"@.    c #3D6194",
+"#.    c #3D3D3D",
+"$.    c #393939",
+"%.    c #385886",
+"&.    c #37393D",
+"*.    c #353535",
+"=.    c #34527E",
+"-.    c #344F69",
+";.    c #324E78",
+">.    c #303031",
+",.    c #2E4970",
+"'.    c #2D0201",
+").    c #2C2C2D",
+"!.    c #2B4468",
+"~.    c #292929",
+"{.    c #273E5E",
+"].    c #252525",
+"^.    c #233755",
+"/.    c #212121",
+"(.    c #1F314B",
+"_.    c #1B2B42",
+":.    c #1B1B1B",
+"<.    c #162336",
+"[.    c #151515",
+"}.    c #0F1A29",
+"|.    c #0E0E0E",
+"1.    c #08121E",
+"2.    c #080D14",
+"3.    c #08090B",
+"4.    c #040506",
+"5.    c #012343",
+"6.    c #000000",
+"7.    c #FFFFFF",
+"8.    c #000000",
+"                                                        [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.8.8.8.8.                                                                                      ",
+"                                                8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.                                                                              ",
+"                                          8.8.8.8.8.3.Z w e r G [.w e r 8.*.e A 8.8.S r e G [.8.w e G [.r e M A e A A e A 8.8.8.8.8.G e r Z 8.8.8.8.8.8.8.G M G M 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.8.8.8.8.8.8.r e e w *.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.[.G e r Z 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.1._.,.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.%.;.!.^._.}.2.8.8.8.8.                                                                      ",
+"                                    8.8.8.}.(.(.2.8.G . . . . - [.. . . [.M . A 8.w . . . . e 8.. . G G . ~ [.. . G . . G 8.8.8.8.w 1 S S /.8.8.8.8.8.8.8.~ Z ~ Z 8.8.8.8.8.8.8.~ Z 8.8.8.8.8.8.8.8.8.8.8.8.8.. G Z r ~ 8.8.8.8.8.8.8.[.[.8.8.8.8.8.8.8.8.8.8.1 r Z M /.8.8.8.8.8.8.8.r S 8.[.[.8.8.8.8.8.8.1.!.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` `  .@.=.!._.}.4.8.8.8.                                                                ",
+"                                8.8.2._.;. .=.1.8.Z . . G 8.[.+.[.. . . S G . G Z . . Z M . . ).. . G . . +.[.. . D . . G 8.8.8.Z - [.8.8.8.8.8.8.8.8.8.8.. *.. *.8.8.8.8.8.8.8.. *.8.8.8.8.8.8.8.8.8.8.8.8.*.. *.8.[.. Z 8.8.8.8.8.[.. [.8.8.8.8.8.8.8.8.8.*.. [.8.8.8.8.8.8.8.8.8.8.8.8.[.. [.8.8.8.8.8.8.8.1.=.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` ` =.{.<.3.8.8.8.                                                          ",
+"                            8.8.2.^.=.Y Y Y (.8.8.w . ~ 8.8.8.8.+.. . . G r . Z r . 1 8.Z . . G . . - . A 8.+.. . G . . Z 8.8.8.w w 8.8.8.8.8.G - . A 8.*.. *.. 8.M 1 8.8.e M *.. 8.A - . e 8.Z . e M 8.8.8.+.. 8.8.8.. Z A - . e 8.1 - e *.A - . e 8.8.8.8.*.. I 8.8.8.M 1 8.8.e M *.. [.4 - e *.G - . A 8.8.8.(.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` =.^.1.4.8.8.                                                      ",
+"                          8.3.(.=.Y Y Y Y Y 1.8.8.~ . w G . . . A . A . e e . *.- . w 8.S . . A . . . . /.8.M . . D . . /.8.8.8.~ G 8.8.8.8.G e [.*.. *.T ~ S ~ 8.G r 8.8.- Z S ~ 8./.8.S . 8.M 1 [.8.8.8.8.G 1 8.8.[.. *.:.8.S . 8.M e 8.8./.8.S . 8.8.8.8.8.M - ~ S 8.G r 8.8.- Z +.- 8.M e 8.G e [.*.. *.8.8.1.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.%.=.;.,.!.!.!.!.!.!.,.;.=.%.@.` Y Y Y Y Y Y Y Y @.!.<.3.8.8.                                                  ",
+"                      8.8.}.,.` Y Y Y Y Y Y 8.8.8.. . G Z w . . G . G 1 . - . 8.. . G 8.A . . G . - . . G 8.G . . G . . 8.8.8.8.. Z 8.8.8.8.~ r I G . +.G e G e 8.r G 8.8.. [.G e *.~ . ~ 1 8.G w 8.8.8.8.8.A e 8.8.+.. *.~ . ~ 1 8.G w 8.*.~ . ~ 1 8.8.8.8.8.8.[.w . /.r G 8.8.. [.G e 8.G w 8.~ r I G . +.8.8.8.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.;.{._.}.1.2.4.8.8.8.8.8.8.8.8.4.3.1.}.<.^.,.%.` Y Y Y Y Y Y  .,.<.3.8.8.                                              ",
+"                    8.8._.%.Y Y Y Y Y Y Y Y 1.8.8.- . w 8.S . - r . Z w . . ~ 8.- . A 8.~ . w r . e e . ~ 8.r . 1 r . 1 8.8.8.8.. Z 8.8.8.8.. w G G G [.w G w G 8.1 S 8.Z . 8.w G ~ w 8.G r 8.r G 8.8.8.8.8.e G 8.8.A r ~ w 8.G r 8.r G 8.~ w 8.G r 8.8.8.8.8.8.8.8.. Z 1 S 8.Z . 8.w A 8.r G 8.. w G G G [.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.!._.1.3.8.|.+.I A t r n n n n r r t x A I T ].|.4.1.<.{.%.` Y Y Y Y Y @.!.}.8.8.                                            ",
+"                  8.4.{. .Y Y Y Y Y Y Y %.{.2.8.8.w . . 1 ~ . e e . *.O . . e 8.w . - 1 . - /.e . r M . . Z e . e e . e 8.8.8.8.r r [.[.*.8.~ w [.[.:.8.e G e G 8.. S 8.G 1 8.e G . M [.r G 8.e S 8.8.8.8.8.1 G 8.S - *.. M [.r G 8.e M 8.. M [.r G 8.8.8.8.S [.[.A 1 8.. S 8.G 1 8.e G 8.e M 8.~ w [.[.:.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y ` ;.(.1.4.4.Z B n 9 9 9 9 e e e n n n r r t t t w w x x D S ].4.2._.,. .Y Y Y Y Y @.^.2.8.8.                                        ",
+"                8.3.!.` Y Y Y Y Y Y %.^.2.8.8.8.8.[.w - . ~ w S . . 8.*.. . A 8.[.w . . r /.8.. . G [.. . w . . G . . G 8.8.8.8.*.e . ( S 8.*.( . - M 8.- Z - Z 8.A . ~ 1 e 8.- Z G . e 1 M 8.. Z 8.8.8.8.8.. . . 1 Z 8.G . e 1 M 8.r . G G . e 1 M 8.8.8.8.r . . r /.8.A . ~ 1 e 8.- Z 8.r . G *.( . - M 8.8./.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v &.}.;.` Y Y Y Y Y Y Y Y  .,.<.3.8.#.A e 4 5 5 9 9 9 9 e e e n n n r r t t t w w x x A A B D V :.4.}.!.@.Y Y Y Y ` ;.<.8.8.                                      ",
+"              8.4.!.Y Y Y Y Y Y Y !.}.8.8.].N N /.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.v > * = ' ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y ).8.}.;.` Y Y Y Y Y Y ` ;.<.4.3.P r 4 4 4 4 5 5 5 9 9 9 e e e n n n r r t t t w w x x A A B B D D P ).4.}.!. .Y Y Y Y @.(.3.[.                                    ",
+"            8.8.{.Y Y Y Y Y Y @._.8.8./.I l [ [ v O ~.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.2.X g * & & & & & { [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.}.;.` Y Y Y Y Y Y %.(.3.4.M e 1 1 1 4 4 4 5 5 9 9 e e e n r t w w w t t t w w w x x A A B B D D G I P ~.4.<.=.Y Y Y Y ` !.1.8.                                  ",
+"          8.8._.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m d * & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.<.%.` Y Y Y Y Y ` ,.}.8.V n 1 1 1 4 1 4 4 5 9 e n r r t t w w x x x A x w t w w w x x A A B B D D I K K M U :.2.{.@.Y Y Y Y =.}.8.                                ",
+"          |.}.@.Y Y Y Y Y %.<.8.:.F } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < } 3 3 3 / [ [ [ [ [ < < < < < < < < < < < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m k ! & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y /.8.<.%.Y Y Y Y Y Y @.(.3.:.x 1 1 1 1 1 1 4 5 5 9 n r r t t r w x r ( ) 4 x B w w w x x x A A A B B D D I I M M P P *.3._.%.Y Y Y Y %.}.8.                              ",
+"        8.3.,.Y Y Y Y Y =.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < 6 m m m m m m m k 2 < [ [ ^ } [ [ [ [ [ [ [ [ [ < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 i m m m m m m m k / & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v ).8.}.%.Y Y Y Y Y Y %.<.4.S e 1 1 1 1 1 1 5 e n n r r n 4 ~ @ . w x . . . . x G A x x x A A A A B B B D D G K K O P R S X [.1.,.Y Y Y Y @.<.8.                            ",
+"        8._.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 d m m m m m m m m m m m h 2 _ k m m m m m m m m m m k _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8 m m m m m m m k ] & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q &.8.}.%.` Y Y Y Y Y =.}.8.D 4 1 1 1 1 1 4 5 e n r r r n . . . @ 1 A e . - I A M M D B B B B B B B B B D D D G I M O P R T V V /.2.!.Y Y Y Y @.<.8.                          ",
+"      |.1.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < d m m m m m m m m m m m m m m j 8 j m m m m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m k ; & & & & & = [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 0 T 8.}.;.` Y Y Y Y Y ;.1.|.w 4 1 4 1 1 4 4 4 e n e ) . 9 x 4 ~ . @ O P x . . % t S X R I G G G G D D D D D D G I K K M P R T V Z +.~.3.{.Y Y Y Y @.}.8.                        ",
+"      8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 6 m m m m m k ] & & & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 L 8.3.!.` Y Y Y Y Y ;.1.:.t 4 4 4 4 4 5 5 9 9 r t % . ) w I O B . . O *.>.t . . . r ].~.R P P O M M K I I I I I I K K O P R T X Z #.$.).|.{.` Y Y Y =.1.|.                      ",
+"    [.2.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 3 d m k 8 < ^ ' * & & * ' _ [ [ [ [ [ [ [ [ [ [ [ [ [ 2 z |.8.^.` Y Y Y Y Y ;.1./.r 5 4 4 4 4 9 e n r t w r . . I R S #.*.. . D [.|.|.~.9 . - 4.|.Z Z X V U S R P O M M K K K M M P R T X Z #.$.$.).|.{.Y Y Y Y !.3.8.                    ",
+"    8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m j h d f k m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 6 2 _ [ [ [ } ] ] } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q >.8.<. .Y Y Y Y Y =.1.:.r 5 5 5 4 4 9 n n e n x B x . . M *.)./.:.5 . n 4.4.~ w ~ . n 8.4.#.#.#.#.+.Z X V T S P P O O O O P R T X Z #.$.*.*.~.2.!.Y Y Y ` ^.8.8.                  ",
+"  8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m 8 3 [ < < < < 3 h m m m m m m m m m k h h d d 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 O 8.1.=.` Y Y Y Y %.}.[.t 9 5 5 5 5 9 n r 4 . @ t M S % . e /.[./.3.B . - 8./.. . . 1 >.8.[.$.$.$.#.#.#.#.Z Z X V T R R P P P R T V Z $.$.*.*.*.].2.,.Y Y Y  .<.8.                  ",
+"  |.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m k } _ [ [ [ [ [ [ [ [ 6 m m m m m m m m 6 _ < _ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] _ [ [ [ [ [ [ [ < < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] < < ] ] ] ] ] < } a d d d d 3 [ [ [ [ [ [ [ [ [ [ [ [ [ z |.4.{.` Y Y Y Y @.<.4.x 9 9 9 9 5 e n r r . . . . t $.t . . B B - [.+.- n |.8.8.>./.8.8.3.).$.$.$.$.$.$.#.#.#.+.Z X V U S S R S T V Z #.*.*.*.*.>./.1.=.Y Y Y =.1.[.                ",
+"  8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ k m m m m m m 8 } [ [ [ [ [ [ [ [ [ [ ] d m m m m m m m 2 [ ] ' ; * * * * * * * * * * * * * * * & * ' ] [ [ [ [ [ < ' ; = * * * * * * * * * * * * * * & = ; ! < [ [ ] * & * & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & * * & ! < ' & * * & ] 2 k m m m m 6 [ [ [ [ [ [ [ [ [ [ [ [ c #.8.<. .Y Y Y Y ` ^.8.G 9 9 9 9 9 n r t w A ~ . ) . . e *.( . . . - /.8.8.8.4.8.8.8.8.8.3.).$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V U T T U V Z $.$.*.*.>.>.>.[.<.@.Y Y ` {.8.8.              ",
+"8.4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 m m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m k _ ] * & & & & & & & & & & & & & & & & & & & & = ] [ [ [ < ; & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < h m m m m 6 [ [ [ [ [ [ [ [ [ [ [ 2 F |.3.;.` Y Y Y Y ,.3.U e e 9 9 e n r r ( w G x . % 4 . . 1 Z I 9 I |.8.4.4.4.[.*.).).).>.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.Z Z X V V V *.~./.:./.*.>.>.>.>.|.^.Y Y Y  .<.8.              ",
+"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] ; & & & & & & & & & & & & & & & & & & & & & & = < [ < ' & & & & & & & & & & & & & & & & & & & & & & & ! [ ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ [ l >.8._. .Y Y Y Y %.}.:.r e e e e n t t - . e P X ) . . ( . . 9 8.8.8.8.4.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z #.:.[.|.4.8.8.3.>.>.).).~.2.,.Y Y Y ;.4.8.            ",
+"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 8 ' & & & & & & & & * = = = = = = = & & & & & & & & ' [ ] = & & & & & & & & = = = = = = = & & & & & & & & ; < ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ 2 F |.2.=.Y Y Y Y ` (.8.B e e e e r t w ~ . @ M X *.x . . :.Z x |.8.|.|./.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.*.|.|.|.K B P 8.8.3.>.).).).:.<.@.Y Y ` _.8.            ",
+"|.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ j m m m m m 2 ' & & & & & & & ' ] ] ] ] ] ] ] ] ' = & & & & & & > [ ! & & & & & & & ; ! ] ] ] ] ] ] ] ' * & & & & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ g *.8.(. .Y Y Y Y ;.3.Z n n n e n t w ( . . . ) R /.].. . I 8.8.8.|.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.>.3.3.$.~ . . + 5 8.8.[.).).).).|.{.Y Y Y =.3.8.          ",
+"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < j m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m < ' & & & & & = ] < [ [ [ [ [ [ [ [ < ] = & & & & & > [ ' & & & & & & ' < [ [ [ [ [ [ [ [ < ] ; & & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ C |.2.=.Y Y Y Y  .<.4.w n n n n t w x ) ) n . . % Z |.t 1 >.8.:.:.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.4.*.- . . 1 ~ % G 8.[.).).~.~./.1.@.Y Y ` _.8.          ",
+"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m d < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m k < ' & & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & & > [ ' & & & & & ; _ [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ 7 ..8._. .Y Y Y Y ;.4.R r r n n t w w x B I V B . . % M [.[.8.3.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.4.n . . M 4.|.4 V 8.[.~.).~.~.~.|.^.` Y Y =.3.8.        ",
+"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ _ ' & & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ v :.4.,.Y Y Y Y ` <.4.t r r r r w x ) @ n P $.~.S % . ~ 8.3.3.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.8.. . I 4.4.8.8.8.4.4.8.].~.~.]./.1.@.Y Y  .<.8.        ",
+"8.@.Y Y Y Y Y 8.8.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 6 < ' & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] * & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ 2 N 8.}.@.Y Y Y Y =.3.T t t r r t x A ( . . ) D :.|.$.~ >.8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.*.>.*.>.*.>.*.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.8.8.1 . O 4.4.8.8.8.8.:.8.4.].~.].].|.{.Y Y Y !.8.        ",
+"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ m m m m m m j < [ [ [ [ [ [ [ [ [ [ [ [ ^ f m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] & & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ / ; & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ g *.8.{.` Y Y Y Y (.8.x t t t w A A n w x 1 . . ( X 4.8.8.4.>.$.$.$.$.$.$.$.*.*.*.>.>.>.).).).).).).).).>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.3.8.+.. - >.4.+.I t ( 4 |.8.[.].].].:.}. .Y Y %.}.8.      ",
+"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ < d m m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ y :.2.=.Y Y Y Y @.1.>.w t t t A B n . . . % . . . . T 8.3.).$.$.$.$.$.$.*.*.*.>.>.).).~.~.].].].].].~.~.).).>.>.*.*.*.$.$.$.$.$.$.$.$.).8.8.T - 9 . . + % ) ( M 8.|.].]././.3.;.Y Y ` _.8.      ",
+"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < a m m m m m m m 6 2 [ [ [ [ [ [ [ 2 3 i m m m m m m m k < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; / [ [ [ [ [ [ [ [ [ [ [ < ] = & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ K 8.<.@.Y Y Y Y !.4.I w w w w A B ) . . . ) . . . 1 8.8.~.$.$.$.$.$.$.*.*.*.>.).).~.].]./././././././.].].~.).).>.*.*.*.$.$.$.$.$.$.$.$.~.8.8.w . . . ~ e ) ~ I 8.|.].]././.[.(.Y Y Y ,.8.      ",
+"8.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m f 3 } 3 3 2 2 6 f m m m m m m m m m d _ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < < < < < < < < < < < ] ' & & & & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 0 +.8.^.` Y Y Y Y _.4.x w w w w B D D n . . % A $.Z >.8.3.$.$.$.$.$.$.*.*.>.>.).~.]././.:.:.:.[.[.[.:.:././.].~.).).>.*.*.$.$.$.$.$.$.$.$.$.[.8./.w T - + @ - A 8.8.|./.]././.:.}. .Y Y @.8.8.    ",
+"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < i m m m m m m m m m k f k f k m m m m m m m m m m m 3 < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & = ] ^ * & & & = > ' ' ' ' ' ' ' ' ' ; * & & & & & & & & ] < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ s ].3.;.Y Y Y Y @.1.*.x x x w x D G K P P n . . - Z 8.3.>.$.$.$.$.$.$.*.*.>.).~.]./.:.:.[.[.[.:.[.:.[.[.:.:./.].~.).>.>.*.*.$.$.$.$.$.$.$.$.>.[.8.8.>.~ + @ K 8.8.8.8.[.:././.:.|.;.Y Y ` _.8.    ",
+"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < } m m m m m m m m m m m m m m m m m m m m m m m m m [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ; < < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ z |.}.%.Y Y Y Y ;.3.K A x x A G G D n r x #.V 9 . /.8.).$.$.$.$.$.$.*.*.>.).~.]./.:.[.[.[.:.[.[.:.[.[.[.[.:.:./.].~.).>.*.*.$.$.$.$.$.$.$.$.$.>.4.8.~ . . P 8.8.~.S [.8.|././.:.|.^.Y Y Y {.8.    ",
+"  4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m m m m m m m m m m m m m m m m k < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & & ; < [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ] [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ L 8.<.@.Y Y Y Y {.8.B A A x D I x . . . . . x [./.8.8.>.$.$.$.$.$.$.*.>.).~.]./.:.[.:.[.:.[.[.[.[.:.[.:.[.[.:./.].~.).>.*.*.$.$.$.#.$.$.$.$.$.$.4.8.B - T U w 5 1 9 R 8.|./.:.:.[.<.Y Y Y ;.4.    ",
+"  8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m m m m m m m m m d d m m m m m d < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & ' < [ [ [ [ [ [ [ [ [ ] ; & & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & ; ] [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ U 8.^.` Y Y Y Y _.3.A A A A I K 1 . ~ ~ . . . x 8.8.>.$.$.$.$.$.$.*.*.>.).]./.:.[.[.[.:.[.[.:.[.:.[.[.[.:.[.:.:./.~.).>.*.*.$.$.#.#.#.$.$.$.$.$.:.4.|.~ . + % ) ( 9 M 8.|./.:.:.:.1.@.Y Y @.3.:.  ",
+"  8.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 k m m m m m m m m m m k j [ ] d m m m m m 6 _ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & & ; ! ] ] ^ ^ ^ ] ] ' = & & & & & & = ] ^ * & & & = ' ' ' ' ' ' ' ' ' ' * & & & & ' ] < [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ &.8.!.Y Y Y Y @.}.>.B B B A K M - . I *.#.B . 1 8.3.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.:./.].~.).>.*.$.$.#.#.#.$.$.$.$.$.*.4.8.1 . + ( B Z 8.8.8.|./.:.:.[.|.%.Y Y Y }.[.  ",
+"  8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 a k m m m m k d 8 3 _ [ ^ k m m m m m 3 [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ] = & & & & & & & & & = = = = * & & & & & & & & & ; _ ] * & & & ; < [ [ [ [ [ [ [ [ < > & & & & { [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ ).8.;.Y Y Y Y %.1.T D B B B M O 1 . . ( A B . 9 8.3.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.:.[.~.I n ~ + ~ n I ~.[.:./.].~.>.*.*.$.#.+.+.#.#.$.$.$.$.$.3.8.A . I 8.8.8.8.8.|.[.:.:.:.[.|.,.Y Y Y _.|.  ",
+"    8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 } _ < 2 2 < [ [ [ < } m m m m m k < [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < < ' & & & & & & & & & & & & & & & & & & & & & & & ] [ ] * & & & ; < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ :.8.%.Y Y Y Y =.2.M D D D B K P G ) . . . . . B 8.|.$.$.$.$.$.$.*.*.>.~.].:.[.:.[.[.:.[.S e $ , : | | | , n R /.].~.).>.*.$.$.+.Z Z #.#.$.$.$.$.$.:.8.+.. w 8.8.8.8.8.8.3.[.:.[.:.|.{.Y Y Y ^.8.  ",
+"    8.8.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ^ [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < [ < ' & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 2.8.%.Y Y Y Y ;.4.I G D D G P P T S x 4 9 9 B 8.8.:.$.$.$.$.$.$.*.>.).~./.:.:.[.[.:.[.S 4 , : : | b b p u b 9 P ~.).>.>.*.$.#.Z X Z +.#.$.$.$.$.$.).8.8.~ D 8.).*.>.R $.8.4.:.:.[.|.^.Y Y Y !.8.  ",
+"      8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 k k 8 3 [ < [ [ [ [ [ [ [ [ [ < 2 k m m m m m m 3 [ [ [ < ' = = = = ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = = = = ; < [ [ _ ' * = = = = = = = = = = = = = = = = = ; ] < [ [ ] ; = = = ; < [ [ [ [ [ [ [ [ < ; = = = = ] [ [ [ [ [ < ' = = = = ] } d k i i i 6 [ [ [ [ [ [ [ 8.8. .Y Y Y Y ,.8.I I G G R T D I Z *./.|.[.>.8.|.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.).e , | | | | b p u u o b e #.).:.).*.).Z [.[.X Z #.$.$.$.$.$.$.4.8.r . @ - ( 9 r I 8.8.:.[.[.[._.Y Y Y ;.8.  ",
+"      8.8.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m 8 6 3 3 6 6 3 3 6 k m m m m m m m f ] [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] ] [ [ [ [ [ < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y !.8.I I I G V U ~ % +.>./.3.- 9 4.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.I , | | | b b p u u o J J : B *.4.:.>.4.Z [.3.V Z #.$.$.$.$.$.$.|.8.9 . + - ( 9 r A 8.8.[.[.[.[._.Y Y Y %.8.  ",
+"        8.(.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ < d m m m m m m m m m m m m m m m m m m m m m m m m < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.K K K I X X . % X ).:.[.- ~ 8.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.[.:.n : b b | # p u u , u J J p e $.4.[.].8./.|.8.U Z #.$.$.$.$.$.$.|.8.w . I x ( |.D x 8.8.[.:.[.[.<.Y Y Y %.8.  ",
+"        8.8.;.Y Y Y Y Y %.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m m m m m m m m m m m m m m m m m 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.M M K K Z Z ~ . . 4 5 ~ . 9 8.4.$.$.$.$.$.$.$.*.>.).~./.:.:.[.:.[.~ b p p p b $ p , | J J J W ) T |.8.8.8.8.8.8.T Z #.$.$.$.$.$.$.[.8.B . +.G ( ).K A 8.8.:.[.[.[.<.Y Y Y  .8.8.",
+"          8.}.@.Y Y Y Y Y =.<.8.:.F 2 [ [ [ [ [ [ [ [ [ [ ^ d m m m m m m m m m m m m m m m m m m m m m m m 3 _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P O O M Z #.O % . . . . . T 8.|.$.$.$.$.$.$.$.*.>.).~.]./.:.:.[.[.+ u u u u o b . : J J '.'.'.. M *.:./.>.).$.#.S X #.$.$.$.$.$.$.:.8.B ~ >./.|.8.~.].8.8.[.:.[.[.<.Y Y Y @.8.8.",
+"          8.8.(.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ 2 d m m m m m m m m m m m m m m m m m m m m m h 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P P P O P $.$.U A e 5 B /.8.8.~.$.$.$.$.$.$.$.*.>.).~.]././.:.:.:.~ u u o J u , : - u J '.'.W - G I K I I I K O S X #.$.$.$.$.$.$.:.8.+.D +.#.8.8.8.8.8.4.[.[.:.[.<.Y Y Y @.8.8.",
+"            8.8.{.Y Y Y Y Y Y %._.8.8./.I l [ [ [ [ [ [ [ < 3 3 3 8 h k m m m m m m m m m m m m m m i 2 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.R R R P P R *.>.)./.[.4.8.8.~.$.$.$.$.$.$.$.$.*.*.>.).~.]./././.:.n p J J u , | J p ' W '.'.E ( A D B B D G K O S X #.$.$.$.$.$.$.:.8.D . @ ) 1 n G O 4.8.[.[.[.[._.Y Y Y %.8.8.",
+"              8.3.!.Y Y Y Y Y Y Y !.}.8.8.].N v 2 [ [ [ [ [ [ [ [ } < [ 3 a d d d d d d d d d d d 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ,.8.R T S R P P R X $.)./.[.:.>.$.$.$.$.$.$.$.$.$.*.*.>.).~.~.].].]./.D : J J J B J '.'.H ].'.'.n 9 X [.B A B D I M S X #.$.$.$.$.$.$.:.8.>.D A r e r x D 8.8.[.:.[.[._.Y Y Y =.8.8.",
+"                8.2.!.Y Y Y Y Y Y Y %.(.1.8.8.8.>.Q C v g 7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ;.4.T V U T S R R P R T Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.>.>.).).~.~.~.~.#.9 b '.J '.'.'.'.'.'.'.G ) B 3.$.B O S G I M S X #.$.$.$.$.$.$.4.8.+.D e ) 5 r A O 8.8.[.[.:.[.(.Y Y Y !.8.8.",
+"                  8.3.{.` Y Y Y Y Y Y Y %.{.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.` Y Y Y Y =.3.V Z X V U S S S S U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.>.>.~./.:.].>.M 9 b '.'.'.'.'.'.'.G ) 1 R 8.X ).8.8.~.K O S Z #.$.$.$.$.$.$.8.8.~ + % ~ A #.3.8.8.4.[.:.[.|.{.Y Y Y {.8.8.",
+"                    8.8.(.%.Y Y Y Y Y Y Y Y Y =.{._.}.2.4.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.` Y Y Y Y Y %.1.+.+.Z Z X V T T T U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.*.].3.8.8.4.].$.G 4 n E W '.W M n $ ( 5 I 8.8.8.[.:.8.R P U Z #.$.$.$.$.$.*.8.8.+ @ - ( e w B *.8.3.[.[.:.|.!.Y Y Y (.8.8.",
+"                      8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.}.~.#.#.+.Z X V V U V Z #.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.~.4.8.4.[.8.|.+.R G n ( & + % - ~ 1 4 5 n O *.T D ].4.R P V Z #.$.$.$.$.$.:.8.|.U V G G B G D *.8.|.[.:.[.|.=.Y Y Y <.8.8.",
+"                        8.8.3.(.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` <.|.$.$.$.#.+.Z X V X Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.8.|.).$.).>.T X V I x t n e x $.].P e 9 e t t S 4.*.O R X +.#.$.$.$.$.$.4.8.A @ w X 8.8.8.8.8.8.3.[.[.:.1.@.Y Y  .2.8.8.",
+"                            8.8.1.^.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.^.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y %.^.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y Y Y ^.4.+.$.$.$.#.#.Z Z Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.|.8.>.+.Z V S P /.4.X x t r w :.8.8.8.S e n t w M $.M P T X #.#.$.$.$.$.).8.8.- @ - ~ t R |.8.8.3.[.:.[.[.<.` Y Y =.4.8.8.",
+"                                |.8.2.(.;. .Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @._.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y @._.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y Y Y Y ,.4.~.*.*.$.$.$.#.+.Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.:.8./.X U S P O |.8.M w t r I 4.#.B 8.|.A r w x B I M R V Z #.$.$.$.$.$.:.8.+.@ 5 4 ( n x G +.8.3.[.[.:.|.^.Y Y Y !.8.8.8.",
+"                                    [.8.4.}.^.;.@. .` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ^.8.8.8.8.8.'.J o J '.8.8.8.[.. . . G 8.e . 8.~ . . . /.~ . . . ).. . . w [.. . . r e M 8.w w 8.8.8.8.8.8.8.^.Y Y Y Y Y Y ^.8.8.8.8.8.8.8.8.8.8.8.8.*.1 e e 8.[.- [.w . - M [.. *./.- 8.e . 8.8.[.- 8.8.8.8.8.'.J o J '.8.8.8.8.8.^.Y Y Y Y Y Y Y Y Y %.1.:.*.*.*.*.$.$.#.#.+.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.#.$.[.|.X S P O U 4.3.B w t r I 4.:.t >.8.O w x B G K P T X +.#.$.$.$.$.$.:.8.D @ t |.>.K D K ).8.3.[.:.[.|.,.Y Y Y _.8.8.8.",
+"                                        8.8.8.8.1.<.(.{.=.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.1.8.8.8.8.8.J o o o J 8.8.8.+.1 Z G w Z ~ e Z 8.G G 8.8.8.G G 8.Z 1 Z +.[.+.e 8.*.. S ~ A e 8.8.8.8.8.8.8.8.1.%.%.%.%.%.%.1.8.8.8.8.8.8.8.8.8.8.8.8.I r [.M /.+.e w x [.*.r +.. w S e Z ~ e Z 8.+.e 8.8.8.8.8.J o o o J 8.8.8.8.8.1.%.%.%.%.%.@.Y Y Y ` <.|.*.*.*.*.*.$.$.$.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.V S P M $.8.].A x w t A |.4.G K 8.X A B G K P S V Z #.#.$.$.$.$.:.8.8.>.% ) 4 K $.I M 4.8.|.[.[.:.1.@.Y Y @.1.8.8.8.",
+"                                                8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.o o o o o 8.8.8.G ~ e - Z e M w M 8.r S 8.8.8.r S 8.G ~ e e [.G . . ~ G 8.~ 1 [.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.[.r - G 8.G G . [.x e A G A ~ A G e M w M 8.G G 8.8.8.8.8.o o o o o 8.8.8.8.8.8.8.8.8.8.8.1.%.Y Y Y {.4.~.>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V S P O /.8.#.B A x w w #.8.:.].8.R D G K P S V Z +.#.$.$.$.$.).8.8.A P x ~ 4 r A K +.8.8.[.:.[.[._.Y Y Y ;.3.8.8.8.",
+"                                                                      8.8.1.1.1.1.1.1.1.1.1.1.1.1.8.8.8.8.8.8.J o o o J 8.8.8.r S 8.w w . . . G 8.- /.8.8.8.- /.8.r S 8.8.8.r S /.~ /.8.e S 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.G 8./.. 8.r S - *.Z r G r S w . B . . . G 8.r S 8.8.8.8.8.J o o o J 8.8.8.8.8.8.1.1.1.1.2.8.}.` Y Y %.2.:.>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z X U R T |.8.|.).I A A A B >.8.8.*.I I M P S V Z +.#.#.$.$.$.$.~.8.+.@ % R *.G A I +.4.8.3.[.[.:.|.,.Y Y Y ^.8.8.8.8.",
+"                                                                      8.8.}.5.5.5.5.5.5.5.5.5.5.5.1.8.8.8.8.8.'.J o J '.8.8.8.~ . . e ) Z 8.S r /.~ 8.8.8./.~ 8.8.~ . . ~ 8.~ /.8.G A 8.- /.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.A 1 e G 8.~ /.M - . r *.~ :.*.. ) Z 8.S r 8.~ . . w 8.8.8.'.J o J '.8.8.8.8.8.1.5.5.5.5.5.4.3.=.Y Y ` _.3.).>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V U S X >.[.3.R D D D D G K M K M P R U X Z +.#.#.$.$.$.$.~.8.8.|.5 - 1 ].8.8.8.8.8.3.[.:.[.[.1.@.Y Y @.}.8.8.8.8.",
+"                                                                        8.1.5.5.5.5.5.5.5.5.5.5.5.5.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.2.5.5.5.5.5.5.2.8.^.Y Y Y ,.4./.).).).>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V T R P O O M K K K M M P P S U V Z Z #.#.#.$.$.$.$.).8.8.U /.P ) ( r :.8.8.8.3.[.[.[.:.|.^.Y Y Y ;.4.8.8.8.8.",
+"                                                                        8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.1.3.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.3.1.5.5.5.5.5.5.5.}.8.}.@.Y Y  .}.|.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z X V U T T S S T T U V X Z Z +.#.#.#.$.$.$.$.$.).4.8.+.@ % ( 4 w t D |.8.4.[.[.[.:.[.|.%.Y Y ` _.8.8.8.8.8.",
+"                                                                          8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.!.Y Y Y !.8./.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.+.+.+.+.+.+.#.#.#.#.#.#.#.$.$.$.$.$.$.).4.8.>.4 ) - ~ 4 w A I S 8.4.[.:.[.[.|.(.` Y Y %.2.8.8.8.8.8.",
+"                                                                          8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.<. .Y Y @.}.|.~.~.~.~.).).).>.>.*.*.*.$.*.|.8.8.8.8.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.4.>.) % R S A e w G M X 8.4.[.[.:.[.|.%.Y Y Y ^.8.8.8.8.8.8.",
+"                                                                            8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.4.3.,.Y Y Y !.4.:.~.~.~.~.~.).).>.>.*.*.*.|.8.8.8.8.8.8.[.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.8.8.>.) - ~ U 8.3.>.X O 4.8.4.[.[.[.|.(.` Y Y %.1.8.8.8.8.8.8.",
+"                                                                            8.8.1.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.1.8.<. .Y Y  .<.3.].].].~.~.~.~.).>.>.*./.8.|.e + + A 8.8.[.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.>.) t B ~ ( e #.8.8.8.8.8.8.[.:.[.[.}.%.Y Y Y (.8.8.8.8.8.8.8.",
+"                                                                              8.4.}.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.4.4.!.Y Y Y =.2.[.].].].].].~.~.).).>.:.8.K % @ @ + w 8.8.8.~.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.|.( % - ~ ( e t D [.8.8.8.8.[.[.[.:.|.{.Y Y Y =.2.8.8.8.8.8.8.8.",
+"                                                                                8.4.}.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.}.8.}.@.Y Y ` {.4.:.].].].].].].~.~.[.4.8.G - ( |.~ - I |.8.8.4.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.$.I n e I D K O |.8.[.:.[.[.:.|.<. .Y Y ` (.8.8.8.8.8.8.8.8.",
+"                                                                                  8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.^.` Y Y  .<.3./././././.].].|.4.8.|.$.) - #.).>.- + U 8.8.4.|.|.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.8.P t K U M S 4.8.[.[.:.[.[.[.%.Y Y Y ,.8.8.8.8.8.8.8.8.8.",
+"                                                                                    8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.2.;.Y Y Y %.1.|././././././.|.8.M n |.r ~ A 8.V % @ +.- A 8.8.8.|.|.|.|.[.].$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.].[.8.Z B M M +.4.8.4.[.:.[.[.|.!.Y Y Y %.}.8.8.8.8.8.8.8.8.8.",
+"                                                                                      8.8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.1.8.}. .Y Y Y ,.2.[.:././././.|.8.U r r n 4 B 8.w - n e @ r I 9 +.8.8.8.8.8.4.].$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.>.).~.[.8.8.$.V *.8.8.4.[.[.[.:.|.{.` Y Y ` (.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                        8.8.8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.(.` Y Y Y !.3.[.:.:.:.:.|.8.8.V w r r :.|.( ~ 4 - % D ) @ r U 9 9 r O 8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.3.8.8.8.8.8.3.[.[.:.[.|.(. .Y Y Y !.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                          8.8.8.4.1.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.4.3.!.Y Y Y Y {.3.[.:.:.:.:.|.8.8.3.].3.8.Z 9 4 ( ~ ~ n - ) #.@ @ + + - |.4.*.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.:.[.[.3.4.4.4.3.[.[.:.[.|._. .Y Y Y =.1.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                              8.8.8.8.3.2.}.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.1.=.Y Y Y ` {.3.[.:.:.:.:.|.8.8.8.8.8.K t r r w 4 ( ~ I M - - /.#.P 8.4.*.$.$.$.*.*.*.*.>.>.).~.]././.:.[.[.[.:.[.[.[.[.[.[.:.[.|._. .Y Y Y @.}.8.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                                    8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.%.Y Y Y ` {.3.|.[.[.[.[.[.[.[.8.8.D B A ].A r n t 8.].1 ( 4 $.8.4./.>.>.>.>.>.).).).~.].]./.:.:.[.[.:.[.:.[.[.:.[.:.[.:.[.|._. .Y Y Y  ._.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                                            8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.<.@.Y Y Y ` !.2.|.:.[.:.[.[.[.8.8.4.).*.|.B A x ].8.8.+.n n r [.8./.~.~.~.~.].].]././.:.:.[.:.[.[.[.[.:.[.[.:.[.[.[.:.[.|.(. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                      8.<.@.Y Y Y Y ,.1.|.:.[.:.[.:.[.8.8.8.8.|.P I T 8.8.:./.:.A x ].8.:./././.:.:.:.:.:.[.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.[.|.^. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                        8.<.@.Y Y Y Y =.<.3.:.[.:.[.[.[.|.|.4.8.8./.|.8.8.U K I I I [.8.[.:.:.[.[.:.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.|.[.!.` Y Y Y  .(.8.8.8.8.Z G /.8.8.8.8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                          8.}.=.Y Y Y Y @.^.3.|.:.[.:.[.[.[.[.4.8.8.8.4.8.:.X R S ].8.8.[.[.[.:.[.[.:.[.:.[.:.[.[.:.[.[.:.[.[.[.[.:.[.|._.%.Y Y Y Y @._.8.8.8.*.G . - r /.8.M A 8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                            8.1.!.` Y Y Y Y ,.<.4.[.[.:.[.:.[.[.|.|.|.|.4.8.8.8.8.8.8.|.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.[.:.[.|.[.{. .Y Y Y Y =.}.8.8.8.:.r . - *.8.8./.~ [.8.[.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                              |.3.^. .Y Y Y Y @.{.1.3.[.[.[.:.[.:.[.:.[.[.4.4.4.4.4.|.[.:.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.:.|.|.(.%.Y Y Y Y Y !.1.8.8.8.[.G . ~ 1 *.8.8.S . M M G 8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                /.8.<.=.Y Y Y Y Y %.^.1.3.[.:.[.[.:.[.[.[.[.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.|.|.(.%.` Y Y Y Y %.(.4.8.8.8.8.w . 1 G . - *.*.- . . 1 [.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                  8.8.1.{. .Y Y Y Y ` %.{.}.3.|.[.[.:.[.:.[.:.[.:.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.:.[.[.|.1.^.%. .Y Y Y Y ` ,.}.8.8.8.8.8.8.[.1 A 8.G . - 1 . w 8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                      [.8.<.;.` Y Y Y Y Y  .;.(.}.3.|.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.|.|.1._.,.@.Y Y Y Y Y ` =.(.8.8.8.8.8.8.8.8.8.|.8.8.8.w . . e 8.8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                          8.4._.=. .Y Y Y Y Y Y  .;.^.<.1.2.|.|.|.[.[.[.[.[.[.[.[.[.|.|.|.1.<.^.,.@.Y Y Y Y Y Y @.=.^.2.8.8.8.8.8.8.8.8.8.8.8.8.8.[.1 . . . M 8.8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                            8.8.2._.=. .Y Y Y Y Y Y Y Y @.%.,.{.^._._.<.<.<.<._._.(.{.!.=.@.Y Y Y Y Y Y Y Y @.,.<.4.8.8.8.8.8.8.8.8.8.8.8.8.8.>.G 1 . 1 w . . M 8.8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                                8.8.3.<.!.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y =.{.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.~ r . 1 [.8.w . . M 8.8.8.8.",
+"                                                                                                                                                                                                                                                                                                                                                                                                    8.8.8.}._.,.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{._.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.>.*.8.1 G 8.8.8.r . . Z 8.8.  ",
+"                                                                                                                                                                                                                                                                                                                                                                                                          8.8.4.1._.{.;.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{.(.}.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.*.~ *.8.8.8.[.1 w 8.8.8.  ",
+"                                                                                                                                                                                                                                                                                                                                                                                                                8.8.8.4.2.}._.^.!.;.%.%. .@.@.=.{.(._.}.1.3.4.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.*.:.8.8.8.8.8.[.8.8.8.    ",
+"                                                                                                                                                                                                                                                                                                                                                                                                                        8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.      ",
+"                                                                                                                                                                                                                                                                                                                                                                                                                                      8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.          "};
diff --git a/xgnokii/xpm/info.xpm b/xgnokii/xpm/info.xpm
new file mode 100644 (file)
index 0000000..27d9358
--- /dev/null
@@ -0,0 +1,73 @@
+/* XPM */
+static char *info_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    30    64        2            1",
+/* colors */
+". c #000000",
+"# c None",
+/* pixels */
+"##############################",
+"###############....###########",
+"###########...........########",
+"########...............#######",
+"######..................######",
+"####.....................#####",
+"###......................#####",
+"##.......................#####",
+"##.......................#####",
+"##.......................#####",
+"##......................######",
+"##.....................#######",
+"###..................#########",
+"####...............###########",
+"######.........###############",
+"##############################",
+"##############################",
+"##############################",
+"##############################",
+"#####################...######",
+"###############..........#####",
+"###########..............#####",
+"#######..................#####",
+"#####....................#####",
+"###......................#####",
+"##.......................#####",
+"#........................#####",
+"#........................#####",
+"#........................#####",
+"##.......................#####",
+"###......................#####",
+"####.....................#####",
+"#####....................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######....................####",
+"#####.....................####",
+"#####.....................####",
+"####.......................###",
+"###.........................##",
+"##...........................#",
+"#.............................",
+"#.............................",
+"#.............................",
+"#............................#",
+"##..........................##",
+"####.......................###",
+"########...............#######",
+"##############################",
+"##############################"
+};
diff --git a/xgnokii/xpm/logo.xpm b/xgnokii/xpm/logo.xpm
new file mode 100644 (file)
index 0000000..d42f05b
--- /dev/null
@@ -0,0 +1,369 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the logo of the GUI utility.
+
+  Copyright (C) 1999 FIXME: fill this in.
+       
+  Last modification: Sat Jun 26 07:38:27 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_logo[] = {
+
+"207 105 238 2",
+
+".. c #040204",
+".# c #344244",
+".a c #b4c2c4",
+".b c #14221c",
+".c c #94a2a4",
+".d c #1c3224",
+".e c #dce2dc",
+".f c #3c524c",
+".g c #84928c",
+".h c #041204",
+".i c #a4b2ac",
+".j c #6c6e6c",
+".k c #141214",
+".l c #242224",
+".m c #ccd2cc",
+".n c #8c8a8c",
+".o c #5c6e6c",
+".p c #041a0c",
+".q c #444244",
+".r c #94928c",
+".s c #b4b2ac",
+".t c #a4a2a4",
+".u c #6c7a7c",
+".v c #243a34",
+".w c #c4c2bc",
+".x c #5c625c",
+".y c #848284",
+".z c #344a4c",
+".A c #b4bab5",
+".B c #142224",
+".C c #041214",
+".D c #a4aa9f",
+".E c #040a08",
+".F c #ccdadc",
+".G c #545a58",
+".H c #2c3232",
+".I c #e4eae9",
+".J c #8c9a9c",
+".K c #141a19",
+".L c #242a2a",
+".M c #343a35",
+".N c #041a1c",
+".O c #949a98",
+".P c #5c6a70",
+".Q c #74828c",
+".R c #4c524c",
+".S c #7c7a7c",
+".T c #c4cac9",
+".U c #3c4240",
+".V c #8c9291",
+".W c #647674",
+".X c #444a49",
+".Y c #bcbaba",
+".Z c #0c0a0c",
+".0 c #5c5a5c",
+".1 c #9caaab",
+".2 c #acbabb",
+".3 c #6c7677",
+".4 c #fcf6f8",
+".5 c #747a79",
+".6 c #1c2224",
+".7 c #a4aaac",
+".8 c #1c1a1c",
+".9 c #243233",
+"#. c #848a87",
+"## c #646264",
+"#a c #0c1214",
+"#b c #eceaeb",
+"#c c #2c2a2c",
+"#d c #3c3a3c",
+"#e c #9c9a9d",
+"#f c #cccacc",
+"#g c #7c827c",
+"#h c #bccacc",
+"#i c #9ca29f",
+"#j c #0c120b",
+"#k c #acb2b0",
+"#l c #d4d2cc",
+"#m c #f4f2f4",
+"#n c #0c1a08",
+"#o c #142a2c",
+"#p c #2c3a3a",
+"#q c #fcfafc",
+"#r c #dcdadc",
+"#s c #545a64",
+"#t c #8c929c",
+"#u c #4c4a4c",
+"#v c #747a84",
+"#w c #acaaac",
+"#x c #bcc2bf",
+"#y c #1c221c",
+"#z c #445251",
+"#A c #747274",
+"#B c #948e94",
+"#C c #b4b6bc",
+"#D c #5c666c",
+"#E c #4c5a5b",
+"#F c #3c4a4f",
+"#G c #040e14",
+"#H c #141e24",
+"#I c #343a44",
+"#J c #0c1a1c",
+"#K c #4c525c",
+"#L c #3c424c",
+"#M c #bcbec4",
+"#N c #848a94",
+"#O c #344645",
+"#P c #546262",
+"#Q c #e4e2e4",
+"#R c #6c727c",
+"#S c #24262c",
+"#T c #646e6c",
+"#U c #94969c",
+"#V c #b4b6b4",
+"#W c #5c6662",
+"#X c #84868c",
+"#Y c #7c828c",
+"#Z c #646e74",
+"#0 c #1c2a2c",
+"#1 c #2c363c",
+"#2 c #242e34",
+"#3 c #949aa4",
+"#4 c #c4ced4",
+"#5 c #444e54",
+"#6 c #0c0e14",
+"#7 c #eceef4",
+"#8 c #d4d6dc",
+"#9 c #44565c",
+"a. c #4c5a64",
+"a# c #f4fafa",
+"aa c #d4dada",
+"ab c #646a6f",
+"ac c #747674",
+"ad c #1c3234",
+"ae c #84929c",
+"af c #0c1a14",
+"ag c #040604",
+"ah c #748684",
+"ai c #04160c",
+"aj c #a4b6b4",
+"ak c #6c7272",
+"al c #141615",
+"am c #242623",
+"an c #ccd6d4",
+"ao c #343634",
+"ap c #545654",
+"aq c #8c8e8d",
+"ar c #ecf6f4",
+"as c #949694",
+"at c #a4a6a3",
+"au c #c4c6c4",
+"av c #848684",
+"aw c #b4beba",
+"ax c #142625",
+"ay c #041616",
+"az c #040e08",
+"aA c #545e5b",
+"aB c #2c3634",
+"aC c #e4eeec",
+"aD c #141e1a",
+"aE c #242e2c",
+"aF c #343e3c",
+"aG c #4c5652",
+"aH c #c4cecc",
+"aI c #3c4644",
+"aJ c #8c9693",
+"aK c #444e4c",
+"aL c #bcbebc",
+"aM c #0c0e0c",
+"aN c #5c5e5c",
+"aO c #747e7a",
+"aP c #1c2627",
+"aQ c #a4aeae",
+"aR c #1c1e1d",
+"aS c #243632",
+"aT c #848e8c",
+"aU c #0c1615",
+"aV c #eceeec",
+"aW c #2c2e2e",
+"aX c #9c9e9c",
+"aY c #cccecc",
+"aZ c #7c8683",
+"a0 c #9ca6a0",
+"a1 c #0c160c",
+"a2 c #acb6b4",
+"a3 c #d4d6d4",
+"a4 c #f4f6f4",
+"a5 c #2c3e3a",
+"a6 c #fdfdfd",
+"a7 c #dcdedd",
+"a8 c #acaead",
+"a9 c #bcc6c4",
+"b. c #1c261c",
+"b# c #4c5e54",
+"ba c #3c4e51",
+"bb c #0c1e1e",
+"bc c #64726a",
+"bd c #7c868e",
+"be c #647278",
+"bf c #1c2e2f",
+"bg c #14261c",
+"bh c #94a6a4",
+"bi c #444644",
+"bj c #6c7e7c",
+"bk c #8c9e9c",
+"bl c #7c7e7c",
+"bm c #646664",
+"bn c #3c3e3c",
+"bo c #545e64",
+"bp c #8c969c",
+"bq c #4c4e4c",
+"br c #747e84",
+"bs c #a4a6ac",
+"bt c #343e44",
+"bu c #4c565c",
+"bv c #3c464c",
+"bw c #848e94",
+"bx c #e4e6e4",
+"by c #949ea4",
+"bz c #748284",
+"bA c #34424c",
+"bB c #4c6264",
+"bC c #dce2e4",
+"bD c #849294",
+"bE c #04120c",
+"bF c #a4b2b4",
+"bG c #ccd2d4",
+"bH c #343234",
+"bI c #545254",
+"bJ c #ecf2f4",
+"bK c #041a14",
+"bL c #949294",
+"bM c #b4b2b4",
+"bN c #7c8a94",
+"bO c #1c2a24",
+"bP c #243a3c",
+"bQ c #c4c2c4",
+"bR c #5c6264",
+
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaF.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaFaLa6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.taFaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6#ibnaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6asaF#yavbx#ra6a6a6a6a6a6a6a6a6a6a6a6asaFaDavbx#ra6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.Uaf#AauaL#qa6a6a6a6a6a6a6a6a6a6a6.O.#.KacauaL#qa6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.MaU#WbQ.Ya#a6a6a6a6a6a6a6a6a6a6a6.O.M#jbmbQaLa#a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.VaB#jbRau.A#ma6a6a6a6a6a6a6a6a6a6a6.VaobEbRau.A#ma6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.V.May.Gau.A#ma6a6a6a6a6a6a6a6a6a6a6.V.M#aaAbQ.A#7a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#..M#6.R#x#V#7a6a6a6a6a6a6a6a6a6a6a6#.#p#j#z#x#V#ma6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aw.Y.Ia6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aL.A#b#qa6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aC.jaEagaG.A#C#Qa6a6a6a6a6a6a6a6a6a6aV.jaEag.R.A#C#Qa6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aVakaI#y#p#TaZ#ibGaaa4a6a6a6a6a6a6a6aCak.U.6#pbcaZa0aYaaa4a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl..............................bQa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4aO.x.X#paBbbaR.L.L.Ubla6a6a6a6a6a6arbl.x#F#paS.KaD.L.Lbn.ya6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y..............................aLa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#by.Pad.baPa1bEaMaz.E.Eaqa6a6a6a6a6a#by.P.9.baPaUaMazazaz.EaTa6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.1#E#JaUbO.KaM#jazagaMaKa7.4a6a6a6a6.1a.#JaU#0.K#j.k.EagazbqbC.4a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.Ta.aU.CaB#a.Eagag.....b#V#V#qa6a6a6#h.G.N.CaBaU.Eagag.....b.i#V#qa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6an#9.B#H.#ay..ag.......KbMbMbxa6a6a6.F#9.BaDbtayag.........K.DbM.Ia6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#h#p.N#0aK#Jagagag....aD#VbMaYa6a6a6a9#I.N#0#5#J...E......#ybsbMaYa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.2#1#J#pbubbag#a.......KbMbM#fa6a6a6.2#1bb#pbubbag#a.......KbybM#fa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.7btaxbabu#J#Gal.E....aU.s#k.ma6a6a6.1bt.Bbabu#J.Eal.E....#j.O.s.ma6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bD#I.N#5#E.C#a.Kag....aUbMbM#fa6a6a6.V#pbbaK#9#a#a.Kag....aU.ObM#fa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a8.ubt.N.PaG#aalaR.E....a1bMbM#xa6a6.7.ubt.N.P#E.CalaRag....#jaq#k.Ya6a6a6",
+"a6a6a6a6a6a6a6a6a6a6bM#Abn.l.......k.qaq#Qa6a6a6a6a6bM.ybl.y.ybl.y.ybl.y.ybl.ybl#Qa6a6#Q.ybl.y.ybl.y.ybl.y.ybl.y.ybl.ybQa6a6#QbLbq.q...........q#AbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#mbQblbI.q.l.............q.qblbM#ma6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................av.sbMa6a6a6a6a6.ybl.y.ybl.y.ybl.y.ybl.y.y.ybl.y#la6a6a6a6a6a6#g#EaB.v.3#E#GalaR......#jbM#kbQa6#qbd#EaBbP.3#E.E.KaR......#jaT#V.Aa6a6a6",
+"a6a6a6a6a6a6a6#mbl.k......................bn.ta6a6bQ............................aLa6a6bQ..............................blbQ.q........................aR.ta6a6a6a6a6a6a6a6a6a6a6a6a6a6#maqbH..................................aWbL#ma6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6.t................................a7a6a6a6a6a6#7.3#OaP.faObu.E#HaRag....#jbM.s#xa6#Q.3aIax.faObu.EaR#Hag....#j.g.s.Ya6a6a6",
+"a6a6a6a6a6a6#laR............ag.Zag......ag.Zag.l#BaM........agagagagagagag.Zag.E.Y.4a4aL......agag.Zagagagagagag.Eag.Zalagag...........Z.E...........Z.ZbH#la6a6a6a6a6a6a6a6a6a6#m.yaM..............ag.E.Zag.............Z.Z.E..aM###ma6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6bn......ag.ZagagagagagagagagagagbIa4.4#qa6a6a6#Qbr.U#JbBakba#a.6aR......a1bMbMaLa6#8br.#aDbB.3ba#a.6aR......a1.VbM.Aa6a6a6",
+"a6a6a6a6a6#Q#6........ag.........................Zag............................avbMbMaL....................................ag...E.........................kaYa6a6a6a6a6a6a6a6#laR..........agag..................................agal.ya6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6#Q................................avbMbMa2a6a6a6aYbraF.B.W.u.#.Kam.K.......KbM#kaLa6#M.5aF.Bbe.3.#.KamaD.......KaJ.sawa6a6a6",
+"a6a6a6a6a6bn........ag..............................agag.........................y#VbMaL....................................ag...............................Z#fa6a6a6a6a6a6#l#6........ag..............................................bI#ma6a6a6a6a6bl....ag........................avbMbMa6a6a6.j.......E......................albM#kbM#ba6a6a6#CaO.9bObjbzaF.Kam.K.......bbMbMbQa6#w#v.9axbjbza5aDamal......#yasbMaLa6a6a6",
+"a6a6a6a6.t........ag............................................................av#kbMaL.......................................................................G.Ya6a6a6a6#l.k........ag..................................................bHa4a6a6a6a6.y....ag........................av#kbMa6a6a6.k..............................##bMbM.sa6a6a6a6bs.3aP.9ahaZa5.6aEal......aD.sbM.Ta6#iacax.9aZahaF.6.Lal......aDaJ.sawa6a6a6",
+"a6a6a6a6bq.......E...............................................................ybMbMaL.......................................................................ZbMaLa6a6a6bn........ag.......................................................0#ba6a6a6bl....ag........................avbMbMa6a6aX......ag........................atbM#k#fa6a6a6a6.O#ZaU.#bD.uaSam.Hal......aR#kbMaYbJ#U#Z#JbtbD.uaB#S.Hal......aDas#k.wa6a6a6",
+"a6a6a6a6........................................................................av#kbMaL........................................................................#ebM.4a6bM....................................................................#ea7a6a6.y....ag.........................ybMbMa6a6.q......ag.......................UbM#kbM#qa6a6a6#q.ObR#J#KbN.3#p.L.Hal......#y.sbMaY#8.ObR#J#KbN.3aB.L.HaU......#y.V.s#Ma6a6a6",
+"a6a6a6a7.......E.................................................................ybMbMaL........................................................................avbMaLa6bq.......E............................................................bqbM#qa6bl....ag........................av.sbMa6a7................................aq.sbMbMa6a6a6a6bJ#t#s#Jbubw.o#1aWaE#6....agam#kbM.T#4bp#s#Jbubw.o#paWaW#j.......L.ObM#xa6a6a6",
+"a6a6a6bQ..................................#y.l..................................avbM.s#M.........................................................................ybMbMa6..................................#c#y.................................l.s#ka6.y....ag........................av#kbMa6#A.......E......................#ybMbMbMaVa6a6a6a6.Ibw#KaUbo#N.P#p.L.H#a......aEbM#V.mawbw#K#J#sbw#D#p.LaW#6......aE#i.sbQa6a6a6",
+"a6a6a6aL................................aqbM#kaq................................av#kbMaL................................##atat##................................av#kbMaL.......E......................al#e#kbM.y................................bMbM#mbl....ag........................avbMbMa6aR...............................jbM#kbMa6a6a6a6a6a7bd#L#a#Zbw#P.9aW.LaM....agaEbM.s#8#kaZ#L.C#Zbw#P#2aW#2aM......aWa0#Va3a6a6a6",
+"a6a6a6bQ...............................UbMbM.sbMbI.Z.............................ybMbMaL..............................aobM#kbM#k#d...............................ybMbMaq..............................##.sbMbM#kbq.Z.............................ybMa3bl....ag........................avbMbMa8......ag.......................E#w.sbMa3a6a6a6a6a6aYbz#1#J#Zbda.#0aW#c#G.......L.sa2#r.7br#1aU#Zbd#E#0bH.L#6....ag.L.1bM#ra6a6a6",
+"a6a6a6aL...............................0#kbMbMa6bl..ag..........................av.sbMaL...............................GbMbM.s#qbl..ag..........................avbMbMbl..............................av#kbMaua6bl..ag..........................avbMbMbl....ag........................av#kbM.R......ag.......................qbM#kbMa6a6a6a6a6a6#M.u#2#J#R.QaG.6bH#S.E.....E.LbM#Vana0ac#2#J#R#YbuaPaW#S.E.....Eama8#Va7a6a6a6",
+"a6a6a6bQ..............................apbMbM.ea6.y....#j.........................ybM#k.w..............................apbM#k#ba6bl.....E.........................y.s#k.y....ag.........................ybM.sbJa6.y....aM........................av#kbM#g....ag.........................ybM#e................................#e#kbM.Ya6a6a6a6a6a6#k#R.6#H.3#v#5.BaW#Sag....agaEbMbM.Tby.3aP#H.u.u#5.6aWaPag....agaE#k.saaa6a6a6",
+"a6a6a6aL...............................0bMa8#ma6bl....#6........................avbMbMaL...............................0bMbMa4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................av.s.0.......E......................aWbM.sbM#ma6a6a6a6a6a6#i#RaPaP#v.u#5.6aW.6......agaB.s#V#xbybeaPaP.u#v#5.6aW.6......agao#k.s#ra6a6a6",
+"a6a6a6bQ...............................GbMbMaVa6.y....#j.........................y#kbMaL..............................apbMbMa4a6.y....ag........................av#kbM.y....ag.........................ybMbMa6a6.y.....k.........................ybM.s#g....ag.........................y#kal...............................jbM#kbMa6a6a6a6a6a6a6by.Wayadbr.3#5#SaWaR.......EaWbM#VbM.J#Ray#2br.3#5#SaW.6.......E.H.s#Va7a6a6a6",
+"a6a6a6aL...............................0.sbMaVa6bl....aM........................avbMbMaL...............................0#kbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....aM........................avbMbMbl....ag........................av.S......ag.......................ZbM.sbMa7a6a6a6a6a6a6a6#t.P.Nbfbr#R.##SaWaR......az#d#k#Ca8#t.P.Nbfbr#R#OaPaWaR.......E.MbM#V#Qa6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....aM.........................ybM#k.w..............................apbMbMa#a6.y....ag.........................y.s#k.y....ag.........................y.sbM#qa6.y....#j........................av#kbMbl....ag.........................y.M......ag.......................GbM#kbMa6a6a6a6a6a6a6.4bwbBaybfbr#Ra5#SaE.6......agbi#V#VbsbwbB.Cad.Q#Z.##S#2aR......ag#u.sa2#Qa6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0.sbM.4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#6........................avbMbMbl....ag.........................j................................#ebMbMaLa6a6a6a6a6a6a6#bbw#9.C#Fbr#Z#p.LaWal.......E.0.s#C#ibw#9.C#Fbr#Za5am.Hal.......E.0#k#V#ba6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL...............................GbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag........................aW.....Mal......................ao#kbMbMa4a6a6a6a6a6a6a6bx#N.z.Cba#v#DaS#SaWal......azbm#V#V.tbN#F.C#F.uab.9#SaWal......azbm.s.2#ma6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................GbMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag..............................aW.........................SbM.sbMa6a6a6a6a6a6a6a6#8#NbA#G#Fbe#P.9.LaW#a.......haca8#V#3#NbA#G#Fbe#P.9.LaW#a.......hac.s#V.4a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag...............................k......................albM#kbM.Ia6a6a6a6a6a6a6a6.TbdbP#Gbvabbu#2.L.L#a......azavbM.AbLbdbP#G.z#Z#K#2.L#c#a......azavbM.A#qa6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag.......................................................0#kbMbMa6a6a6a6a6a6a6a6a6#Cbd.9.E#O#D#5ax#S.L#j.Eagag#n#B.s#V#t#Y.9.EbA#D#5ax#S#SbE.Eagag#n.r#k.Aa6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag......................................................atbM.s.Ta6a6a6a6a6a6a6a6a6a8.3.9.E.z#9#O#0.l.layag..agbgat#kaQ.V.3.9.Ebv#9#O#o.l.laUag...Ebg.tbM.Aa6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.....................................................qbMbMbM.4a6a6a6a6a6a6a6a6a6.cak#2.E.##F.9ay.6b.ai.Eag.EaSa8#VaQbwbe#2ag.#.z.9aU.lb.aiazag.E.9#k#Vawa6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag....................................................av#kbM#ka6a6a6a6a6a6a6a6a6a6#3#ZaE.E#pbPaDaz.6.d.p.h.E.E#p#k#VawaTbeaEag#pbPaDaz.6.d.p.h.E.Ea5.s#V.ma6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..................................................albM#k.s#ma6a6a6a6a6a6a6a6a6a6aTab#0.EaSbfaz.Z.K.b.E.haz.Eb##Va2a9#.abaP#6aSbfaz.E.Kbg.E.hazaz.Ga2a2#ra6a6a6a6",
+"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag...................................................jbMbMbMa6a6a6a6a6a6a6a6a6a6a6braA.B.E#2ax...E#a.h...hazazbc#Va2#xbraA.Bag#2axag.EaUbE...hazaz.o.s#V.ea6a6a6a6",
+"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag...................................................ybM.s#fa6a6a6a6a6a6a6a6a6a6a4#Z.X.K.LaPay...Eazag..ag.EaDaZ#V#Va9#Z#F#J#caPbK...Eazag..ag.E#naT#V#Va4a6a6a6a6",
+"a6a6a6bQ..............................apbM.saVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag...................................................UbMbMa6a6a6a6a6a6a6a6a6a6a6bJaNbA#J.L#ybE..ag.E....ag.haG.A#V.s#xbR.##J.LaR#G..ag.E....agaiaG.A.s#V#qa6a6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag....................................................atbMa6a6a6a6a6a6a6a6a6a6a6.Ibo.U.6#0.Kag....ag...Eag#yaO#V.sau.aaAaI#H#0al.E....ag...Eag#ybla2#Vaua6a6a6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag....................................................##bMaVa6a6a6a6a6a6a6a6a6a6bCaG.9.9aP.k.E........agag#y#i.s.Aa4.Abu.9.9aPalag.........Eag#y.c.s.A#ma6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag....................................................albMbMa6a6a6a6a6a6a6a6a6a6#8aK#0#0.6aU.E.........Eagb.#i#V#xa6.2baaE#0.B.k.E.........Eag#ya0.s#xa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.......................................................5bM#qa6a6a6a6a6a6a6a6a6bG.#aDaPaDaMaMag.......Eag#y#i.s#xa6.2.UaDaPaD#6aMag.......Eag#y#i.s#xa6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag......................................................aW.s#fa6a6a6a6a6a6a6a6a6#h#paUax.K#6.E........azag#ya0.s.wa6aj#paUax.KaMaz.........Eag#y#i#V.wa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag........................................................#ebMa6a6a6a6a6a6a6a6a6aHaS#Gax.K.E.E.........Eag#y#i#VaLa6bF.H#Gax.Kag.E........azag#ya0.s#xa6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.........................................................q#k#Qa6a6a6a6a6a6a6a6a3#2#Gax#aag.E........azag#yat#V.ma6.1#2az.6aUag.E.........Eagb.at#VaYa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................................................ZatbMa6a6a6a6a6a6a6a6bCbf.E.B#aag.E.........Eagb..D#VaYa6a0bfaz.B#a...E.........E.Eb..D#k#la6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..........................................................bmbM#ma6a6a6a6a6a6a6aa#0azaD#G...E........azagb..D#k#la6bk#0az#H#Gag.E.........Eagb..D#V.ma6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag..........................................................al.s.Ya6a6a6a6a6a6a6aa#0#a.B#6ag.E........agagaRat#V.ma6aeaPaU.Baz...E........agagaD.D#V#la6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag............................................................avbM#qa6a6a6a6a6a6#8aPaUbb#G..ag........ag..#y.D.A#la6#taPay#H#Gagag........ag..#yata2#la6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM.saVa6.y....aM.........................ybM#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag............................................................aobM.Ta6a6a6a6a6a6#8aP.C#HaMag.E........ag..#ya0a2aYa6bwaP.C#Haz...E........ag..#yata2aYa6a6a6a6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag.........................U....................................aXbMa6a6a6a6a6a6#8.6ay#H#Gagag............#y.D.s.ma6bNaP.C.B.Eagag.............bat.s#la6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag.........................S.Z..................................bqbM#ba6a6a6a6a6bG.Bay#Hazagag............aDat.saYa6bd.6.C#H#6agag............aDat#kaYa6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag........................av.U...8..............................aMatbMa6a6a6a6a6#8.BaU.B#6agag............aDaXbMaYa6#Y.BaU.B.Eagag.............KaX.s.ma6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................yaX..bHag...............................jbM#ma6a6a6a6#8#Hay.B.Eagag............a1.O#kaYa6bd.BaU.B#Gagag........ag..a1as.saYa6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag........................av.saW...E..............................albMaLa6a6a6a6bG.BaU#H.Eagag........ag..#j.V.s#fa6bN.BaU#H.Eagag........ag..#j.VbMaua6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag.........................ybM.j.....................................ybMa6a6a6a6#8aP#JaD#6agag............azava8.Ya6aTaP#J#Hazag.E............az#g.s.Ya6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag........................av#kbMaR...E...............................qbM#fa6a6a6a3.BaU#J.Eagag............az#g.s.Ya6bD.BaUaf#Gagag............az.y#k.Ya6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................ybMbM#g....................................aXbMa6a6a6aa#Jaz#JaM.Eag.............Eak.s.Aa6.J#JazaUaMagag.............Eak.s.Aa6a6a6a6a6a6",
+"a6a6a6aL...............................G.sbM#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.s#k#qa6bl....#6........................avbMbMbl....ag........................av.sbMa7....ag...............................0bMaVa6a6aaaU.Caf#Gagag.............Ebm.s.Aa6byaU.C#Jazagag.............Ebm.s.Aa6a6a6a6a6a6",
+"a6a6a6aL..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y.....E.........................ybMbMa6a6bl....aM.........................y.sbM#g....ag.........................y#kbMa6aN..ag...............................EbMbMa6a6bC#JafaD.E..ag............agaN.s#V#qbhafaUaD.Eagag............agaN.s#Va6a6a6a6a6a6",
+"a6a6a6aL...............................0bM.s#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................avbMbMa6aL.....................................jbM#qa6#bbb#J.Bagag..............ag.R#k#Va6.2bb#J.b.E................ag.RbM#V#qa6a6a6a6a6",
+"a6a6a6bQ...............................GbMbMaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag........................av.sbMaq....ag........................##bMbM#qa6bI....aM........................av#kbMbl....ag.........................ybMbMa6a6.l...E...............................l#k.Ya6a6aPaUaf.Eagag............ag.X.s#Va4anaxaUaf.Eagag............agbi.s#Va#a6a6a6a6a6",
+"a6a6a6aL..............................albMbMaVa6aW....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................av#kbMaL....ag.........................ZaqbMa6a8......#j........................atbMbMbl....ag........................av#kbMa6a6aX....................................avbMa6a6.U.Caz.E.Eag...............U.sbMa4.IaP.C#G.E.Eag...............UbM#Va4a6a6a6a6a6",
+"a6a6a6bQ.................................M.S#VbI......#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybMbMa6....ag............................#c#d........aM......................al.sbMbM#g....ag........................avbMbMa6a6#maM..ag...............................qbM#la6.5aU.E#Gagag...............H.s#VaVa6#1#aaz.Eagag...............H.s.saVa6a6a6a6a6",
+"a6a6a6aL....................................ag.........Z........................avbMbMaL...............................0#kbM#qa6bl....ag.........................y#kbMa6bq....................................ag.....Z.........................qbM#kbMbl....ag........................av.sbMa6a6a6.x....................................bsbMa6a8.BaU.Eag............ag..aW#kbMaVa6.R.6aU#Gag............ag..aW#k#VaVa6a6a6a6a6",
+"a6a6a6#l......................................aM.Z.EaM...........................ybM#k.w..............................apbM.sa4a6.y....ag........................avbM.sa6a8......................................aMaM..........................avbMbM#fbl....ag........................avbMbMa6a6a6#Q....ag...............................GbMaVa7.L.E#6ag............ag..b..tbM.ea6#X.L.Eazag............ag..b..tbMa7a6a6a6a6a6",
+"a6a6a6a6aM......................................................................av.sbMaL...............................0bM#k.4a6bl....ag........................av#kbMa6a6bn...E............................................................#c#kbMbMaVbl....ag........................av#kbMa6a6a6a6bn...Z..............................albMbM.4.#..aM.Eag...........EagaR.ObMa7a6#M.#...Z.Eag...........EagaR.ObMa7a6a6a6a6a6",
+"a6a6a6a6.y.......................................................................y#kbMaL...............................GbMbMa4a6.y....ag.........................ybMbMa6a6#l#6.............................................................E#ebM.s#ka6.y....ag.........................ybMbMa6a6a6a6.t.....................................jbMa4.3....azag........ag.E...K#..sa3a6#m#D..agaM..........agagag.K#..sa3a6a6a6a6a6",
+"a6a6a6a6aVaR....................................................................avbMbMaL...............................G.sbM#qa6bl....ag........................avbMbMa6a6a6aY.k.E.......................................................ZaqbM#kbM#Qa6.S....ag........................avbMbMa6a6a6a6a6aR...E..............................#cbM#fbF.....Z..........ag.E.E.K.5#k#la6a6#......Z..........ag.Eag.K.5.s#la6a6a6a6a6",
+"a6a6a6a6a6#l#6.Z................................................................av#kbMaL..............................apbM#ka4a6.y....ag.........................y.s#ka6a6a6a6#laRag..................................................alaqbM.sbMaLa6a6.y....ag.........................y.s#ka6a6a6a6a6bl....................................aqbMaV#a...Z.............Eaz#nbma8.Ya6a6awaU...E.............Eaz.K#Wa8aLa6a6a6a6a6",
+"a6a6a6a6a6a6aYaWag...............................................................ybMbMaL...............................0bMbM.4a6bl....ag........................avbMbMa6a6a6a6#q#mblaM..............................................bqatbM#kbMaLa6a6a6bl....ag........................avbMbMa6a6a6a6a6a7....ag...............................qbMa7aZazag.............E#j.K.G#kaLa6a6bJaKazag............az#j#naG#k.Ya6a6a6a6a6",
+"a6a6a6a6a6a6a6a6.yaM........................al.jap..............................avbM.s#M..............................apbM#ka4a6.y....ag.........................ybMbMa6a6a6a6a6a6a6#m#A#y....................................#y##atbMbMbMbM#fa6a6a6a6bl....ag.........................ybMbMa6a6a6a6a6a6##..ag................................a8bMa4.GaEaU......aU#yafalbn.5.A.Y#qa6a6#V#EaEaU......aU#yala1.Ubl.A.Y#qa6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6as.U#c..........#cao.GaqbMbMao...............................y#kbMa6a6a6a6.s#k.s#kbM#k.s#kbM#k.s#kbMbMbM.4a6a6a6a6a4bM#k.s#kbM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6.4a8.y.Gao#cal.............kaWao.0.5#ebMbMbMbM#k.s#ma6a6a6a6a6a6a6a6a4.s#kbMa8bM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6#k.s#kbM#kbM#k.s#kbM#k.s#kbMa8.sbMbMaVanaT#W.HaB.UaG.x.x.jaJ.s.Y.Ya4a6a6a6.2aT.xaBaB.UaG#PbR.j.V#V.AaLa4a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6.4aL#k.s#kbM#kbMbMbMbM.sbsaMag..ag........................aqbMbMa6a6a6a6bMbMbMbM.sbMbMbMbMbMbMbM.s#kbMa4a6a6a6a6.4bMbMbMbM.sbMbMbMa8bMbMbMbMbMbMa6a6a6a6a6a6a6a6a6a6a6#qa3bMbM#kbM#k.s#kbMa8bM.sbM#kbM.s#kbM#ka3#qa6a6a6a6a6a6a6a6a6a6#qbM#kbMbM.sbMbMbMbMbMbMbM.sbMbMa6a6a6a6a6a6a6a6a6#mbMbM.sbM.sbMbMbM.sbMbMbMbMbM#kbMbMbMa6a4a3a8aTaJas#ia8.Y#xawaL#ba6a6a6a6a6a4aaaQaq.V#e.ta8aL#x.AaL#b#qa6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6#7a7bM.sbM.sbMa7.I##.......Z........................bM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.4bx#QaubM.sbM#kbM#k#f#Q.I.4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#qaVau#faYa4a4#qa6a6a6a6a6a6a6a6a6a6#qaVau.TaYa4a4#q#qa6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#Qbq.................................EbM#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.t.qbn.q.q.q.q.qbn.q.q.q.q.qaR...........E........................aWbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y.....................................E..........................##.s#k.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl.......Z.Z.E.Z.Z.E.Z.Z.E.Z.Z.E.Zag..............................#ebMbM#Qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y....ag........................................................aRbM#kbM#qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag........................................................akbM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y....ag......................................................#c.s#kbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl.....E.....................................................latbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag.................................................Z.G.sbM#kbMa7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag..........................................aW#u.S#kbM#kbMbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bQblbl.yap.0ap.G.0ap.G.0ap.G.0apap.0ap.0apav.y#e#k.s#kbM.sbMbM.Ya4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a4bMbMbMbM.sbMbM.sbMbM.sbMbM#kbMbMbMbM#kbMbMbMbMbMa7#ma6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a4a4a4a4a4a4a4a4a4a4a4a4a4#qa#a4a#a4.4a#a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6"
+};
diff --git a/xgnokii/xpm/phone.xpm b/xgnokii/xpm/phone.xpm
new file mode 100644 (file)
index 0000000..9a3e44b
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * phone_xpm[] = {
+"18 10 2 1",
+"      c #FFFFFFFFFFFF",
+".     c #000000000000",
+"    ..............",
+"   ...............",
+"....   .. . . . ..",
+"  ..   ...........",
+"  ..   .. . . . ..",
+"  ..   ...........",
+"  ..   .. . . . ..",
+"  ..   ...........",
+"   ...............",
+"    .............."};
diff --git a/xgnokii/xpm/quest.xpm b/xgnokii/xpm/quest.xpm
new file mode 100644 (file)
index 0000000..14f14a7
--- /dev/null
@@ -0,0 +1,86 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char *quest_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"44 66 2 1",
+"  c Gray0",
+". c None",
+/* pixels */
+"...................          ...............",
+"..............                   ...........",
+"...........                         ........",
+".......                              .......",
+"....                                   .....",
+"...                .......              ....",
+"....            .............            ...",
+"....          ................            ..",
+"....         ..................           ..",
+"....        ....................           .",
+".....      .....................           .",
+".....     ......................            ",
+".....     .......................           ",
+".....    ........................           ",
+".....    ........................           ",
+".....    .......................            ",
+"......  ........................            ",
+"......  ........................            ",
+"......  .......................            .",
+"......  .......................            .",
+"......  ......................            ..",
+"....... .....................             ..",
+"....... ....................             ...",
+"...........................             ....",
+"..........................             .....",
+".........................             ......",
+"........................            ........",
+"......................             .........",
+".....................            ...........",
+"....................           .............",
+"...................          ...............",
+"..................          ................",
+".................         ..................",
+"................         ...................",
+"...............         ....................",
+"..............         .....................",
+"..............        ......................",
+".............         ......................",
+".............         ......................",
+".............          .....................",
+".............           ....................",
+".............             ..................",
+"..............             .................",
+"..............       .......................",
+"...............   ..........................",
+"............... ............................",
+"............................................",
+"............................................",
+"..................    ......................",
+".................      .....................",
+"...............         ....................",
+"...............          ...................",
+"..............           ...................",
+"..............            ..................",
+"..............            ..................",
+"..............            ..................",
+"..............            ..................",
+"..............           ...................",
+"...............          ...................",
+"...............         ....................",
+"................       .....................",
+"..................    ......................",
+"............................................",
+"............................................",
+"............................................",
+"............................................",
+};
diff --git a/xgnokii/xpm/sim.xpm b/xgnokii/xpm/sim.xpm
new file mode 100644 (file)
index 0000000..016ae75
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * sim_xpm[] = {
+"18 10 2 1",
+"      c #000000000000",
+".     c #FFFFFFFFFFFF",
+"                  ",
+" ................ ",
+" ................ ",
+" ..       ....... ",
+" ..       ....... ",
+" ..       ....... ",
+" ..       ...... .",
+" .............. ..",
+" ............. ...",
+"              ...."};
diff --git a/xgnokii/xpm/sms.xpm b/xgnokii/xpm/sms.xpm
new file mode 100644 (file)
index 0000000..90937fe
--- /dev/null
@@ -0,0 +1,159 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+  This is the logo of the GUI utility.
+
+  Copyright (C) 1999 Petr Vostøel <Petr.Vostrel@inet.cz>
+       
+  Last modification: Sat Jun 26 07:38:27 CEST 1999
+  Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_sms[] = {
+
+"26 7 126 2",
+
+".. c None",
+".# c #161616",
+".a c #cf9a98",
+".b c #d9e1ed",
+".c c #b10707",
+".d c #ededed",
+".e c #bababa",
+".f c #ababab",
+".g c #385886",
+".h c #c2c2c2",
+".i c #9b9b9b",
+".j c #af5f5d",
+".k c #353535",
+".l c #dedede",
+".m c #8b8b8b",
+".n c #757575",
+".o c #444444",
+".p c #a4a4a4",
+".q c #393939",
+".r c #e6e6e6",
+".s c #f3f3f3",
+".t c #6f0302",
+".u c #e6ebf3",
+".v c #b2b2b2",
+".w c #545454",
+".x c #ffffff",
+".y c #848383",
+".z c #233755",
+".A c #656565",
+".B c #7b7b7b",
+".C c #949494",
+".D c #2c2c2d",
+".E c #6b6b6b",
+".F c #0f1a29",
+".G c #4c4c4c",
+".H c #cecece",
+".I c #d6d6d6",
+".J c #1f2020",
+".K c #b2c2d9",
+".L c #5c5c5c",
+".M c #d6deeb",
+".N c #2b4468",
+".O c #162336",
+".P c #0e0e0e",
+".Q c #f9f9f9",
+".R c #000000",
+".S c #e8edf4",
+".T c #3d6194",
+".U c #edf1f6",
+".V c #c9c9c9",
+".W c #41669c",
+".X c #e8cecd",
+".Y c #cad5e5",
+".Z c #bccade",
+".0 c #4369a1",
+".1 c #9ca4ae",
+".2 c #b5c5db",
+".3 c #c5d2e3",
+".4 c #324e78",
+".5 c #3d3d3d",
+".6 c #9299a3",
+".7 c #d3dce9",
+".8 c #1b2b42",
+".9 c #b4bcc8",
+"#. c #34527e",
+"## c #cdd8e7",
+"#a c #2d0201",
+"#b c #012343",
+"#c c #f4eaea",
+"#d c #08121e",
+"#e c #8a919d",
+"#f c #c2cfe1",
+"#g c #bfbfbf",
+"#h c #080d14",
+"#i c #fcfcfc",
+"#j c #c4cedb",
+"#k c #bf7c7b",
+"#l c #cfd9e8",
+"#m c #757b83",
+"#n c #b6c6db",
+"#o c #f9f2f2",
+"#p c #2e4970",
+"#q c #d2adac",
+"#r c #d7e0eb",
+"#s c #7d838b",
+"#t c #1f314b",
+"#u c #61666c",
+"#v c #686d74",
+"#w c #08090b",
+"#x c #484e56",
+"#y c #6f7071",
+"#z c #242525",
+"#A c #bfcde0",
+"#B c #c7c5c5",
+"#C c #040506",
+"#D c #303031",
+"#E c #37393d",
+"#F c #273e5e",
+"#G c #446ba4",
+"#H c #282929",
+"#I c #eef2f7",
+"#J c #344f69",
+"#K c #eef1f7",
+"#L c #d1dbe9",
+"#M c #565758",
+"#N c #a5adb8",
+"#O c #606161",
+"#P c #786463",
+"#Q c #b4c4da",
+"#R c #404040",
+"#S c #575b61",
+"#T c #858b94",
+"#U c #dde4ee",
+"#V c #ebeff5",
+"#W c #4b2726",
+"#X c #2b2e34",
+"#Y c #414449",
+"#Z c #484848",
+"#0 c #505050",
+"#1 c #725655",
+"#2 c #a23c3a",
+"#3 c #acb4bf",
+"#4 c #bdc6d3",
+"#5 c #c0c9d6",
+"#6 c #b3c3da",
+"#7 c #ffffff",
+
+"...1#S.#.R.R.R.R.R.R.R.R.R#z#x.R.R.R.R#z#x.#.##x#e..",
+".1.D.R.e.x.x.x.x.w.x.x.n#z.J.d.x.n.e.x.x.x.x.w.R#z#e",
+"#M.R.R.x.m.R.#.n.o.x.x.l#X.A.x.x.n.x.m.R.#.n.o.R.R#x",
+".#.R.R.l.x.e.e.f.#.x.f.x.o.f.f.x.n.l.x.e.e.f.#.R.R.#",
+".#.R.R#z.o.n.m.x.n.x.n.l.h.x.A.x.n#z.o.n.m.x.n.R.R.#",
+".#.R.R.x.f.o.w.x.n.x.n.n.x.d.R.x.n.x.f.o.w.x.n.R.R#M",
+".R.R.R.m.x.x.x.d.k.x.n#z.x.i.R.x.n.m.x.x.x.d.k.R.R.R"
+};
diff --git a/xgnokii/xpm/stop.xpm b/xgnokii/xpm/stop.xpm
new file mode 100644 (file)
index 0000000..a06c82c
--- /dev/null
@@ -0,0 +1,85 @@
+/* XPM */
+/*
+
+  G N O K I I
+
+  A Linux/Unix toolset and driver for Nokia mobile phones.
+
+  Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+  Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char *stop_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"65 65 2 1",
+"  c Gray0",
+". c None",
+/* pixels */
+"...................                           ...................",
+"..................                             ..................",
+".................                               .................",
+"................                                 ................",
+"...............     .........................     ...............",
+"..............     ...........................     ..............",
+".............     .............................     .............",
+"............     ...............................     ............",
+"...........     .................................     ...........",
+"..........     ...................................     ..........",
+".........     .....................................     .........",
+"........     .......................................     ........",
+".......     .........................................     .......",
+"......     ...........................................     ......",
+".....     .............................................     .....",
+"....     ...............................................     ....",
+"...     .................................................     ...",
+"..     ...................................................     ..",
+".     .....................................................     .",
+"     .......................................................     ",
+"    .........................................................    ",
+"    .........................................................    ",
+"    ......        ..           ..         ...         .......    ",
+"    ......         .           .           ..          ......    ",
+"    .....          .           .           ..          ......    ",
+"    .....          .           .           ..          ......    ",
+"    .....   .....  .....   .....   .....   ..   ...    ......    ",
+"    .....   .....  .....   .....   .....   ..   ....   ......    ",
+"    .....   ............   .....   .....   ..   ....   ......    ",
+"    .....   ............   .....   .....   ..   ....   ......    ",
+"    .....         ......   .....   .....   ..   ....   ......    ",
+"    .....          .....   .....   .....   ..          ......    ",
+"    .....          .....   .....   .....   ..          ......    ",
+"    ......         .....   .....   .....   ..          ......    ",
+"    ............   .....   .....   .....   ..         .......    ",
+"    ............   .....   .....   .....   ..   .............    ",
+"    .....  .....   .....   .....   .....   ..   .............    ",
+"    .....  .....   .....   .....   .....   ..   .............    ",
+"    .....          .....   .....           ..   .............    ",
+"    .....          .....   .....           ..   .............    ",
+"    .....          .....   .....           ..   .............    ",
+"    .....         ......   .....           ..   .............    ",
+"    ......      ........   ......         ...   .............    ",
+"    .........................................................    ",
+"    .........................................................    ",
+"     .......................................................     ",
+".     .....................................................     .",
+"..     ...................................................     ..",
+"...     .................................................     ...",
+"....     ...............................................     ....",
+".....     .............................................     .....",
+"......     ...........................................     ......",
+".......     .........................................     .......",
+"........     .......................................     ........",
+".........     .....................................     .........",
+"..........     ...................................     ..........",
+"...........     .................................     ...........",
+"............     ...............................     ............",
+".............     .............................     .............",
+"..............     ...........................     ..............",
+"...............                                   ...............",
+"................                                 ................",
+".................                               .................",
+"..................                             ..................",
+"................................................................."
+};