From 833e1c7c90e13ceaba3dde8e7a36fcc8dfb1db3c Mon Sep 17 00:00:00 2001 From: jankratochvil <> Date: Mon, 18 Feb 2002 02:07:04 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'uc'. 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 --- COPYING | 30 + Docs/CREDITS | 111 + Docs/Makefile | 70 + Docs/man/gnokii.1 | 196 + Docs/man/gnokiid.8 | 63 + Docs/man/mgnokiidev.8 | 49 + Docs/man/todologo.1 | 57 + Docs/man/xgnokii.1x | 39 + INSTALL | 54 + Makefile | 208 + Makefile.global.in | 77 + VERSION | 1 + common/Makefile | 92 + common/data/at-emulator.c | 729 +++ common/data/datapump.c | 167 + common/data/rlp-common.c | 2069 ++++++++ common/data/rlp-crc24.c | 106 + common/data/virtmodem.c | 345 ++ common/devices/tekram.c | 113 + common/devices/unixirda.c | 216 + common/devices/unixserial.c | 266 + common/gsm-api.c | 792 +++ common/gsm-bitmaps.c | 281 ++ common/gsm-networks.c | 482 ++ common/gsm-ringtones.c | 1023 ++++ common/gsm-sms.c | 1020 ++++ common/misc.c | 240 + config/config.guess | 1298 +++++ config/config.sub | 1375 ++++++ config/install-sh | 251 + configure.in | 528 ++ getopt/Makefile | 28 + getopt/getopt.c | 753 +++ getopt/getopt.h | 133 + getopt/getopt1.c | 184 + gnokii/Makefile | 84 + gnokii/gnokii.c | 8748 +++++++++++++++++++++++++++++++++ gnokiid/Makefile | 72 + gnokiid/gnokiid.c | 128 + include/config.h.in.in | 57 + include/data/at-emulator.h | 97 + include/data/datapump.h | 38 + include/data/rlp-common.h | 182 + include/data/rlp-crc24.h | 27 + include/data/virtmodem.h | 37 + include/devices/tekram.h | 64 + include/devices/unixirda.h | 41 + include/devices/unixserial.h | 44 + include/gsm-api.h | 542 ++ include/gsm-bitmaps.h | 59 + include/gsm-common.h | 327 ++ include/gsm-networks.h | 59 + include/gsm-ringtones.h | 194 + include/gsm-sms.h | 292 ++ include/misc.h | 125 + mkinstalldirs | 40 + packaging/Debian/README.debian | 6 + packaging/Debian/conffiles | 1 + packaging/Debian/control | 11 + packaging/Debian/copyright | 16 + packaging/Debian/docs | 20 + packaging/Debian/menu | 1 + packaging/Debian/postinst | 3 + packaging/Debian/preinst | 4 + packaging/Debian/rules | 64 + packaging/RedHat/gnokii.spec.in | 136 + packaging/Slackware/SlackBuild.in | 70 + packaging/Slackware/disk | 6 + packaging/make_dist | 38 + po/Makefile.in.in | 216 + po/POTFILES.in | 22 + po/cs.po | 2554 ++++++++++ po/de.po | 3185 ++++++++++++ po/et.po | 3791 ++++++++++++++ po/fi.po | 2559 ++++++++++ po/it.po | 4052 +++++++++++++++ po/nl.po | 2643 ++++++++++ po/pl.po | 3310 +++++++++++++ po/sk.po | 3579 ++++++++++++++ utils/Makefile | 57 + utils/mgnokiidev.c | 96 + utils/todologo | 102 + xgnokii/Makefile | 102 + xgnokii/VERSION | 1 + xgnokii/xgnokii.c | 2481 ++++++++++ xgnokii/xgnokii.h | 67 + xgnokii/xgnokii_calendar.c | 1524 ++++++ xgnokii/xgnokii_calendar.h | 18 + xgnokii/xgnokii_cfg.c | 221 + xgnokii/xgnokii_cfg.h | 28 + xgnokii/xgnokii_common.c | 332 ++ xgnokii/xgnokii_common.h | 77 + xgnokii/xgnokii_contacts.c | 3433 +++++++++++++ xgnokii/xgnokii_contacts.h | 181 + xgnokii/xgnokii_data.c | 129 + xgnokii/xgnokii_data.h | 20 + xgnokii/xgnokii_dtmf.c | 336 ++ xgnokii/xgnokii_dtmf.h | 18 + xgnokii/xgnokii_logos.c | 1739 +++++++ xgnokii/xgnokii_logos.h | 39 + xgnokii/xgnokii_lowlevel.c | 1000 ++++ xgnokii/xgnokii_lowlevel.h | 192 + xgnokii/xgnokii_netmon.c | 579 +++ xgnokii/xgnokii_netmon.h | 28 + xgnokii/xgnokii_sms.c | 1662 +++++++ xgnokii/xgnokii_sms.h | 22 + xgnokii/xgnokii_speed.c | 662 +++ xgnokii/xgnokii_speed.h | 18 + xgnokii/xgnokii_xkeyb.c | 295 ++ xgnokii/xgnokii_xkeyb.h | 18 + xgnokii/xpm/6110mini.xpm | 68 + xgnokii/xpm/BCard.xpm | 26 + xgnokii/xpm/Black_point.xpm | 13 + xgnokii/xpm/Caller.xpm | 50 + xgnokii/xpm/Caller_logo.xpm | 31 + xgnokii/xpm/Check.xpm | 25 + xgnokii/xpm/Delete.xpm | 36 + xgnokii/xpm/Dial.xpm | 34 + xgnokii/xpm/Display.xpm | 115 + xgnokii/xpm/Duplicate.xpm | 36 + xgnokii/xpm/Edit.xpm | 37 + xgnokii/xpm/Edit_flip_horizontal.xpm | 26 + xgnokii/xpm/Edit_flip_vertical.xpm | 26 + xgnokii/xpm/Edit_invert.xpm | 26 + xgnokii/xpm/Flip.xpm | 24 + xgnokii/xpm/Forward.xpm | 24 + xgnokii/xpm/Green_pixel.xpm | 6 + xgnokii/xpm/Green_point.xpm | 13 + xgnokii/xpm/Invert.xpm | 46 + xgnokii/xpm/Names.xpm | 21 + xgnokii/xpm/New.xpm | 45 + xgnokii/xpm/NewBD.xpm | 47 + xgnokii/xpm/NewCall.xpm | 41 + xgnokii/xpm/NewMeet.xpm | 41 + xgnokii/xpm/NewRem.xpm | 43 + xgnokii/xpm/Op.xpm | 50 + xgnokii/xpm/Open.xpm | 47 + xgnokii/xpm/Operator_logo.xpm | 27 + xgnokii/xpm/Read.xpm | 41 + xgnokii/xpm/Reply.xpm | 24 + xgnokii/xpm/Save.xpm | 45 + xgnokii/xpm/Send.xpm | 50 + xgnokii/xpm/SendSMS.xpm | 24 + xgnokii/xpm/Startup.xpm | 50 + xgnokii/xpm/Startup_logo.xpm | 32 + xgnokii/xpm/Tool_brush.xpm | 26 + xgnokii/xpm/Tool_filled_rectangle.xpm | 24 + xgnokii/xpm/Tool_line.xpm | 24 + xgnokii/xpm/Tool_rectangle.xpm | 24 + xgnokii/xpm/alarm.xpm | 36 + xgnokii/xpm/background.xpm | 247 + xgnokii/xpm/info.xpm | 73 + xgnokii/xpm/logo.xpm | 369 ++ xgnokii/xpm/phone.xpm | 27 + xgnokii/xpm/quest.xpm | 86 + xgnokii/xpm/sim.xpm | 27 + xgnokii/xpm/sms.xpm | 159 + xgnokii/xpm/stop.xpm | 85 + 158 files changed, 68964 insertions(+) create mode 100644 COPYING create mode 100644 Docs/CREDITS create mode 100644 Docs/Makefile create mode 100644 Docs/man/gnokii.1 create mode 100644 Docs/man/gnokiid.8 create mode 100644 Docs/man/mgnokiidev.8 create mode 100644 Docs/man/todologo.1 create mode 100644 Docs/man/xgnokii.1x create mode 100644 INSTALL create mode 100644 Makefile create mode 100644 Makefile.global.in create mode 100644 VERSION create mode 100644 common/Makefile create mode 100644 common/data/at-emulator.c create mode 100644 common/data/datapump.c create mode 100644 common/data/rlp-common.c create mode 100644 common/data/rlp-crc24.c create mode 100644 common/data/virtmodem.c create mode 100644 common/devices/tekram.c create mode 100644 common/devices/unixirda.c create mode 100644 common/devices/unixserial.c create mode 100644 common/gsm-api.c create mode 100644 common/gsm-bitmaps.c create mode 100644 common/gsm-networks.c create mode 100644 common/gsm-ringtones.c create mode 100644 common/gsm-sms.c create mode 100644 common/misc.c create mode 100755 config/config.guess create mode 100755 config/config.sub create mode 100755 config/install-sh create mode 100644 configure.in create mode 100644 getopt/Makefile create mode 100644 getopt/getopt.c create mode 100644 getopt/getopt.h create mode 100644 getopt/getopt1.c create mode 100644 gnokii/Makefile create mode 100644 gnokii/gnokii.c create mode 100644 gnokiid/Makefile create mode 100644 gnokiid/gnokiid.c create mode 100644 include/config.h.in.in create mode 100644 include/data/at-emulator.h create mode 100644 include/data/datapump.h create mode 100644 include/data/rlp-common.h create mode 100644 include/data/rlp-crc24.h create mode 100644 include/data/virtmodem.h create mode 100644 include/devices/tekram.h create mode 100644 include/devices/unixirda.h create mode 100644 include/devices/unixserial.h create mode 100644 include/gsm-api.h create mode 100644 include/gsm-bitmaps.h create mode 100644 include/gsm-common.h create mode 100644 include/gsm-networks.h create mode 100644 include/gsm-ringtones.h create mode 100644 include/gsm-sms.h create mode 100644 include/misc.h create mode 100644 mkinstalldirs create mode 100644 packaging/Debian/README.debian create mode 100644 packaging/Debian/conffiles create mode 100644 packaging/Debian/control create mode 100644 packaging/Debian/copyright create mode 100644 packaging/Debian/docs create mode 100644 packaging/Debian/menu create mode 100644 packaging/Debian/postinst create mode 100644 packaging/Debian/preinst create mode 100755 packaging/Debian/rules create mode 100644 packaging/RedHat/gnokii.spec.in create mode 100644 packaging/Slackware/SlackBuild.in create mode 100644 packaging/Slackware/disk create mode 100755 packaging/make_dist create mode 100644 po/Makefile.in.in create mode 100644 po/POTFILES.in create mode 100644 po/cs.po create mode 100644 po/de.po create mode 100644 po/et.po create mode 100644 po/fi.po create mode 100644 po/it.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/sk.po create mode 100644 utils/Makefile create mode 100644 utils/mgnokiidev.c create mode 100644 utils/todologo create mode 100644 xgnokii/Makefile create mode 100644 xgnokii/VERSION create mode 100644 xgnokii/xgnokii.c create mode 100644 xgnokii/xgnokii.h create mode 100644 xgnokii/xgnokii_calendar.c create mode 100644 xgnokii/xgnokii_calendar.h create mode 100644 xgnokii/xgnokii_cfg.c create mode 100644 xgnokii/xgnokii_cfg.h create mode 100644 xgnokii/xgnokii_common.c create mode 100644 xgnokii/xgnokii_common.h create mode 100644 xgnokii/xgnokii_contacts.c create mode 100644 xgnokii/xgnokii_contacts.h create mode 100644 xgnokii/xgnokii_data.c create mode 100644 xgnokii/xgnokii_data.h create mode 100644 xgnokii/xgnokii_dtmf.c create mode 100644 xgnokii/xgnokii_dtmf.h create mode 100644 xgnokii/xgnokii_logos.c create mode 100644 xgnokii/xgnokii_logos.h create mode 100644 xgnokii/xgnokii_lowlevel.c create mode 100644 xgnokii/xgnokii_lowlevel.h create mode 100644 xgnokii/xgnokii_netmon.c create mode 100644 xgnokii/xgnokii_netmon.h create mode 100644 xgnokii/xgnokii_sms.c create mode 100644 xgnokii/xgnokii_sms.h create mode 100644 xgnokii/xgnokii_speed.c create mode 100644 xgnokii/xgnokii_speed.h create mode 100644 xgnokii/xgnokii_xkeyb.c create mode 100644 xgnokii/xgnokii_xkeyb.h create mode 100644 xgnokii/xpm/6110mini.xpm create mode 100644 xgnokii/xpm/BCard.xpm create mode 100644 xgnokii/xpm/Black_point.xpm create mode 100644 xgnokii/xpm/Caller.xpm create mode 100644 xgnokii/xpm/Caller_logo.xpm create mode 100644 xgnokii/xpm/Check.xpm create mode 100644 xgnokii/xpm/Delete.xpm create mode 100644 xgnokii/xpm/Dial.xpm create mode 100644 xgnokii/xpm/Display.xpm create mode 100644 xgnokii/xpm/Duplicate.xpm create mode 100644 xgnokii/xpm/Edit.xpm create mode 100644 xgnokii/xpm/Edit_flip_horizontal.xpm create mode 100644 xgnokii/xpm/Edit_flip_vertical.xpm create mode 100644 xgnokii/xpm/Edit_invert.xpm create mode 100644 xgnokii/xpm/Flip.xpm create mode 100644 xgnokii/xpm/Forward.xpm create mode 100644 xgnokii/xpm/Green_pixel.xpm create mode 100644 xgnokii/xpm/Green_point.xpm create mode 100644 xgnokii/xpm/Invert.xpm create mode 100644 xgnokii/xpm/Names.xpm create mode 100644 xgnokii/xpm/New.xpm create mode 100644 xgnokii/xpm/NewBD.xpm create mode 100644 xgnokii/xpm/NewCall.xpm create mode 100644 xgnokii/xpm/NewMeet.xpm create mode 100644 xgnokii/xpm/NewRem.xpm create mode 100644 xgnokii/xpm/Op.xpm create mode 100644 xgnokii/xpm/Open.xpm create mode 100644 xgnokii/xpm/Operator_logo.xpm create mode 100644 xgnokii/xpm/Read.xpm create mode 100644 xgnokii/xpm/Reply.xpm create mode 100644 xgnokii/xpm/Save.xpm create mode 100644 xgnokii/xpm/Send.xpm create mode 100644 xgnokii/xpm/SendSMS.xpm create mode 100644 xgnokii/xpm/Startup.xpm create mode 100644 xgnokii/xpm/Startup_logo.xpm create mode 100644 xgnokii/xpm/Tool_brush.xpm create mode 100644 xgnokii/xpm/Tool_filled_rectangle.xpm create mode 100644 xgnokii/xpm/Tool_line.xpm create mode 100644 xgnokii/xpm/Tool_rectangle.xpm create mode 100644 xgnokii/xpm/alarm.xpm create mode 100644 xgnokii/xpm/background.xpm create mode 100644 xgnokii/xpm/info.xpm create mode 100644 xgnokii/xpm/logo.xpm create mode 100644 xgnokii/xpm/phone.xpm create mode 100644 xgnokii/xpm/quest.xpm create mode 100644 xgnokii/xpm/sim.xpm create mode 100644 xgnokii/xpm/sms.xpm create mode 100644 xgnokii/xpm/stop.xpm diff --git a/COPYING b/COPYING new file mode 100644 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 index 0000000..8232bd3 --- /dev/null +++ b/Docs/CREDITS @@ -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 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 index 0000000..8dd1724 --- /dev/null +++ b/Docs/Makefile @@ -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 index 0000000..214d696 --- /dev/null +++ b/Docs/man/gnokii.1 @@ -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 and Pavel Janik ml. + +Manual page written by Dag Wieers and Pawel Kot + +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 index 0000000..99c2b90 --- /dev/null +++ b/Docs/man/gnokiid.8 @@ -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 and Pavel Janik ml. are the authors of the +Gnokii +tool suite. + +This manual page was written by Erik Rossen . + +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 index 0000000..03db0aa --- /dev/null +++ b/Docs/man/mgnokiidev.8 @@ -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 and Pavel Janik ml. are the authors of the +Gnokii tool suite. + +This manual page was written by Erik Rossen . + +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 index 0000000..c66955b --- /dev/null +++ b/Docs/man/todologo.1 @@ -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 - - \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 + +.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 index 0000000..5fad541 --- /dev/null +++ b/Docs/man/xgnokii.1x @@ -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 and Pavel Janik ml. are the authors of the +Gnokii tool suite. + +This manual page was written by Erik Rossen . + +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 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 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 index 0000000..23fa672 --- /dev/null +++ b/Makefile.global.in @@ -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 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 index 0000000..e396803 --- /dev/null +++ b/common/Makefile @@ -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 index 0000000..41445c8 --- /dev/null +++ b/common/data/at-emulator.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 + + #include + +#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, _("")); + 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, _("")); + break; + default: + gsprintf(line, MAX_LINE_LENGTH, _("")); + 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 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 index 0000000..4eede53 --- /dev/null +++ b/common/data/datapump.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#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 index 0000000..9c46e0d --- /dev/null +++ b/common/data/rlp-common.c @@ -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 +#include +#include +#include + +#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= 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;i23) { + 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>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=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]Data[count]; + count+=length; + break; + case 0x03: /* MS to IWF window size */ + if (frame->Data[count]>=1 && frame->Data[count]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; iPF==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;iRLP_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; zzzPF)) { + 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 index 0000000..cc8af90 --- /dev/null +++ b/common/data/rlp-crc24.c @@ -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 index 0000000..7c7f4e2 --- /dev/null +++ b/common/data/virtmodem.c @@ -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 + +/* This is the right way to include stdlib with __USE_XOPEN defined */ +#ifdef USE_UNIX98PTYS +# define _XOPEN_SOURCE 500 +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 0000000..5da6097 --- /dev/null +++ b/common/devices/tekram.c @@ -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 +#include + +#ifndef WIN32 + #include + #include + #include + #include "devices/unixserial.h" +#else + #include + #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 index 0000000..cfbf39a --- /dev/null +++ b/common/devices/unixirda.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 0000000..bc7e37e --- /dev/null +++ b/common/devices/unixserial.c @@ -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 +#include +#include +#include + +#if __unices__ +# include +#endif + +#include +#include "devices/unixserial.h" + +#ifdef HAVE_SYS_IOCTL_COMPAT_H + #include +#endif + +#ifdef HAVE_SYS_SELECT_H +#include +#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 index 0000000..99b73d7 --- /dev/null +++ b/common/gsm-api.c @@ -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 +#include +#include +#include + +#ifdef WIN32 + #include + #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 +#include +#include +#include +#include + +#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;isize;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->widthwidth; +#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->heightheight; +#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;yheight;y++) { + for (x=0;xwidth;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 index 0000000..b36bcf5 --- /dev/null +++ b/common/gsm-networks.c @@ -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 + +#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"}, + { "404 02", "Evergrowth"}, + { "404 03", "Bharthi Telenet"}, + { "404 05", "Fascel"}, + { "404 07", "Tata Cell"}, //TATA Cellular + { "404 08", "Koshika"}, + { "404 09", "Reliance"}, + { "404 10", "AIRTEL"}, //AirTel + { "404 11", "Essar"}, //Essar Cellphone + { "404 12", "Escotel"}, + { "404 14", "Spice"}, //Modicom + { "404 15", "AIRCELL"}, //Essar Cellphone + { "404 18", "Reliance"}, + { "404 19", "Escotel"}, + { "404 20", "Orange"}, //Max Touch + { "404 21", "BPL Mobile"}, //BPL - Mobile + { "404 22", "Birla AT&T"}, + { "404 24", "Birla AT&T"}, + { "404 26", "Koshika"}, + { "404 27", "BPL Mobile"}, //BPL USWEST Cellular + { "404 30", "Usha"}, //Command + { "404 31", "AIRCELL"}, //? + { "404 31", "Command"}, //? + { "404 32", "Koshika"}, + { "404 34", "Koshika"}, + { "404 36", "Reliance"}, + { "404 40", "SkyCell"}, + { "404 41", "RPG"}, //RPG Cellular + { "404 42", "AIRCELL"}, //AIRCEL + { "404 43", "BPL Mobile"}, + { "404 44", "Spice"}, + { "404 45", "AIRTEL-blr"}, + { "404 46", "BPL Moibile"}, + { "404 49", "AIRTEL"}, + { "404 50", "Reliance"}, + { "404 52", "Reliance"}, + { "404 56", "Escotel"}, + { "404 60", "AIRCELL"}, + { "404 67", "Reliance"}, + { "404 70", "Hexacom"}, + { "404 78", "RPG"}, + { "404 85", "Reliance"}, + + { "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 index 0000000..aa68378 --- /dev/null +++ b/common/gsm-ringtones.c @@ -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 + #include "misc_win32.h" +#else + #include +#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; iNrNotes;i++) { + switch (ringtone->notes[i].duration) { + case 192: buffer[0]++; break; + case 128: buffer[0]++; break; + case 96: buffer[1]++; break; + case 64: buffer[1]++; break; + case 48: buffer[2]++; break; + case 32: buffer[2]++; break; + case 24: buffer[3]++; break; + case 16: buffer[3]++; break; + case 12: buffer[4]++; break; + case 8: buffer[4]++; break; + case 6: buffer[5]++; break; + case 4: buffer[5]++; break; + } + } + + /* Now find the most frequently used */ + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + k=i; + j=buffer[i]; + } + } + + /* Finally convert the default duration */ + switch (k) { + case 0: DefNoteDuration=128; break; + case 1: DefNoteDuration= 64; break; + case 2: DefNoteDuration= 32; break; + case 3: DefNoteDuration= 16; break; + case 4: DefNoteDuration= 8; break; + case 5: DefNoteDuration= 4; break; + default: DefNoteDuration= 16; break; + } + + /* Find the most frequently used scale and use this for the default */ + for (i=0;i<6;i++) buffer[i]=0; + for (i=0;iNrNotes;i++) { + if (ringtone->notes[i].note!=255) { + buffer[ringtone->notes[i].note/14]++; + } + } + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + DefNoteScale=i; + j=buffer[i]; + } + } + + StartBit=BitPackByte(package, StartBit, CommandLength, 8); + StartBit=BitPackByte(package, StartBit, RingingToneProgramming, 7); + + /* The page 3-23 of the specs says that 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;iname);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;iname);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; iNrNotes; 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; iallnotesscale=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 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;iname);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>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;iNrNotes;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]) 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 index 0000000..5a35034 --- /dev/null +++ b/common/gsm-sms.c @@ -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 +#include +#include +#include +#include + +#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;jDay,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;iMessageText);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;wUDH[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; iLength;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; iLength;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;jSMS[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 index 0000000..34d81b7 --- /dev/null +++ b/common/misc.c @@ -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 +#include +#include + +#ifndef WIN32 + #include + #include + #include + #include + #include + #include + #include +#endif + +#include "misc.h" +#include "gsm-common.h" + +#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 index 0000000..6012b39 --- /dev/null +++ b/config/config.guess @@ -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 . +# Please send patches to . +# +# 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 ." + +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 <$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 /* 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 + + 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 + #include + + 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 + 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 < +#ifdef __cplusplus +#include /* 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' /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 + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # 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 < +# include +#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 + 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 +# 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 < 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 index 0000000..578b302 --- /dev/null +++ b/config/config.sub @@ -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 . +# +# 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 ." + +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 index 0000000..398a88e --- /dev/null +++ b/config/install-sh @@ -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 index 0000000..87ea315 --- /dev/null +++ b/configure.in @@ -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 ], + [ 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 ], + [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 ], + [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 ], + [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 ], + [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 ], + [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 +#include +#include +#include +#include +#include + +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 index 0000000..037269d --- /dev/null +++ b/getopt/Makefile @@ -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 index 0000000..7b4f938 --- /dev/null +++ b/getopt/getopt.c @@ -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. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +#define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if !defined (__STDC__) || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include +#include + +/* 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 +#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; + +#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 +#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__ */ + +/* 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; +} + +/* 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__. */ + +#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 index 0000000..f3696d9 --- /dev/null +++ b/getopt/getopt.h @@ -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 index 0000000..de8e2ad --- /dev/null +++ b/getopt/getopt1.c @@ -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. */ + +#ifdef HAVE_CONFIG_H +#include +#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 + +/* 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 +#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__. */ + +#ifdef TEST + +#include + +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 index 0000000..2018e7d --- /dev/null +++ b/gnokii/Makefile @@ -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 index 0000000..9daceb9 --- /dev/null +++ b/gnokii/gnokii.c @@ -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 +#include +#include +#include +#include +#include +#include + +#ifndef VC6 + #if defined(__svr4__) || defined(__FreeBSD__) + # include /* for bzero */ + #endif +#else + /* for VC6 make scripts save VERSION constant in mversion.h file */ + #include "mversion.h" +#endif + +#ifdef WIN32 + + #include + + #include "misc_win32.h" + #include "getopt.h" + + #define DEV_CONSOLE "CON:" + +#else + + #include + #include + #include + #include + #include + #include + + #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 +#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;wnumber;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;wnumber;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;iNrNotes;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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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;iGetMemoryLocation(&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;iGetMemoryLocation(&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;iTerminate(); + 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 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;iGetSMSCenter(&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; jTerminate(); + + 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;i2) { + 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 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;i3) { + 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;i9)) 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;iTerminate(); + + 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 */ + } + } + + 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;iGetCalendarNote(&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 (iGetProfile(&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;iGetMemoryLocation(&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<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;iNetMonitor(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,¤t); + + 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;i50) + 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;ioldnoteslen) { + while (oldnoteslen!=nownoteslen) { + fprintf(stdout,_("8")); + oldnoteslen=oldnoteslen*2; + } + } + + if (nownoteslenFB61_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;iFB61_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;i2) + { + 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 i ? (mode[i] = atoi(argv[i])): (mode[i] = 0); + } + + for (i=0;iNetMonitor(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; + case 2:fprintf(file,_("8"));break; + case 3:fprintf(file,_("4"));break; + case 4:fprintf(file,_("2"));break; + case 5:fprintf(file,_("1"));break; + } + break; + } + } + if (z>w) fprintf(file,_("1")); + pause=false; + switch (GSM_GetNote(j)) { + case Note_C :fprintf(file,_("c"));break; + case Note_Cis:fprintf(file,_("c#"));break; + case Note_D :fprintf(file,_("d"));break; + case Note_Dis:fprintf(file,_("d#"));break; + case Note_E :fprintf(file,_("e"));break; + case Note_F :fprintf(file,_("f"));break; + case Note_Fis:fprintf(file,_("f#"));break; + case Note_G :fprintf(file,_("g"));break; + case Note_Gis:fprintf(file,_("g#"));break; + case Note_A :fprintf(file,_("a"));break; + case Note_Ais:fprintf(file,_("a#"));break; + case Note_H :fprintf(file,_("h"));break; + default :pause=true;fprintf(file,_("p"));break; //Pause ? + } + 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 (50, &CurrentMagicError, 10, 0x40,openbuffer0); + openbuffer[4]=1;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=2;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=4;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=8;NULL_SendMessageSequence (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 (50, &CurrentMagicError, 20, 0x40,closebuffer); + /* Opening all locks */ + NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer0); + openbuffer[4]=1;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=2;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=4;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=8;NULL_SendMessageSequence (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) 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;iResetPhoneSettings(); + + 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;iFB61_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;iGetWAPSettings(&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;wTerminate(); + + 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;wTerminate(); + + 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;wTerminate(); + + 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;wTerminate(); + + 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;wGetSMSStatus(&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;wGetMemoryLocation(&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;wdepend + +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 index 0000000..0b589ae --- /dev/null +++ b/gnokiid/gnokiid.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include + +#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 , 1999\n" +"Copyright (C) Pavel Janík ml. , 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 index 0000000..a5dae23 --- /dev/null +++ b/include/config.h.in.in @@ -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 index 0000000..3f95297 --- /dev/null +++ b/include/data/at-emulator.h @@ -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 index 0000000..c1e48d1 --- /dev/null +++ b/include/data/datapump.h @@ -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 index 0000000..a03a497 --- /dev/null +++ b/include/data/rlp-common.h @@ -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 index 0000000..6789510 --- /dev/null +++ b/include/data/rlp-crc24.h @@ -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 index 0000000..6fe838d --- /dev/null +++ b/include/data/virtmodem.h @@ -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 index 0000000..36dfaf0 --- /dev/null +++ b/include/devices/tekram.h @@ -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 + /* FIXME: this should be solved in config.h in 0.4.0 */ + #define __const const + typedef void * __ptr_t; +#else + #include +#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 index 0000000..a852f39 --- /dev/null +++ b/include/devices/unixirda.h @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 0000000..b044d43 --- /dev/null +++ b/include/devices/unixserial.h @@ -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 + /* FIXME: this should be solved in config.h in 0.4.0 */ + #define __const const + typedef void * __ptr_t; +#else + #include +#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 index 0000000..0ab7718 --- /dev/null +++ b/include/gsm-api.h @@ -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 index 0000000..f65acc2 --- /dev/null +++ b/include/gsm-bitmaps.h @@ -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 index 0000000..2ae6974 --- /dev/null +++ b/include/gsm-common.h @@ -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 */ +#define NM_MAX_SCREEN_WIDTH 75 + +/* 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 index 0000000..367a964 --- /dev/null +++ b/include/gsm-networks.h @@ -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 index 0000000..92e439e --- /dev/null +++ b/include/gsm-ringtones.h @@ -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 +#include +#include +#include +#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 index 0000000..fac18b9 --- /dev/null +++ b/include/gsm-sms.h @@ -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 index 0000000..2a16e51 --- /dev/null +++ b/include/misc.h @@ -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 +#include + +#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 + #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 + +#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 + +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 index 0000000..6b3b5fc --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# 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 index 0000000..97e2238 --- /dev/null +++ b/packaging/Debian/README.debian @@ -0,0 +1,6 @@ +Gnokii for DEBIAN +------------------- + +This package was debianized by Karel Zak + + diff --git a/packaging/Debian/conffiles b/packaging/Debian/conffiles new file mode 100644 index 0000000..6a3dcd4 --- /dev/null +++ b/packaging/Debian/conffiles @@ -0,0 +1 @@ +/etc/gnokiirc diff --git a/packaging/Debian/control b/packaging/Debian/control new file mode 100644 index 0000000..7414d1f --- /dev/null +++ b/packaging/Debian/control @@ -0,0 +1,11 @@ +Source: gnokii +Section: comm +Priority: optional +Maintainer: Karel Zak +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 index 0000000..5b582e7 --- /dev/null +++ b/packaging/Debian/copyright @@ -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 index 0000000..8290213 --- /dev/null +++ b/packaging/Debian/docs @@ -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 index 0000000..51ae09d --- /dev/null +++ b/packaging/Debian/menu @@ -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 index 0000000..785ba4e --- /dev/null +++ b/packaging/Debian/postinst @@ -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 index 0000000..593bbc7 --- /dev/null +++ b/packaging/Debian/preinst @@ -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 index 0000000..b48eee8 --- /dev/null +++ b/packaging/Debian/rules @@ -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 index 0000000..2d80a62 --- /dev/null +++ b/packaging/RedHat/gnokii.spec.in @@ -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. , Jan Derfinak +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/#' ${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 +- misc updates + +* Fri Oct 27 2000 Pavel Janik ml. +- todologo added to the package + +* Mon May 15 2000 Pavel Janik ml. +- proper access rights for gnokiid, gnokii and mgnokiidev + +* Sat May 13 2000 Pavel Janik ml. +- new doc files added + +* Tue Mar 21 2000 Pavel Janik ml. +- permission on /usr/sbin fixed +- correct /etc/gnokiirc file + +* Mon Mar 20 2000 Pavel Janik ml. +- mkdir of directories in install removed +- xgnokii package should contain lib/xgnokii directory + +* Mon Mar 20 2000 Jan Derfinak +- split package into gnokii and xgnokii +- added configure +- correct xgnokii installation +- installation with make install +- fixing paths + +* Thu Aug 5 1999 Pavel Janik ml. +- documentation files changed + +* Thu Aug 5 1999 Pavel Janik ml. +- xkeyb and xlogos added to RPM package + +* Sat Jul 24 1999 Pavel Janik ml. +- stripping of binaries + +* Thu Jul 22 1999 Pavel Janik ml. +- gnokii.nol added - nice example for logo uploading + +* Sun Jul 18 1999 Pavel Janik ml. +- mgnokiidev added to RPM package +- config file in /etc (it is not used now...) + +* Sat Jul 10 1999 Pavel Janik ml. +- use of ~/.gnokiirc so not magic model stuff +- new doc files + +* Mon Jun 28 1999 Pavel Janik ml. +- Nokia auth. protocol is there now +- xgnokii and gnokiid added to RPM + +* Sun May 9 1999 Pavel Janik ml. +- included 6110-patch updated to my prepatches + +* Thu May 6 1999 Pavel Janik ml. +- TODO-6110 file added to documentation files + +* Sun Mar 28 1999 Pavel Janik ml. +- upgraded to gnokii-0.2.4 +- 6110 version of gnokii added + +* Fri Mar 5 1999 Pavel Janik ml. +- the first SPEC file for gnokii diff --git a/packaging/Slackware/SlackBuild.in b/packaging/Slackware/SlackBuild.in new file mode 100644 index 0000000..d49b081 --- /dev/null +++ b/packaging/Slackware/SlackBuild.in @@ -0,0 +1,70 @@ +#!/bin/sh + +# +# Script for building GNOKII package +# Written by Pawe³ Kot +# + +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 </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 index 0000000..b531914 --- /dev/null +++ b/packaging/Slackware/disk @@ -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 index 0000000..614d028 --- /dev/null +++ b/packaging/make_dist @@ -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 index 0000000..94a1088 --- /dev/null +++ b/po/Makefile.in.in @@ -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 index 0000000..7e766df --- /dev/null +++ b/po/POTFILES.in @@ -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 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. \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 , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 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 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 , 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 \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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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 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 \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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Versioon %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Eestikeelne tõlge Hans Mõtshärg , 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 , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Versioon %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Eestikeelne tõlge Hans Mõtshärg , 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 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. \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 , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 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 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 , 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 \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: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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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 , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n" +msgstr "" +"gnokiid Versione %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 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 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. \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 , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 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. \n" +# msgstr "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. \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 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 , 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 \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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII wersja %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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 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 , 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 \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 , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII verzia %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 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 index 0000000..04af119 --- /dev/null +++ b/utils/Makefile @@ -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 index 0000000..78b2090 --- /dev/null +++ b/utils/mgnokiidev.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 0000000..df1c179 --- /dev/null +++ b/utils/todologo @@ -0,0 +1,102 @@ +#!/usr/bin/perl +# $Id$ +# +# Author: Tomi Ollila +# +# 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 index 0000000..c3e220b --- /dev/null +++ b/xgnokii/Makefile @@ -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 index 0000000..0b2c357 --- /dev/null +++ b/xgnokii/VERSION @@ -0,0 +1 @@ +20000715 \ No newline at end of file diff --git a/xgnokii/xgnokii.c b/xgnokii/xgnokii.c new file mode 100644 index 0000000..233ebd6 --- /dev/null +++ b/xgnokii/xgnokii.c @@ -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 /* for getenv */ +#include +#include +#include /* for time */ +#include + +#ifndef WIN32 +# include /* for usleep */ +# include +#else +# include +# 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 +#include + +#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 index 0000000..ad79075 --- /dev/null +++ b/xgnokii/xgnokii.h @@ -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 +#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 index 0000000..6c64386 --- /dev/null +++ b/xgnokii/xgnokii_calendar.c @@ -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 +#include +#include +#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(¬e); + 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(¬e); + 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(¬e); + 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(¬e); + 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, ""}, + { NULL, "R", ReadCalNotes, 0, NULL}, + { NULL, "S", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "X", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", NULL, 0, NULL}, + { NULL, "E", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseCalendar, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", AddReminder, 0, NULL}, + { NULL, "C", AddCall, 0, NULL}, + { NULL, "M", AddMeeting, 0, NULL}, + { NULL, "B", AddBirthday, 0, NULL}, + { NULL, NULL, NULL, 0, NULL}, + { NULL, "D", DeleteNote, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "A", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..d0c8b8f --- /dev/null +++ b/xgnokii/xgnokii_calendar.h @@ -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 index 0000000..c4cf9cb --- /dev/null +++ b/xgnokii/xgnokii_cfg.c @@ -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 +#include +#include +#include + +#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 index 0000000..f258a19 --- /dev/null +++ b/xgnokii/xgnokii_cfg.h @@ -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 +#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 index 0000000..9f7acd4 --- /dev/null +++ b/xgnokii/xgnokii_common.c @@ -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 +# include +# include +# include +#endif +#include +#include +#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 index 0000000..e90439a --- /dev/null +++ b/xgnokii/xgnokii_common.h @@ -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 +#include /* 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 index 0000000..d7c5f78 --- /dev/null +++ b/xgnokii/xgnokii_contacts.c @@ -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 +#include + +#ifndef WIN32 +# include +#else +# include +# define sleep(x) Sleep((x) * 1000) +# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +# define index strchr +#endif + +#include +#include +#if __unices__ +# include +#endif +#include + +#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;ipbEntry->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, ""}, + { NULL, "R", ReadContacts, 0, NULL}, + { NULL, "S", SaveContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", ImportContacts, 0, NULL}, + { NULL, "E", ExportContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", NewEntry, 0, NULL}, + { NULL, "U", DuplicateEntry, 0, NULL}, + { NULL, NULL, EditEntry, 0, NULL}, + { NULL, "D", DeleteEntry, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "C", ChMemType, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "F", FindFirstEntry, 0, NULL}, + { NULL, "L", SearchEntry, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "A", SelectAll, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "V", DialVoice, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..66a4dcf --- /dev/null +++ b/xgnokii/xgnokii_contacts.h @@ -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 +#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 index 0000000..fb0aa34 --- /dev/null +++ b/xgnokii/xgnokii_data.c @@ -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 +#include +#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 index 0000000..75c33a3 --- /dev/null +++ b/xgnokii/xgnokii_data.h @@ -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 index 0000000..7022db8 --- /dev/null +++ b/xgnokii/xgnokii_dtmf.c @@ -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 +#include +#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, ""}, + { NULL, "O", LoadFileDialog, 0, NULL}, + { NULL, "S", SaveFileDialog, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseDTMF, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..2bc2649 --- /dev/null +++ b/xgnokii/xgnokii_dtmf.h @@ -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 index 0000000..5f806cf --- /dev/null +++ b/xgnokii/xgnokii_logos.c @@ -0,0 +1,1739 @@ +#include +#include +#include +#include +#include +#include +#include + +#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, ""}, + { NULL, "O", OpenLogo, 0, NULL}, + { NULL, "S", SaveLogo, 0, NULL}, + { NULL, NULL, SaveLogoAs, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "G", GetNetworkInfoEvent, 0, NULL}, + { NULL, NULL, GetLogoEvent, 0, NULL}, + { NULL, "T", SetLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseLogosWindow, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "C", ClearLogoEvent, 0, NULL}, + { NULL, "I", InvertLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "U", UpLogoEvent, 0, NULL}, + { NULL, "D", DownLogoEvent, 0, NULL}, + { NULL, "L", LeftLogoEvent, 0, NULL}, + { NULL, "R", RightLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "H", FlipHorizontalLogoEvent, 0, NULL}, + { NULL, "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,"
",accelGroup); + gtk_item_factory_create_items(itemFactory,nMenuItems,logosMenuItems,NULL); + menuBar = gtk_item_factory_get_widget(itemFactory,"
"); + + 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 index 0000000..9d7c780 --- /dev/null +++ b/xgnokii/xgnokii_logos.h @@ -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 index 0000000..78a9ba4 --- /dev/null +++ b/xgnokii/xgnokii_lowlevel.c @@ -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 +#include +#include +#include +#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 (readedused) { + 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<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 index 0000000..44201fd --- /dev/null +++ b/xgnokii/xgnokii_lowlevel.h @@ -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 +#include +#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 index 0000000..30a7be0 --- /dev/null +++ b/xgnokii/xgnokii_netmon.c @@ -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 +#endif +#include +#include /* for atoi */ +#include +#include +#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, ""}, + { NULL, "W", CloseNetmon, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, NetmonOnOff, 1, NULL}, + { NULL, NULL, NetmonOnOff, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..c226f13 --- /dev/null +++ b/xgnokii/xgnokii_netmon.h @@ -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 + +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 index 0000000..d5da1f4 --- /dev/null +++ b/xgnokii/xgnokii_sms.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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;iprev_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;jselection; + + 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;jactive) Multisms.SMS[j].Type = GST_DR; + + if (GTK_TOGGLE_BUTTON (sendSMS.class)->active) Multisms.SMS[j].Class = 0; + + 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, ""}, + { NULL, "X", SendSMS, 0, NULL}, + { NULL, "S", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", CheckAddress, 0, NULL}, + { NULL, "C", ShowSelectContactsDialog, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSMSSend, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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)")); + gtk_box_pack_start (GTK_BOX (vbox), sendSMS.class, FALSE, FALSE, 3); + gtk_widget_show (sendSMS.class); + + 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, ""}, + { NULL, NULL, ReadFromPhone, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "S", NULL, 0, NULL}, + { NULL, "M", SaveToMailbox, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSMS, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", NewSMS, 0, NULL}, + { NULL, "F", ForwardSMS, 0, NULL}, + { NULL, "R", ReplySMS, 0, NULL}, + { NULL, "D", DeleteSMS, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "B", NewBC, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..d03398c --- /dev/null +++ b/xgnokii/xgnokii_sms.h @@ -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 index 0000000..d4bb32b --- /dev/null +++ b/xgnokii/xgnokii_speed.c @@ -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 +#include +#include +#include +#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, ""}, + { NULL, "R", ReadSpeedDial, 0, NULL}, + { NULL, "S", SaveSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", ImportSpeedDial, 0, NULL}, + { NULL, "E", ExportSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, EditKey, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { 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, "
", + 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_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 index 0000000..a454bf5 --- /dev/null +++ b/xgnokii/xgnokii_speed.h @@ -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 index 0000000..3ecf9f6 --- /dev/null +++ b/xgnokii/xgnokii_xkeyb.c @@ -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 +#include +#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, ""}, + {NULL, "W", CloseXkeyb, 0, NULL}, + {NULL, NULL, NULL, 0, ""}, + {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, "
", + 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_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 index 0000000..6060e09 --- /dev/null +++ b/xgnokii/xgnokii_xkeyb.h @@ -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 index 0000000..4eee2e6 --- /dev/null +++ b/xgnokii/xpm/6110mini.xpm @@ -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 index 0000000..f761ea9 --- /dev/null +++ b/xgnokii/xpm/BCard.xpm @@ -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 index 0000000..a573b79 --- /dev/null +++ b/xgnokii/xpm/Black_point.xpm @@ -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 index 0000000..8a5dd95 --- /dev/null +++ b/xgnokii/xpm/Caller.xpm @@ -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. + +*/ + +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 index 0000000..2546503 --- /dev/null +++ b/xgnokii/xpm/Caller_logo.xpm @@ -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 index 0000000..511bbee --- /dev/null +++ b/xgnokii/xpm/Check.xpm @@ -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 index 0000000..b8824ac --- /dev/null +++ b/xgnokii/xpm/Delete.xpm @@ -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 + + 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 index 0000000..c076d65 --- /dev/null +++ b/xgnokii/xpm/Dial.xpm @@ -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 + + 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 index 0000000..4a80808 --- /dev/null +++ b/xgnokii/xpm/Display.xpm @@ -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 + + 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 index 0000000..87b60d9 --- /dev/null +++ b/xgnokii/xpm/Duplicate.xpm @@ -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 + + 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 index 0000000..4b1ebc8 --- /dev/null +++ b/xgnokii/xpm/Edit.xpm @@ -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 + + 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 index 0000000..11dcff2 --- /dev/null +++ b/xgnokii/xpm/Edit_flip_horizontal.xpm @@ -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 index 0000000..ad0a951 --- /dev/null +++ b/xgnokii/xpm/Edit_flip_vertical.xpm @@ -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 index 0000000..ae63410 --- /dev/null +++ b/xgnokii/xpm/Edit_invert.xpm @@ -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 index 0000000..a37801f --- /dev/null +++ b/xgnokii/xpm/Flip.xpm @@ -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 index 0000000..57786ec --- /dev/null +++ b/xgnokii/xpm/Forward.xpm @@ -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 index 0000000..693ed9c --- /dev/null +++ b/xgnokii/xpm/Green_pixel.xpm @@ -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 index 0000000..0f479a7 --- /dev/null +++ b/xgnokii/xpm/Green_point.xpm @@ -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 index 0000000..cd9fbb2 --- /dev/null +++ b/xgnokii/xpm/Invert.xpm @@ -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. + +*/ + +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 index 0000000..a3533a6 --- /dev/null +++ b/xgnokii/xpm/Names.xpm @@ -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 index 0000000..0aa41d1 --- /dev/null +++ b/xgnokii/xpm/New.xpm @@ -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. + +*/ + +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 index 0000000..6b94a0a --- /dev/null +++ b/xgnokii/xpm/NewBD.xpm @@ -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 + +*/ + +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 index 0000000..3f1fef0 --- /dev/null +++ b/xgnokii/xpm/NewCall.xpm @@ -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 + +*/ + +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 index 0000000..826b18e --- /dev/null +++ b/xgnokii/xpm/NewMeet.xpm @@ -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 + +*/ + +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 index 0000000..1363893 --- /dev/null +++ b/xgnokii/xpm/NewRem.xpm @@ -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 + +*/ + +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 index 0000000..31c9fd6 --- /dev/null +++ b/xgnokii/xpm/Op.xpm @@ -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. + +*/ + +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 index 0000000..e3d9cd2 --- /dev/null +++ b/xgnokii/xpm/Open.xpm @@ -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. + +*/ + +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 index 0000000..67ee2af --- /dev/null +++ b/xgnokii/xpm/Operator_logo.xpm @@ -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 index 0000000..2db3e37 --- /dev/null +++ b/xgnokii/xpm/Read.xpm @@ -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 + + 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 index 0000000..a6c1296 --- /dev/null +++ b/xgnokii/xpm/Reply.xpm @@ -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 index 0000000..da91c44 --- /dev/null +++ b/xgnokii/xpm/Save.xpm @@ -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. + +*/ + +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 index 0000000..cdcf4c8 --- /dev/null +++ b/xgnokii/xpm/Send.xpm @@ -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. + +*/ + +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 index 0000000..cc7d6f1 --- /dev/null +++ b/xgnokii/xpm/SendSMS.xpm @@ -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 index 0000000..af78ec9 --- /dev/null +++ b/xgnokii/xpm/Startup.xpm @@ -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. + +*/ + +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 index 0000000..ca707b1 --- /dev/null +++ b/xgnokii/xpm/Startup_logo.xpm @@ -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 index 0000000..eb5dea9 --- /dev/null +++ b/xgnokii/xpm/Tool_brush.xpm @@ -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 index 0000000..ad4a15f --- /dev/null +++ b/xgnokii/xpm/Tool_filled_rectangle.xpm @@ -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 index 0000000..936a666 --- /dev/null +++ b/xgnokii/xpm/Tool_line.xpm @@ -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 index 0000000..d60065e --- /dev/null +++ b/xgnokii/xpm/Tool_rectangle.xpm @@ -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 index 0000000..efb08be --- /dev/null +++ b/xgnokii/xpm/alarm.xpm @@ -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. + +*/ + +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 index 0000000..3f5922e --- /dev/null +++ b/xgnokii/xpm/background.xpm @@ -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 + + Last modification: Sat Jun 26 07:30:06 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +/* 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 index 0000000..27d9358 --- /dev/null +++ b/xgnokii/xpm/info.xpm @@ -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 index 0000000..d42f05b --- /dev/null +++ b/xgnokii/xpm/logo.xpm @@ -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. + +*/ + +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 index 0000000..9a3e44b --- /dev/null +++ b/xgnokii/xpm/phone.xpm @@ -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 + + 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 index 0000000..14f14a7 --- /dev/null +++ b/xgnokii/xpm/quest.xpm @@ -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 + + 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 index 0000000..016ae75 --- /dev/null +++ b/xgnokii/xpm/sim.xpm @@ -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 + + 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 index 0000000..90937fe --- /dev/null +++ b/xgnokii/xpm/sms.xpm @@ -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 + + Last modification: Sat Jun 26 07:38:27 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +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 index 0000000..a06c82c --- /dev/null +++ b/xgnokii/xpm/stop.xpm @@ -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 + + 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 */ +"................... ...................", +".................. ..................", +"................. .................", +"................ ................", +"............... ......................... ...............", +".............. ........................... ..............", +"............. ............................. .............", +"............ ............................... ............", +"........... ................................. ...........", +".......... ................................... ..........", +"......... ..................................... .........", +"........ ....................................... ........", +"....... ......................................... .......", +"...... ........................................... ......", +"..... ............................................. .....", +".... ............................................... ....", +"... ................................................. ...", +".. ................................................... ..", +". ..................................................... .", +" ....................................................... ", +" ......................................................... ", +" ......................................................... ", +" ...... .. .. ... ....... ", +" ...... . . .. ...... ", +" ..... . . .. ...... ", +" ..... . . .. ...... ", +" ..... ..... ..... ..... ..... .. ... ...... ", +" ..... ..... ..... ..... ..... .. .... ...... ", +" ..... ............ ..... ..... .. .... ...... ", +" ..... ............ ..... ..... .. .... ...... ", +" ..... ...... ..... ..... .. .... ...... ", +" ..... ..... ..... ..... .. ...... ", +" ..... ..... ..... ..... .. ...... ", +" ...... ..... ..... ..... .. ...... ", +" ............ ..... ..... ..... .. ....... ", +" ............ ..... ..... ..... .. ............. ", +" ..... ..... ..... ..... ..... .. ............. ", +" ..... ..... ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ...... ..... .. ............. ", +" ...... ........ ...... ... ............. ", +" ......................................................... ", +" ......................................................... ", +" ....................................................... ", +". ..................................................... .", +".. ................................................... ..", +"... ................................................. ...", +".... ............................................... ....", +"..... ............................................. .....", +"...... ........................................... ......", +"....... ......................................... .......", +"........ ....................................... ........", +"......... ..................................... .........", +".......... ................................... ..........", +"........... ................................. ...........", +"............ ............................... ............", +"............. ............................. .............", +".............. ........................... ..............", +"............... ...............", +"................ ................", +"................. .................", +".................. ..................", +"................................................................." +}; -- 1.8.3.1