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
--- /dev/null
+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.
--- /dev/null
+- Credits -
+
+Thank you to, in no particular order...
+
+* Everyone on the gnokii mailing list for their interest
+ and input into the project.
+
+* Pavel Janík ml. for the majority of work on gnokii 6110 series
+ support, spelling corrections and miscellaneous code cleanups.
+
+* Serge Odinokov for 6110 series authentication protocol and
+ example Delphi RLP code. Many thanks...
+
+* Nick Lamb for operator logos, CLI uploading and AT*C command support.
+
+* Francois Dessart, Brendan O'Dea, Tony Lindstrom, Steffan Henke
+ and Cobus Van Eeden for dumps (and in some cases interpretation!)
+ of unknown messages, bug reports and prompt feedback of being
+ able to build new releases.
+
+* Staffan Ulfberg for taking care of the website and for instigating
+ the 6110 project which has now been merged with the gnokii effort.
+
+* Martin Hamilton for looking after the mailing list.
+
+* Tim Potter for some of the ideas that are now incorporated in gnokii
+ to provide multiple model support and config file code.
+
+* Paul Mackerras and Andrew Tridgell for discussions about pseudo
+ ttys, setuid programs and such. Tridge kindly reviewed the
+ mgnokiidev.c code.
+
+* Richard Kalton for his excellent page about Nokia 6110 protocol.
+
+* Colin Paton for his mail with subject "Dumps of phone<>PC traffic".
+ It helped a lot.
+
+* Juan Altmayer Pizzorno for his help with MBUS/FBUS and other
+ debugging.
+
+* Gary Reuter for his help when looking for a bug in phone numbers,
+ for the set-time function debugging.
+
+* Jiri Meloun for voice calling.
+
+* Emilio Brambilla for SMS notification fixes, setdatetime implementation
+ and typing GSM_Default_Alphabet.
+
+* Pawe³ Kot for EnterPIN on 6110 Series changes and other things.
+
+* Konstantinos Agouros for gnokii-perl module.
+
+* Czech Linux Users' group for it's CVS server which hosted our
+ development repository.
+
+* Goran Dokic, Samuli Sorvakko and anonymous for gettext files for
+ Dutch, Finnish and German translations.
+
+* Marcel Holtmann for RLP FCS code and misc stuff.
+
+* Chris Kemp for logo stuff and a big part of the RLP code.
+
+* Andrew Kozin for the model 640 support (NMT 450 network).
+
+* Karel Zak for his enthusiasm (and patches) for the autoconf stuff.
+
+* Harri Yli-Torkko for investigative work & code on the 3810/8110.
+
+* Stano Meduna for misc code and build process work.
+
+* Alfred Nurnberger for some information on the 5160/6160 MBUS
+ protocol.
+
+* Alessandro Zummo for reset and getopts code.
+
+* Mark Looi for Cell Broadcast code - based on protocol decoded by
+ Colin Paton
+
+* Sebastian Zagrodzki and Jacek Fiok for Polish .po file
+
+* Lucy for making pizza and putting up with Hugh disappearing to
+ work on this. Rachael for new parent induced insomnia...
+
+* Last not least: Mirka for allowing Pavel to work on gnokii
+ and for _great_ gnokii operator logos...
+
+* Hendrik Spohr for getting 7110 functions and DLR-3 to work (one small step
+ for Hendrik, big step for (my)gnokii :-))
+
+* Balazs Nagy for frames list and long hacker's work...
+
+* Ladislav Michl & Manfred Jonsson\r for support for various AT phones...
+
+* Manfred Jonsson for idea of programming, which looks for me good
+
+* Michael Hund for many improvements and progress in 7110/6210 source...
+
+* Ralf Thelen for very required by many, many people patch and getting
+ infrared sockets to work -> small changes, few days of hard searching :-).
+ Also sms stuff is OK now
+
+* Gabriele Zappi for many 6210 improvements and big calendar source
+
+* Andrea Scopece for 61xx source for netmonitor and other improvements
+
+* ....and other people, who reported me bugs or want(ed) to use mygnokii
+ and help me in making it the best !
+
+We tried to mentioned everyone who contributed to gnokii project but we
+might to forgot someone. If anyone does feel that we missed him and his
+name should be mentioned here do not hesitate to contact us :-)
--- /dev/null
+#
+# 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
--- /dev/null
+.TH "gnokii" "1" "July 15, 2000" "" "Gnokii"
+.SH "NAME"
+gnokii \- modem/fax driver for Nokia mobile phones
+.SH "SYNOPSIS"
+.B gnokii
+\fIOPTION\fR [\fIARGUMENT\fR]...
+.SH "DESCRIPTION"
+.PP
+.B gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP
+.B gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.
+
+.SH "OPTIONS"
+The options that are recognized by
+.B gnokii
+can be divided into several different groups.
+
+.SS GENERAL
+.TP
+.BR "\-\-help"
+display usage information.
+.TP
+.BR "\-\-version"
+displays version and copyright information.
+.TP
+.BR "\-\-monitor"
+continually updates phone status to stderr.
+
+.SS DIALING
+.TP
+.BR "\-\-getspeeddial \fIn\fP"
+reads speed dial from the specified location.
+.TP
+.BR "\-\-setspeeddial \fInumber\fP \fImemory_type\fP \fIlocation\fP"
+specify speed dial.
+.TP
+.BR "\-\-dialvoice \fInumber\fP"
+initiate voice call.
+.TP
+.BR "\-\-senddtmf \fIstring\fP"
+send DTMF sequence.
+
+.SS PHONE SETTINGS
+.TP
+.BR "\-\-getdisplaystatus"
+shows what icons are displayed.
+.TP
+.BR "\-\-displayoutput"
+show texts displayed in phone's screen.
+.TP
+.BR "\-\-getprofile [\fInumber\fP]"
+show settings for selected(all) profile(s).
+.TP
+.BR "\-\-netmonitor {\fIreset\fP|\fIoff\fP|\fIfield\fP|\fIdevel\fP|\fInext\fP|\fInr\fP}"
+setting/querying netmonitor mode.
+.TP
+.BR "\-\-reset [\fIsoft\fP|\fIhard\fP]"
+resets the phone.
+
+.SS CALENDAR
+.TP
+.BR "\-\-getcalendarnote \fIindex\fP [\-v]"
+get the note with number \fIindex\fR from calendar.
+.PP
+[\-v] \- output in vCalendar 1.0 format
+.TP
+.BR "\-\-writecalendarnote"
+write the note to calendar.
+.TP
+.BR "\-\-deletecalendarnote \fIindex\fP"
+delete the note with number [\fIindex\fR] from calendar.
+
+.SS SMS
+.TP
+.BR "\-\-getsms \fImemory_type\fR \fIstart\fP [\fIend\fP] [\-f \fIfile\fP] [\-d]"
+gets SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR].
+If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read.
+If [\-f \fIfile\fR] is used entries are saved in \fIfile\fR.
+Otherwise they are dumped to stdout.
+If [\-d] switch is used, a message is deleted after reading.
+.TP
+.BR "\-\-deletesms \fImemory_type\fP \fIstart\fP [\fIend\fP]"
+deletes SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR].
+If [\fIend\fI] is not specified only one location \- [\fIstart\fR] is read.
+.TP
+.BR "\-\-sendsms \fIdestination\fP [\-\-smsc \fImessage_center_number\fP | \-\-smscno \fImessage_center_index\fP] [\-r] [\-C \fIn\fP] [\-v \fIn\fP] [\-\-long \fIn\fP]"
+sends an SMS message to \fIdestination\fR via \fImessage_center_number\fR or SMSC number taken from phone memory from address \fImessage_center_index\fR.
+If this argument is ommited SMSC number is taken from phone memory from location 1.
+Message text is taken from STDIN.
+This function has had limited testing and may not work at all on your network.
+Meaning of other optional parameters:
+.PP
+[\-r] \- request for delivery report
+.PP
+[\-C \fIn\fR] \- Class Message \fIn\fR, where \fIn\fR can be 0..3
+.PP
+[\-v \fIn\fR] \- validity in minutes
+.PP
+[\-\-long \fIn\fR] \- send no more then \fIn\fR characters, default is 160
+.TP
+.BR "\-\-savesms [\-m] [\-l \fIn\fP] [\-i]"
+saves SMS messages to the Outbox. Messages are read from STDIN. You can specify the following optional arguments:
+.PP
+[\-m] \- mark the message as sent
+[\-l \fIn\fR] \- save the message at location \fIn\fR on the SIM card
+[\-i] \- ask before overwriting specified location
+.TP
+.BR "\-\-getsmsc \fInumber\fP"
+show the SMSC number from location \fInumber\fR.
+
+.SS LOGOS
+.TP
+.BR "\-\-sendlogo {\fIcaller\fP|\fIop\fP} \fIdestination\fP \fIlogofile\fP [\fInetwork_code\fP]"
+send the \fIlogofile\fR to \fIdestination\fR as operator or CLI logo.
+.TP
+.BR "\-\-setlogo \fIlogofile\fP [\fInetwork_code\fP]"
+.TP
+.BR "\-\-setlogo \fIlogofile\fP [\fIcaller_group_number\fP] [\fIgroup_name\fP]"
+.TP
+.BR "\-\-setlogo \fItext\fP [\fIstartup_text\fP]"
+.TP
+.BR "\-\-setlogo \fIdealer\fP [\fIdealer_startup_text\fP]"
+set caller, startup or operator logo.
+.TP
+.BR "\-\-getlogo \fIlogofile\fP {\fIcaller\fP|\fIop\fP|\fIstartup\fP} [\fIcaller_group_number\fP]"
+get caller, startup or operator logo.
+
+.SS RINGTONES
+.TP
+.BR "\-\-sendringtone \fIdestination\fI \fIrtttlfile\fP"
+send the \fIrtttlfile\fR to \fIdestination\fR as ringtone.
+.TP
+.BR "\-\-setringtone \fIrtttlfile\fP"
+set the \fIrtttlfile\fR as ringtone (on 6110).
+
+.SS PHONEBOOK
+.TP
+.BR "\-\-getmemory \fImemory_type\fP \fIstart\fP [\fIend\fP]"
+reads specificed memory location from phone.
+If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read.
+Valid \fImemory types\fR are: ME, SM, FD, ON, EN, DC, RC, MC, LD.
+.TP
+.BR "\-\-writephonebook [\-i]"
+reads data from stdin and writes to phonebook
+When \-i option is used, refuses to overwrite existing entries.
+Uses the same format as provided by the output of the getphonebook command.
+
+.SS DATE, TIME AND ALARM
+.TP
+.BR "\-\-setdatetime [\fIYYY\fP [\fIMM\fP [\fIDD\fP [\fIHH\fP [\fIMM\fP]]]]]"
+set the date and the time of the phone.
+.TP
+.BR "\-\-getdatetime"
+shows current date and time in the phone.
+.TP
+.BR "\-\-setalarm \fIHH\fP \fIMM\fP"
+set the alarm of the phone.
+.TP
+.BR "\-\-getalarm"
+shows current alarm.
+
+.SS SECURITY
+.TP
+.BR "\-\-identify"
+get IMEI, model and revision.
+.TP
+.BR "\-\-entersecuritycode {\fIPIN\fP|\fIPIN2\fP|\fIPUK\fP|\fIPUK2\fP}"
+asks for the code and sends it to the phone.
+.TP
+.BR "\-\-getsecuritycodestatus"
+show if a security code is needed.
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to standard error. The exit code
+is 0 for correct functioning. Errors which appear to be caused by
+invalid or abused command line parameters cause an exit code of 2, and
+other errors cause an exit code of 1.
+
+.SH "BUGS"
+.PP
+We write quality software here ;)
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz>
+
+Manual page written by Dag Wieers <dag@mind.be> and Pawel Kot <pkot@linuxnews.pl>
+
+See also Docs/CREDITS from Gnokii sources.
+
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokiid, xgnokii, xlogos
--- /dev/null
+.TH "gnokiid" "8" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+gnokiid \- create a virtual modem for Nokia portable phones
+.SH "SYNOPSIS"
+.B gnokiid
+
+.B gnokiid
+[\fB\-\-help\fR|\fB\-\-version\fR|\fB\-\-debug\fR]
+
+.SH "DESCRIPTION"
+.PP
+.B gnokiid
+is a tool from the Gnokii tool suite used to create a virtual modem device with a Nokia portable telephone. The virtual modem device is usually accessed via a symbolic link called /dev/gnokii (created automatically by \fBmgnokiidev\fR(8)).
+
+.PP
+After
+.B gnokiid
+has created the virtual modem, it can be accessed like any other Hayes\-compatible modem by such programs as the terminal program \fBminicom\fR(1) or the PPP daemon \fBpppd\fR(8) to make standard data connections to remote computers.
+
+.PP
+The full range of portable telephone functions (SMS messaging, phone book, operator logos, etc.) are accessed using the command\-line program \fBgnokii\fR(1) or the graphical interface program \fBxgnokii\fR(1x).
+
+
+.PP
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.
+
+.SH "OPTIONS"
+.PP
+If called without any options, \fBgnokiid\fR will set up a virtual modem device using the settings in /etc/gnokiirc or in the user's ~/.gnokiirc (if it exists). Otherwise,
+
+.TP
+\fB\-\-help\fR
+print out a short usage message
+.TP
+\fB\-\-version\fR
+print out version, copyright, phone, and serial device info
+.TP
+\fB\-\-debug\fR
+uses STDIN/STDOUT for a virtual modem
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP
+Hmmm...
+
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii
+tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokii, xgnokii, mgnokiidev
--- /dev/null
+.TH "mgnokiidev" "8" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+mgnokiidev \- links /dev/gnokii to a virtual modem
+.SH "SYNOPSIS"
+.B mgnokiidev \fI/dev/pts/?\fR
+
+.SH "DESCRIPTION"
+.PP
+.B mgnokiidev
+is a tool from the Gnokii tool suite used to create the link /dev/gnokii that points to a pseudo\-tty (/dev/pts/?).
+
+.PP
+It is called after
+.B gnokiid
+has created a virtual modem that is attached to the pty. It's operation is transparent under normal usage as gnokiid takes care of calling it when required.
+
+.PP
+Since
+.B mgnokiidev
+must modifiy files in /dev, it must be either run as root or SUID root. The latter is the preferred method. Normally the
+.B mgnokiidev
+binary is chmod 4750 and owned by root.gnokii.
+
+.PP
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP
+None reported.
+
+
+.SH "AUTHOR"
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokiid, gnokii
--- /dev/null
+.TH todologo 8 "January 3, 2001" "GNOKII Tools" "GNOKII Tools"
+
+.SH NAME
+todologo \- Create operator logo that contains 3 lines of text
+
+.SH SYNOPSIS
+.B todologo
+\fI<text of line> - <text of line 2> - <text of line 3>\fR
+
+.SH DESCRIPTION
+The
+.B todologo
+program is used to create three lines of text
+that fits to the standard Nokia operator logo space (i.e. 72x14
+pixel space). This is achieved by using a proportional tiny font
+which most elements have size of 3x4 pixels (some are thinner).
+
+The name comes from an original intention that this program is
+used to create todo entries to one's mobile phone screen so that
+those are always visible and thus in user's memory. But the tool
+can just be used to print arbitrary text to the space provided
+by an operator logo.
+
+The hand-crafted font currently supports the following characters:
+abcdefghijklmnopqrstuvwxyz and 0123456789
+
+.SH OUTPUT
+The standard `.nol' formatted operator logo is printed to
+standard output. The header information of that output is taken
+from \fIgnokii.nol\fR that is distributed with
+.B GNOKII
+-- so you most probably need to give your operator code when uploading it to your
+mobile phone. Use
+.B gnokii
+or
+.B xlogos
+to do the uploading.
+
+.SH EXAMPLES
+First example writes some todo entries to todo.nol:
+.IP
+\fCtodologo pick up kids - call wife - order chinese >todo.nol\fP
+.LP
+This last example writes some wisdom to the stdout:
+.IP
+\fCtodologo Never underestimate - the power of the dark - side of the force\fP
+.LP
+.SH AUTHOR
+Tomi Ollila <Tomi.Ollila@iki.fi>
+
+.SH COPYING
+This program is distributed under the GNU Public License.
+
+.SH SEE ALSO
+.BR gnokii(1),
+xlogos
+
--- /dev/null
+.TH "xgnokii" "1x" "May 27, 2001" "" "Gnokii"
+.SH "NAME"
+xgnokii \- graphical interface of the Gnokii telephone toolkit
+.SH "SYNOPSIS"
+.B xgnokii
+
+.SH "DESCRIPTION"
+.PP
+.B xgnokii
+is a fancy graphical interface for Gnokii. It has on\-line help and plenty of doo\-dads.
+.PP
+Gnokii
+is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL.
+.PP
+Gnokii
+supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively.
+
+.SH "DIAGNOSTICS"
+Various error messages are printed to STDERR.
+.SH "BUGS"
+.PP
+This man page is too short. The only excuse is that the online help in xgnokii is extensive. Click and see for yourself.
+
+.SH "AUTHOR"
+Jan Derfinak is the author of the
+.B xgnokii
+.
+
+Hugh Blemings <hugh@blemings.org> and Pavel Janik ml. <Pavel.Janik@suse.cz> are the authors of the
+Gnokii tool suite.
+
+This manual page was written by Erik Rossen <rossen@freesurf.ch>.
+
+See also Docs/CREDITS from the Gnokii sources.
+.SH "COPYING"
+This program is distributed under the GNU Public License.
+
+.SH "SEE ALSO"
+gnokii, gnokiid, xlogos
--- /dev/null
+
+ 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)
--- /dev/null
+
+#
+# $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
--- /dev/null
+
+#
+# $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)
+
--- /dev/null
+0.3.3_pre8-gold_2002_02_16
--- /dev/null
+
+#
+# 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
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file provides a virtual modem or "AT" interface to the GSM phone by
+ calling code in gsm-api.c. Inspired by and in places copied from the Linux
+ kernel AT Emulator IDSN code by Fritz Elfert and others.
+
+*/
+
+#define __data_at_emulator_c
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#ifndef WIN32
+
+ #include <termios.h>
+
+#endif
+
+#include "config.h"
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/at-emulator.h"
+#include "data/virtmodem.h"
+#include "data/datapump.h"
+
+#define MAX_LINE_LENGTH 256
+
+ /* Global variables */
+bool ATEM_Initialised = false; /* Set to true once initialised */
+extern bool CommandMode;
+extern int ConnectCount;
+
+char ModelName[80]; /* This seems to be needed to avoid seg-faults */
+char PortName[80];
+
+
+ /* Local variables */
+int PtyRDFD; /* File descriptor for reading and writing to/from */
+int PtyWRFD; /* pty interface - only different in debug mode. */
+
+u8 ModemRegisters[MAX_MODEM_REGISTERS];
+char CmdBuffer[MAX_CMD_BUFFERS][CMD_BUFFER_LENGTH];
+int CurrentCmdBuffer;
+int CurrentCmdBufferIndex;
+bool VerboseResponse; /* Switch betweek numeric (4) and text responses (ERROR) */
+char IncomingCallNo;
+int MessageFormat; /* Message Format (text or pdu) */
+
+ /* Current command parser */
+void (*Parser)(char *);
+//void (*Parser)(char *) = ATEM_ParseAT; /* Current command parser */
+
+GSM_MemoryType SMSType;
+int SMSNumber;
+
+ /* If initialised in debug mode, stdin/out is used instead
+ of ptys for interface. */
+bool ATEM_Initialise(int read_fd, int write_fd, char *model, char *port)
+{
+ PtyRDFD = read_fd;
+ PtyWRFD = write_fd;
+
+ strncpy(ModelName,model,80);
+ strncpy(PortName,port,80);
+
+ /* Initialise command buffer variables */
+ CurrentCmdBuffer = 0;
+ CurrentCmdBufferIndex = 0;
+
+ /* Default to verbose reponses */
+ VerboseResponse = true;
+
+ /* Initialise registers */
+ ATEM_InitRegisters();
+
+ /* Initial parser is AT routine */
+ Parser = ATEM_ParseAT;
+
+ /* Setup defaults for AT*C interpreter. */
+ SMSNumber = 1;
+ SMSType = GMT_ME;
+
+ /* Default message format is PDU */
+ MessageFormat = PDU_MODE;
+
+ /* Set the call passup so that we get notified of incoming calls */
+ GSM->DialData(NULL,-1,&ATEM_CallPassup);
+
+ /* We're ready to roll... */
+ ATEM_Initialised = true;
+ return (true);
+}
+
+ /* Initialise the "registers" used by the virtual modem. */
+void ATEM_InitRegisters(void)
+{
+
+ ModemRegisters[REG_RINGATA] = 0;
+ ModemRegisters[REG_RINGCNT] = 2;
+ ModemRegisters[REG_ESC] = '+';
+ ModemRegisters[REG_CR] = 10;
+ ModemRegisters[REG_LF] = 13;
+ ModemRegisters[REG_BS] = 8;
+ ModemRegisters[S35]=7;
+ ModemRegisters[REG_ECHO] = BIT_ECHO;
+
+}
+
+
+/* This gets called to indicate an incoming call */
+
+void ATEM_CallPassup(char c)
+{
+ if ((c >= 0) && (c < 9)) {
+ ATEM_ModemResult(MR_RING);
+ IncomingCallNo = c;
+ }
+}
+
+
+ /* Handler called when characters received from serial port.
+ calls state machine code to process it. */
+
+void ATEM_HandleIncomingData(char *buffer, int length)
+{
+ int count;
+ unsigned char out_buf[3];
+
+ for (count = 0; count < length ; count++) {
+ /* Echo character if appropriate. */
+ if (ModemRegisters[REG_ECHO] & BIT_ECHO) {
+ out_buf[0] = buffer[count];
+ out_buf[1] = 0;
+ ATEM_StringOut(out_buf);
+ }
+
+ /* If it's a command terminator character, parse what
+ we have so far then go to next buffer. */
+ if (buffer[count] == ModemRegisters[REG_CR] ||
+ buffer[count] == ModemRegisters[REG_LF]) {
+
+ CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = 0x00;
+ Parser(CmdBuffer[CurrentCmdBuffer]);
+
+ CurrentCmdBuffer++;
+ if (CurrentCmdBuffer >= MAX_CMD_BUFFERS) {
+ CurrentCmdBuffer = 0;
+ }
+ CurrentCmdBufferIndex = 0;
+ } else {
+ CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = buffer[count];
+ CurrentCmdBufferIndex++;
+ if (CurrentCmdBufferIndex >= CMD_BUFFER_LENGTH) {
+ CurrentCmdBufferIndex = CMD_BUFFER_LENGTH;
+ }
+ }
+ }
+}
+
+
+ /* Parser for standard AT commands. cmd_buffer must be null terminated. */
+void ATEM_ParseAT(char *cmd_buffer)
+{
+ char *buf;
+ char number[30];
+
+ if (strncasecmp (cmd_buffer, "AT", 2) != 0) {
+ ATEM_ModemResult(MR_ERROR);
+ return;
+ }
+
+ for (buf = &cmd_buffer[2]; *buf;) {
+ switch (toupper(*buf)) {
+
+ case 'Z':
+ buf++;
+ break;
+ case 'A':
+ buf++;
+ /* For now we'll also initialise the datapump + rlp code again */
+ DP_Initialise(PtyRDFD, PtyWRFD);
+ GSM->DialData(NULL, -1, &DP_CallPassup);
+ GSM->AnswerCall(IncomingCallNo);
+ CommandMode = false;
+ return;
+ break;
+ case 'D':
+ /* Dial Data :-) */
+ /* FIXME - should parse this better */
+ /* For now we'll also initialise the datapump + rlp code again */
+ DP_Initialise(PtyRDFD, PtyWRFD);
+ buf++;
+ if (toupper(*buf) == 'T') buf++;
+ if (*buf == ' ') buf++;
+ strncpy(number, buf, 30);
+ if (ModemRegisters[S35] == 0) GSM->DialData(number, 1, &DP_CallPassup);
+ else GSM->DialData(number, 0, &DP_CallPassup);
+ ATEM_StringOut("\n\r");
+ CommandMode = false;
+ return;
+ break;
+ case 'H':
+ /* Hang Up */
+ buf++;
+ RLP_SetUserRequest(Disc_Req, true);
+ GSM->CancelCall();
+ break;
+ case 'S':
+ /* Change registers - only no. 35 for now */
+ buf++;
+ if (memcmp(buf, "35=", 3) == 0) {
+ buf += 3;
+ ModemRegisters[S35] = *buf - '0';
+ buf++;
+ }
+ break;
+ /* E - Turn Echo on/off */
+ case 'E':
+ buf++;
+ switch (ATEM_GetNum(&buf)) {
+ case 0:
+ ModemRegisters[REG_ECHO] &= ~BIT_ECHO;
+ break;
+ case 1:
+ ModemRegisters[REG_ECHO] |= BIT_ECHO;
+ break;
+ default:
+ ATEM_ModemResult(MR_ERROR);
+ return;
+ }
+ break;
+
+ /* Handle AT* commands (Nokia proprietary I think) */
+ case '*':
+ buf++;
+ if (!strcasecmp(buf, "NOKIATEST")) {
+ ATEM_ModemResult(MR_OK); /* FIXME? */
+ return;
+ } else {
+ if (!strcasecmp(buf, "C")) {
+ ATEM_ModemResult(MR_OK);
+ Parser = ATEM_ParseSMS;
+ return;
+ }
+ }
+ break;
+
+ /* + is the precursor to another set of commands +CSQ, +FCLASS etc. */
+ case '+':
+ buf++;
+ switch (toupper(*buf)) {
+ case 'C':
+ buf++;
+ /* Returns true if error occured */
+ if (ATEM_CommandPlusC(&buf) == true) {
+ return;
+ }
+ break;
+
+ case 'G':
+ buf++;
+ /* Returns true if error occured */
+ if (ATEM_CommandPlusG(&buf) == true) {
+ return;
+ }
+ break;
+
+ default:
+ ATEM_ModemResult(MR_ERROR);
+ return;
+ }
+ break;
+
+ default:
+ ATEM_ModemResult(MR_ERROR);
+ return;
+ }
+ }
+
+ ATEM_ModemResult(MR_OK);
+}
+
+static GSM_Error ATEM_ReadSMS(int number, GSM_MemoryType type, GSM_SMSMessage *message)
+{
+ GSM_Error error;
+
+ message->MemoryType = type;
+ message->Location = number;
+ error = GSM->GetSMSMessage(message);
+
+ return error;
+}
+
+static void ATEM_PrintSMS(char *line, GSM_SMSMessage *message, int mode)
+{
+ switch (mode) {
+ case INTERACT_MODE:
+ gsprintf(line, MAX_LINE_LENGTH, _("\n\rDate/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n\rText: %s\n\r"), message->Time.Day, message->Time.Month, message->Time.Year, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Sender, message->MessageCenter.Number, message->MessageText);
+ break;
+ case TEXT_MODE:
+ if (message->Coding==GSM_Coding_8bit)
+ gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->Sender, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, _("<Not implemented>"));
+ else
+ gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->Sender, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, message->MessageText);
+ break;
+ case PDU_MODE:
+ gsprintf(line, MAX_LINE_LENGTH, _("<Not implemented>"));
+ break;
+ default:
+ gsprintf(line, MAX_LINE_LENGTH, _("<Unknown mode>"));
+ break;
+ }
+}
+
+static void ATEM_EraseSMS(int number, GSM_MemoryType type)
+{
+ GSM_SMSMessage message;
+ message.MemoryType = type;
+ message.Location = number;
+ if (GSM->DeleteSMSMessage(&message) == GE_NONE) {
+ ATEM_ModemResult(MR_OK);
+ } else {
+ ATEM_ModemResult(MR_ERROR);
+ }
+}
+
+
+static void ATEM_HandleSMS()
+{
+ GSM_SMSMessage message;
+ GSM_Error error;
+ char buffer[MAX_LINE_LENGTH];
+
+ error = ATEM_ReadSMS(SMSNumber, SMSType, &message);
+ switch (error) {
+ case GE_NONE:
+ ATEM_PrintSMS(buffer, &message, INTERACT_MODE);
+ ATEM_StringOut(buffer);
+ break;
+ default:
+ gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rNo message under number %d\n\r"), SMSNumber);
+ ATEM_StringOut(buffer);
+ break;
+ }
+ return;
+}
+
+ /* Parser for SMS interactive mode */
+void ATEM_ParseSMS(char *buff)
+{
+ if (!strcasecmp(buff, "HELP")) {
+ ATEM_StringOut(_("\n\rThe following commands work...\n\r"));
+ ATEM_StringOut("DIR\n\r");
+ ATEM_StringOut("EXIT\n\r");
+ ATEM_StringOut("HELP\n\r");
+ return;
+ }
+
+ if (!strcasecmp(buff, "DIR")) {
+ SMSNumber = 1;
+ ATEM_HandleSMS();
+ Parser = ATEM_ParseDIR;
+ return;
+ }
+ if (!strcasecmp(buff, "EXIT")) {
+ Parser = ATEM_ParseAT;
+ ATEM_ModemResult(MR_OK);
+ return;
+ }
+ ATEM_ModemResult(MR_ERROR);
+}
+
+ /* Parser for DIR sub mode of SMS interactive mode. */
+void ATEM_ParseDIR(char *buff)
+{
+ switch (toupper(*buff)) {
+ case 'P':
+ SMSNumber--;
+ ATEM_HandleSMS();
+ return;
+ case 'N':
+ SMSNumber++;
+ ATEM_HandleSMS();
+ return;
+ case 'D':
+ ATEM_EraseSMS(SMSNumber, SMSType);
+ return;
+ case 'Q':
+ Parser= ATEM_ParseSMS;
+ ATEM_ModemResult(MR_OK);
+ return;
+ }
+ ATEM_ModemResult(MR_ERROR);
+}
+
+ /* Handle AT+C commands, this is a quick hack together at this
+ stage. */
+bool ATEM_CommandPlusC(char **buf)
+{
+ float rflevel;
+ GSM_RFUnits rfunits = GRF_CSQ;
+ char buffer[MAX_LINE_LENGTH], buffer2[MAX_LINE_LENGTH];
+ int status, index;
+ GSM_Error error;
+ GSM_SMSMessage message;
+
+ if (strncasecmp(*buf, "SQ", 2) == 0) {
+ buf[0] += 2;
+
+ if (GSM->GetRFLevel(&rfunits, &rflevel) == GE_NONE) {
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CSQ: %0.0f, 99", rflevel);
+ ATEM_StringOut(buffer);
+ return (false);
+ } else {
+ return (true);
+ }
+ }
+ /* AT+CGMI is Manufacturer information for the ME (phone) so
+ it should be Nokia rather than gnokii... */
+ if (strncasecmp(*buf, "GMI", 3) == 0) {
+ buf[0] += 3;
+ ATEM_StringOut(_("\n\rNokia Mobile Phones"));
+ return (false);
+ }
+
+ /* AT+CGSN is IMEI */
+ if (strncasecmp(*buf, "GSN", 3) == 0) {
+ buf[0] += 3;
+ if (GSM->GetIMEI(buffer2) == GE_NONE) {
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+ ATEM_StringOut(buffer);
+ return (false);
+ } else {
+ return (true);
+ }
+ }
+
+ /* AT+CGMR is Revision (hardware) */
+ if (strncasecmp(*buf, "GMR", 3) == 0) {
+ buf[0] += 3;
+ if (GSM->GetRevision(buffer2) == GE_NONE) {
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+ ATEM_StringOut(buffer);
+ return (false);
+ } else {
+ return (true);
+ }
+ }
+
+ /* AT+CGMM is Model code */
+ if (strncasecmp(*buf, "GMM", 3) == 0) {
+ buf[0] += 3;
+ if (GSM->GetModel(buffer2) == GE_NONE) {
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2);
+ ATEM_StringOut(buffer);
+ return (false);
+ } else {
+ return (true);
+ }
+ }
+
+ /* AT+CMGF is mode selection for message format */
+ if (strncasecmp(*buf, "MGF", 3) == 0) {
+ buf[0] += 3;
+ switch (**buf) {
+ case '=':
+ buf[0]++;
+ switch (**buf) {
+ case '0':
+ buf[0]++;
+ MessageFormat = PDU_MODE;
+ break;
+ case '1':
+ buf[0]++;
+ MessageFormat = TEXT_MODE;
+ break;
+ default:
+ return (true);
+ }
+ break;
+ case '?':
+ buf[0]++;
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGF: %d", MessageFormat);
+ ATEM_StringOut(buffer);
+ break;
+ default:
+ return (true);
+ }
+ return (false);
+ }
+
+ /* AT+CMGR is reading a message */
+ if (strncasecmp(*buf, "MGR", 3) == 0) {
+ buf[0] += 3;
+ switch (**buf) {
+ case '=':
+ buf[0]++;
+ sscanf(*buf, "%d", &index);
+ buf[0] += strlen(*buf);
+
+ error = ATEM_ReadSMS(index, SMSType, &message);
+ switch (error) {
+ case GE_NONE:
+ ATEM_PrintSMS(buffer2, &message, MessageFormat);
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGR: %s", buffer2);
+ ATEM_StringOut(buffer);
+ break;
+ default:
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error);
+ ATEM_StringOut(buffer);
+ return (true);
+ }
+ break;
+ default:
+ return (true);
+ }
+ return (false);
+ }
+
+ /* AT+CMGL is listing messages */
+ if (strncasecmp(*buf, "MGL", 3) == 0) {
+ buf[0]+=3;
+ status = -1;
+
+ switch (**buf) {
+ case 0:
+ case '=':
+ buf[0]++;
+ /* process <stat> parameter */
+ if (*(*buf-1) == 0 || /* i.e. no parameter given */
+ strcasecmp(*buf, "1") == 0 ||
+ strcasecmp(*buf, "3") == 0 ||
+ strcasecmp(*buf, "\"REC READ\"") == 0 ||
+ strcasecmp(*buf, "\"STO SENT\"") == 0) {
+ status = GSS_SENTREAD;
+ } else if (strcasecmp(*buf, "0") == 0 ||
+ strcasecmp(*buf, "2") == 0 ||
+ strcasecmp(*buf, "\"REC UNREAD\"") == 0 ||
+ strcasecmp(*buf, "\"STO UNSENT\"") == 0) {
+ status = GSS_NOTSENTREAD;
+ } else if (strcasecmp(*buf, "4") == 0 ||
+ strcasecmp(*buf, "\"ALL\"") == 0) {
+ status = 4; /* ALL */
+ } else {
+ return true;
+ }
+ buf[0] += strlen(*buf);
+
+ /* check all message storages */
+ for (index = 1; index <= 20; index++) {
+ error = ATEM_ReadSMS(index, SMSType, &message);
+ switch (error) {
+ case GE_NONE:
+ /* print messsage if it has the required status */
+ if (message.Status == status || status == 4 /* ALL */) {
+ ATEM_PrintSMS(buffer2, &message, MessageFormat);
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGL: %d,%s", index, buffer2);
+ ATEM_StringOut(buffer);
+ }
+ break;
+ case GE_EMPTYSMSLOCATION:
+ /* don't care if this storage is empty */
+ break;
+ default:
+ /* print other error codes and quit */
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error);
+ ATEM_StringOut(buffer);
+ return (true);
+ }
+ }
+ break;
+ default:
+ return (true);
+ }
+ return (false);
+ }
+
+ return (true);
+}
+
+ /* AT+G commands. Some of these responses are a bit tongue in cheek... */
+bool ATEM_CommandPlusG(char **buf)
+{
+ char buffer[MAX_LINE_LENGTH];
+
+ /* AT+GMI is Manufacturer information for the TA (Terminal Adaptor) */
+ if (strncasecmp(*buf, "MI", 3) == 0) {
+ buf[0] += 2;
+
+ ATEM_StringOut(_("\n\rHugh Blemings, Pavel Janík ml. and others..."));
+ return (false);
+ }
+
+ /* AT+GMR is Revision information for the TA (Terminal Adaptor) */
+ if (strncasecmp(*buf, "MR", 3) == 0) {
+ buf[0] += 2;
+ gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s %s %s", VERSION, __TIME__, __DATE__);
+
+ ATEM_StringOut(buffer);
+ return (false);
+ }
+
+ /* AT+GMM is Model information for the TA (Terminal Adaptor) */
+ if (strncasecmp(*buf, "MM", 3) == 0) {
+ buf[0] += 2;
+
+ gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rgnokii configured for %s on %s"), ModelName, PortName);
+ ATEM_StringOut(buffer);
+ return (false);
+ }
+
+ /* AT+GSN is Serial number for the TA (Terminal Adaptor) */
+ if (strncasecmp(*buf, "SN", 3) == 0) {
+ buf[0] += 2;
+
+ gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rnone built in, choose your own"));
+ ATEM_StringOut(buffer);
+ return (false);
+ }
+
+ return (true);
+}
+
+ /* Send a result string back. There is much work to do here, see
+ the code in the isdn driver for an idea of where it's heading... */
+void ATEM_ModemResult(int code)
+{
+ char buffer[16];
+
+ if (VerboseResponse == false) {
+ sprintf(buffer, "\n\r%d\n\r", code);
+ ATEM_StringOut(buffer);
+ } else {
+ switch (code) {
+ case MR_OK:
+ ATEM_StringOut("\n\rOK\n\r");
+ break;
+
+ case MR_ERROR:
+ ATEM_StringOut("\n\rERROR\n\r");
+ break;
+
+ case MR_CARRIER:
+ ATEM_StringOut("\n\rCARRIER\n\r");
+ break;
+
+ case MR_CONNECT:
+ ATEM_StringOut("\n\rCONNECT\n\r");
+ break;
+
+ case MR_NOCARRIER:
+ ATEM_StringOut("\n\rNO CARRIER\n\r");
+ break;
+ case MR_RING:
+ ATEM_StringOut("RING\n\r");
+ break;
+ default:
+ ATEM_StringOut(_("\n\rUnknown Result Code!\n\r"));
+ break;
+ }
+ }
+
+}
+
+
+ /* Get integer from char-pointer, set pointer to end of number
+ stolen basically verbatim from ISDN code. */
+int ATEM_GetNum(char **p)
+{
+ int v = -1;
+
+ while (*p[0] >= '0' && *p[0] <= '9') {
+ v = ((v < 0) ? 0 : (v * 10)) + (int) ((*p[0]++) - '0');
+ }
+
+ return v;
+}
+
+ /* Write string to virtual modem port, either pty or
+ STDOUT as appropriate. This function is only used during
+ command mode - data pump is used when connected. */
+void ATEM_StringOut(char *buffer)
+{
+ int count = 0;
+ char out_char;
+
+ while (count < strlen(buffer)) {
+
+ /* Translate CR/LF/BS as appropriate */
+ switch (buffer[count]) {
+ case '\r':
+ out_char = ModemRegisters[REG_CR];
+ break;
+ case '\n':
+ out_char = ModemRegisters[REG_LF];
+ break;
+ case '\b':
+ out_char = ModemRegisters[REG_BS];
+ break;
+ default:
+ out_char = buffer[count];
+ break;
+ }
+
+ write(PtyWRFD, &out_char, 1);
+ count ++;
+ }
+
+}
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file provides routines to handle processing of data when connected in
+ fax or data mode. Converts data from/to GSM phone to virtual modem
+ interface.
+
+*/
+
+#define __data_datapump_c
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/poll.h>
+#include <unistd.h>
+
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/at-emulator.h"
+#include "data/virtmodem.h"
+#include "data/datapump.h"
+#include "data/rlp-common.h"
+
+/* Global variables */
+extern bool CommandMode;
+
+/* Local variables */
+int PtyRDFD; /* File descriptor for reading and writing to/from */
+int PtyWRFD; /* pty interface - only different in debug mode. */
+struct pollfd ufds;
+u8 pluscount;
+bool connected;
+
+bool DP_Initialise(int read_fd, int write_fd)
+{
+ PtyRDFD = read_fd;
+ PtyWRFD = write_fd;
+ ufds.fd=PtyRDFD;
+ ufds.events=POLLIN;
+ RLP_Initialise(GSM->SendRLPFrame, DP_CallBack);
+ RLP_SetUserRequest(Attach_Req,true);
+ pluscount=0;
+ connected=false;
+ return true;
+}
+
+
+int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length)
+{
+ int temp;
+
+ switch(ind) {
+ case Data:
+ if (CommandMode==false) write(PtyWRFD, buffer, length);
+ break;
+ case Conn_Ind:
+ if (CommandMode==false) ATEM_ModemResult(MR_CARRIER);
+ RLP_SetUserRequest(Conn_Req,true);
+ break;
+ case StatusChange:
+ if (buffer[0]==0) {
+ connected=true;
+ if (CommandMode==false) ATEM_ModemResult(MR_CONNECT);
+ }
+ break;
+ case Disc_Ind:
+ if (CommandMode==false) ATEM_ModemResult(MR_NOCARRIER);
+ connected=false;
+ /* Set the call passup back to the at emulator */
+ GSM->DialData(NULL,-1,&ATEM_CallPassup);
+ CommandMode=true;
+ break;
+ case Reset_Ind:
+ RLP_SetUserRequest(Reset_Resp,true);
+ break;
+ case GetData:
+ if (poll(&ufds,1,0)) {
+
+ /* Check if the program has closed */
+ /* Return to command mode */
+ /* Note that the call will still be in progress, */
+ /* as with a normal modem (I think) */
+
+ if (ufds.revents!=POLLIN) {
+ CommandMode=true;
+ /* Set the call passup back to the at emulator */
+ GSM->DialData(NULL,-1,&ATEM_CallPassup);
+ return 0;
+ }
+
+ temp = read(PtyRDFD, buffer, length);
+
+ if (temp<0) return 0; /* FIXME - what do we do now? */
+
+ /* This will only check +++ and the beginning of a read */
+ /* But there should be a pause before it anyway */
+
+ if (buffer[0]=='+') {
+ pluscount++;
+ if (temp>1) {
+ if (buffer[1]=='+') pluscount++;
+ else pluscount=0;
+ if (temp>2) {
+ if (buffer[2]=='+') pluscount++;
+ else pluscount=0;
+ if (temp>3) pluscount=0;
+ }
+ }
+ } else pluscount=0;
+
+ if (pluscount==3) {
+ CommandMode=true;
+ /* Set the call passup back to the at emulator */
+ GSM->DialData(NULL,-1,&ATEM_CallPassup);
+ ATEM_ModemResult(MR_OK);
+ break;
+ }
+
+ return temp;
+ }
+ return 0;
+ break;
+
+ default:
+
+ }
+ return 0;
+}
+
+void DP_CallPassup(char c)
+{
+ switch (c) {
+ case 'D':
+ if (CommandMode==false) ATEM_ModemResult(MR_CARRIER);
+ RLP_SetUserRequest(Conn_Req,true);
+ connected=true;
+ break;
+ case ' ':
+ CommandMode=true;
+ /* Set the call passup back to the at emulator */
+ GSM->DialData(NULL,-1,&ATEM_CallPassup);
+ ATEM_ModemResult(MR_NOCARRIER);
+ RLP_SetUserRequest(Disc_Req, true);
+ connected=false;
+ break;
+ default:
+ break;
+ }
+}
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ The development of RLP protocol is sponsored by SuSE CR, s.r.o. (Pavel use
+ the SIM card from SuSE for testing purposes).
+
+ Actual implementation of RLP protocol. Based on GSM 04.22 version 7.1.0,
+ downloadable from www.etsi.org (if you register with them)
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "data/rlp-common.h"
+#include "data/rlp-crc24.h"
+#include "gsm-common.h" /* For GSM error and RLP send function. */
+#include "misc.h" /* For u8, u32 etc. */
+
+#ifdef WIN32
+#define INLINE __inline
+#else
+#define INLINE inline
+#endif
+
+/* Our state machine which handles all of nine possible states of RLP
+ machine. */
+void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header);
+
+/* This is the type we are just handling. */
+RLP_FrameTypes CurrentFrameType;
+
+/* Current state of RLP state machine. */
+RLP_State CurrentState=RLP_S0; /* We start at ADM and Detached */
+
+/* Next state of RLP state machine. */
+RLP_State NextState;
+
+/* Pointer to Send function that sends frame to phone. */
+bool (*RLPSendFunction)(RLP_F96Frame *frame, bool out_dtx);
+
+/* Pointer to Passup function which returns data/inds */
+int (*RLP_Passup)(RLP_UserInds ind, u8 *buffer, int length);
+
+
+/* State variables - see GSM 04.22, Annex A, section A.1.2 */
+
+RLP_StateVariable UA_State;
+RLP_StateVariable UI_State;
+RLP_StateVariable Ackn_State;
+RLP_StateVariable Poll_State;
+RLP_StateVariable Poll_xchg;
+RLP_StateVariable SABM_State;
+RLP_StateVariable DISC_State;
+RLP_StateVariable DM_State; /* FIXME - not handled */
+RLP_StateVariable XI_R_State;
+RLP_StateVariable XID_C_State;
+RLP_StateVariable XID_R_State;
+RLP_StateVariable TEST_R_State;
+
+u8 VR=0;
+u8 VA=0;
+u8 VS=0;
+u8 VD=0;
+u8 DISC_Count;
+
+u8 DTX_VR;
+RLP_FrameTypes DTX_SF;
+
+#define RLP_M 62
+
+RLP_Data R[RLP_M];
+RLP_Data S[RLP_M];
+
+RLP_StateVariable SABM_State;
+int SABM_Count;
+
+RLP_UserRequestStore UserRequests;
+
+u8 Poll_Count=0;
+
+/* For now timing is done based on a frame reception rate of 20ms */
+/* Serge has measured it as 18.4ms */
+#define RLP_T_Scaling 2
+
+/* Timers - a value of -1 means not set */
+/* To set, timer is loaded with RLP_Timeout1_Limit/RLP_T_Scaling. */
+/* Each received frame (including NULLS / errors) any >0 timer is decrease */
+
+int T;
+int T_RCVS[RLP_M];
+
+bool UA_FBit=true;
+bool Ackn_FBit=false;
+bool DM_FBit=false; /* FIXME - not handled */
+bool RRReady=false;
+bool LRReady=true; /* FIXME - not handled (as if we couldn't keep up with 9600bps :-) */
+bool DISC_PBit=false;
+
+u8 LastStatus=0xff; /* Last Status byte */
+
+
+/* RLP Parameters. FIXME: Reset these - e.g. when entering state 0 */
+
+u8 RLP_SEND_WS = RLP_M-1;
+u8 RLP_RCV_WS = RLP_M-1;
+u8 RLP_Timeout1_Limit = 55;
+u8 RLP_N2 = 15; /* Maximum number of retransmisions. GSM spec says 6 here, but
+ Nokia will XID this. */
+u8 RLP_T2=0;
+u8 RLP_VersionNumber=0;
+
+
+
+/****** Externally called functions ********/
+/*******************************************/
+
+
+/* Function to initialise RLP code. Main purpose for now is
+ to set the address of the RLP send function in the API code. */
+
+void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length))
+{
+ int i;
+
+ RLPSendFunction = rlp_send_function;
+ RLP_Passup=rlp_passup;
+ UserRequests.Conn_Req=false;
+ UserRequests.Attach_Req=false;
+ UserRequests.Conn_Req_Neg=false;
+ UserRequests.Reset_Resp=false;
+ UserRequests.Disc_Req=false;
+ CurrentState=RLP_S0;
+ T=-1;
+ for (i=0;i<RLP_M;i++) T_RCVS[i]=-1;
+
+ UA_FBit=true;
+ Ackn_FBit=false;
+ DISC_PBit=false;
+ LastStatus=0xff;
+ Poll_Count=0;
+ VR=0;
+ VA=0;
+ VS=0;
+ VD=0;
+
+ RLP_SEND_WS = RLP_M-1;
+ RLP_RCV_WS = RLP_M-1;
+ RLP_Timeout1_Limit = 55;
+ RLP_N2 = 15;
+ RLP_T2=0;
+ RLP_VersionNumber=0;
+
+}
+
+/* Set a user event */
+/* Called by user program for now */
+
+void RLP_SetUserRequest(RLP_UserRequests type, bool value) {
+
+ switch (type) {
+ case Conn_Req:
+ UserRequests.Conn_Req=value;
+ break;
+ case Attach_Req:
+ UserRequests.Attach_Req=value;
+ break;
+ case Conn_Req_Neg:
+ UserRequests.Conn_Req_Neg=value;
+ break;
+ case Reset_Resp:
+ UserRequests.Reset_Resp=value;
+ break;
+ case Disc_Req:
+ UserRequests.Disc_Req=value;
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+
+/***** Internal functions **********/
+/***********************************/
+
+
+/* Check whether a user event is set */
+
+bool RLP_GetUserRequest(RLP_UserRequests type) {
+
+ bool result=false, *x;
+
+ switch (type) {
+ case Conn_Req:
+ x=&UserRequests.Conn_Req;
+ break;
+ case Attach_Req:
+ x=&UserRequests.Attach_Req;
+ break;
+ case Conn_Req_Neg:
+ x=&UserRequests.Conn_Req_Neg;
+ break;
+ case Reset_Resp:
+ x=&UserRequests.Reset_Resp;
+ break;
+ case Disc_Req:
+ x=&UserRequests.Disc_Req;
+ break;
+ default:
+ x=&result;
+ break;
+ }
+
+ result=*x;
+
+ if ( *x == true )
+ *x=false;
+
+ return result;
+}
+
+void RLP_SetTimer(int *timer)
+{
+ *timer=(int)(RLP_Timeout1_Limit/RLP_T_Scaling);
+}
+
+
+/* Previous sequence number. */
+static INLINE u8 Decr(u8 x)
+{
+ if (x==0)
+ return (RLP_M-1);
+ else
+ return (x-1);
+}
+
+/* Next sequence number. */
+static INLINE u8 Incr(u8 x)
+{
+ if (x==RLP_M-1)
+ return 0;
+ else
+ return (x+1);
+}
+
+/* Difference between sequence numbers. */
+
+/* FIXME: Not used now, so I have commented it out. PJ
+ * static INLINE u8 Diff(u8 x, u8 y)
+ * {
+ * int result = x-y;
+ * return (result >= 0) ? result : result + RLP_M;
+ * }
+*/
+
+/* Check value is within range */
+static bool InWindow(u8 val, u8 lower, u8 upper)
+{
+ /* allow for one level of wrapping round */
+ if (lower>=RLP_M) lower-=RLP_M;
+ if (upper>=RLP_M) upper-=RLP_M;
+ if (val>=RLP_M) val-=RLP_M;
+
+ /* .......L*****U....... */
+ if (lower <= upper)
+ return (val >= lower) && (val <= upper);
+
+ /* ******U.........L***** */
+ return (val <= upper) || (val >= lower);
+}
+
+void RLP_Init_link_vars(void)
+{
+ int i;
+
+ Ackn_State=_idle;
+ Poll_State=_idle;
+ Poll_Count=0;
+ Poll_xchg=_idle;
+ SABM_State=_idle;
+ DISC_State=_idle;
+ RRReady=true; /* This seems a bit strange but it's what the spec says... */
+ VA=0;
+ VR=0;
+ VS=0;
+ VD=0;
+ LastStatus=0xff;
+
+ for(i=0;i<RLP_M;i++) {
+ R[i].State=_idle;
+ S[i].State=_idle;
+ }
+
+}
+
+
+void RLP_AddRingBufferDataToSlots(void)
+{
+ u8 buffer[24];
+ int size;
+
+ while ((S[VD].State==_idle)
+ && ((size=RLP_Passup(GetData,buffer,24))!=0)) {
+ memset(S[VD].Data,0xff,25); /* FIXME - this isn't necessary - but makes debugging easier! */
+ if (size>23) {
+ S[VD].Data[0]=0x1e;
+ size=24;
+ }
+ else S[VD].Data[0]=size;
+
+ memcpy(&S[VD].Data[1],buffer,size);
+
+ if (size!=24) S[VD].Data[size+1]=0x1f;
+
+ S[VD].State=_send;
+ VD=Incr(VD);
+ }
+}
+
+
+/* FIXME: Remove this after finishing. */
+
+void X(RLP_F96Frame *frame) {
+
+ int i;
+
+ for (i=0; i<30; i++)
+ printf("byte[%2d]: %02x\n", i, *( (u8 *)frame+i));
+
+}
+
+
+
+void ResetAllT_RCVS(void)
+{
+
+ int i;
+ for (i=0;i<RLP_M;i++) T_RCVS[i]=-1;
+}
+
+
+
+/* This function is used for sending RLP frames to the phone. */
+
+void RLP_SendF96Frame(RLP_FrameTypes FrameType,
+ bool OutCR, bool OutPF,
+ u8 OutNR, u8 OutNS,
+ u8 *OutData, u8 OutDTX)
+{
+
+ RLP_F96Frame frame;
+ int i;
+
+ frame.Header[0]=0;
+ frame.Header[1]=0;
+
+#define SetCRBit frame.Header[0]|=0x01;
+#define SetPFBit frame.Header[1]|=0x02;
+
+#define ClearCRBit frame.Header[0]&=(~0x01);
+#define ClearPFBit frame.Header[1]&=(~0x02);
+
+ /* If Command/Response bit is set, set it in the header. */
+ if (OutCR)
+ SetCRBit;
+
+
+ /* If Poll/Final bit is set, set it in the header. */
+ if (OutPF)
+ SetPFBit;
+
+
+ /* If OutData is not specified (ie. is NULL) we want to clear frame.Data
+ array for the user. */
+ if (!OutData) {
+
+ frame.Data[0]=0x00; // 0x1f
+
+ for (i=1; i<25; i++)
+ frame.Data[i]=0;
+ }
+ else {
+ for (i=0; i<25; i++)
+ frame.Data[i]=OutData[i];
+ }
+
+#define PackM(x) frame.Header[1]|=((x)<<2);
+#define PackS(x) frame.Header[0]|=((x)<<1);
+#define PackNR frame.Header[1]|=(OutNR<<2);
+#define PackNS frame.Header[0]|=(OutNS<<3);frame.Header[1]|=(OutNS>>5);
+
+ switch (FrameType) {
+
+ /* Unnumbered frames. Be careful - some commands are used as commands
+ only, so we have to set C/R bit later. We should not allow user for
+ example to send SABM as response because in the spec is: The SABM
+ encoding is used as command only. */
+
+ case RLPFT_U_SABM:
+
+ frame.Header[0]|=0xf8; /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */
+ frame.Header[1]|=0x01; /* 1 P/F M1 M2 M3 M4 M5 X */
+
+ SetCRBit; /* The SABM encoding is used as a command only. */
+ SetPFBit; /* It is always used with the P-bit set to "1". */
+
+ PackM(RLPU_SABM);
+
+ break;
+
+ case RLPFT_U_UA:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ ClearCRBit; /* The UA encoding is used as a response only. */
+
+ PackM(RLPU_UA);
+
+ break;
+
+ case RLPFT_U_DISC:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ SetCRBit; /* The DISC encoding is used as a command only. */
+
+ PackM(RLPU_DISC);
+
+ break;
+
+ case RLPFT_U_DM:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ ClearCRBit; /* The DM encoding is used as a response only. */
+
+ PackM(RLPU_DM);
+
+ break;
+
+ case RLPFT_U_NULL:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ PackM(RLPU_NULL);
+
+ break;
+
+ case RLPFT_U_UI:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ PackM(RLPU_UI);
+
+ break;
+
+ case RLPFT_U_XID:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ SetPFBit; /* XID frames are always used with the P/F-bit set to "1". */
+
+ PackM(RLPU_XID);
+
+ break;
+
+ case RLPFT_U_TEST:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ PackM(RLPU_TEST);
+
+ break;
+
+ case RLPFT_U_REMAP:
+
+ frame.Header[0]|=0xf8;
+ frame.Header[1]|=0x01;
+
+ ClearPFBit; /* REMAP frames are always used with P/F-bit set to "0". */
+
+ PackM(RLPU_REMAP);
+
+ break;
+
+ case RLPFT_S_RR:
+
+ frame.Header[0]|=0xf0; /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */
+ frame.Header[1]|=0x01; /* 1 P/F ...N(R)... */
+
+ PackNR;
+
+ PackS(RLPS_RR);
+
+ break;
+
+ case RLPFT_S_REJ:
+
+ frame.Header[0]|=0xf0;
+ frame.Header[1]|=0x01;
+
+ PackNR;
+
+ PackS(RLPS_REJ);
+
+ break;
+
+ case RLPFT_S_RNR:
+
+ frame.Header[0]|=0xf0;
+ frame.Header[1]|=0x01;
+
+ PackNR;
+
+ PackS(RLPS_RNR);
+
+ break;
+
+ case RLPFT_S_SREJ:
+
+ frame.Header[0]|=0xf0;
+ frame.Header[1]|=0x01;
+
+ PackNR;
+
+ PackS(RLPS_SREJ);
+
+ break;
+
+ case RLPFT_SI_RR:
+
+ PackNR;
+ PackNS;
+
+ PackS(RLPS_RR);
+
+ break;
+
+ case RLPFT_SI_REJ:
+ PackNR;
+ PackNS;
+
+ PackS(RLPS_REJ);
+
+ break;
+
+ case RLPFT_SI_RNR:
+
+ PackNR;
+ PackNS;
+
+ PackS(RLPS_RNR);
+
+ break;
+
+ case RLPFT_SI_SREJ:
+ PackNR;
+ PackNS;
+
+ PackS(RLPS_SREJ);
+
+ break;
+
+ default:
+ break;
+ }
+
+
+ /* Store FCS in the frame. */
+ RLP_CalculateCRC24Checksum((u8 *)&frame, 27, frame.FCS);
+
+ // X(&frame);
+
+ if (RLPSendFunction)
+ RLPSendFunction(&frame, OutDTX);
+
+}
+
+/* Check_input_PDU in Serge's code. */
+
+void RLP_DisplayF96Frame(RLP_F96Frame *frame)
+{
+ int count;
+ RLP_F96Header header;
+
+ if (T>=0) T--;
+ for (count=0;count<RLP_M;count++) if (T_RCVS[count]>=0) T_RCVS[count]--;
+
+ CurrentFrameType=RLPFT_BAD;
+
+ if (!frame) {
+ /* no frame provided, drop through to state machine anyway */
+ } else if (RLP_CheckCRC24FCS((u8 *)frame, 30) == true) {
+
+ /* Here we have correct RLP frame so we can parse the field of the header
+ to out structure. */
+
+ RLP_DecodeF96Header(frame, &header);
+
+ switch (header.Type) {
+
+ case RLPFT_U: /* Unnumbered frames. */
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Unnumbered Frame [$%02x%02x] M=%02x ", frame->Header[0],
+ frame->Header[1],
+ header.M);
+#endif
+
+ switch (header.M) {
+
+ case RLPU_SABM :
+ if (header.CR == 0 || header.PF == 0) break;
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Set Asynchronous Balanced Mode (SABM) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_SABM;
+
+ break;
+
+ case RLPU_UA:
+ if (header.CR == 1) break;
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Unnumbered Acknowledge (UA) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_UA;
+
+ break;
+
+ case RLPU_DISC:
+ if (header.CR == 0) break;
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Disconnect (DISC) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_DISC;
+
+ break;
+
+ case RLPU_DM:
+ if (header.CR == 1) break;
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Disconnected Mode (DM) ");
+#endif
+ CurrentFrameType=RLPFT_U_DM;
+
+ break;
+
+ case RLPU_UI:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Unnumbered Information (UI) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_UI;
+
+ break;
+
+ case RLPU_XID:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Exchange Information (XID) \n");
+ RLP_DisplayXID(frame->Data);
+#endif
+
+ CurrentFrameType=RLPFT_U_XID;
+
+ break;
+
+ case RLPU_TEST:
+
+#ifdef DEBUG
+ fprintf(stdout, "Test (TEST) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_TEST;
+
+ break;
+
+ case RLPU_NULL:
+
+#ifdef DEBUG
+ fprintf(stdout, "Null information (NULL) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_NULL;
+
+ break;
+
+ case RLPU_REMAP:
+
+#ifdef DEBUG
+ fprintf(stdout, "Remap (REMAP) ");
+#endif
+
+ CurrentFrameType=RLPFT_U_REMAP;
+
+ break;
+
+ default :
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, _("Unknown!!! "));
+#endif
+
+ CurrentFrameType=RLPFT_BAD;
+
+ break;
+
+ }
+ break;
+
+ case RLPFT_S: /* Supervisory frames. */
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Supervisory Frame [$%02x%02x] S=0x%x N(R)=%d ",
+ frame->Header[0],
+ frame->Header[1],
+ header.S,
+ header.Nr);
+#endif
+
+ switch (header.S) {
+
+ case RLPS_RR:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "RR");
+#endif
+
+ CurrentFrameType=RLPFT_S_RR;
+
+ break;
+
+ case RLPS_REJ:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "REJ");
+#endif
+
+ CurrentFrameType=RLPFT_S_REJ;
+
+ break;
+
+ case RLPS_RNR:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "RNR");
+#endif
+
+ CurrentFrameType=RLPFT_S_RNR;
+
+ break;
+
+ case RLPS_SREJ:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "SREJ");
+#endif
+
+ CurrentFrameType=RLPFT_S_SREJ;
+
+ break;
+
+ default:
+
+#ifdef DEBUG
+ fprintf(stdout, _("BAD"));
+#endif
+
+ CurrentFrameType=RLPFT_BAD;
+
+ break;
+
+ }
+
+ break;
+
+ default:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Info+Supervisory Frame [$%02x%02x] S=0x%x N(S)=%d N(R)=%d ",
+ frame->Header[0],
+ frame->Header[1],
+ header.S,
+ header.Ns,
+ header.Nr);
+#endif
+
+ switch (header.S) {
+
+ case RLPS_RR:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "RR");
+#endif
+
+ CurrentFrameType=RLPFT_SI_RR;
+
+ break;
+
+ case RLPS_REJ:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "REJ");
+#endif
+
+ CurrentFrameType=RLPFT_SI_REJ;
+
+ break;
+
+ case RLPS_RNR:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "RNR");
+#endif
+
+ CurrentFrameType=RLPFT_SI_RNR;
+
+ break;
+
+ case RLPS_SREJ:
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "SREJ");
+#endif
+
+ CurrentFrameType=RLPFT_SI_SREJ;
+
+ break;
+
+ default:
+
+#ifdef DEBUG
+ fprintf(stdout, "BAD");
+#endif
+
+ CurrentFrameType=RLPFT_BAD;
+
+ break;
+ }
+
+ break;
+ }
+
+#ifdef RLP_DEBUG
+
+ /* Command/Response and Poll/Final bits. */
+
+ fprintf(stdout, " C/R=%d P/F=%d", header.CR, header.PF);
+#endif
+
+#ifdef DEBUG
+
+ /* Information. */
+
+ if (CurrentFrameType!=RLPFT_U_NULL) {
+
+ fprintf(stdout, "\n");
+
+ for (count = 0; count < 25; count ++) {
+
+ if (isprint(frame->Data[count]))
+ fprintf(stdout, "[%02x%c]", frame->Data[count], frame->Data[count]);
+ else
+ fprintf(stdout, "[%02x ]", frame->Data[count]);
+
+ if (count == 15)
+ fprintf(stdout, "\n");
+ }
+ }
+
+#endif
+#ifdef RLP_DEBUG
+ /* FCS. */
+
+ fprintf (stdout, " FCS: %02x %02x %02x\n\n", frame->FCS[0],
+ frame->FCS[1],
+ frame->FCS[2]);
+
+ fflush(stdout);
+
+#endif
+
+ }
+ else {
+
+ /* RLP Checksum failed - don't we need some statistics about these
+ failures? Nothing is printed, because in the first stage of connection
+ there are too many bad RLP frames... */
+
+#ifdef DEBUG
+ fprintf(stdout, _("Frame FCS is bad. Ignoring...\n"));
+#endif
+
+ }
+
+ MAIN_STATE_MACHINE(frame, &header);
+
+ /*
+ Y:= outblock();
+ */
+
+ return;
+}
+
+/* FIXME: real TEST_Handling - we do not handle TEST yet. */
+
+void TEST_Handling() {
+}
+
+
+
+/* FIXME: better XID_handling - but this will answer a XID command. */
+
+bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) {
+
+ u8 count;
+ u8 type;
+ u8 length;
+
+ if (CurrentFrameType == RLPFT_U_XID) {
+
+ count=0;
+
+ while (frame->Data[count] !=0) {
+
+ type=frame->Data[count] >> 4;
+ length=frame->Data[count] & 0x0f;
+ count++;
+
+ switch (type) {
+
+ case 0x01: /* RLP Version Number */
+ RLP_VersionNumber=frame->Data[count];
+ count+=length;
+ break;
+ case 0x02: /* Interworking Function (IWF) to Mobile Station (MS) window size */
+ if (frame->Data[count]>=1 && frame->Data[count]<RLP_M)
+ RLP_RCV_WS=frame->Data[count];
+ count+=length;
+ break;
+ case 0x03: /* MS to IWF window size */
+ if (frame->Data[count]>=1 && frame->Data[count]<RLP_M)
+ RLP_SEND_WS=frame->Data[count];
+ count+=length;
+ break;
+ case 0x04: /* Acknowledgement Timer (T1). */
+ RLP_Timeout1_Limit=frame->Data[count];
+ count+=length;
+ break;
+ case 0x05: /* Retransmission attempts (N2). */
+ RLP_N2=frame->Data[count];
+ count+=length;
+ break;
+ case 0x06: /* Reply delay (T2). */
+ RLP_T2=frame->Data[count];
+ count+=length;
+ break;
+ case 0x07: /* Compression - not yet! */
+ break;
+ default:
+ count+=length;
+ break;
+ }
+ }
+
+ /* Now reassemble a reply */
+
+ count=0;
+ memset(frame->Data,0x00,25); /* Makes debugging easier */
+
+ /* Version Number - force to 0 for now */
+ RLP_VersionNumber=0;
+ frame->Data[count++]=0x11;
+ frame->Data[count++]=RLP_VersionNumber;
+
+ /* Window sizes */
+ frame->Data[count++]=0x21;
+ frame->Data[count++]=RLP_RCV_WS;
+ frame->Data[count++]=0x31;
+ frame->Data[count++]=RLP_SEND_WS;
+
+ /* Acknowledgement Timer (T1). */
+ frame->Data[count++]=0x41;
+ frame->Data[count++]=RLP_Timeout1_Limit;
+
+ /* Retransmission attempts (N2). */
+ frame->Data[count++]=0x51;
+ frame->Data[count++]=RLP_N2;
+
+ /* Reply delay (T2). */
+ frame->Data[count++]=0x61;
+ frame->Data[count++]=RLP_T2;
+
+ XID_R_State = _send;
+
+ return true;
+ }
+
+ return false;
+}
+
+
+bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) {
+
+#ifdef DEBUG
+ // fprintf(stdout, _("Send_TXU()\n"));
+ // fprintf(stdout, _("XID_R_State=%d\n"), XID_R_State);
+#endif
+
+ /*
+
+ if (RLP_UserEvent(TEST_R_State)) {
+ RLP_SendF96Frame(RLPFT_U_TEST, false, TEST_R_FBit, 0, 0, TEST_R_Data, false);
+ return true;
+ }
+ else
+
+ */
+
+ if (XID_R_State == _send && frame) {
+ RLP_SendF96Frame(RLPFT_U_XID, false, true, 0, 0, frame->Data, false);
+ XID_R_State = _idle;
+ return true;
+ }
+
+ /*
+
+ else if ((XID_C_State == _send ) && (Poll_xchg == _idle)) {
+ RLP_SendF96Frame(RLPFT_U_XID, true, true, 0, 0, XID_C_Data, false);
+ XID_C_State = _wait;
+ T_XID = 1;
+ Poll_xchg = _wait;
+ return true;
+ } else if (RLP_UserEvent(UI_State)) {
+ RLP_SendF96Frame(RLPFT_U_UI, true, false, 0, 0, NULL, false);
+ return true;
+ }
+
+ */
+
+ return false;
+}
+
+
+/* Deliver data */
+
+void RLP_DeliverAllInSeqIF()
+{
+ int i,j;
+
+ do {
+
+ if ((R[VR].Data[0] & 0xE0)!=LastStatus) {
+ LastStatus=(R[VR].Data[0] & 0xE0);
+ RLP_Passup(StatusChange,&LastStatus,0);
+ }
+
+ j=0;
+ i=R[VR].Data[0] & 0x1f;
+ if (i==0x1e) j=24;
+ if (i<0x18) j=i;
+
+ /* FIXME - should check for more data in the frame */
+
+ RLP_Passup(Data,R[VR].Data+1,j);
+
+ R[VR].State=_idle;
+ VR=Incr(VR);
+
+ } while (R[VR].State==_rcvd);
+}
+
+
+/* Mark any missing information frames between VR and Ns*/
+void RLP_MarkMissingIF(u8 Ns)
+{
+ u8 i;
+ for (i=VR; i!=Ns; i=Incr(i)) {
+ if (R[i].State==_idle) R[i].State=_srej; /* bug in spec, fig A.23 */
+ }
+}
+
+
+/* Information frame handler */
+
+bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+
+ if ((header->CR) && (header->PF))
+ return true;
+
+ /* If the window size is 61, a received frame must have a sequence
+ number between VR and VR+60 */
+
+ if (!InWindow(header->Ns,VR,VR+RLP_RCV_WS-1))
+ return true;
+
+ if (header->Ns==VR) {
+ /* This is not in the spec but I think it is necessary */
+ if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1;
+ R[VR].State=_rcvd;
+ memcpy(R[VR].Data,frame->Data,25);
+ RLP_DeliverAllInSeqIF();
+ Ackn_State=_send;
+ }
+ else { /* Out of sequence, cause a SREJ */
+ if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1;
+ R[header->Ns].State=_rcvd;
+ memcpy(R[header->Ns].Data,frame->Data,25);
+ RLP_MarkMissingIF(header->Ns);
+ }
+
+ return false;
+}
+
+
+/* Mark acknowledged send frames */
+
+void RLP_AdvanceVA(u8 Nr)
+{
+ while (VA!=Nr) {
+ S[VA].State=_idle;
+ VA=Incr(VA);
+ }
+}
+
+
+/* Decrease VS back down to Nr since these have not been acknowledged */
+
+void RLP_DecreaseVS(u8 Nr)
+{
+ while (VS!=Nr) {
+ VS=Decr(VS);
+ S[VS].State=_send;
+ }
+}
+
+/* Supervisory frame handling */
+
+void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+ u8 i;
+
+ if ((header->CR) && (header->PF)) {
+ /* Special exchange (ie. error) - counter? */
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Got Poll command\n");
+#endif
+ Ackn_State=_send;
+ Ackn_FBit=true;
+ for (i=0; i<RLP_M; i++) R[i].State=_idle;
+ ResetAllT_RCVS();
+ }
+ if (Poll_State!=_idle) {
+ if (header->PF==0) return;
+ if ((CurrentFrameType==RLPFT_S_SREJ) || (CurrentFrameType==RLPFT_S_REJ) ||
+ (CurrentFrameType==RLPFT_SI_SREJ) || (CurrentFrameType==RLPFT_SI_REJ)) return;
+ RLP_DecreaseVS(header->Nr);
+ Poll_State=_idle;
+ Poll_xchg=_idle;
+ }
+ switch (CurrentFrameType){
+
+ case RLPFT_S_RR:
+ case RLPFT_SI_RR:
+ RLP_AdvanceVA(header->Nr);
+ RRReady=true;
+ break;
+ case RLPFT_S_RNR:
+ case RLPFT_SI_RNR:
+ RLP_AdvanceVA(header->Nr);
+ RRReady=false;
+ break;
+ case RLPFT_S_REJ:
+ case RLPFT_SI_REJ:
+ RLP_AdvanceVA(header->Nr);
+ RRReady=true;
+ RLP_DecreaseVS(header->Nr);
+ break;
+ case RLPFT_S_SREJ:
+ case RLPFT_SI_SREJ:
+ S[header->Nr].State=_send;
+ T=-1;
+ return;
+ default:
+ break;
+ }
+
+ if (VA==VS) T=-1;
+
+}
+
+
+/* Find the first SREJ frame */
+
+bool RLP_SREJSlot(u8 *x)
+{
+ u8 i;
+
+ for (i=Incr(VR); i!=VR; i=Incr(i)) if (R[i].State==_srej) {
+ *x=i;
+ return true;
+ }
+
+ return false;
+}
+
+
+
+/* Check if any SREJ frames need sending, if not send the next in line */
+
+bool RLP_PrepareDataToTransmit(u8 *p)
+{
+ u8 i;
+
+ for (i=VA; i!=VS; i=Incr(i))
+ if (S[i].State==_send) {
+ *p=i;
+ S[i].State=_wait;
+ return true;
+ }
+ if (S[VS].State!=_send) return false;
+ if (!InWindow(VS,VA,VA+RLP_SEND_WS-1))
+ return false;
+ *p=VS;
+ S[VS].State=_wait;
+ VS=Incr(VS);
+ return true;
+}
+
+
+
+/* Send a SREJ command */
+
+void RLP_SendSREJ(u8 x)
+{
+ u8 k;
+
+ if ((Poll_xchg==_idle) && (Poll_State==_send)) {
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending SREJ with poll\n");
+#endif
+
+ RLP_SendF96Frame(RLPFT_S_SREJ, true, true, x , 0 , NULL, false);
+ R[x].State=_wait;
+ RLP_SetTimer(&T_RCVS[x]);
+ Poll_Count++;
+ Poll_State=_wait;
+ Poll_xchg=_wait;
+ RLP_SetTimer(&T);
+ }
+ else if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending SREJ for %d along with frame %d\n",x,k);
+#endif
+ RLP_SendF96Frame(RLPFT_SI_SREJ, true, false, x , k , S[k].Data, false);
+ R[x].State=_wait;
+ RLP_SetTimer(&T_RCVS[x]);
+ RLP_SetTimer(&T);
+ }
+ else {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending SREJ for %d\n",x);
+#endif
+ RLP_SendF96Frame(RLPFT_S_SREJ, true, false, x , 0 , NULL, false);
+ R[x].State=_wait;
+ RLP_SetTimer(&T_RCVS[x]);
+ }
+}
+
+
+/* Send a command */
+
+void RLP_Send_XX_Cmd(RLP_FrameTypes type)
+{
+ u8 k;
+
+ if ((Poll_xchg!=_wait) && (Poll_State==_send)) {
+ RLP_SendF96Frame(type, true, true, VR , 0 , NULL, false);
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending Comd %x with Poll\n",type);
+#endif
+ Ackn_State=_idle;
+ Poll_Count++;
+ Poll_State=_wait;
+ Poll_xchg=_wait;
+ RLP_SetTimer(&T);
+ }
+ else if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending Comd %x with frame %d\n",type,k);
+#endif
+ RLP_SendF96Frame(type+4, true, false, VR , k , S[k].Data, false);
+ Ackn_State=_idle;
+ RLP_SetTimer(&T);
+ }
+ else {
+#ifdef RLP_DEBUG
+ if (type!=9)
+ fprintf(stdout, "Sending Comd %x\n",type);
+#endif
+ RLP_SendF96Frame(type, true, false, VR , 0 , NULL, false);
+ Ackn_State=_idle;
+ DTX_SF=type;
+ DTX_VR=VR; /* As v7.1.0 spec */
+ }
+}
+
+
+/* Send a Response */
+
+void RLP_Send_XX_Resp(RLP_FrameTypes type)
+{
+ u8 k;
+
+ if (RRReady && RLP_PrepareDataToTransmit(&k)) {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending Resp %x with frame %d\n",type+4,k);
+#endif
+ RLP_SendF96Frame(type+4, false, true, VR , k , S[k].Data, false);
+ Ackn_State=_idle;
+ Ackn_FBit=false;
+ RLP_SetTimer(&T);
+ }
+ else {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "Sending Resp %x\n",type);
+#endif
+ RLP_SendF96Frame(type, false, true, VR , 0 , NULL, false);
+ Ackn_State=_idle;
+ Ackn_FBit=false;
+ }
+}
+
+
+/* Decide which frame to use and send it - currently only used in state 4 */
+
+void RLP_SendData()
+{
+ u8 x;
+
+ if (UA_State==_send) {
+ RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0 , 0 , NULL, false);
+ UA_State=_idle;
+ }
+ else if (Ackn_FBit==true) {
+#ifdef RLP_DEBUG
+ printf("About to send Poll resp\n");
+#endif
+ if (LRReady) RLP_Send_XX_Resp(RLPFT_S_RR);
+ else RLP_Send_XX_Resp(RLPFT_S_RNR);
+ }
+ else if (RLP_SREJSlot(&x)) RLP_SendSREJ(x);
+ else if (LRReady) RLP_Send_XX_Cmd(RLPFT_S_RR);
+ else RLP_Send_XX_Cmd(RLPFT_S_RNR);
+}
+
+void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) {
+ int i;
+
+ switch (CurrentState) {
+
+ /***** RLP State 0. *****/
+
+ /* ADM and Detached.
+
+ This is the initial state after power on.
+
+ As long as the RLP entity is "Detached", DISC(P) and/or SABM at the
+ lower interface is acted upon by sending DM(P) or DM(1). Any other
+ stimulus at the lower interface is ignored.
+
+ This state can be exited only with Attach_Req. */
+
+ case RLP_S0:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 0.\n"));
+#endif
+
+ switch (CurrentFrameType) {
+
+ case RLPFT_U_DISC:
+ RLP_SendF96Frame(RLPFT_U_DM, false, header->PF, 0, 0, NULL, false);
+ break;
+
+ case RLPFT_U_SABM:
+ RLP_SendF96Frame(RLPFT_U_DM, false, true, 0, 0, NULL, false);
+ break;
+
+ default:
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ if (RLP_GetUserRequest(Attach_Req)) {
+ NextState=RLP_S1;
+ UA_State=_idle;
+ }
+ break;
+ }
+
+ break;
+
+ /***** RLP State 1. *****/
+
+ /* ADM and Attached.
+
+ The RLP entity is ready to established a connection, either by
+ initiating the connection itself (Conn_Req) or by responding to an
+ incoming connection request (SABM).
+
+ Upon receiving a DISC PDU, the handling of the UA response is
+ initiated. */
+
+ case RLP_S1:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 1.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch(CurrentFrameType) {
+
+ case RLPFT_U_TEST:
+ TEST_Handling();
+ break;
+
+ case RLPFT_U_SABM:
+ RLP_Passup(Conn_Ind,NULL,0);
+ NextState=RLP_S3;
+ break;
+
+ case RLPFT_U_DISC:
+ UA_State=_send;
+ UA_FBit=header->PF;
+ break;
+
+ case RLPFT_BAD: /* If we get a bad frame we can still respond with SABM */
+ default:
+ if (RLP_GetUserRequest(Conn_Req)) {
+ SABM_State=_send;
+ SABM_Count=0;
+ NextState=RLP_S2;
+ }
+ break;
+ }
+
+ }
+ if (!Send_TXU(frame, header)) {
+
+ if (UA_State == _send) {
+ RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+ UA_State=_idle;
+ }
+ else
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ }
+ break;
+
+ /***** RLP State 2. *****/
+
+ case RLP_S2:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 2.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch(CurrentFrameType) {
+
+ case RLPFT_U_TEST:
+ TEST_Handling();
+ break;
+
+ case RLPFT_U_SABM:
+ /*
+ T=0;
+ Conn_Conf=true;
+ UA_State=_send;
+ UA_FBit=true;
+ Init_Link_Vars;
+ NextState=4;
+ */
+ break;
+
+ case RLPFT_U_DISC:
+ /*
+ T=0;
+ DISC_Ind;
+ UA_State=_send;
+ UA_FBit=header->PF;
+ NextState=RLP_S1;
+ */
+ break;
+
+ case RLPFT_U_UA:
+#ifdef DEBUG
+ fprintf(stdout, _("UA received in RLP state 2.\n"));
+#endif
+
+ if (SABM_State == _wait && header->PF) {
+ T=-1;
+ // Conn_Conf=true;
+ // Init_Link_Vars;
+ NextState=RLP_S4;
+ }
+ break;
+
+ case RLPFT_U_DM:
+ if (SABM_State == _wait && header->PF) {
+ Poll_xchg=_idle;
+ // Conn_Conf_Neg=true;
+ NextState=RLP_S1;
+ }
+ break;
+
+ default:
+ if (T == RLP_Timeout1_Limit) {
+ Poll_xchg=_idle;
+ if (SABM_Count>RLP_N2)
+ NextState=RLP_S8;
+ SABM_State=_send;
+ }
+ break;
+ }
+ }
+
+ if (!Send_TXU(frame, header)) {
+
+ if (SABM_State == _send && Poll_xchg == _idle) {
+ RLP_SendF96Frame(RLPFT_U_SABM, true, true, 0, 0, NULL, false);
+ SABM_State=_wait;
+ SABM_Count++;
+ Poll_xchg=_wait;
+ T=1;
+ } else
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ }
+
+ if (RLP_GetUserRequest(Disc_Req)) {
+ T=-1;
+ DISC_State=_send;
+ DISC_Count=0;
+ DISC_PBit=(Poll_xchg==_idle);
+ NextState=5;
+ }
+
+ break;
+
+ /***** RLP State 3. *****/
+
+ case RLP_S3:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 3.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch(CurrentFrameType) {
+
+ case RLPFT_U_TEST:
+ TEST_Handling();
+ break;
+
+ case RLPFT_U_DISC:
+ RLP_Passup(Disc_Ind,NULL,0);
+ UA_State=_send;
+ UA_FBit=header->PF;
+ NextState=RLP_S1;
+ break;
+
+ default:
+ if (RLP_GetUserRequest(Conn_Req)) {
+ UA_State=_send;
+ UA_FBit=true;
+ NextState=RLP_S4;
+ RLP_Init_link_vars();
+ } else if (RLP_GetUserRequest(Conn_Req_Neg)) {
+ DM_State=_send; /* FIXME - code to handle DM_State - missing from spec? */
+ DM_FBit=true;
+ NextState=RLP_S1;
+ }
+ break;
+ }
+ }
+
+ if (!Send_TXU(frame, header)) {
+
+ if (UA_State == _send) {
+ RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+ UA_State=_idle;
+ }
+ else
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ }
+
+
+ if (RLP_GetUserRequest(Disc_Req)) {
+ T=-1;
+ DISC_State=_send;
+ DISC_Count=0;
+ DISC_PBit=(Poll_xchg==_idle);
+ NextState=5;
+ }
+
+ break;
+
+ /***** RLP State 4. *****/
+
+ case RLP_S4:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 4.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch (CurrentFrameType) {
+
+ case RLPFT_U_TEST:
+ TEST_Handling();
+ break;
+ case RLPFT_U_DISC:
+ T=-1;
+ ResetAllT_RCVS();
+ RLP_Passup(Disc_Ind,NULL,0);
+ UA_State=_send;
+ UA_FBit=header->PF;
+ NextState=RLP_S1;
+ break;
+ case RLPFT_U_SABM:
+ T=-1;
+ ResetAllT_RCVS();
+ RLP_Passup(Reset_Ind,NULL,0);
+ NextState=RLP_S7;
+ break;
+ case RLPFT_S_RR:
+ case RLPFT_S_RNR:
+ case RLPFT_S_REJ:
+ case RLPFT_S_SREJ:
+ /* Should check here for unsolicited Fbit */
+ /* Spec says: "Nr must be within the set of not yet
+ acknowledged I-frames or it must be the next possible
+ frame number." That's VA..VS-1 or VS, i.e. VA..VS */
+ if (!InWindow(header->Nr,VA,VS))
+ break;
+ RLP_S_Handler(frame,header);
+ break;
+ case RLPFT_SI_RR:
+ case RLPFT_SI_RNR:
+ case RLPFT_SI_REJ:
+ case RLPFT_SI_SREJ:
+ /* Should check here for unsolicited Fbit */
+ if (!InWindow(header->Nr,VA,VS))
+ break;
+ if (!RLP_I_Handler(frame,header)) RLP_S_Handler(frame,header);
+ break;
+ default:
+ break;
+ }
+ }
+
+ for (i=0;i<RLP_M;i++) if (T_RCVS[i]==0) {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "T_RCVS[%d] Timeout in State 4\n",i);
+#endif
+ R[i].State=_srej;
+ }
+ if (T==0) {
+ T=-1;
+#ifdef RLP_DEBUG
+ fprintf(stdout, "T Timeout in State 4\n");
+#endif
+
+ Poll_xchg=_idle;
+ if (Poll_State==_idle) {
+ Poll_State=_send;
+ Poll_Count=0;
+ }
+ else {
+ if (Poll_Count>RLP_N2) {
+#ifdef RLP_DEBUG
+ fprintf(stdout, "N2 Errors in State 4\n");
+#endif
+ }
+ Poll_State=_send;
+ Poll_Count++;
+ }
+ }
+
+ if (!Send_TXU(frame,header)) {
+ if (UA_State == _send) {
+ RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false);
+ UA_State=_idle;
+ }
+ else RLP_SendData();
+ }
+
+
+ /* Load any data from the Send ringbuffer into the send slots */
+ RLP_AddRingBufferDataToSlots();
+
+#ifdef RLP_DEBUG
+ // if (CurrentFrameType!=RLPFT_BAD)
+ fprintf(stdout, "VD=%d, VA=%d, VS=%d, VR=%d\n",VD,VA,VS,VR);
+#ifdef RLP_DEBUG_STATE
+ {
+ int zzz;
+
+ if(UA_State!=_idle) printf("[UA_State %d]",UA_State);
+ if(UI_State!=_idle) printf("[UI_State %d]",UI_State);
+ if(Ackn_State!=_idle) printf("[Ackn_State %d]",Ackn_State);
+ if(Poll_State!=_idle) printf("[Poll_State %d]",Poll_State);
+ if(Poll_xchg!=_idle) printf("[Poll_xchg %d]",Poll_xchg);
+ if(SABM_State!=_idle) printf("[SABM_State %d]",SABM_State);
+ if(DISC_State!=_idle) printf("[DISC_State %d]",DISC_State);
+ if(DM_State!=_idle) printf("[DM_State %d]",DM_State);
+ if(XI_R_State!=_idle) printf("[XI_R_State %d]",XI_R_State);
+ if(XID_C_State!=_idle) printf("[XID_C_State %d]",XID_C_State);
+ if(XID_R_State!=_idle) printf("[XID_R_State %d]",XID_R_State);
+ if(TEST_R_State!=_idle) printf("[TEST_R_State %d]",TEST_R_State);
+
+ printf("S: ");
+ for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",S[zzz].State);
+ printf("\nR: ");
+ for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",R[zzz].State);
+ printf("\nT: %d, T_RCVS: ",T);
+ for (zzz=0; zzz<RLP_M; zzz++) printf("%d ",T_RCVS[zzz]);
+ printf("\n");
+ }
+#endif
+#endif
+
+
+ if (RLP_GetUserRequest(Disc_Req)) {
+ T=-1;
+ ResetAllT_RCVS();
+ DISC_State=_send;
+ DISC_Count=0;
+ DISC_PBit=(Poll_xchg==_idle);
+ NextState=5;
+ }
+
+ break;
+
+
+ /***** RLP State 5. *****/
+
+ case RLP_S5:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 5.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch (CurrentFrameType) {
+
+ case RLPFT_U_UA:
+ case RLPFT_U_DM:
+ if ((DISC_State==_wait) && (DISC_PBit==header->PF)) {
+ if (DISC_PBit==true) Poll_xchg=_idle;
+ T=-1;
+ NextState=1;
+ }
+ break;
+ case RLPFT_U_DISC:
+ T=-1;
+ UA_State=_send;
+ UA_FBit=header->PF;
+ NextState=1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!Send_TXU(frame,header)) {
+ if ((DISC_State!=_wait) && !((DISC_PBit==true) && (Poll_xchg==_wait))) {
+ RLP_SendF96Frame(RLPFT_U_DISC, true, DISC_PBit, 0, 0, NULL, false);
+ if (DISC_PBit==true) Poll_xchg=_wait;
+ DISC_State=_wait;
+ DISC_Count++;
+ RLP_SetTimer(&T);
+ }
+ else
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ }
+
+ if (T==0) {
+ if (DISC_PBit==1) Poll_xchg=_idle;
+ DISC_Count++;
+ if (DISC_Count>RLP_N2) {
+
+#ifdef RLP_DEBUG
+ fprintf(stdout, "N2 error in State 5!\n");
+#endif
+
+ }
+ DISC_State=_send;
+ }
+
+ break;
+
+ /***** RLP State 6. *****/
+ /* We should only get here after a Reset_Req which is not yet supported */
+
+ case RLP_S6:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 6 - not yet implemented!\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch (CurrentFrameType) {
+ default:
+ break;
+ }
+
+ }
+
+ if (!Send_TXU(frame,header)) {
+ }
+
+ if (RLP_GetUserRequest(Disc_Req)) {
+ T=-1;
+ DISC_State=_send;
+ DISC_Count=0;
+ DISC_PBit=(Poll_xchg==_idle);
+ NextState=5;
+ }
+
+ break;
+
+
+ /***** RLP State 7. *****/
+
+ case RLP_S7:
+
+#ifdef DEBUG
+ fprintf(stdout, _("RLP state 7.\n"));
+#endif
+
+ if (!XID_Handling(frame, header)) {
+
+ switch (CurrentFrameType) {
+ case RLPFT_U_DISC:
+ RLP_Passup(Disc_Ind,NULL,0);
+ UA_State=_send;
+ UA_FBit=header->PF;
+ NextState=RLP_S1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (RLP_GetUserRequest(Reset_Resp)){
+ UA_State=_send;
+ UA_FBit=1;
+ RLP_Init_link_vars();
+ NextState=RLP_S4;
+ }
+
+ if (!Send_TXU(frame,header)) {
+ RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false);
+ }
+
+ if (RLP_GetUserRequest(Disc_Req)) {
+ T=-1;
+ DISC_State=_send;
+ DISC_Count=0;
+ DISC_PBit=(Poll_xchg==_idle);
+ NextState=5;
+ }
+
+ break;
+
+
+ default:
+
+#ifdef DEBUG
+ fprintf(stdout, _("DEBUG: Unknown RLP state!\n"));
+#endif
+
+ break;
+ }
+
+ CurrentState=NextState;
+
+}
+
+/* Given a pointer to an RLP XID frame, display contents in human readable
+ form. Note for now only Version 0 and 1 are supported. Fields can appear
+ in any order and are delimited by a zero type field. This function is the
+ exact implementation of section 5.2.2.6, Exchange Identification, XID of
+ the GSM specification 04.22. */
+
+void RLP_DisplayXID(u8 *frame)
+{
+
+ int count = 25; /* Sanity check */
+ u8 type, length;
+
+ fprintf(stdout, "XID: ");
+
+ while ((*frame !=0) && (count >= 0)) {
+
+ type = *frame >> 4;
+ length = *frame & 0x0f;
+
+ switch (type) {
+
+ case 0x01: /* RLP Version Number, probably 1 for Nokia. */
+
+ frame += length;
+ fprintf(stdout, "Ver %d ", *frame);
+ break;
+
+ case 0x02: /* IWF to MS window size */
+
+ frame += length;
+ fprintf(stdout, "IWF-MS %d ", *frame);
+ break;
+
+ case 0x03: /* MS to IWF window size. */
+
+ frame += length;
+ fprintf(stdout, "MS-IWF %d ", *frame);
+ break;
+
+ case 0x04: /* Acknowledgement Timer (T1). */
+
+ frame += length;
+ fprintf(stdout, "T1 %dms ", *frame * 10);
+ break;
+
+ case 0x05: /* Retransmission attempts (N2). */
+
+ frame += length;
+ fprintf(stdout, "N2 %d ", *frame);
+ break;
+
+ case 0x06: /* Reply delay (T2). */
+
+ frame += length;
+ fprintf(stdout, "T2 %dms ", *frame * 10);
+ break;
+
+ case 0x07: /* Compression. */
+
+ frame ++;
+ fprintf(stdout, "Comp [Pt=%d ", (*frame >> 4) );
+ fprintf(stdout, "P0=%d ", (*frame & 0x03) );
+
+ frame ++;
+ fprintf(stdout, "P1l=%d ", *frame);
+ frame ++;
+ fprintf(stdout, "P1h=%d ", *frame);
+
+ frame ++;
+ fprintf(stdout, "P2=%d] ", *frame);
+ break;
+
+ default:
+
+ frame += length;
+ fprintf(stdout, "Unknown! type=%02x, length=%02x", type, length);
+ break;
+
+ }
+ count --;
+ frame ++;
+ }
+
+ return;
+}
+
+/* Given a pointer to an F9.6 Frame, split data out into component parts of
+ header and determine frame type. */
+
+void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header)
+{
+
+ /* Poll/Final bit. */
+
+ if ((frame->Header[1] & 0x02))
+ header->PF = true;
+ else
+ header->PF = false;
+
+ /* Command/Response bit. */
+
+ if ((frame->Header[0] & 0x01))
+ header->CR = true;
+ else
+ header->CR = false;
+
+ /* Send Sequence Number. */
+
+ header->Ns = frame->Header[0] >> 3;
+
+ if ((frame->Header[1] & 0x01))
+ header->Ns |= 0x20; /* Most significant bit. */
+
+ /* Determine frame type. See the section 5.2.1 in the GSM 04.22
+ specification. */
+
+ switch (header->Ns) {
+
+ case 0x3f: /* Frames of type U, unnumbered frames. */
+
+ /* U frames have M1, ..., M5 stored in the place of N(R). */
+
+ header->Type = RLPFT_U;
+ header->M = (frame->Header[1] >> 2) & 0x1f;
+ return; /* For U frames, we do not need N(R) and bits S1 and S2. */
+
+ case 0x3e: /* Frames of type S, supervisory frames. */
+
+ header->Type = RLPFT_S;
+ break;
+
+ default: /* Frames of type I+S, numbered information transfer ans
+ supervisory frames combined. */
+
+ header->Type = RLPFT_IS;
+ break;
+ }
+
+ /* Receive Sequence Number N(R). */
+ header->Nr = frame->Header[1] >> 2;
+
+ /* Status bits (S1 and S2). */
+ header->S = (frame->Header[0] >> 1) & 0x03;
+
+ return;
+}
+
+
--- /dev/null
+/*
+
+ $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);
+}
--- /dev/null
+/*
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file provides a virtual modem interface to the GSM phone by calling
+ code in gsm-api.c, at-emulator.c and datapump.c. The code here provides
+ the overall framework and coordinates switching between command mode
+ (AT-emulator) and "online" mode where the data pump code translates data
+ from/to the GSM handset and the modem data/fax stream.
+
+*/
+
+#define __virtmodem_c
+
+#include <config.h>
+
+/* This is the right way to include stdlib with __USE_XOPEN defined */
+#ifdef USE_UNIX98PTYS
+# define _XOPEN_SOURCE 500
+# include <features.h>
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#include "misc.h"
+#include "gsm-api.h"
+#include "gsm-common.h"
+#include "data/at-emulator.h"
+#include "data/datapump.h"
+#include "data/virtmodem.h"
+#include "data/rlp-common.h"
+
+ /* Global variables */
+
+//extern bool TerminateThread;
+int ConnectCount;
+
+ /* Local variables */
+
+int PtyRDFD; /* File descriptor for reading and writing to/from */
+int PtyWRFD; /* pty interface - only different in debug mode. */
+
+bool UseSTDIO; /* Use STDIO for debugging purposes instead of pty */
+bool CommandMode;
+
+pthread_t Thread;
+bool RequestTerminate;
+
+
+ /* If initialised in debug mode, stdin/out is used instead
+ of ptys for interface. */
+bool VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType connection, char *bindir, bool debug_mode, bool GSMInit,char *synchronizetime)
+{
+ int rtn;
+
+ CommandMode = true;
+
+ RequestTerminate = false;
+
+ if (debug_mode == true) {
+ UseSTDIO = true;
+ }
+ else {
+ UseSTDIO = false;
+ }
+
+ if (GSMInit) {
+#ifdef DEBUG
+ fprintf (stderr , "Initialising GSM\n");
+#endif /* DEBUG */
+ if ((VM_GSMInitialise(model, port, initlength, connection, synchronizetime) != GE_NONE)) {
+ fprintf (stderr, _("VM_Initialise - VM_GSMInitialise failed!\n"));
+ return (false);
+
+ }
+ }
+ GSMInit=false;
+
+ if (VM_PtySetup(bindir) < 0) {
+ fprintf (stderr, _("VM_Initialise - VM_PtySetup failed!\n"));
+ return (false);
+ }
+
+ if (ATEM_Initialise(PtyRDFD, PtyWRFD, model, port) != true) {
+ fprintf (stderr, _("VM_Initialise - ATEM_Initialise failed!\n"));
+ return (false);
+ }
+
+ if (DP_Initialise(PtyRDFD, PtyWRFD) != true) {
+ fprintf (stderr, _("VM_Initialise - DP_Initialise failed!\n"));
+ return (false);
+ }
+
+ /* Create and start thread, */
+ rtn = pthread_create(&Thread, NULL, (void *) VM_ThreadLoop, (void *)NULL);
+
+ if (rtn == EAGAIN || rtn == EINVAL) {
+ return (false);
+ }
+ return (true);
+}
+
+void VM_ThreadLoop(void)
+{
+ int res;
+ struct pollfd ufds;
+
+ /* Note we can't use signals here as they are already used
+ in the FBUS code. This may warrant changing the FBUS
+ code around sometime to use select instead to free up
+ the SIGIO handler for mainline code. */
+
+ ufds.fd=PtyRDFD;
+ ufds.events=POLLIN;
+
+ while (!RequestTerminate) {
+ if (!CommandMode) {
+ sleep(1);
+ } else { /* If we are in data mode, leave it to datapump to get the data */
+
+ res=poll(&ufds,1,500);
+
+ switch (res) {
+ case 0: /* Timeout */
+ break;
+
+ case -1:
+ perror("VM_ThreadLoop - select");
+ exit (-1);
+
+ default:
+ if (ufds.revents==POLLIN) {
+ VM_CharHandler();
+ } else usleep(500); /* Probably the file has been closed */
+ break;
+ }
+ }
+ }
+
+}
+
+ /* Application should call VM_Terminate to shut down
+ the virtual modem thread */
+void VM_Terminate(void)
+{
+
+ /* Request termination of thread */
+ RequestTerminate = true;
+
+ /* Now wait for thread to terminate. */
+ pthread_join(Thread, NULL);
+
+ if (!UseSTDIO) {
+ close (PtyRDFD);
+ close (PtyWRFD);
+ }
+}
+
+ /* Open pseudo tty interface and (in due course create a symlink
+ to be /dev/gnokii etc. ) */
+
+int VM_PtySetup(char *bindir)
+{
+ int err;
+ char mgnokiidev[200];
+ char *slave_name;
+ char cmdline[200];
+
+ if (bindir) {
+ strncpy(mgnokiidev, bindir, 200);
+ strcat(mgnokiidev, "/");
+ }
+ strncat(mgnokiidev, "mgnokiidev", 200 - strlen(bindir));
+
+ if (UseSTDIO) {
+ PtyRDFD = STDIN_FILENO;
+ PtyWRFD = STDOUT_FILENO;
+ return (0);
+ }
+
+ PtyRDFD = VM_GetMasterPty(&slave_name);
+ if (PtyRDFD < 0) {
+ fprintf (stderr, _("Couldn't open pty!\n"));
+ return(-1);
+ }
+ PtyWRFD = PtyRDFD;
+
+ /* Check we haven't been installed setuid root for some reason
+ if so, don't create /dev/gnokii */
+ if (getuid() != geteuid()) {
+ fprintf(stderr, _("gnokiid should not be installed setuid root!\n"));
+ return (0);
+ }
+
+#ifdef DEBUG
+ fprintf (stderr, _("Slave pty is %s, calling %s to create /dev/gnokii.\n"), slave_name, mgnokiidev);
+#endif /* DEBUG */
+
+ /* Create command line, something line ./mkgnokiidev ttyp0 */
+ sprintf(cmdline, "%s %s", mgnokiidev, slave_name);
+
+ /* And use system to call it. */
+ err = system (cmdline);
+
+ return (err);
+
+}
+
+ /* Handler called when characters received from serial port.
+ calls state machine code to process it. */
+void VM_CharHandler(void)
+{
+ unsigned char buffer[255];
+ int res;
+
+
+ /* If we are in command mode, get the character, otherwise leave it */
+
+ if (CommandMode && ATEM_Initialised) {
+
+ res = read(PtyRDFD, buffer, 255);
+
+ /* A returned value of -1 means something serious has gone wrong - so quit!! */
+ /* Note that file closure etc. should have been dealt with in ThreadLoop */
+
+ if (res < 0) {
+// TerminateThread=true;
+ return;
+ }
+
+ ATEM_HandleIncomingData(buffer, res);
+ }
+}
+
+ /* Initialise GSM interface, returning GSM_Error as appropriate */
+GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, char *synchronizetime)
+{
+ int count=0;
+ GSM_Error error;
+
+ /* Initialise the code for the GSM interface. */
+
+ error = GSM_Initialise(model,port, initlength, connection, RLP_DisplayF96Frame, synchronizetime);
+
+ if (error != GE_NONE) {
+ fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+ return (error);
+ }
+
+ /* First (and important!) wait for GSM link to be active. We allow 10
+ seconds... */
+
+ while (count++ < 200 && *GSM_LinkOK == false) {
+ usleep(50000);
+ }
+
+ if (*GSM_LinkOK == false) {
+ fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting. \n"));
+ return (GE_NOLINK);
+ }
+
+ return (GE_NONE);
+}
+
+/* VM_GetMasterPty()
+ Takes a double-indirect character pointer in which to put a slave
+ name, and returns an integer file descriptor. If it returns < 0, an
+ error has occurred. Otherwise, it has returned the master pty
+ file descriptor, and fills in *name with the name of the
+ corresponding slave pty. Once the slave pty has been opened,
+ you are responsible to free *name. Code is from Developling Linux
+ Applications by Troan and Johnson */
+
+
+int VM_GetMasterPty(char **name) {
+
+#ifdef USE_UNIX98PTYS
+ int master, err;
+
+ master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK);
+ if (master >= 0) {
+ err = grantpt(master);
+ err = err || unlockpt(master);
+ if (!err) {
+ *name = ptsname(master);
+ } else {
+ return(-1);
+ }
+ }
+#else /* USE_UNIX98PTYS */
+ int i = 0 , j = 0;
+ /* default to returning error */
+ int master = -1;
+
+ /* create a dummy name to fill in */
+ *name = strdup("/dev/ptyXX");
+
+ /* search for an unused pty */
+ for (i=0; i<16 && master <= 0; i++) {
+ for (j=0; j<16 && master <= 0; j++) {
+ (*name)[8] = "pqrstuvwxyzPQRST"[i];
+ (*name)[9] = "0123456789abcdef"[j];
+ /* open the master pty */
+ if ((master = open(*name, O_RDWR | O_NOCTTY | O_NONBLOCK )) < 0) {
+ if (errno == ENOENT) {
+ /* we are out of pty devices */
+ free (*name);
+ return (master);
+ }
+ }
+ }
+ }
+ if ((master < 0) && (i == 16) && (j == 16)) {
+ /* must have tried every pty unsuccessfully */
+ free (*name);
+ return (master);
+ }
+
+ /* By substituting a letter, we change the master pty
+ * name into the slave pty name.
+ */
+ (*name)[5] = 't';
+
+#endif /* USE_UNIX98PTYS */
+
+ return (master);
+}
+
--- /dev/null
+/*
+ * $Id$
+ *
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#ifndef WIN32
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
+ #include <termios.h>
+ #include "devices/unixserial.h"
+#else
+ #include <windows.h>
+ #include "devices/winserial.h"
+#endif
+
+#include "devices/tekram.h"
+
+int tekram_open(__const char *__file) {
+
+ return (serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK));
+}
+
+void tekram_close(int __fd) {
+
+ serial_setdtrrts(__fd, 0, 0);
+
+ serial_close(__fd);
+}
+
+void tekram_reset(int __fd) {
+
+ serial_setdtrrts(__fd, 0, 0); usleep(50000);
+ serial_setdtrrts(__fd, 1, 0); usleep(1000);
+ serial_setdtrrts(__fd, 1, 1); usleep(50);
+
+ serial_changespeed(__fd, 9600);
+}
+
+void tekram_changespeed(int __fd, int __speed) {
+
+ unsigned char speedbyte;
+
+
+ switch (__speed) {
+
+ default:
+ case 9600: speedbyte = TEKRAM_PW | TEKRAM_B9600; break;
+ case 19200: speedbyte = TEKRAM_PW | TEKRAM_B19200; break;
+ case 38400: speedbyte = TEKRAM_PW | TEKRAM_B38400; break;
+ case 57600: speedbyte = TEKRAM_PW | TEKRAM_B57600; break;
+ case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break;
+
+ }
+
+
+ tekram_reset(__fd);
+
+ serial_setdtrrts(__fd, 1, 0);
+
+ usleep(7);
+
+ serial_write(__fd, &speedbyte, 1);
+
+ usleep(100000);
+
+ serial_setdtrrts(__fd, 1, 1);
+
+
+ serial_changespeed(__fd, __speed);
+}
+
+size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes) {
+
+ return (serial_read(__fd, __buf, __nbytes));
+}
+
+size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n) {
+
+ return (serial_write(__fd, __buf, __n));
+}
+
+int tekram_select(int fd, struct timeval *timeout) {
+
+ fd_set readfds;
+
+ FD_ZERO(&readfds);
+ FD_SET(fd, &readfds);
+
+ return (select(fd + 1, &readfds, NULL, NULL, timeout));
+
+}
--- /dev/null
+/*
+ * $Id$
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include "devices/unixirda.h"
+#include "devices/linuxirda.h"
+
+
+#ifndef AF_IRDA
+#define AF_IRDA 23
+#endif
+
+#define INFO_LEN 22
+#define DISCOVERY_TIMEOUT 60.0
+#define DISCOVERY_SLEEP 0.4
+
+static char *phone[] = {
+ "Nokia 5210",
+ "Nokia 6210", "Nokia 6250", "Nokia 6310",
+ "Nokia 7110",
+ "Nokia 8210", "Nokia 8310", "Nokia 8850"
+};
+
+double d_time(void)
+{
+ double time;
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+
+ time = tv.tv_sec + (((double)tv.tv_usec) / 1000000.0);
+
+ return time;
+}
+
+double d_sleep(double s)
+{
+ double time;
+ struct timeval tv1, tv2;
+
+ gettimeofday(&tv1, NULL);
+ usleep(s * 1000000);
+ gettimeofday(&tv2, NULL);
+
+ time = tv2.tv_sec - tv1.tv_sec + (((double)(tv2.tv_usec - tv1.tv_usec)) / 1000000.0);
+
+ return time;
+}
+
+static int irda_discover_device(int fd)
+{
+
+ struct irda_device_list *list;
+ struct irda_device_info *dev;
+ unsigned char *buf;
+ int s, len, i, j;
+ int daddr = -1;
+ double t1, t2;
+ int phones = sizeof(phone) / sizeof(*phone);
+
+ len = sizeof(*list) + sizeof(*dev) * 10; // 10 = max devices in discover
+ buf = malloc(len);
+ list = (struct irda_device_list *)buf;
+ dev = list->dev;
+
+ t1 = d_time();
+
+ do {
+ s = len;
+ memset(buf, 0, s);
+
+ if (getsockopt(fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &s) == 0) {
+ for (i = 0; (i < list->len) && (daddr == -1); i++) {
+ for (j = 0; (j < phones) && (daddr == -1); j++) {
+ if (strncmp(dev[i].info, phone[j], INFO_LEN) == 0) {
+ daddr = dev[i].daddr;
+#ifdef DEBUG
+ fprintf(stdout,_("%s\t%x\n"), dev[i].info, dev[i].daddr);
+#endif
+ }
+ }
+ if (daddr == -1) {
+#ifdef DEBUG
+ fprintf(stdout,_("unknown: %s\t%x\n"), dev[i].info, dev[i].daddr);
+#endif
+ }
+ }
+ }
+
+ if (daddr == -1) {
+ d_sleep(DISCOVERY_SLEEP);
+ }
+
+ t2 = d_time();
+
+ } while ((t2 - t1 < DISCOVERY_TIMEOUT) && (daddr == -1));
+
+ free(buf);
+
+ return daddr;
+}
+
+int irda_open(void)
+{
+ struct sockaddr_irda peer;
+ int fd = -1, daddr;
+ int pgrp;
+
+
+ fd = socket(AF_IRDA, SOCK_STREAM, 0); /* Create socket */
+ if (fd == -1) {
+ perror("socket");
+ exit(1);
+ }
+
+ /* discover the devices */
+ daddr = irda_discover_device(fd);
+ if (daddr == -1) {
+ printf("irda_discover: no nokia devices found");
+ exit(1);
+ }
+
+ /* Arrange for the current process to receive
+ SIGIO when the state of the socket changes. */
+ pgrp = getpid();
+ if (fcntl (fd, F_SETOWN, pgrp) < 0)
+ perror("F_SETOWN");
+
+ /* Set the socket state for Asynchronous */
+ if (fcntl (fd, F_SETFL, FASYNC) < 0) {
+ perror("fcntl");
+ exit(1);
+ }
+
+ peer.sir_family = AF_IRDA;
+ peer.sir_lsap_sel = LSAP_ANY;
+ peer.sir_addr = daddr;
+ strcpy(peer.sir_name, "Nokia:PhoNet");
+
+ if (connect(fd, (struct sockaddr *)&peer, sizeof(peer))) { /* Connect to service "Nokia:PhoNet" */
+ perror("connect");
+ close(fd);
+ fd = -1;
+ }
+
+ return fd;
+}
+
+int irda_close(int fd)
+{
+ shutdown(fd, 0);
+ return close(fd);
+}
+
+int irda_write(int __fd, __const __ptr_t __bytes, int __size)
+{
+ int actual,ret;
+
+ actual = 0;
+
+ do {
+ if ((ret = send(__fd, __bytes, __size - actual, 0)) < 0)
+ return(actual);
+
+ actual += ret;
+ __bytes += ret;
+
+ } while (actual < __size);
+
+ return (actual);
+}
+
+int irda_read(int __fd, __ptr_t __bytes, int __size)
+{
+ return (recv(__fd, __bytes, __size, 0));
+}
+
+int irda_select(int fd, struct timeval *timeout)
+{
+ fd_set readfds;
+
+ FD_ZERO(&readfds);
+ FD_SET(fd, &readfds);
+
+ return (select(fd + 1, &readfds, NULL, NULL, timeout));
+}
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include "misc.h"
+
+/* Do not compile this file under Win32 systems. */
+
+#ifndef WIN32
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <string.h>
+
+#if __unices__
+# include <sys/file.h>
+#endif
+
+#include <termios.h>
+#include "devices/unixserial.h"
+
+#ifdef HAVE_SYS_IOCTL_COMPAT_H
+ #include <sys/ioctl_compat.h>
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+/* If the target operating system does not have cfsetspeed, we can emulate
+ it. */
+
+#ifndef HAVE_CFSETSPEED
+ #if defined(HAVE_CFSETISPEED) && defined(HAVE_CFSETOSPEED)
+ #define cfsetspeed(t, speed) \
+ (cfsetispeed(t, speed) || cfsetospeed(t, speed))
+ #else
+ static int cfsetspeed(struct termios *t, int speed) {
+ #ifdef HAVE_TERMIOS_CSPEED
+ t->c_ispeed = speed;
+ t->c_ospeed = speed;
+ #else
+ t->c_cflag |= speed;
+ #endif
+ return 0;
+ }
+ #endif
+#endif
+
+#ifndef O_NONBLOCK
+ #define O_NONBLOCK 0
+#endif
+
+/* Structure to backup the setting of the terminal. */
+
+struct termios serial_termios;
+
+/* Open the serial port and store the settings. */
+
+int serial_open(__const char *__file, int __oflag) {
+
+ int __fd;
+ int retcode;
+
+ __fd = open(__file, __oflag);
+ if (__fd == -1) {
+ perror("Gnokii serial_open: open");
+ return (-1);
+ }
+
+ retcode=tcgetattr(__fd, &serial_termios);
+ if(retcode==-1) {
+ perror("Gnokii serial_open:tcgetattr");
+ /* Don't call serial_close since serial_termios is not valid */
+ close(__fd);
+ return(-1);
+ }
+
+ return __fd;
+}
+
+/* Close the serial port and restore old settings. */
+
+int serial_close(int __fd) {
+
+ if (__fd >= 0)
+ tcsetattr(__fd, TCSANOW, &serial_termios);
+
+ return (close(__fd));
+}
+
+/* Open a device with standard options. */
+
+int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake) {
+
+ int fd;
+ int retcode;
+ struct termios tp;
+
+ /* Open device */
+
+ fd = serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK);
+
+ if (fd < 0)
+ return fd;
+
+ /* Allow process/thread to receive SIGIO */
+
+#if !(__unices__)
+ retcode = fcntl(fd, F_SETOWN, getpid());
+ if (retcode == -1){
+ perror("Gnokii serial_opendevice: fnctl(F_SETOWN)");
+ serial_close(fd);
+ return(-1);
+ }
+#endif
+
+ /* Make filedescriptor asynchronous. */
+
+ if (__with_async) {
+ retcode=fcntl(fd, F_SETFL, FASYNC);
+ if (retcode == -1){
+ perror("Gnokii serial_opendevice: fnctl(F_SETFL)");
+ serial_close(fd);
+ return(-1);
+ }
+ }
+
+ /* Initialise the port settings */
+
+ memcpy(&tp, &serial_termios, sizeof(struct termios));
+
+ /* Set port settings for canonical input processing */
+
+ tp.c_cflag = B0 | CS8 | CLOCAL | CREAD;
+ if (__with_odd_parity) {
+ tp.c_cflag |= (PARENB | PARODD);
+ tp.c_iflag = 0;
+ }
+ else
+ tp.c_iflag = IGNPAR;
+ if (__with_hw_handshake)
+ tp.c_cflag |= CRTSCTS;
+ else
+ tp.c_cflag &= ~CRTSCTS;
+
+ tp.c_oflag = 0;
+ tp.c_lflag = 0;
+ tp.c_cc[VMIN] = 1;
+ tp.c_cc[VTIME] = 0;
+
+ retcode=tcflush(fd, TCIFLUSH);
+ if (retcode == -1) {
+ perror("Gnokii serial_opendevice: tcflush");
+ serial_close(fd);
+ return(-1);
+ }
+
+ retcode=tcsetattr(fd, TCSANOW, &tp);
+ if (retcode == -1){
+ perror("Gnokii serial_opendevice: tcsetattr");
+ serial_close(fd);
+ return(-1);
+ }
+
+ return fd;
+}
+
+/* Set the DTR and RTS bit of the serial device. */
+
+void serial_setdtrrts(int __fd, int __dtr, int __rts) {
+
+ unsigned int flags;
+
+ flags = TIOCM_DTR;
+
+ if (__dtr) ioctl(__fd, TIOCMBIS, &flags);
+ else ioctl(__fd, TIOCMBIC, &flags);
+
+ flags = TIOCM_RTS;
+
+ if (__rts) ioctl(__fd, TIOCMBIS, &flags);
+ else ioctl(__fd, TIOCMBIC, &flags);
+}
+
+
+int serial_select(int fd, struct timeval *timeout) {
+
+ fd_set readfds;
+
+ FD_ZERO(&readfds);
+ FD_SET(fd, &readfds);
+
+ return (select(fd + 1, &readfds, NULL, NULL, timeout));
+
+}
+
+
+/* Change the speed of the serial device. */
+
+void serial_changespeed(int __fd, int __speed) {
+
+#ifndef SGTTY
+ struct termios t;
+#else
+ struct sgttyb t;
+#endif
+
+ int speed=B9600;
+
+ switch (__speed) {
+ case 9600: speed = B9600; break;
+ case 19200: speed = B19200; break;
+ case 38400: speed = B38400; break;
+ case 57600: speed = B57600; break;
+ case 115200: speed = B115200; break;
+ }
+
+#ifndef SGTTY
+ tcgetattr(__fd, &t);
+
+ // This is not needed! We set up the speed via cfsetspeed
+ // t.c_cflag &= ~CBAUD;
+ // t.c_cflag |= speed;
+#ifdef DEBUG
+ if (cfsetspeed(&t, speed) == -1)
+ fprintf(stdout,_("Serial port speed setting failed\n"));
+#else
+ cfsetspeed(&t, speed);
+#endif
+
+ tcsetattr(__fd, TCSADRAIN, &t);
+#else
+ ioctl(__fd, TIOCGETP, &t);
+
+ t.sg_ispeed = speed;
+ t.sg_ospeed = speed;
+
+ ioctl(__fd, TIOCSETN, &t);
+#endif
+}
+
+/* Read from serial device. */
+
+size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) {
+
+ return (read(__fd, __buf, __nbytes));
+}
+
+/* Write to serial device. */
+
+size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) {
+
+ return (write(__fd, __buf, __n));
+}
+
+#endif /* WIN32 */
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Provides a generic API for accessing functions on the phone, wherever
+ possible hiding the model specific details.
+
+ The underlying code should run in it's own thread to allow communications to
+ the phone to be run independantly of mailing code that calls these API
+ functions.
+
+ Unless otherwise noted, all functions herein block until they complete. The
+ functions themselves are defined in a structure in gsm-common.h.
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+#ifdef WIN32
+ #include <windows.h>
+ #include "misc_win32.h"
+#endif
+
+#include "gsm-api.h"
+
+#include "newmodules/n6110.h"
+#include "newmodules/n7110.h"
+#include "newmodules/newat.h"
+#ifdef DEBUG
+ #include "newmodules/sniff/sniff.h"
+#endif
+#include "protocol/fbusirda.h"
+#include "protocol/fbus.h"
+#include "protocol/mbus.h"
+#include "protocol/at.h"
+#include "files/cfgreader.h"
+
+#ifndef WIN32
+ #include "devices/device.h"
+#endif
+
+#ifdef VC6
+ /* for VC6 make scripts save VERSION constant in mversion.h file */
+ #include "mversion.h"
+#endif
+
+/* GSM_LinkOK is set to true once normal communications with the phone have
+ been established. */
+
+bool *GSM_LinkOK;
+
+/* Define pointer to the GSM_Functions structure used by external code to call
+ relevant API functions. This structure is defined in gsm-common.h. */
+
+GSM_Functions *GSM;
+
+/* Define pointer to the GSM_Information structure used by external code to
+ obtain information that varies from model to model. This structure is also
+ defined in gsm-common.h */
+
+GSM_Information *GSM_Info;
+
+/* Initialise interface to the phone. Model number should be a string such as
+ 3810, 5110, 6110 etc. Device is the serial port to use e.g. /dev/ttyS0, the
+ user must have write permission to the device. */
+
+GSM_Protocol *Protocol;
+
+/* Local variables used by get/set phonebook entry code. Buffer is used as a
+ source or destination for phonebook data and other functions... Error is
+ set to GE_NONE by calling function, set to GE_COMPLETE or an error code by
+ handler routines as appropriate. */
+
+GSM_PhonebookEntry *CurrentPhonebookEntry;
+GSM_Error CurrentPhonebookError;
+
+GSM_SpeedDial *CurrentSpeedDialEntry;
+GSM_Error CurrentSpeedDialError;
+
+unsigned char Current_IMEI[GSM_MAX_IMEI_LENGTH];
+unsigned char Current_Revision[GSM_MAX_REVISION_LENGTH];
+unsigned char Current_Model[GSM_MAX_MODEL_LENGTH];
+
+GSM_SMSMessage *CurrentSMSMessage;
+GSM_Error CurrentSMSMessageError;
+int CurrentSMSPointer;
+
+GSM_SMSFolders *CurrentSMSFolders;
+GSM_Error CurrentSMSFoldersError;
+int CurrentSMSFoldersCount;
+
+GSM_OneSMSFolder CurrentSMSFolder;
+GSM_Error CurrentSMSFolderError;
+int CurrentSMSFolderID;
+
+GSM_MemoryStatus *CurrentMemoryStatus;
+GSM_Error CurrentMemoryStatusError;
+
+GSM_NetworkInfo *CurrentNetworkInfo;
+GSM_Error CurrentNetworkInfoError;
+
+GSM_SMSStatus *CurrentSMSStatus;
+GSM_Error CurrentSMSStatusError;
+
+GSM_MessageCenter *CurrentMessageCenter;
+GSM_Error CurrentMessageCenterError;
+
+int *CurrentSecurityCodeStatus;
+GSM_Error CurrentSecurityCodeError;
+GSM_SecurityCode *CurrentSecurityCode;
+
+GSM_DateTime *CurrentDateTime;
+GSM_Error CurrentDateTimeError;
+
+GSM_DateTime *CurrentAlarm;
+GSM_Error CurrentAlarmError;
+
+GSM_CalendarNote *CurrentCalendarNote;
+GSM_Error CurrentCalendarNoteError;
+
+GSM_NotesInfo CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2;
+GSM_Error CurrentCalendarNotesInfoError;
+
+GSM_Error CurrentSetDateTimeError;
+GSM_Error CurrentSetAlarmError;
+
+GSM_Error CurrentEnableExtendedCommandsError;
+
+int CurrentRFLevel,
+ CurrentBatteryLevel,
+ CurrentPowerSource;
+
+int CurrentDisplayStatus;
+GSM_Error CurrentDisplayStatusError;
+
+GSM_Error CurrentResetPhoneSettingsError;
+
+char *CurrentNetmonitor;
+GSM_Error CurrentNetmonitorError;
+
+GSM_Bitmap *CurrentGetBitmap=NULL;
+GSM_Error CurrentGetBitmapError;
+
+GSM_Error CurrentSetBitmapError;
+
+GSM_Error CurrentSendDTMFError;
+
+GSM_Profile *CurrentProfile;
+GSM_Error CurrentProfileError;
+
+GSM_Error CurrentDisplayOutputError;
+
+GSM_CBMessage *CurrentCBMessage;
+GSM_Error CurrentCBError;
+
+int CurrentPressKeyEvent;
+GSM_Error CurrentPressKeyError;
+
+GSM_Error CurrentPlayToneError=GE_UNKNOWN;
+
+GSM_Error CurrentDialVoiceError;
+
+GSM_Error CurrentGetOperatorNameError;
+GSM_Network *CurrentGetOperatorNameNetwork;
+GSM_Error CurrentSetOperatorNameError;
+
+GSM_Error CurrentGetIMEIError;
+
+GSM_Error CurrentGetHWError;
+
+unsigned char CurrentPPS[4];
+GSM_Error CurrentProductProfileSettingsError;
+
+char CurrentIncomingCall[20];
+
+GSM_Error CurrentBinRingtoneError;
+GSM_BinRingtone *CurrentGetBinRingtone=NULL;
+
+GSM_Error CurrentRingtoneError;
+
+GSM_Error CurrentMagicError;
+
+GSM_Error CurrentSimlockInfoError;
+GSM_AllSimlocks *CurrentSimLock;
+
+GSM_Error CurrentGetWAPBookmarkError;
+GSM_Error CurrentSetWAPBookmarkError;
+GSM_WAPBookmark *WAPBookmark;
+
+GSM_Error CurrentGetWAPSettingsError;
+GSM_WAPSettings *WAPSettings;
+
+GSM_Error CurrentCallDivertError;
+GSM_CallDivert *CurrentCallDivert;
+
+char *CurrentManufacturer;
+
+/* This is the connection type used in gnokii. */
+GSM_ConnectionType CurrentConnectionType;
+
+/* Pointer to a callback function used to return changes to a calls status */
+/* This saves unreliable polling */
+void (*CurrentCallPassup)(char c);
+
+/* Pointer to callback function in user code to be called when RLP frames
+ are received. */
+void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame);
+
+/* Used to disconnect the call */
+u8 CurrentCallSequenceNumber;
+
+bool CurrentLinkOK;
+
+bool CurrentRequestTerminate;
+
+bool CurrentDisableKeepAlive;
+
+bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection) {
+
+ bool found_match=false;
+
+ if (strstr(InfoToCheck.FBUSModels, model) != NULL) {
+ if (connection==GCT_FBUS) found_match=true;
+ }
+ if (strstr(InfoToCheck.MBUSModels, model) != NULL) {
+ if (connection==GCT_MBUS) found_match=true;
+ }
+ if (strstr(InfoToCheck.InfraredModels, model) != NULL) {
+ if (connection==GCT_Infrared) found_match=true;
+ }
+ if (strstr(InfoToCheck.DLR3Models, model) != NULL) {
+ if (connection==GCT_DLR3) found_match=true;
+ }
+ if (strstr(InfoToCheck.IrdaModels, model) != NULL) {
+ if (connection==GCT_Irda) found_match=true;
+ }
+ if (strstr(InfoToCheck.ATModels, model) != NULL) {
+ if (connection==GCT_AT) found_match=true;
+ }
+ if (strstr(InfoToCheck.TekramModels, model) != NULL) {
+ if (connection==GCT_Tekram) found_match=true;
+ }
+
+ return found_match;
+}
+
+GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame)) {
+ int InitLength;
+ int count;
+ unsigned char init_char = N6110_SYNC_BYTE;
+
+ /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */
+ char phonemodel[64];
+
+ if (Protocol->Initialise(device,initlength,connection,rlp_callback)!=GE_NONE)
+ {
+ return GE_NOTSUPPORTED;
+ }
+
+ if (connection!=GCT_MBUS) {
+ InitLength = atoi(initlength);
+
+ if ((strcmp(initlength, "default") == 0) || (InitLength == 0)) {
+ InitLength = 250; /* This is the usual value, lower may work. */
+ }
+
+#ifdef DEBUG
+ fprintf(stdout,_("Writing init chars...."));
+#endif
+
+ /* Initialise link with phone or what have you */
+ /* Send init string to phone, this is a bunch of 0x55 characters. Timing is
+ empirical. */
+ for (count = 0; count < InitLength; count ++) {
+ usleep(100);
+ Protocol->WritePhone(1,&init_char);
+ }
+
+#ifdef DEBUG
+ fprintf(stdout,_("Done\n"));
+#endif
+
+ N6110_SendStatusRequest();
+ }
+
+ usleep(100);
+
+ if (N6110_SendIDFrame()!=GE_NONE)
+ return GE_TIMEOUT;
+
+ while (N6110_GetModel(phonemodel) != GE_NONE)
+ sleep(1);
+
+ if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5"))
+ {
+ GSM->Terminate();
+
+ /* Set pointers to relevant addresses */
+ GSM = &N7110_Functions;
+ GSM_Info = &N7110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+ return GE_NONE;
+ }
+
+ return GE_NONE;
+}
+
+GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime)
+{
+ bool found_match=false;
+
+ GSM_ConnectionType connection2;
+
+ struct tm *now;
+ time_t nowh;
+ GSM_DateTime Date;
+ GSM_Error error;
+
+ connection2=connection;
+
+ CurrentRLP_RXCallback = rlp_callback;
+ CurrentCallPassup=NULL;
+ CurrentPhonebookEntry=NULL;
+ CurrentNetworkInfo = NULL;
+ CurrentGetBitmap=NULL;
+ CurrentPlayToneError=GE_UNKNOWN;
+ strcpy(CurrentIncomingCall," ");
+ CurrentGetBinRingtone=NULL;
+ CurrentNetworkInfo=NULL;
+ CurrentRequestTerminate=false;
+ CurrentDisableKeepAlive=false;
+ CurrentCalendarNotesInfo.HowMany=2000;
+ CurrentMagicError = GE_BUSY;
+
+ if (!strcmp(model,"auto")) {
+
+ /* For now */
+ GSM = &N6110_Functions;
+ GSM_Info = &N6110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+ fprintf(stdout,_("Trying FBUS for new Nokia phones...\n"));
+#endif
+ /* Trying FBUS */
+ Protocol = &FBUS_Functions;
+ CurrentConnectionType=GCT_FBUS;
+ connection2=GCT_FBUS;
+ if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+ {
+ found_match=true;
+ } else {
+ GSM->Terminate();
+ }
+
+ if (!found_match) {
+ usleep(100);
+
+ /* For now */
+ GSM = &N6110_Functions;
+ GSM_Info = &N6110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+ fprintf(stdout,_("Trying DLR3 for new Nokia phones...\n"));
+#endif
+ /* Trying DLR3 */
+ Protocol = &FBUS_Functions;
+ CurrentConnectionType=GCT_DLR3;
+ connection2=GCT_DLR3;
+ if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+ {
+ found_match=true;
+ } else {
+ GSM->Terminate();
+ }
+ }
+
+ if (!found_match) {
+ usleep(100);
+
+ /* For now */
+ GSM = &N6110_Functions;
+ GSM_Info = &N6110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+#ifdef DEBUG
+ fprintf(stdout,_("Trying MBUS for new Nokia phones...\n"));
+#endif
+ /* Trying MBUS */
+ Protocol = &MBUS_Functions;
+ CurrentConnectionType=GCT_MBUS;
+ connection2=GCT_MBUS;
+ if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+ {
+ found_match=true;
+ } else {
+ GSM->Terminate();
+ }
+ }
+
+ if (!found_match) return GE_NOTSUPPORTED;
+
+ usleep(50);
+
+ } else {
+#ifdef DEBUG
+ if (CheckModel (Nsniff_Information, model, connection)) {
+ /* Set pointers to relevant addresses */
+ GSM = &Nsniff_Functions;
+ GSM_Info = &Nsniff_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+ found_match=true;
+ }
+#endif
+
+ if (CheckModel (N6110_Information, model, connection)) {
+ /* Set pointers to relevant addresses */
+ GSM = &N6110_Functions;
+ GSM_Info = &N6110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+ found_match=true;
+ }
+ if (CheckModel (N7110_Information, model, connection)) {
+ /* Set pointers to relevant addresses */
+ GSM = &N7110_Functions;
+ GSM_Info = &N7110_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+ found_match=true;
+ }
+ if (CheckModel (Nat_Information, model, connection)) {
+ /* Set pointers to relevant addresses */
+ GSM = &Nat_Functions;
+ GSM_Info = &Nat_Information;
+ GSM_LinkOK = &CurrentLinkOK;
+ found_match=true;
+ }
+
+ if (found_match) {
+ switch (connection) {
+ case GCT_FBUS : Protocol = &FBUS_Functions; break;
+ case GCT_Infrared: Protocol = &FBUS_Functions; break;
+ case GCT_Tekram : Protocol = &FBUS_Functions; break;
+ case GCT_DLR3 : Protocol = &FBUS_Functions; break;
+ case GCT_MBUS : Protocol = &MBUS_Functions; break;
+ case GCT_Irda : Protocol = &FBUSIRDA_Functions;break;
+ case GCT_AT : Protocol = &AT_Functions; break;
+ case GCT_Default : Protocol = NULL; break;
+ }
+ } else
+ return GE_NOTSUPPORTED;
+ }
+
+
+ /* Now call model specific initialisation code. */
+ error=(GSM->Initialise(device, initlength, connection2, rlp_callback));
+
+ /* RTH: FIXME: second try for Irda (6210 only?)*/
+ if ( error!=GE_NONE && connection == GCT_Irda)
+ {
+ #ifdef DEBUG
+ fprintf(stdout,"Irda connection: second try!\n");
+ #endif
+ device_close();
+ error=(GSM->Initialise(device, initlength, connection2, rlp_callback));
+ }
+
+ if (error==GE_NONE && !strcmp(SynchronizeTime,"yes"))
+ {
+ nowh=time(NULL);
+ now=localtime(&nowh);
+
+ Date.Year = now->tm_year;
+ Date.Month = now->tm_mon+1;
+ Date.Day = now->tm_mday;
+ Date.Hour = now->tm_hour;
+ Date.Minute = now->tm_min;
+ Date.Second = now->tm_sec;
+
+ if (Date.Year<1900)
+ {
+
+ /* Well, this thing is copyrighted in U.S. This technique is known as
+ Windowing and you can read something about it in LinuxWeekly News:
+ http://lwn.net/1999/features/Windowing.phtml. This thing is beeing
+ written in Czech republic and Poland where algorithms are not allowed
+ to be patented. */
+
+ if (Date.Year>90)
+ Date.Year = Date.Year+1900;
+ else
+ Date.Year = Date.Year+2000;
+ }
+
+ /* FIXME: Error checking should be here. */
+ GSM->SetDateTime(&Date);
+ }
+
+ return error;
+}
+
+GSM_Error Unimplemented(void)
+{
+ return GE_NOTIMPLEMENTED;
+}
+
+GSM_Error NotSupported(void)
+{
+ return GE_NOTSUPPORTED;
+}
+
+/* Applications should call N6110_Terminate to shut down the N6110 thread and
+ close the serial port. */
+void NULL_Terminate(void)
+{
+ Protocol->Terminate();
+}
+
+#ifdef WIN32
+/* Here are things made for keeping connecting */
+void NULL_KeepAlive()
+{
+}
+#else
+/* Here are things made for keeping connecting */
+void NULL_KeepAlive()
+{
+}
+#endif
+
+#ifdef DEBUG
+void NULL_TX_DisplayMessage(u16 MessageLength, u8 *MessageBuffer)
+{
+ fprintf(stdout, _("PC: "));
+
+ txhexdump(MessageLength,MessageBuffer);
+}
+#endif
+
+bool NULL_WritePhone (u16 length, u8 *buffer) {
+ if (device_write(buffer,length)!=length) return false;
+ else return true;
+}
+
+GSM_Error NULL_WaitUntil (int time, GSM_Error *value)
+{
+ int timeout;
+
+ timeout=time;
+
+ /* Wait for timeout or other error. */
+ while (timeout != 0 && *value == GE_BUSY ) {
+
+ if (--timeout == 0)
+ return (GE_TIMEOUT);
+
+ usleep (100000);
+ }
+
+ return *value;
+}
+
+GSM_Error NULL_SendMessageSequence (int time, GSM_Error *value,
+ u16 message_length, u8 message_type, u8 *buffer)
+{
+ *value=GE_BUSY;
+
+ Protocol->SendMessage(message_length, message_type, buffer);
+
+ return NULL_WaitUntil (time, value);
+}
+
+GSM_ConnectionType GetConnectionTypeFromString(char *Connection) {
+
+ GSM_ConnectionType connection=GCT_FBUS;
+
+ if (!strcmp(Connection, "irda")) connection=GCT_Irda;
+ if (!strcmp(Connection, "infrared")) connection=GCT_Infrared;
+ if (!strcmp(Connection, "mbus")) connection=GCT_MBUS;
+ if (!strcmp(Connection, "dlr3")) connection=GCT_DLR3;
+ if (!strcmp(Connection, "at")) connection=GCT_AT;
+ if (!strcmp(Connection, "tekram210"))connection=GCT_Tekram;
+
+ return connection;
+}
+
+bool GetMemoryTypeString(char *memorytext, GSM_MemoryType *type)
+{
+ int i=0;
+
+ typedef struct {
+ GSM_MemoryType type;
+ char *name;
+ } GSM_MTStrings;
+
+ GSM_MTStrings mystring[] = {
+ {GMT_ME,"ME"},
+ {GMT_SM,"SM"},
+ {GMT_FD,"FD"},
+ {GMT_ON,"ON"},
+ {GMT_EN,"EN"},
+ {GMT_DC,"DC"},
+ {GMT_RC,"RC"},
+ {GMT_MC,"MC"},
+ {GMT_LD,"LD"},
+ {GMT_MT,"MT"},
+ {GMT_ME,"undefined"}
+ };
+
+ while (strcmp(mystring[i].name,"undefined")) {
+ if (*type==mystring[i].type) {
+ strcpy(memorytext,mystring[i].name);
+ return true;
+ }
+ i++;
+ }
+ return false;
+}
+
+bool GetMemoryTypeID(char *memorytext, GSM_MemoryType *type)
+{
+ int i=0;
+
+ typedef struct {
+ GSM_MemoryType type;
+ char *name;
+ } GSM_MTStrings;
+
+ GSM_MTStrings mystring[] = {
+ {GMT_ME,"ME"},
+ {GMT_SM,"SM"},
+ {GMT_FD,"FD"},
+ {GMT_ON,"ON"},
+ {GMT_EN,"EN"},
+ {GMT_DC,"DC"},
+ {GMT_RC,"RC"},
+ {GMT_MC,"MC"},
+ {GMT_LD,"LD"},
+ {GMT_MT,"MT"},
+ {GMT_ME,"undefined"}
+ };
+
+ while (strcmp(mystring[i].name,"undefined")) {
+ if (strcmp(mystring[i].name,memorytext)==0) {
+ *type=mystring[i].type;
+ return true;
+ }
+ i++;
+ }
+
+ return false;
+}
+
+char *GetMygnokiiVersion() {
+
+ static char Buffer[1000]="";
+
+ sprintf(Buffer, "%s",VERSION);
+
+ return Buffer;
+}
+
+/*
+1.Name,2.CodeName,3.Calendar,4.Netmonitor,5.Caller groups,6.Phonebook,
+7.Authentication 8.Datacalls 9.KeysPressing 10.SMSC Default Recipient
+11.SpeedDials 12.ScreenSavers 13.DTMF 14.SMS 15.NoPowerFrame 16.StartUpLogo
+17.Profiles 18.Ringtones 19.WAP
+*/
+
+static OnePhoneModel allmodels[] = {
+
+/*1, 2, 3, 4, 5, 6 7 8 9 10 11 12 13 14 15 16 17 18 19 */
+{"3210","NSE-8",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0}},
+{"3210","NSE-9",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0}},
+{"3310","NHM-5",{F_CAL33,F_NETMON, 0,F_PBK33, 0, 0, 0,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM, 0}},
+{"3330","NHM-6",{F_CAL33,F_NETMON, 0,F_PBK33, 0, 0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS , 0,F_STANIM,F_PROF33,F_RING_SM,F_WAP}},
+{"5110","NSE-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}},
+{"5130","NSK-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}},
+{"5190","NSB-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}},
+{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},
+{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},
+{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP}},
+{"8210","NSM-3",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"8850","NSM-2",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},
+{"9210","RAE-3",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},//quesses only !
+{"" ,"" ,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
+};
+
+OnePhoneModel *GetPhoneModelData (const char *num)
+{
+ register int i = 0;
+
+ while (allmodels[i].number != "") {
+ if (strcmp (num, allmodels[i].number) == 0) {
+ return (&allmodels[i]);
+ }
+ i++;
+ }
+
+ return (&allmodels[i]);
+}
+
+char *GetModelName ()
+{
+ static char model[64];
+
+ while (GSM->GetModel(model) != GE_NONE) sleep(1);
+
+ return (GetPhoneModelData(model)->model);
+}
+
+int GetModelFeature (featnum_index num)
+{
+ static char model[64];
+
+ while (GSM->GetModel(model) != GE_NONE) sleep(1);
+
+ return (GetPhoneModelData(model)->features[num]);
+}
+
+int LogAvailable=-1; //-1 not checked earlier, 0 not, 1 yes
+char *logfilename;
+
+bool AppendLog(u8 *buffer, int length,bool format)
+{
+ FILE *file=NULL;
+ char buffer2[50001];
+ int i;
+
+ struct CFG_Header *cfg_info;
+ char *LogFile;
+
+ if (LogAvailable==-1) {
+
+ LogAvailable=0;
+
+ cfg_info=CFG_FindGnokiirc();
+ if (cfg_info==NULL) return false;
+
+ LogFile = CFG_Get(cfg_info, "global", "logfile");
+ if (LogFile) {
+ LogAvailable=1;
+ logfilename=LogFile;
+
+ file=fopen(logfilename, "a+");
+
+ /* We have first entry in this session and too large file */
+ if (fread( buffer2, 1, 50000,file )==50000) {
+ fclose(file);
+ file=fopen(logfilename, "w");
+ }
+ }
+ } else {
+ if (LogAvailable==1) {
+ file=fopen(logfilename, "a");
+ }
+ }
+
+ if (LogAvailable==1) {
+ for (i=0;i<length;i++) {
+ if (format) {
+ fprintf(file, "%02x",buffer[i]);
+ switch (buffer[i]) {
+ case 0x09:fprintf(file,_(" |"));break;
+ default:
+ if (isprint(buffer[i])) fprintf(file, _("%c|"),buffer[i]);
+ else fprintf(file, _(" |"));
+ break;
+ }
+ } else {
+ fprintf(file, "%c",buffer[i]);
+ }
+ }
+ if (format) fprintf(file, "\n");
+ fclose(file);
+ }
+
+ return (LogAvailable==1);
+}
+
+bool AppendLogText(u8 *buffer,bool format)
+{
+ return AppendLog(buffer,strlen(buffer),format);
+}
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Functions for manipulating bitmaps
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#include "gsm-common.h"
+#include "gsm-bitmaps.h"
+#include "gsm-sms.h"
+#include "gsm-coding.h"
+#include "gsm-networks.h"
+
+void GSM_SetPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+ int pixel;
+ if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+ bmp->bitmap[((y/8)*bmp->width)+x] |= 1 << (y%8);
+ if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+ pixel=bmp->width*y + x;
+ bmp->bitmap[pixel/8] |= 1 << (7-(pixel%8));
+ }
+ if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] |= 1 << (7-(x%8));
+}
+
+void GSM_ClearPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+ int pixel;
+ if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+ bmp->bitmap[((y/8)*bmp->width)+x] &= 255 - (1 << (y%8));
+ if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+ pixel=bmp->width*y + x;
+ bmp->bitmap[pixel/8] &= ~(1 << (7-(pixel%8)));
+ }
+ if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] &= 255 - (1 << (7-(x%8)));
+}
+
+bool GSM_IsPointBitmap(GSM_Bitmap *bmp, int x, int y)
+{
+ int i=0;
+ int pixel;
+
+ if (bmp->type == GSM_StartupLogo || bmp->type == GSM_6210StartupLogo || bmp->type == GSM_7110StartupLogo)
+ i=(bmp->bitmap[((y/8)*bmp->width) + x] & 1<<((y%8)));
+ if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_7110OperatorLogo || bmp->type == GSM_CallerLogo) {
+ pixel=bmp->width*y + x;
+ i=(bmp->bitmap[pixel/8] & 1<<(7-(pixel%8)));
+ }
+ if (bmp->type == GSM_PictureImage) i=(bmp->bitmap[9*y + (x/8)] & 1<<(7-(x%8)));
+
+ if (i) return true; else return false;
+}
+
+void GSM_ClearBitmap(GSM_Bitmap *bmp)
+{
+ int i;
+ for (i=0;i<bmp->size;i++) bmp->bitmap[i]=0;
+}
+
+GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap)
+{
+ int offset = 1;
+ unsigned char buffer[20];
+
+ switch (message->UDHType) {
+ case GSM_OpLogo:
+ EncodeUDHHeader(buffer, GSM_OperatorLogo);
+ if (message->Length!=133) return GE_UNKNOWN;
+
+ bitmap->type = GSM_OperatorLogo;
+
+ DecodeNetworkCode(message->MessageText, bitmap->netcode);
+
+ offset = 4;
+ break;
+
+ case GSM_CallerIDLogo:
+ EncodeUDHHeader(buffer, GSM_CallerLogo);
+ if (message->Length!=130) return GE_UNKNOWN;
+
+ bitmap->type=GSM_CallerLogo;
+
+ break;
+ default: /* error */
+ return GE_UNKNOWN;
+ break;
+ }
+ bitmap->width = message->MessageText[offset];
+ bitmap->height = message->MessageText[offset + 1];
+
+ if (bitmap->width!=72 || bitmap->height!=14) return GE_INVALIDIMAGESIZE;
+
+ bitmap->size = (bitmap->width * bitmap->height) / 8;
+ memcpy(bitmap->bitmap, message->MessageText + offset + 3, bitmap->size);
+
+#ifdef DEBUG
+ fprintf(stdout, _("Bitmap from SMS: width %i, height %i\n"),bitmap->width,bitmap->height);
+#endif
+
+ return GE_NONE;
+}
+
+void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target)
+{
+ GSM_Bitmap backup;
+ int x,y,width,height;
+
+ backup=*bitmap;
+
+ if (target==GSM_StartupLogo) {
+ bitmap->width=84;
+ bitmap->height=48;
+ }
+ if (target==GSM_7110StartupLogo) {
+ bitmap->width=96;
+ bitmap->height=65;
+ }
+ if (target==GSM_6210StartupLogo) {
+ bitmap->width=96;
+ bitmap->height=60;
+ }
+ if (target==GSM_OperatorLogo || target==GSM_CallerLogo) {
+ bitmap->width=72;
+ bitmap->height=14;
+ }
+ if (target==GSM_PictureImage ) {
+ bitmap->width=72;
+ bitmap->height=28;
+ }
+ if (target==GSM_7110OperatorLogo) {
+ bitmap->width=78;
+ bitmap->height=21;
+ }
+ bitmap->type=target;
+ bitmap->size=(bitmap->width*bitmap->height + 7)/8;
+
+ width=backup.width;
+ if (bitmap->width<width) {
+ width=bitmap->width;
+#ifdef DEBUG
+ fprintf(stdout,_("We lost some part of image - it's cut (width from %i to %i) !\n"),backup.width,width);
+#endif /* DEBUG */
+ }
+
+ height=backup.height;
+ if (bitmap->height<height) {
+ height=bitmap->height;
+#ifdef DEBUG
+ fprintf(stdout,_("We lost some part of image - it's cut (height from %i to %i) !\n"),backup.height,height);
+#endif /* DEBUG */
+ }
+
+ GSM_ClearBitmap(bitmap);
+
+ for (y=0;y<height;y++) {
+ for (x=0;x<width;x++)
+ if (GSM_IsPointBitmap(&backup,x,y)) GSM_SetPointBitmap(bitmap,x,y);
+ }
+
+//GSM_PrintBitmap(&backup);
+//GSM_PrintBitmap(bitmap);
+}
+
+void GSM_PrintBitmap(GSM_Bitmap *bitmap)
+{
+ int x,y;
+
+ for (y=0;y<bitmap->height;y++) {
+ for (x=0;x<bitmap->width;x++) {
+ if (GSM_IsPointBitmap(bitmap,x,y)) {
+ fprintf(stdout, _("#"));
+ } else {
+ fprintf(stdout, _(" "));
+ }
+ }
+ fprintf(stdout, _("\n"));
+ }
+}
+
+int GSM_SaveBitmapToSMS(GSM_MultiSMSMessage *SMS, GSM_Bitmap *bitmap,
+ bool ScreenSaver, bool UnicodeText)
+{
+ char MessageBuffer[GSM_MAX_SMS_8_BIT_LENGTH*4];
+ int MessageLength=0;
+ GSM_UDH UDHType=GSM_NoUDH;
+
+ switch (bitmap->type) {
+ case GSM_OperatorLogo:
+ UDHType=GSM_OpLogo;
+
+ EncodeNetworkCode(MessageBuffer, bitmap->netcode);
+ MessageLength=3;
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ break;
+ case GSM_CallerLogo:
+ UDHType=GSM_CallerIDLogo;
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ break;
+ case GSM_PictureImage:
+ UDHType=GSM_ProfileUDH;
+
+ MessageBuffer[MessageLength++]=0x30; //SM version. Here 3.0
+
+ if (!ScreenSaver)
+ MessageBuffer[MessageLength++]=SM30_OTA; //ID for OTA bitmap
+ else
+ MessageBuffer[MessageLength++]=SM30_SCREENSAVER; //ID for screen saver
+
+ /* Length for picture part */
+ MessageBuffer[MessageLength++]=0x01; //length hi
+ MessageBuffer[MessageLength++]=0x00; //length lo
+
+ /* Set the logo size */
+ MessageBuffer[MessageLength++] = 0x00;
+ MessageBuffer[MessageLength++] = bitmap->width;
+ MessageBuffer[MessageLength++] = bitmap->height;
+ MessageBuffer[MessageLength++] = 0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap->bitmap,bitmap->size);
+ MessageLength=MessageLength+bitmap->size;
+
+ if (strlen(bitmap->text)!=0) {
+ if (UnicodeText) {
+ MessageBuffer[MessageLength++]=SM30_UNICODETEXT; //ID for Unicode text
+
+ /* Length for text part */
+ MessageBuffer[MessageLength++]=0x00; //length of text1
+ MessageBuffer[MessageLength++]=strlen(bitmap->text)*2;//length of text2
+
+ EncodeUnicode (MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+ MessageLength=MessageLength+2*strlen(bitmap->text);
+ } else {
+ MessageBuffer[MessageLength++]=SM30_ISOTEXT; //ID for ISO-8859-1 text
+
+ /* Length for text part */
+ MessageBuffer[MessageLength++]=0x00; //length of text1
+ MessageBuffer[MessageLength++]=strlen(bitmap->text); //length of text2
+
+ memcpy(MessageBuffer+MessageLength,bitmap->text,strlen(bitmap->text));
+ MessageLength=MessageLength+strlen(bitmap->text);
+ }
+ }
+ break;
+
+ default: /* error */
+ break;
+ }
+
+ GSM_MakeMultiPartSMS2(SMS,MessageBuffer,MessageLength, UDHType, GSM_Coding_Default);
+
+ return 0;
+}
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file implements GSM networks searching.
+
+*/
+
+#include <string.h>
+
+#include "gsm-common.h"
+#include "gsm-networks.h"
+#include "gsm-coding.h"
+
+GSM_Country GSM_Countries[] =
+{
+ { "202", "Greece" },
+ { "204", "Netherlands" },
+ { "206", "Belgium" },
+ { "208", "France" },
+ { "213", "Andorra" },
+ { "214", "Spain" },
+ { "216", "Hungary" },
+ { "218", "Bosnia Herzegovina" },
+ { "219", "Croatia" },
+ { "220", "Yugoslavia" },
+ { "222", "Italy" },
+ { "226", "Romania" },
+ { "228", "Switzerland" },
+ { "230", "Czech Republic" },
+ { "231", "Slovak Republic" },
+ { "232", "Austria" },
+ { "234", "United Kingdom" },
+ { "238", "Denmark" },
+ { "240", "Sweden" },
+ { "242", "Norway" },
+ { "244", "Finland" },
+ { "246", "Lithuania" },
+ { "247", "Latvia" },
+ { "248", "Estonia" },
+ { "250", "Russia" },
+ { "255", "Ukraine" },
+ { "259", "Moldova" },
+ { "260", "Poland" },
+ { "262", "Germany" },
+ { "266", "Gibraltar" },
+ { "268", "Portugal" },
+ { "270", "Luxembourg" },
+ { "272", "Ireland" },
+ { "274", "Iceland" },
+ { "276", "Albania" },
+ { "278", "Malta" },
+ { "280", "Cyprus" },
+ { "282", "Georgia" },
+ { "283", "Armenia" },
+ { "284", "Bulgaria" },
+ { "286", "Turkey" },
+ { "290", "Greenland" },
+ { "293", "Slovenia" },
+ { "294", "Macedonia" },
+ { "302", "Canada" },
+ { "310", "Papua New Guinea" },
+ { "310", "U.S.A." },
+ { "340", "French West Indies" },
+ { "400", "Azerbaijan" },
+ { "404", "India" },
+ { "410", "Pakistan" },
+ { "413", "Sri Lanka" },
+ { "415", "Lebanon" },
+ { "416", "Jordan" },
+ { "417", "Syria" },
+ { "418", "Iraq" },
+ { "419", "Kuwait" },
+ { "420", "Saudi Arabia" },
+ { "422", "Oman" },
+ { "424", "United Arab Emirates" },
+ { "425", "Israel" },
+ { "426", "Bahrain" },
+ { "427", "Qatar" },
+ { "432", "Iran" },
+ { "434", "Uzbekistan" },
+ { "437", "Kyrgyz Republic" },
+ { "452", "Vietnam" },
+ { "454", "Hong Kong" },
+ { "455", "Macau" },
+ { "456", "Cambodia" },
+ { "457", "Lao" },
+ { "460", "China" },
+ { "466", "Taiwan" },
+ { "470", "Bangladesh" },
+ { "502", "Malaysia" },
+ { "505", "Australia" },
+ { "510", "Indonesia" },
+ { "515", "Philippines" },
+ { "520", "Thailand" },
+ { "525", "Singapore" },
+ { "528", "Brunei Darussalam" },
+ { "530", "New Zealand" },
+ { "542", "Fiji" },
+ { "546", "New Caledonia" },
+ { "547", "French Polynesia" },
+ { "602", "Egypt" },
+ { "603", "Algeria" },
+ { "604", "Morocco" },
+ { "605", "Tunisia" },
+ { "608", "Senegal" },
+ { "611", "Guinea" },
+ { "612", "Cote d'Ivoire" },
+ { "615", "Togo" },
+ { "617", "Mauritius" },
+ { "618", "Liberia" },
+ { "620", "Ghana" },
+ { "624", "Cameroon" },
+ { "625", "Cape Verde" },
+ { "633", "Seychelles" },
+ { "634", "Mozambique" },
+ { "634", "Sudan" },
+ { "635", "Rwanda" },
+ { "636", "Ethiopia" },
+ { "640", "Tanzania" },
+ { "641", "Uganda" },
+ { "645", "Zambia" },
+ { "646", "Madagascar" },
+ { "647", "Reunion" },
+ { "648", "Zimbabwe" },
+ { "649", "Namibia" },
+ { "650", "Malawi" },
+ { "651", "Lesotho" },
+ { "652", "Botswana" },
+ { "655", "South Africa" },
+ { "730", "Chile" },
+ { "734", "Venezuela" },
+
+ { "undefined", "unknown" }
+};
+
+GSM_Network GSM_Networks[] =
+{
+ { "202 01", "Cosmote" },
+ { "202 05", "PANAFON" },
+ { "202 10", "TELESTET" },
+ { "204 04", "LIBERTEL" },
+ { "204 08", "KPN Telecom" },
+ { "204 12", "Telfort" },
+ { "204 16", "BEN" },
+ { "204 20", "Dutchtone NV" },
+ { "206 01", "PROXIMUS" },
+ { "206 10", "Mobistar" },
+ { "208 01", "ITINERIS" },
+ { "208 10", "SFR" },
+ { "208 20", "Bouygues Telecom" },
+ { "213 03", "MOBILAND" },
+ { "214 01", "Airtel GSM 900-Spain" },
+ { "214 03", "Retevision Movil" },
+ { "214 07", "MOVISTAR" },
+ { "216 01", "Pannon GSM" },
+ { "216 70", "Vodafone" },
+ { "216 30", "Westel 900" },
+ { "218 90", "GSMBIH" },
+ { "219 01", "CRONET" },
+ { "219 10", "VIP" },
+ { "220 01", "MOBTEL" },
+ { "220 02", "ProMonte GSM" },
+ { "222 01", "Telecom Italia Mobile" },
+ { "222 10", "OMNITEL" },
+ { "222 88", "Wind Telecomunicazioni SpA" },
+ { "226 01", "CONNEX GSM" },
+ { "226 10", "DIALOG" },
+ { "228 01", "NATEL International" },
+ { "228 02", "diAx Mobile AG" },
+ { "230 01", "Paegas" },
+ { "230 02", "EuroTel" },
+ { "230 03", "Oskar" },
+ { "231 01", "Globtel" },
+ { "231 02", "EuroTel GSM" },
+ { "232 01", "A1" },
+ { "232 03", "max.mobil." },
+ { "232 05", "ONE" },
+ { "232 07", "tele.ring" },
+ { "234 10", "Cellnet" },
+ { "234 15", "Vodafone" },
+ { "234 30", "One 2 One" },
+ { "234 33", "ORANGE" },
+ { "234 50", "Jersey Telecoms GSM" },
+ { "234 55", "Guernsey Telecoms GSM" },
+ { "234 58", "PRONTO GSM" },
+ { "238 01", "TDK-MOBIL" },
+ { "238 02", "SONOFON" },
+ { "238 20", "TELIA DK" },
+ { "238 30", "Mobilix" },
+ { "240 01", "Telia AB" },
+ { "240 07", "COMVIQ" },
+ { "240 08", "EUROPOLITAN" },
+ { "242 01", "Telenor Mobil" },
+ { "242 02", "NetCom GSM" },
+ { "244 03", "Telia City (Finland)" },
+ { "244 05", "Radiolinja" },
+ { "244 09", "Finnet" },
+ { "244 91", "Sonera" },
+ { "246 01", "OMNITEL" },
+ { "246 02", "Bite GSM" },
+ { "247 01", "LMT LV" },
+ { "247 02", "BALTCOM GSM" },
+ { "248 01", "EMT GSM" },
+ { "248 02", "Radiolinja Eesti AS" },
+ { "248 03", "Q GSM" },
+ { "250 01", "Mobile Telesystems" },
+ { "250 02", "North-West GSM" },
+ { "250 05", "Siberian Cellular Systems 900" },
+ { "250 07", "BM Telecom" },
+ { "250 10", "Don Telecom" },
+ { "250 12", "FECS-900" },
+ { "250 13", "Kuban GSM" },
+ { "250 39", "Uraltel" },
+ { "250 44", "North Caucasian GSM" },
+ { "250 99", "BeeLine" },
+ { "255 01", "UMC" },
+ { "255 02", "WellCOM" },
+ { "255 03", "Kyivstar" },
+ { "255 05", "Golden Telecom" },
+ { "259 01", "VOXTEL" },
+ { "260 01", "PLUS GSM" },
+ { "260 02", "ERA GSM" },
+ { "260 03", "IDEA Centertel" },
+ { "262 01", "D1 TELEKOM" },
+ { "262 02", "D2 PRIVAT" },
+ { "262 03", "E-Plus" },
+ { "262 07", "Interkom" },
+ { "266 01", "Gibtel GSM" },
+ { "268 01", "TELECEL" },
+ { "268 03", "OPTIMUS" },
+ { "268 06", "TMN" },
+ { "270 01", "LUXGSM" },
+ { "270 77", "TANGO" },
+ { "272 01", "EIRCELL-GSM" },
+ { "272 02", "Digifone" },
+ { "274 01", "Landssiminn GSM 900" },
+ { "274 02", "TAL hf" },
+ { "276 01", "AMC" },
+ { "278 01", "Vodafone Malta Limited" },
+ { "280 01", "CYTAGSM" },
+ { "282 01", "Geocell Limited" },
+ { "282 02", "Magti GSM" },
+ { "283 01", "ArmGSM" },
+ { "284 01", "M-TEL GSM BG" },
+ { "286 01", "Turkcell" },
+ { "286 02", "TELSIM GSM" },
+ { "288 01", "Faroese Telecom" },
+ { "290 01", "Tele Greenland" },
+ { "293 40", "SI.MOBIL d. d." },
+ { "293 41", "MOBITEL" },
+ { "294 01", "MobiMak" },
+ { "302 37", "Microcell Connexions Inc" },
+ { "310 01", "Cellnet" },
+ { "310 02", "Sprint Spectrum" },
+ { "310 11", "Wireless 2000 Telephone Co." },
+ { "310 15", "BellSouth Mobility DCS" },
+ { "310 16", "Omnipoint" },
+ { "310 17", "Pac Bell" },
+ { "310 26", "VOICESTREAM" },
+ { "310 27", "Powertel" },
+ { "310 31", "AERIAL" },
+ { "310 77", "Iowa Wireless Services LP" },
+ { "340 01", "AMERIS" },
+ { "400 01", "AZERCELL GSM" },
+ { "400 02", "Bakcell GSM 2000" },
+
+ { "404 01", "AIRCELL"},\r
+ { "404 02", "Evergrowth"},\r
+ { "404 03", "Bharthi Telenet"},\r
+ { "404 05", "Fascel"},\r
+ { "404 07", "Tata Cell"},\r //TATA Cellular
+ { "404 08", "Koshika"},
+ { "404 09", "Reliance"},\r
+ { "404 10", "AIRTEL"},\r //AirTel
+ { "404 11", "Essar"},\r //Essar Cellphone
+ { "404 12", "Escotel"},\r
+ { "404 14", "Spice"},\r //Modicom
+ { "404 15", "AIRCELL"},\r //Essar Cellphone
+ { "404 18", "Reliance"},\r
+ { "404 19", "Escotel"},\r
+ { "404 20", "Orange"},\r //Max Touch
+ { "404 21", "BPL Mobile"},\r //BPL - Mobile
+ { "404 22", "Birla AT&T"},\r
+ { "404 24", "Birla AT&T"},\r
+ { "404 26", "Koshika"},\r
+ { "404 27", "BPL Mobile"},\r //BPL USWEST Cellular
+ { "404 30", "Usha"},\r //Command
+ { "404 31", "AIRCELL"},\r //?
+ { "404 31", "Command"},\r //?
+ { "404 32", "Koshika"},\r
+ { "404 34", "Koshika"},\r
+ { "404 36", "Reliance"},\r
+ { "404 40", "SkyCell"},\r
+ { "404 41", "RPG"}, //RPG Cellular
+ { "404 42", "AIRCELL"},\r //AIRCEL
+ { "404 43", "BPL Mobile"},\r
+ { "404 44", "Spice"},\r
+ { "404 45", "AIRTEL-blr"},\r
+ { "404 46", "BPL Moibile"},\r
+ { "404 49", "AIRTEL"},
+ { "404 50", "Reliance"},\r
+ { "404 52", "Reliance"},
+ { "404 56", "Escotel"},
+ { "404 60", "AIRCELL"},\r
+ { "404 67", "Reliance"},
+ { "404 70", "Hexacom"},\r
+ { "404 78", "RPG"},\r
+ { "404 85", "Reliance"},\r
+\r
+ { "410 01", "Mobilink" },
+ { "413 02", "DIALOG GSM" },
+ { "415 01", "CELLIS" },
+ { "415 03", "LIBANCELL" },
+ { "416 01", "Fastlink" },
+ { "417 09", "MOBILE SYRIA" },
+ { "419 02", "MTCNet" },
+ { "420 01", "Al Jawwal" },
+ { "420 07", "E.A.E" },
+ { "422 02", "GTO" },
+ { "424 02", "UAE-ETISALAT" },
+ { "425 01", "Partner Communications Company Ltd" },
+ { "426 01", "BHR MOBILE PLUS" },
+ { "427 01", "QATARNET" },
+ { "432 11", "TCI" },
+ { "434 04", "Daewoo Unitel" },
+ { "434 05", "Coscom" },
+ { "437 01", "Bitel" },
+ { "454 00", "TCSL GSM" },
+ { "454 04", "HKGHT" },
+ { "454 06", "SMARTONE GSM" },
+ { "454 10", "New World PCS" },
+ { "454 12", "PEOPLES" },
+ { "454 16", "SUNDAY" },
+ { "455 01", "TELEMOVEL+ GSM900-Macau" },
+ { "456 01", "MobiTel" },
+ { "456 02", "SAMART-GSM" },
+ { "457 01", "Lao Shinawatra Telecom" },
+ { "460 00", "China Telecom GSM" },
+ { "460 01", "CU-GSM" },
+ { "466 01", "Far EasTone Telecoms 900" },
+ { "466 06", "TUNTEX GSM 1800" },
+ { "466 88", "KG Telecom" },
+ { "466 92", "Chunghwa GSM" },
+ { "466 93", "MobiTai" },
+ { "466 97", "TWNGSM" },
+ { "466 99", "TransAsia" },
+ { "470 01", "GrameenPhone Ltd" },
+ { "470 19", "Mobile 2000" },
+ { "502 12", "Maxis Mobile" },
+ { "502 13", "TM Touch" },
+ { "502 16", "DiGi 1800" },
+ { "502 17", "ADAM" },
+ { "502 19", "CELCOM" },
+ { "505 01", "MobileNet" },
+ { "505 02", "OPTUS" },
+ { "505 03", "VODAFONE" },
+ { "505 08", "One.Tel" },
+ { "510 01", "SATELINDO" },
+ { "510 10", "TELKOMSEL" },
+ { "510 11", "Excelcom" },
+ { "515 01", "ISLACOM" },
+ { "515 02", "Globe Telecom" },
+ { "520 01", "AIS GSM" },
+ { "520 10", "WCS" },
+ { "520 18", "Worldphone 1800" },
+ { "520 23", "HELLO" },
+ { "525 01", "SingTel Mobile" },
+ { "525 02", "ST-PCN" },
+ { "525 03", "MOBILEONE" },
+ { "528 11", "DSTCom" },
+ { "530 01", "Vodafone New Zealand Limited" },
+ { "542 01", "Vodafone" },
+ { "546 01", "Mobilis" },
+ { "547 20", "VINI" },
+ { "602 01", "MobiNil" },
+ { "602 02", "Tunicell" },
+ { "603 01", "ALGERIAN MOBILE NETWORK" },
+ { "604 01", "I A M" },
+ { "608 01", "ALIZE" },
+ { "611 02", "Lagui" },
+ { "612 03", "IVOIRIS" },
+ { "612 05", "Telecel" },
+ { "615 01", "TOGO CELL" },
+ { "617 01", "Cellplus Mobile Comms" },
+ { "618 01", "Omega" },
+ { "620 01", "SPACEFON" },
+ { "625 01", "CVMOVEL" },
+ { "633 01", "Seychelles Cellular Services" },
+ { "633 10", "AIRTEL" },
+ { "634 01", "MobiTel" },
+ { "635 10", "Rwandacell" },
+ { "636 01", "ETMTN" },
+ { "640 01", "TRITEL" },
+ { "641 10", "MTN-Uganda" },
+ { "642 02", "ANTARIS" },
+ { "643 01", "T.D.M GSM 900" },
+ { "645 01", "ZAMCELL" },
+ { "646 01", "Madacom" },
+ { "646 03", "Sacel Madagascar S.A." },
+ { "647 10", "SRR" },
+ { "648 01", "NET*ONE" },
+ { "648 03", "Telecel" },
+ { "649 01", "MTC" },
+ { "650 01", "Callpoint 900" },
+ { "651 01", "Vodacom Lesotho (Pty) Ltd" },
+ { "655 01", "Vodacom" },
+ { "655 10", "MTN" },
+ { "680 38", "NPI Wireless" },
+ { "730 01", "Entel Telefonia Movi" },
+ { "730 10", "Entel PCS" },
+ { "734 01", "Infonet" },
+
+ { "undefined", "unknown" }
+};
+
+char *GSM_GetNetworkName(char *NetworkCode)
+{
+
+ int index=0;
+
+ while ( strcmp(GSM_Networks[index].Code, NetworkCode) &&
+ strcmp(GSM_Networks[index].Code, "undefined") )
+ index++;
+
+ return GSM_Networks[index].Name;
+}
+
+char *GSM_GetNetworkCode(char *NetworkName)
+{
+
+ int index=0;
+
+ while ( strcmp(GSM_Networks[index].Name, NetworkName) &&
+ strcmp(GSM_Networks[index].Code, "undefined") )
+ index++;
+
+ return GSM_Networks[index].Code;
+}
+
+char *GSM_GetCountryName(char *CountryCode)
+{
+
+ int index=0;
+
+ while ( strncmp(GSM_Countries[index].Code, CountryCode, 3) &&
+ strcmp(GSM_Countries[index].Code, "undefined") )
+ index++;
+
+ return GSM_Countries[index].Name;
+}
+
+char *GSM_GetCountryCode(char *CountryName)
+{
+
+ int index=0;
+
+ while ( strcmp(GSM_Countries[index].Name, CountryName) &&
+ strcmp(GSM_Countries[index].Code, "undefined") )
+ index++;
+
+ return GSM_Countries[index].Code;
+}
+
+void EncodeNetworkCode(unsigned char* buffer, unsigned char* output)
+{
+ EncodeBCD (buffer, output, 6, false);
+ buffer[1]=buffer[1] | 0xf0;
+}
+
+void DecodeNetworkCode(unsigned char* buffer, unsigned char* output)
+{
+ DecodeBCD (output, buffer, 3);
+ output[6]=output[5];
+ output[5]=output[4];
+ output[4]=output[3];
+ output[3]=' ';
+}
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file provides support for ringtones.
+
+*/
+
+#ifdef WIN32
+ #include <windows.h>
+ #include "misc_win32.h"
+#else
+ #include <unistd.h>
+#endif
+
+#include "gsm-api.h"
+
+GSM_Ringtone SMringtone;
+GSM_BinRingtone ringtone;
+
+/* Beats-per-Minute Encoding */
+
+int BeatsPerMinute[] = {
+ 25, 28, 31, 35, 40, 45, 50, 56, 63, 70,
+ 80, 90, 100, 112, 125, 140, 160, 180, 200, 225,
+ 250, 285, 320, 355, 400, 450, 500, 565, 635, 715,
+ 800, 900
+};
+
+struct OneRingtone RingingTones[] = {
+ {"",0,0},
+/* 1 */ {"Uploaded #1",0,0}, /* 2 */ {"Ring ring",0,0},
+/* 3 */ {"Low",0,0}, /* 4 */ {"Fly",0,0},
+/* 5 */ {"Mosquito",0,0}, /* 6 */ {"Bee",0,0},
+/* 7 */ {"Intro",0,0}, /* 8 */ {"Etude",0,0},
+/* 9 */ {"Hunt",0,0}, /* 10 */ {"Going up",0,0},
+/* 11 */ {"City bird",0,0}, /* 12 */ {"Chase",0,0},
+/* 13 */ {"Scifi",0,0}, /* 14 */ {"Kick",0,0},
+/* 15 */ {"Do-mi-so",0,0}, /* 16 */ {"Robo N1X",0,0},
+/* 17 */ {"Dizzy",0,0}, /* 18 */ {"Playground",0,0},
+/* 19 */ {"That's it!",0,0}, /* 20 */ {"Grande valse",0,0},
+/* 21 */ {"Knock knock",0,0}, /* 22 */ {"Knock again",0,0},
+/* 23 */ {"Helan",0,0}, /* 24 */ {"Fuga",0,0},
+/* 25 */ {"Menuet",0,0}, /* 26 */ {"Ode to Joy",0,0},
+/* 27 */ {"Elise",0,0}, /* 28 */ {"Mozart 40",0,0},
+/* 29 */ {"Piano Concerto",0,0},/* 30 */ {"William Tell",0,0},
+/* 31 */ {"Badinerie",0,0}, /* 32 */ {"Polka",0,0},
+/* 33 */ {"Attraction",0,0}, /* 34 */ {"Polite",0,0},
+/* 35 */ {"Persuasion",0,0}, /* 36 */ {"Tick tick",0,0},
+/* 37 */ {"Samba",0,0}, /* 38 */ {"Orient",0,0},
+/* 39 */ {"Charleston",0,0}, /* 40 */ {"Songette",0,0},
+/* 41 */ {"Jumping",0,0}, /* 42 */ {"Lamb",0,0},
+/* 43 */ {"Marry",0,0}, /* 44 */ {"Tango",0,0},
+/* 45 */ {"Tangoed",0,0}, /* 46 */ {"Down",0,0},
+/* 47 */ {"Polska",0,0}, /* 48 */ {"WalzeBrilliant",0,0},
+/* 49 */ {"Cicada",0,0}, /* 50 */ {"Trio",0,0},
+/* 51 */ {"Circles",0,0}, /* 52 */ {"Nokia tune",0,0},
+/* 53 */ {"Sunny walks",0,0}, /* 54 */ {"Basic rock",0,0},
+/* 55 */ {"Reveille",0,0}, /* 56 */ {"Groovy Blue",0,0},
+/* 57 */ {"Brave Scotland",0,0},/* 58 */ {"Matilda",0,0},
+/* 59 */ {"Bumblebee",0,0}, /* 60 */ {"Hungarian",0,0},
+/* 61 */ {"Valkyrie",0,0}, /* 62 */ {"Bach #3",0,0},
+/* 63 */ {"Toreador",0,0}, /* 64 */ {"9th Symphony",0,0},
+/* 65 */ {"Uploaded #2",0,0}, /* 66 */ {"Uploaded #3",0,0},
+/* 67 */ {"Uploaded #4",0,0}, /* 68 */ {"Uploaded #5",0,0},
+ {"",0,0}
+};
+
+int OctetAlign(unsigned char *Dest, int CurrentBit)
+{
+ int i=0;
+
+ while((CurrentBit+i)%8) {
+ ClearBit(Dest, CurrentBit+i);
+ i++;
+ }
+
+ return CurrentBit+i;
+}
+
+int OctetAlignNumber(int CurrentBit)
+{
+ int i=0;
+
+ while((CurrentBit+i)%8) { i++; }
+
+ return CurrentBit+i;
+}
+
+int BitPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits)
+{
+
+ int i;
+
+ for (i=0; i<Bits; i++)
+ if (GetBit(Source, i)) SetBit(Dest, CurrentBit+i);
+ else ClearBit(Dest, CurrentBit+i);
+
+ return CurrentBit+Bits;
+}
+
+int GSM_GetTempo(int Beats) {
+
+ int i=0;
+
+ while ( i < sizeof(BeatsPerMinute)/sizeof(BeatsPerMinute[0])) {
+
+ if (Beats<=BeatsPerMinute[i]) break;
+ i++;
+ }
+
+ return i<<3;
+}
+
+int BitPackByte(unsigned char *Dest, int CurrentBit, unsigned char Command, int Bits) {
+
+ unsigned char Byte[]={Command};
+
+ return BitPack(Dest, CurrentBit, Byte, Bits);
+}
+
+
+/* This is messy but saves using the math library! */
+
+int GSM_GetDuration(int number, unsigned char *spec) {
+
+ int duration=0;
+
+ switch (number) {
+
+ case 128*3/2: duration=Duration_Full; *spec=DottedNote; break;
+ case 128*2/3: duration=Duration_Full; *spec=Length_2_3; break;
+ case 128 : duration=Duration_Full; *spec=NoSpecialDuration; break;
+ case 64*9/4 : duration=Duration_1_2; *spec=DoubleDottedNote; break;
+ case 64*3/2 : duration=Duration_1_2; *spec=DottedNote; break;
+ case 64*2/3 : duration=Duration_1_2; *spec=Length_2_3; break;
+ case 64 : duration=Duration_1_2; *spec=NoSpecialDuration; break;
+ case 32*9/4 : duration=Duration_1_4; *spec=DoubleDottedNote; break;
+ case 32*3/2 : duration=Duration_1_4; *spec=DottedNote; break;
+ case 32*2/3 : duration=Duration_1_4; *spec=Length_2_3; break;
+ case 32 : duration=Duration_1_4; *spec=NoSpecialDuration; break;
+ case 16*9/4 : duration=Duration_1_8; *spec=DoubleDottedNote; break;
+ case 16*3/2 : duration=Duration_1_8; *spec=DottedNote; break;
+ case 16*2/3 : duration=Duration_1_8; *spec=Length_2_3; break;
+ case 16 : duration=Duration_1_8; *spec=NoSpecialDuration; break;
+ case 8*9/4 : duration=Duration_1_16; *spec=DoubleDottedNote; break;
+ case 8*3/2 : duration=Duration_1_16; *spec=DottedNote; break;
+ case 8*2/3 : duration=Duration_1_16; *spec=Length_2_3; break;
+ case 8 : duration=Duration_1_16; *spec=NoSpecialDuration; break;
+ case 4*9/4 : duration=Duration_1_32; *spec=DoubleDottedNote; break;
+ case 4*3/2 : duration=Duration_1_32; *spec=DottedNote; break;
+ case 4*2/3 : duration=Duration_1_32; *spec=Length_2_3; break;
+ case 4 : duration=Duration_1_32; *spec=NoSpecialDuration; break;
+ }
+
+ return duration;
+}
+
+
+int GSM_GetNote(int number) {
+
+ int note=0;
+
+ if (number!=255) {
+ note=number%14;
+ switch (note) {
+
+ case 0: note=Note_C; break;
+ case 1: note=Note_Cis; break;
+ case 2: note=Note_D; break;
+ case 3: note=Note_Dis; break;
+ case 4: note=Note_E; break;
+ case 6: note=Note_F; break;
+ case 7: note=Note_Fis; break;
+ case 8: note=Note_G; break;
+ case 9: note=Note_Gis; break;
+ case 10: note=Note_A; break;
+ case 11: note=Note_Ais; break;
+ case 12: note=Note_H; break;
+ }
+ }
+ else note = Note_Pause;
+
+ return note;
+
+}
+
+int GSM_GetScale(int number) {
+
+ int scale=-1;
+
+ if (number!=255) {
+ scale=number/14;
+
+ /* Ensure the scale is valid */
+ scale%=4;
+
+ scale=scale<<6;
+ }
+ return scale;
+}
+
+/* This function packs the ringtone from the structure "ringtone" to
+ "package", where maxlength means length of package.
+ Function returns number of packed notes and change maxlength to
+ number of used chars in "package" */
+u8 GSM_PackRingtone(GSM_Ringtone *ringtone, unsigned char *package, int *maxlength)
+{
+ int StartBit=0;
+ unsigned char CommandLength = 0x02;
+ unsigned char spec;
+ int oldscale=10, newscale=0, oldstyle=0, oldtempo=0;
+ int HowMany=0; /* How many instructions packed */
+ int HowLong=0; /* How many bits packed */
+ int StartNote=0, EndNote=0; /* First and last packed note from ringtone */
+
+ /* Default ringtone parameters */
+ u8 DefNoteScale=2, DefNoteDuration=4;
+ int DefNoteTempo=63;
+ u8 DefNoteStyle=NaturalStyle;
+
+ int buffer[6];\r /* Used to find default ringtone parameters */
+ int i,j,k=0,thisnote,thisnotelong;\r
+
+ /* Find the most frequently used duration and use this for the default */\r
+ \r for (i=0;i<6;i++) buffer[i]=0;\r
+ for (i=0;i<ringtone->NrNotes;i++) {\r
+ switch (ringtone->notes[i].duration) {\r
+ case 192: buffer[0]++; break;\r
+ case 128: buffer[0]++; break;\r
+ case 96: buffer[1]++; break;\r
+ case 64: buffer[1]++; break;\r
+ case 48: buffer[2]++; break;\r
+ case 32: buffer[2]++; break;\r
+ case 24: buffer[3]++; break;\r
+ case 16: buffer[3]++; break;\r
+ case 12: buffer[4]++; break;\r
+ case 8: buffer[4]++; break;\r
+ case 6: buffer[5]++; break;\r
+ case 4: buffer[5]++; break;\r
+ }\r
+ }\r
+\r
+ /* Now find the most frequently used */\r
+ j=0;\r
+ for (i=0;i<6;i++) {\r
+ if (buffer[i]>j) {\r
+ k=i; \r
+ j=buffer[i];\r
+ }\r
+ }\r
+\r
+ /* Finally convert the default duration */\r
+ switch (k) {\r
+ case 0: DefNoteDuration=128; break; \r
+ case 1: DefNoteDuration= 64; break; \r
+ case 2: DefNoteDuration= 32; break; \r
+ case 3: DefNoteDuration= 16; break; \r
+ case 4: DefNoteDuration= 8; break; \r
+ case 5: DefNoteDuration= 4; break; \r
+ default: DefNoteDuration= 16; break; \r
+ } \r
+\r
+ /* Find the most frequently used scale and use this for the default */\r\r
+ for (i=0;i<6;i++) buffer[i]=0;\r
+ for (i=0;i<ringtone->NrNotes;i++) {\r
+ if (ringtone->notes[i].note!=255) {\r
+ buffer[ringtone->notes[i].note/14]++;\r
+ }\r
+ }\r
+ j=0;\r
+ for (i=0;i<6;i++) {\r
+ if (buffer[i]>j) {\r
+ DefNoteScale=i;\r
+ j=buffer[i];\r
+ }\r
+ }\r
+
+ StartBit=BitPackByte(package, StartBit, CommandLength, 8);
+ StartBit=BitPackByte(package, StartBit, RingingToneProgramming, 7);
+
+ /* The page 3-23 of the specs says that <command-part> is always
+ octet-aligned. */
+ StartBit=OctetAlign(package, StartBit);
+
+ StartBit=BitPackByte(package, StartBit, Sound, 7);
+ StartBit=BitPackByte(package, StartBit, BasicSongType, 3);
+
+ /* Set special chars in ringtone name */
+ for (i=0;i<strlen(ringtone->name);i++) {
+ if (ringtone->name[i]=='~') ringtone->name[i]=1; //enables/disables blinking
+ if (ringtone->name[i]=='`') ringtone->name[i]=0; //hides rest ot contents
+ }
+
+ /* Packing the name of the tune. */
+ StartBit=BitPackByte(package, StartBit, strlen(ringtone->name)<<4, 4);
+ StartBit=BitPack(package, StartBit, ringtone->name, 8*strlen(ringtone->name));
+
+ /* Set special chars in ringtone name */
+ for (i=0;i<strlen(ringtone->name);i++) {
+ if (ringtone->name[i]==1) ringtone->name[i]='~'; //enables/disables blinking
+ if (ringtone->name[i]==0) ringtone->name[i]='`'; //hides rest ot contents
+ }
+
+ /* Info about song pattern */
+ StartBit=BitPackByte(package, StartBit, 0x01, 8); /* One song pattern */
+ StartBit=BitPackByte(package, StartBit, PatternHeaderId, 3);
+ StartBit=BitPackByte(package, StartBit, A_part, 2);
+ StartBit=BitPackByte(package, StartBit, ringtone->Loop<<4, 4);
+
+ /* Info, how long is contents for SMS */
+ HowLong=8+8+7+3+4+8*strlen(ringtone->name)+8+3+2+4+8+3+2+3+5;
+
+ /* Calculating number of instructions in the tune.
+ Each Note contains Note and (sometimes) Scale.
+ Default Tempo and Style are instructions too. */
+ HowMany=2; /* Default Tempo and Style */
+
+ /* Default style and tempo */
+ DefNoteStyle=ringtone->notes[0].style;
+ DefNoteTempo=ringtone->notes[0].tempo;
+ oldstyle=DefNoteStyle;
+ oldtempo=DefNoteTempo;
+
+ for(i=0; i<ringtone->NrNotes; i++) {
+
+ /* PC Composer 2.0.010 doesn't like, when we start ringtone from pause:
+ displays, that format is invalid and
+ hangs, when you move mouse over place, where pause is */
+ if (GSM_GetNote(ringtone->notes[i].note)==Note_Pause && oldscale==10) {
+ StartNote++;
+ } else {
+
+ thisnote=0;
+ thisnotelong=0;
+
+ /* we don't write Scale/Style info before "Pause" note - it saves place */
+ if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause) {
+
+ if (ringtone->allnotesscale ||
+ oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) {
+
+ /* We calculate, if we have space to add next scale instruction */
+ if (((OctetAlignNumber(HowLong+5)+8)/8)<=(*maxlength)) {
+ oldscale=newscale;
+ HowLong+=5;
+ HowMany++;
+ thisnote++;
+ thisnotelong+=5;
+ } else {
+ break;
+ }
+ }
+ if (ringtone->notes[i].style!=oldstyle) {
+ /* We calculate, if we have space to add next style instruction */
+ if (((OctetAlignNumber(HowLong+5)+8)/8)<=(*maxlength)) {
+ oldstyle=ringtone->notes[i].style;
+ HowLong+=5;
+ HowMany++;
+ thisnote++;
+ thisnotelong+=5;
+ } else {
+ HowLong=HowLong-thisnotelong;
+ HowMany=HowMany-thisnote;
+ break;
+ }
+ }
+ }
+
+ if (ringtone->notes[i].tempo!=oldtempo) {
+ /* We calculate, if we have space to add next tempo instruction */
+ if (((OctetAlignNumber(HowLong+8)+8)/8)<=(*maxlength)) {
+ oldtempo=ringtone->notes[i].tempo;
+ HowLong+=8;
+ HowMany++;
+ thisnote++;
+ thisnotelong+=8;
+ } else {
+ HowLong=HowLong-thisnotelong;
+ HowMany=HowMany-thisnote;
+ break;
+ }
+ }
+
+ /* We calculate, if we have space to add next note instruction */
+ if (((OctetAlignNumber(HowLong+12)+8)/8)<=(*maxlength)) {
+ HowMany++;
+ EndNote++;
+ HowLong+=12;
+ } else {
+ HowLong=HowLong-thisnotelong;
+ HowMany=HowMany-thisnote;
+ break;
+ }
+ }
+
+ /* We are sure, we pack it for SMS or setting to phone, not for OTT file */
+ if (*maxlength<1000) {
+ /* Like Pc Composer say - before of phone limitations...*/
+ if ((EndNote-StartNote)==FB61_MAX_RINGTONE_NOTES-1) break;
+ }
+ }
+
+ StartBit=BitPackByte(package, StartBit, HowMany, 8);
+#ifdef DEBUG
+// fprintf(stdout,_("length of new pattern: %i %i\n"),HowMany,StartBit);
+#endif
+
+ /* Style */
+ StartBit=BitPackByte(package, StartBit, StyleInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, DefNoteStyle, 2);
+
+ /* Beats per minute/tempo of the tune */
+ StartBit=BitPackByte(package, StartBit, TempoInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, GSM_GetTempo(DefNoteTempo), 5);
+#ifdef DEBUG
+// fprintf(stdout,_("def temp: %i %i\n"),GSM_GetTempo(DefNoteTempo),StartBit);
+#endif
+
+ /* Default scale */
+ oldscale=10;
+
+ /* Default style */
+ oldstyle=DefNoteStyle;
+
+ /* Default tempo */
+ oldtempo=DefNoteTempo;
+
+ /* Notes packing */
+ for(i=StartNote; i<(EndNote+StartNote); i++) {
+
+ /* we don't write Scale info before "Pause" note - it saves place */
+ if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause) {
+ if (ringtone->allnotesscale ||
+ oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) {
+#ifdef DEBUG
+// fprintf(stdout,_("Scale\n"));
+#endif
+ oldscale=newscale;
+ StartBit=BitPackByte(package, StartBit, ScaleInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, GSM_GetScale(ringtone->notes[i].note), 2);
+ }
+ if (ringtone->notes[i].style!=oldstyle) {
+ /* Style */
+ StartBit=BitPackByte(package, StartBit, StyleInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, ringtone->notes[i].style, 2);
+ oldstyle=ringtone->notes[i].style;
+ }
+ }
+
+ if (ringtone->notes[i].tempo!=oldtempo) {
+ /* Beats per minute/tempo of the tune */
+ StartBit=BitPackByte(package, StartBit, TempoInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, GSM_GetTempo(ringtone->notes[i].tempo), 5);
+ oldtempo=ringtone->notes[i].tempo;
+ }
+
+ /* Note */
+ StartBit=BitPackByte(package, StartBit, NoteInstructionId, 3);
+ StartBit=BitPackByte(package, StartBit, GSM_GetNote(ringtone->notes[i].note), 4);
+ StartBit=BitPackByte(package, StartBit, GSM_GetDuration(ringtone->notes[i].duration,&spec), 3);
+ StartBit=BitPackByte(package, StartBit, spec, 2);
+
+#ifdef DEBUG
+// fprintf(stdout,_("note(%i): %i, scale: %i, duration: %i, spec: %i\n"),i,ringtone->notes[i].note,GSM_GetScale(ringtone->notes[i].note),GSM_GetDuration(ringtone->notes[i].duration,&spec),spec);
+#endif
+
+ }
+
+ StartBit=OctetAlign(package, StartBit);
+
+ StartBit=BitPackByte(package, StartBit, CommandEnd, 8);
+
+#ifdef DEBUG
+ if (StartBit!=OctetAlignNumber(HowLong)+8)
+ fprintf(stdout,_("Error in PackRingtone - StartBit different to HowLong %d - %d)\n"),StartBit,OctetAlignNumber(HowLong)+8);
+#endif
+
+ *maxlength=StartBit/8;
+
+ return(EndNote+StartNote);
+}
+
+int BitUnPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits)
+{
+ int i;
+
+ for (i=0; i<Bits; i++)
+ if (GetBit(Dest, CurrentBit+i)) { SetBit(Source, i); }
+ else { ClearBit(Source, i); }
+
+ return CurrentBit+Bits;
+}
+
+int BitUnPackInt(unsigned char *Src, int CurrentBit, int *integer, int Bits) {
+
+ int l=0,z=128,i;
+
+ for (i=0; i<Bits; i++) {
+ if (GetBit(Src, CurrentBit+i)) l=l+z;
+ z=z/2;
+ }
+
+ *integer=l;
+
+ return CurrentBit+i;
+}
+
+int OctetUnAlign(int CurrentBit)
+{
+ int i=0;
+
+ while((CurrentBit+i)%8) i++;
+
+ return CurrentBit+i;
+}
+
+/* TODO: better checking, if contents of ringtone is OK */
+GSM_Error GSM_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength)
+{
+ int StartBit=0;
+ int HowMany;
+ int l,q,i;
+ int spec;
+
+ /* Default ringtone parameters */
+ u8 DefNoteScale=2, DefNoteDuration=4;
+ int DefNoteTempo=63;
+ u8 DefNoteStyle=NaturalStyle;
+
+ ringtone->allnotesscale=false;
+
+ StartBit=BitUnPackInt(package,StartBit,&l,8);
+#ifdef DEBUG
+ if (l!=0x02)
+ fprintf(stdout,_("Not header\n"));
+#endif
+ if (l!=0x02) return GE_SUBFORMATNOTSUPPORTED;
+
+ StartBit=BitUnPackInt(package,StartBit,&l,7);
+#ifdef DEBUG
+ if (l!=RingingToneProgramming)
+ fprintf(stdout,_("Not RingingToneProgramming\n"));
+#endif
+ if (l!=RingingToneProgramming) return GE_SUBFORMATNOTSUPPORTED;
+
+ /* The page 3-23 of the specs says that <command-part> is always
+ octet-aligned. */
+ StartBit=OctetUnAlign(StartBit);
+
+ StartBit=BitUnPackInt(package,StartBit,&l,7);
+#ifdef DEBUG
+ if (l!=Sound)
+ fprintf(stdout,_("Not Sound\n"));
+#endif
+ if (l!=Sound) return GE_SUBFORMATNOTSUPPORTED;
+
+ StartBit=BitUnPackInt(package,StartBit,&l,3);
+#ifdef DEBUG
+ if (l!=BasicSongType)
+ fprintf(stdout,_("Not BasicSongType\n"));
+#endif
+ if (l!=BasicSongType) return GE_SUBFORMATNOTSUPPORTED;
+
+ /* Getting length of the tune name */
+ StartBit=BitUnPackInt(package,StartBit,&l,4);
+ l=l>>4;
+#ifdef DEBUG
+// fprintf(stdout,_("Length of name: %i\n"),l);
+#endif
+
+ /* Unpacking the name of the tune. */
+ StartBit=BitUnPack(package, StartBit, ringtone->name, 8*l);
+ ringtone->name[l]=0;
+
+ /* Set special chars in ringtone name */
+ for (i=0;i<strlen(ringtone->name);i++) {
+ if (ringtone->name[i]==1) ringtone->name[i]='~'; //enables/disables blinking
+ if (ringtone->name[i]==0) ringtone->name[i]='`'; //hides rest ot contents
+ }
+
+#ifdef DEBUG
+// fprintf(stdout,_("Name: %s\n"),ringtone->name);
+#endif
+
+ StartBit=BitUnPackInt(package,StartBit,&l,8);
+#ifdef DEBUG
+// fprintf(stdout,_("Number of song patterns: %i\n"),l);
+#endif
+ if (l!=1) return GE_SUBFORMATNOTSUPPORTED; //we support only one song pattern
+
+ StartBit=BitUnPackInt(package,StartBit,&l,3);
+#ifdef DEBUG
+ if (l!=PatternHeaderId)
+ fprintf(stdout,_("Not PatternHeaderId\n"));
+#endif
+ if (l!=PatternHeaderId) return GE_SUBFORMATNOTSUPPORTED;
+
+ StartBit+=2; //Pattern ID - we ignore it
+
+ StartBit=BitUnPackInt(package,StartBit,&l,4);
+ l=l>>4;
+#ifdef DEBUG
+ fprintf(stdout,_("Loop value: %i\n"),l);
+#endif
+ ringtone->Loop=l;
+
+ HowMany=0;
+ StartBit=BitUnPackInt(package, StartBit, &HowMany, 8);
+#ifdef DEBUG
+ fprintf(stdout,_("length of new pattern: %i %i\n"),HowMany,StartBit);
+#endif
+
+ ringtone->NrNotes=0;
+
+ for (i=0;i<HowMany;i++) {
+
+ StartBit=BitUnPackInt(package,StartBit,&q,3);
+ switch (q) {
+ case VolumeInstructionId:
+#ifdef DEBUG
+// fprintf(stdout,_("Volume\n"));
+#endif
+ StartBit+=4;
+ break;
+ case StyleInstructionId:
+ StartBit=BitUnPackInt(package,StartBit,&l,2);
+#ifdef DEBUG
+// fprintf(stdout,_("Style %i\n"),l>>6);
+#endif
+ switch (l) {
+ case StaccatoStyle : DefNoteStyle=StaccatoStyle; break;
+ case ContinuousStyle: DefNoteStyle=ContinuousStyle; break;
+ case NaturalStyle : DefNoteStyle=NaturalStyle; break;
+ }
+ break;
+ case TempoInstructionId:
+ StartBit=BitUnPackInt(package,StartBit,&l,5);
+ l=l>>3;
+ DefNoteTempo=BeatsPerMinute[l];
+#ifdef DEBUG
+// fprintf(stdout,_("Tempo %i\n"),l);
+#endif
+ break;
+ case ScaleInstructionId:
+ StartBit=BitUnPackInt(package,StartBit,&l,2);
+ DefNoteScale=l>>6;
+#ifdef DEBUG
+// fprintf(stdout,_("scale: %i %i\n"),DefNoteScale,ringtone->NrNotes);
+#endif
+ break;
+ case NoteInstructionId:
+ StartBit=BitUnPackInt(package,StartBit,&l,4);
+
+ switch (l) {
+ case Note_C :ringtone->notes[ringtone->NrNotes].note=0;break;
+ case Note_Cis:ringtone->notes[ringtone->NrNotes].note=1;break;
+ case Note_D :ringtone->notes[ringtone->NrNotes].note=2;break;
+ case Note_Dis:ringtone->notes[ringtone->NrNotes].note=3;break;
+ case Note_E :ringtone->notes[ringtone->NrNotes].note=4;break;
+ case Note_F :ringtone->notes[ringtone->NrNotes].note=6;break;
+ case Note_Fis:ringtone->notes[ringtone->NrNotes].note=7;break;
+ case Note_G :ringtone->notes[ringtone->NrNotes].note=8;break;
+ case Note_Gis:ringtone->notes[ringtone->NrNotes].note=9;break;
+ case Note_A :ringtone->notes[ringtone->NrNotes].note=10;break;
+ case Note_Ais:ringtone->notes[ringtone->NrNotes].note=11;break;
+ case Note_H :ringtone->notes[ringtone->NrNotes].note=12;break;
+ default :ringtone->notes[ringtone->NrNotes].note=255;break; //Pause ?
+ }
+
+ if (ringtone->notes[ringtone->NrNotes].note!=255)
+ ringtone->notes[ringtone->NrNotes].note=ringtone->notes[ringtone->NrNotes].note+DefNoteScale*14;
+
+ StartBit=BitUnPackInt(package,StartBit,&l,3);
+ DefNoteDuration=l;
+
+ StartBit=BitUnPackInt(package,StartBit,&spec,2);
+
+ if (DefNoteDuration==Duration_Full && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=128*3/2;
+ if (DefNoteDuration==Duration_Full && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=128*2/3;
+ if (DefNoteDuration==Duration_Full && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=128;
+ if (DefNoteDuration==Duration_1_2 && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=64*3/2;
+ if (DefNoteDuration==Duration_1_2 && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=64*2/3;
+ if (DefNoteDuration==Duration_1_2 && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=64;
+ if (DefNoteDuration==Duration_1_4 && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=32*3/2;
+ if (DefNoteDuration==Duration_1_4 && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=32*2/3;
+ if (DefNoteDuration==Duration_1_4 && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=32;
+ if (DefNoteDuration==Duration_1_8 && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=16*3/2;
+ if (DefNoteDuration==Duration_1_8 && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=16*2/3;
+ if (DefNoteDuration==Duration_1_8 && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=16;
+ if (DefNoteDuration==Duration_1_16 && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=8*3/2;
+ if (DefNoteDuration==Duration_1_16 && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=8*2/3;
+ if (DefNoteDuration==Duration_1_16 && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=8;
+ if (DefNoteDuration==Duration_1_32 && spec==DottedNote)
+ ringtone->notes[ringtone->NrNotes].duration=4*3/2;
+ if (DefNoteDuration==Duration_1_32 && spec==Length_2_3)
+ ringtone->notes[ringtone->NrNotes].duration=4*2/3;
+ if (DefNoteDuration==Duration_1_32 && spec==NoSpecialDuration)
+ ringtone->notes[ringtone->NrNotes].duration=4;
+
+ ringtone->notes[ringtone->NrNotes].style=DefNoteStyle;
+
+ ringtone->notes[ringtone->NrNotes].tempo=DefNoteTempo;
+
+#ifdef DEBUG
+// fprintf(stdout,_("note(%i): %i, scale: %i, duration: %i, spec: %i\n"),ringtone->NrNotes,ringtone->notes[ringtone->NrNotes].note,DefNoteScale,DefNoteDuration,spec);
+#endif
+ if (ringtone->NrNotes==FB61_MAX_RINGTONE_NOTES) break;
+
+ ringtone->NrNotes++;
+ break;
+ default:
+#ifdef DEBUG
+ fprintf(stdout,_("Unsupported block %i %i\n"),q,i);
+#endif
+ return GE_SUBFORMATNOTSUPPORTED;
+ }
+ }
+
+#ifdef DEBUG
+// printf("Number of notes=%d\n",ringtone->NrNotes);
+#endif
+
+ return GE_NONE;
+}
+
+GSM_Error GSM_ReadRingtone(GSM_SMSMessage *message, GSM_Ringtone *ringtone)
+{
+ if (message->UDHType==GSM_RingtoneUDH) {
+ return GSM_UnPackRingtone(ringtone, message->MessageText, message->Length);
+ } else return GE_SUBFORMATNOTSUPPORTED;
+}
+
+int GSM_GetFrequency(int number) {
+
+ int freq=0;
+
+ /* Values according to the software from http://iki.fi/too/sw/xring/
+ generated with:
+ perl -e 'print int(4400 * (2 **($_/12)) + .5)/10, "\n" for(3..14)'
+ */
+ if (number!=255) {
+ freq=number%14;
+ switch (freq) {
+
+ case 0: freq=523.3; break; // C
+ case 1: freq=554.4; break; // Cis
+
+ case 2: freq=587.3; break; //D
+ case 3: freq=622.3; break; //Dis
+
+ case 4: freq=659.3; break; //E
+
+ case 6: freq=698.5; break; //F
+ case 7: freq=740; break; //Fis
+
+ case 8: freq=784; break; //G
+ case 9: freq=830.6; break; //Gis
+
+ case 10: freq=880; break; //A
+ case 11: freq=932.3; break; //Ais
+
+ case 12: freq=987.8; break; //H
+
+ default: freq=0; break;
+ }
+ }
+ else freq = 0;
+
+ if ((number/14)!=0) freq=freq*(number/14);
+ else freq=freq/2;
+
+ return freq;
+
+}
+
+/* Very fast hack. It should be written correctly ! */
+void GSM_PlayOneNote (GSM_RingtoneNote note) {
+ int Hz;
+
+ Hz=GSM_GetFrequency(note.note);
+
+ GSM->PlayTone(Hz,5);
+
+ /* Is it correct ? Experimental values here */
+ switch (note.style) {
+ case StaccatoStyle:
+ usleep (7500);
+ GSM->PlayTone(0,0);
+ usleep ((1500000/note.tempo*note.duration)-(7500));
+ break;
+ case ContinuousStyle:
+ usleep (1500000/note.tempo*note.duration);
+ break;
+ case NaturalStyle:
+ usleep (1500000/note.tempo*note.duration-50);
+ GSM->PlayTone(0,0);
+ usleep (50);
+ break;
+ }
+}
+
+void GSM_PlayRingtone (GSM_Ringtone *ringtone) {
+
+ int i;
+
+ for (i=0;i<ringtone->NrNotes;i++) {
+ GSM_PlayOneNote(ringtone->notes[i]);
+ }
+
+ /* Disables buzzer */
+ GSM->PlayTone(255*255,0);
+}
+
+/* Initializes one ringtone: first is number of ringtone in
+ RingingTones in gnokii.h, second its' code, last position in phone menu */
+void RT(int number, int code, int menu) {
+ RingingTones[number].code=code;
+ RingingTones[number].menu=menu;
+}
+
+/* This function initializes structures with ringtones names adequate for
+ your phone model and firmware; if your phone is not now supported:
+ 1.set first ringtone in 1'st profile in your phone
+ 2.make ./gnokii --getprofile 1
+ 3.read ringtone code
+ 4.see in gnokii.h, if ringtone name is gnokii.h in RingingTones (if not, add)
+ 5.put here RT(a,b,c), where a is number of name in RingingTones in gnokii.h,
+ b is its' code and c is number of ringtone in phone menu
+ 6.repeat steps 1-5 for all ringtones
+ 7.send me (Marcin-Wiacek@Topnet.PL) all RT and phone model */
+void PrepareRingingTones(char model[64], char rev[64]) {
+
+ char rev2[64];
+ int i;
+ bool doit;
+
+ if (!RingingTones[0].code) {
+ if (!strcmp(model,"NSE-1")) //5110
+ {
+ RT( 2,18, 1);RT( 3,19, 2);RT( 7,23, 3);RT( 5,21, 4);RT( 9,25, 5);
+ RT(20,48, 7);RT(11,27, 8);RT(33,59, 9);RT(35,62,10);
+ RT(46,60,11);RT(16,36,12);RT(17,37,13);RT(13,32,14);RT(14,34,15);
+ RT(19,43,16);RT(18,39,17);RT(24,50,18);RT(31,57,19);RT(28,54,20);
+ RT(30,56,21);RT(40,73,22);RT(39,72,23);RT(37,69,24);
+ RT(23,49,26);RT(38,71,27); RT(41,74,29);
+
+ strcpy(rev2,"05.23"); //5.24 and higher
+ doit=false;
+ for(i=0;i<5;i++)
+ {
+ if (rev[i]<rev2[i]) break;
+ if (rev[i]>rev2[i]) doit=true;
+ }
+
+ if (doit) {
+ RT(22,47, 6);RT(47,58,25);RT(45,80,28);RT(43,75,30);
+ } else
+ {
+ RT(21,47, 6);RT(32,58,25);RT(44,80,28);RT(42,75,30);
+ }
+ RingingTones[0].menu=30; /* How many ringtones in phone */
+ }
+ if (!strcmp(model,"NSM-1")) //6150
+ {
+ RT( 2,18, 1);RT( 3,19, 2);RT( 7,23, 3);RT( 6,22, 4);
+ RT( 4,20, 5);RT( 5,21, 6);RT(15,35, 7);RT(12,30, 8);
+ RT( 9,25, 9);RT(20,47,10);RT( 8,24,11);RT(11,27,12);
+ RT(10,26,13);RT(34,60,14);RT(33,58,15);RT(35,61,16);
+ RT(16,36,17);RT(13,32,18);RT(19,43,19);RT(18,39,20);
+ RT(24,49,21);RT(31,56,22);RT(25,50,23);RT(27,52,24);
+ RT(26,51,25);RT(28,53,26);RT(29,54,27);RT(30,55,28);
+ RT(39,71,29);RT(37,68,30);RT(47,57,31);RT(23,48,32);
+ RT(38,70,33);RT(36,67,34);RT(41,73,35);
+ /*uploadable ringtone*/
+ RT( 1,17,36);
+ RingingTones[0].menu=36; /* How many ringtones in phone */
+ }
+ if (!strcmp(model,"NPE-3")) //6210
+ {
+ RT(19,64, 1);RT( 2,65, 2);RT( 3,66, 3);RT(15,67, 4);RT( 6,68, 5);
+ RT(49,69, 6);RT(50,70, 7);RT( 7,71, 8);RT(35,72, 9);RT(33,73,10);
+ RT(18,74,11);RT( 5,75,12);RT(51,76,13);RT(52,77,14);RT(53,78,15);
+ RT(37,79,16);RT(54,80,17);RT(55,81,18);RT(56,82,19);RT(57,83,20);
+ RT(58,84,21);RT(59,85,22);RT(25,86,23);RT(27,87,24);RT(30,88,25);
+ RT(39,89,26);RT(24,90,27);RT( 8,91,28);RT(60,92,29);RT(61,93,30);
+ RT(31,94,31);RT(62,95,32);RT(63,96,33);RT(64,97,34);RT(48,98,35);
+ /* Uploadable ringtones */
+ RT( 1,137,36);RT(65,138,37);RT(66,139,38);RT(67,140,39);RT(68,141,40);
+
+ RingingTones[0].menu=40; /* How many ringtones in phone */
+ }
+ RingingTones[0].code=true;
+ }
+}
+
+/* returns names from code or number in menu */
+char *RingingToneName(int code, int menu)
+{
+ int index=1,i;
+ GSM_Error error;
+
+ if (code==0)
+ {
+ while (strcmp(RingingTones[index].name,"")) {
+ if (RingingTones[index].menu==menu) break;
+ index++;
+ }
+ } else
+ {
+ while (strcmp(RingingTones[index].name,"")) {
+ if (RingingTones[index].code==code) break;
+ index++;
+ }
+ }
+
+ if (!strncmp(RingingTones[index].name,"Uploaded ",9)) {
+ ringtone.location=atoi(&RingingTones[index].name[10]);
+
+ error=GSM->GetBinRingtone(&ringtone);
+
+ if (error==GE_NONE) return ringtone.name;
+ if (error==GE_UNKNOWNMODEL) {
+
+ /* In 33x we have normal "Smart Messaging" format */
+ if (GetModelFeature (FN_RINGTONES)==F_RING_SM) {
+
+ i=7;
+ if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8;
+ ringtone.frame[i]=0x02;
+
+ GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i);
+
+ return SMringtone.name;
+ }
+ }
+ }
+
+ return RingingTones[index].name;
+}
+
+/* returns code from number in menu */
+int RingingToneCode(int menu)
+{
+ int index=1;
+
+ while ( RingingTones[index].menu!=menu) index++;
+
+ return RingingTones[index].code;
+}
+
+/* returns number in menu from code */
+int RingingToneMenu(int code)
+{
+ int index=1;
+
+ while ( RingingTones[index].code!=code) index++;
+
+ return RingingTones[index].menu;
+}
+
+int NumberOfRingtones()
+{
+ return RingingTones[0].menu;
+}
+
+int GSM_SaveRingtoneToSMS(GSM_MultiSMSMessage *SMS,
+ GSM_Ringtone *ringtone, bool profilestyle)
+{
+ int i, j;
+ unsigned char MessageBuffer[GSM_MAX_SMS_8_BIT_LENGTH*4];
+ unsigned char MessageBuffer2[GSM_MAX_SMS_8_BIT_LENGTH*4];
+ int MessageLength;
+ GSM_UDH UDHType;
+
+ EncodeUDHHeader(MessageBuffer, GSM_RingtoneUDH);
+ MessageLength=GSM_MAX_SMS_8_BIT_LENGTH-(MessageBuffer[0]+1);
+ i=GSM_PackRingtone(ringtone, MessageBuffer, &MessageLength);
+
+ if (i!=ringtone->NrNotes && profilestyle)
+ {
+ MessageLength=0;
+ MessageBuffer[MessageLength++]=0x30; //SM version. Here 3.0
+ MessageBuffer[MessageLength++]=SM30_RINGTONE; //ID for ringtone
+
+ MessageBuffer[MessageLength++]=0x01; //length hi.Later changed
+ MessageBuffer[MessageLength++]=0x00; //length lo.Later changed
+
+ j=SM30_MAX_RINGTONE_FRAME_LENGTH;
+ i=GSM_PackRingtone(ringtone, MessageBuffer2, &j);
+ MessageLength=MessageLength+j;
+ memcpy(MessageBuffer+4,MessageBuffer2,j);
+
+ MessageBuffer[2]=j/256;
+ MessageBuffer[3]=j%256;
+
+ UDHType=GSM_ProfileUDH;
+ } else
+ UDHType=GSM_RingtoneUDH;
+
+ GSM_MakeMultiPartSMS2(SMS,MessageBuffer,MessageLength, UDHType, GSM_Coding_Default);
+
+ return i;
+}
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "gsm-api.h"
+#include "gsm-coding.h"
+
+/* User data headers */
+GSM_UDHHeader UDHHeaders[] = {
+ { GSM_ConcatenatedMessages, 0x05, "\x00\x03\x01\x00\x00" },
+ /* See GSM 03.40 section 9.2.3.24.1 */
+ { GSM_DisableVoice, 0x04, "\x01\x02\x00\x00" },
+ { GSM_DisableFax, 0x04, "\x01\x02\x01\x00" },
+ { GSM_DisableEmail, 0x04, "\x01\x02\x02\x00" },
+ { GSM_EnableVoice, 0x04, "\x01\x02\x00\x01" },
+ { GSM_EnableFax, 0x04, "\x01\x02\x01\x01" },
+ { GSM_EnableEmail, 0x04, "\x01\x02\x02\x01" },
+ /* See GSM 03.40 section 9.2.3.24.2 for voice, fax and email messages */
+ { GSM_VoidSMS, 0x08, "\x01\x02\x02\x01\x01\x02\x02\x00" },
+ /* When send such SMS to some phones, they don't display anything,
+ only beep and enable vibra/light */
+ { GSM_BugSMS, 0x09, "\x01\x02\x02\x01\x01\x02\x02\x00\xc0" },
+
+ /* Short Smart Messaging UDH */
+ /* General format: */
+ /* 1 byte 0x05 : IEI application port addressing scheme, 16 bit address */
+ /* 1 byte 0x04 : IEI length */
+ /* 2 bytes : destination address: high & low byte */
+ /* 2 bytes 0x00 0x00: originator address: high & low byte */
+ { GSM_RingtoneUDH, 0x06, "\x05\x04\x15\x81\x00\x00" },
+ { GSM_OpLogo, 0x06, "\x05\x04\x15\x82\x00\x00" },
+ { GSM_CallerIDLogo, 0x06, "\x05\x04\x15\x83\x00\x00" },
+ { GSM_WAPBookmarkUDH, 0x06, "\x05\x04\xc3\x4f\x00\x00" },
+
+ /* Long Smart Messaging UDH */
+ /* General format: */
+ /* 1 byte 0x05 : IEI application port addressing scheme, 16 bit address */
+ /* 1 byte 0x04 : IEI length */
+ /* 2 bytes 0x00 0x00: destination address: high & low byte */
+ /* 2 bytes 0x00 0x00: originator address: high & low byte */
+ /* 1 byte 0x00 : null byte for end first part ? */
+ /* 1 byte 0x03 : length for rest ? */
+ /* 1 byte */
+ /* 1 byte : number of all SMS */
+ /* 1 byte : number of current SMS */
+ { GSM_CalendarNoteUDH, 0x0b, "\x05\x04\x00\xe4\x00\x00\x00\x03\xc7\x00\x00" }, //from 3310 ?
+ { GSM_CalendarNoteUDH2, 0x0b, "\x05\x04\x23\xf5\x00\x00\x00\x03\x01\x00\x00" }, //from 6210 or 9210 Note: last 0x01 changes according to note type
+ { GSM_ProfileUDH, 0x0b, "\x05\x04\x15\x8a\x00\x00\x00\x03\xce\x00\x00" },
+ { GSM_WAPBookmarkUDH, 0x0b, "\x05\x04\xc3\x4f\x00\x00\x00\x03\x01\x00\x00" },//note last 0x01 can change
+ { GSM_WAPSettingsUDH, 0x0b, "\x05\x04\xc3\x4f\x00\x00\x00\x03\x7f\x00\x00" },
+ { GSM_PhonebookUDH, 0x0b, "\x05\x04\x23\xf4\x00\x00\x00\x03\x01\x00\x00" },
+
+ { GSM_NoUDH, 0x00, "" }
+};
+
+#define ByteMask ((1 << Bits) - 1)
+
+int GSM_PackSevenBitsToEight(int offset, unsigned char *input, unsigned char *output)
+{
+ unsigned char *OUT = output; /* Current pointer to the output buffer */
+ unsigned char *IN = input; /* Current pointer to the input buffer */
+ int Bits; /* Number of bits directly copied to
+ the output buffer */
+ Bits = (7 + offset) % 8;
+
+ /* If we don't begin with 0th bit, we will write only a part of the
+ first octet */
+ if (offset) {
+ *OUT = 0x00;
+ OUT++;
+ }
+
+ while ((IN - input) < strlen(input)) {
+ unsigned char Byte = EncodeWithDefaultAlphabet(*IN);
+
+ *OUT = Byte >> (7 - Bits);
+ /* If we don't write at 0th bit of the octet, we should write
+ a second part of the previous octet */
+ if (Bits != 7)
+ *(OUT-1) |= (Byte & ((1 << (7-Bits)) - 1)) << (Bits+1);
+
+ Bits--;
+
+ if (Bits == -1) Bits = 7;
+ else OUT++;
+
+ IN++;
+ }
+ return (OUT - output);
+}
+
+int GSM_UnpackEightBitsToSeven(int offset, int in_length, int out_length,
+ unsigned char *input, unsigned char *output)
+{
+ unsigned char *OUT = output; /* Current pointer to the output buffer */
+ unsigned char *IN = input; /* Current pointer to the input buffer */
+ unsigned char Rest = 0x00;
+ int Bits;
+
+ Bits = offset ? offset : 7;
+
+ while ((IN - input) < in_length) {
+
+ *OUT = ((*IN & ByteMask) << (7 - Bits)) | Rest;
+ Rest = *IN >> Bits;
+
+ /* If we don't start from 0th bit, we shouldn't go to the
+ next char. Under *OUT we have now 0 and under Rest -
+ _first_ part of the char. */
+ if ((IN != input) || (Bits == 7)) OUT++;
+ IN++;
+
+ if ((OUT - output) >= out_length) break;
+
+ /* After reading 7 octets we have read 7 full characters but
+ we have 7 bits as well. This is the next character */
+ if (Bits == 1) {
+ *OUT = Rest;
+ OUT++;
+ Bits = 7;
+ Rest = 0x00;
+ } else {
+ Bits--;
+ }
+ }
+
+ return OUT - output;
+}
+
+/* This function implements packing of numbers (SMS Center number and
+ destination number) for SMS sending function. */
+/* See GSM 03.40 9.1.1:
+ 1 byte - length of number given in semioctets or bytes (when given in bytes,
+ includes one byte for byte with number format.
+ Returned by function (set semioctet to true, if want result
+ in semioctets).
+ 1 byte - format of number. See GSM_NumberType; in gsm-common.h. Returned
+ in u8 *Output.
+ n bytes - 2n or 2n-1 semioctets with number. For some types of numbers
+ in the most significant bits of the last byte with 0x0f
+ (1111 binary) are filled if the number is represented
+ with odd number of digits. Returned in u8 *Output. */
+/* 1 semioctet = 4 bits = half of byte */
+int GSM_PackSemiOctetNumber(u8 *Number, u8 *Output, bool semioctet) {
+
+ u8 *IN=Number; /* Pointer to the input number */
+ u8 *OUT=Output; /* Pointer to the output */
+ int length=0,j;
+ unsigned char format=GNT_UNKNOWN; // format of number used by us
+
+ /* Checking for format number */
+ while (*IN) {
+ if (length==0 && *IN=='+')
+ format=GNT_INTERNATIONAL; // first byte is '+'. It can be international
+ else {
+ if (*IN>'9' || *IN<'0') {
+ format=GNT_ALPHANUMERIC; //char is not number. It must be alphanumeric
+ }
+ }
+ IN++;length++;
+ }
+
+ /* Now we return to first byte */
+ for (j=0;j<length;j++) IN--;
+
+ /* The first byte in the Semi-octet representation of the address field is
+ the Type-of-Address. This field is described in the official GSM
+ specification 03.40 version 5.3.0, section 9.1.2.5, page 33.*/
+ *OUT++=format;
+
+ /* The next field is the number. See GSM 03.40 section 9.1.2 */
+ switch (format) {
+ case GNT_ALPHANUMERIC:
+ length=GSM_PackSevenBitsToEight(0, IN, OUT)*2;
+ break;
+
+ case GNT_INTERNATIONAL:
+ length--;
+ EncodeBCD (OUT, IN+1, length, true);
+ break;
+
+ default:
+ EncodeBCD (OUT, IN, length, true);
+ break;
+ }
+
+ if (semioctet) {
+ return length;
+ } else {
+ /* Convert number of semioctets to number of chars */
+ if (length % 2) length++;
+ return length / 2 + 1;
+ }
+}
+
+char *GSM_UnpackSemiOctetNumber(u8 *Number, bool semioctet) {
+
+ static char Buffer[20]="";
+ int length=Number[0];
+
+ if (semioctet) {
+ /* Convert number of semioctets to number of chars */
+ if (length % 2) length++;
+ length=length / 2 + 1;
+ }
+
+ length--; //without leading byte with format of number
+
+ switch (Number[1]) {
+ case GNT_ALPHANUMERIC:
+ GSM_UnpackEightBitsToSeven(0, length, length, Number+2, Buffer);
+ Buffer[length]=0;
+ break;
+
+ case GNT_INTERNATIONAL:
+ Buffer[0]='+';
+ DecodeBCD (Buffer+1, Number+2, length);
+ break;
+
+ default:
+ DecodeBCD (Buffer, Number+2, length);
+ break;
+ }
+
+ return Buffer;
+}
+
+/* See GSM 03.40 section 9.2.3.11 */
+GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req)
+{
+#ifdef DEBUG
+ fprintf(stdout,_("Date & time in saved SMS: %02i/%02i/%04i %02i:%02i:%02i\n"),
+ DT->Day,DT->Month,DT->Year,DT->Hour,DT->Minute,DT->Second);
+#endif
+
+ req[0]=EncodeWithBCDAlphabet(DT->Year);
+ req[1]=EncodeWithBCDAlphabet(DT->Month);
+ req[2]=EncodeWithBCDAlphabet(DT->Day);
+ req[3]=EncodeWithBCDAlphabet(DT->Hour);
+ req[4]=EncodeWithBCDAlphabet(DT->Minute);
+ req[5]=EncodeWithBCDAlphabet(DT->Second);
+
+ /* FIXME: do it */
+ req[6]=0; /* TimeZone = +-0 */
+
+ return GE_NONE;
+}
+
+/* See GSM 03.40 section 9.2.3.11 */
+GSM_Error GSM_DecodeSMSDateTime(GSM_DateTime *DT, unsigned char *req)
+{
+ DT->Year = DecodeWithBCDAlphabet(req[0]);
+ DT->Month = DecodeWithBCDAlphabet(req[1]);
+ DT->Day = DecodeWithBCDAlphabet(req[2]);
+ DT->Hour = DecodeWithBCDAlphabet(req[3]);
+ DT->Minute = DecodeWithBCDAlphabet(req[4]);
+ DT->Second = DecodeWithBCDAlphabet(req[5]);
+
+ DT->Timezone=(10*(req[6]&0x07)+(req[6]>>4))/4;
+ if (req[6]&0x08) DT->Timezone = -DT->Timezone;
+
+#ifdef DEBUG
+ fprintf(stdout, _("%d%d-"), req[0]&0xf, req[0]>>4);
+ fprintf(stdout, _("%d%d-"), req[1]&0xf, req[1]>>4);
+ fprintf(stdout, _("%d%d "), req[2]&0xf, req[2]>>4);
+ fprintf(stdout, _("%d%d:"), req[3]&0xf, req[3]>>4);
+ fprintf(stdout, _("%d%d:"), req[4]&0xf, req[4]>>4);
+ fprintf(stdout, _("%d%d "), req[5]&0xf, req[5]>>4);
+
+ if (req[6]) {
+ if (req[6] & 0x08) fprintf(stdout, "-");
+ else fprintf(stdout, "+");
+
+ fprintf(stdout, _("%02d00"), (10*(req[6]&0x07)+(req[6]>>4))/4);
+ }
+
+ fprintf(stdout, "\n");
+#endif
+
+ return GE_NONE;
+}
+
+int GSM_EncodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+ int off,size=0,size2=0,w,i;
+
+ /* off - length of the user data header */
+ off = 0;
+
+ if (SMS->UDHType) {
+ /* GSM 03.40 section 9.2.3.23 (TP-User-Data-Header-Indicator) */
+ ETSI->firstbyte |= 0x40;
+
+ /* off - length of the user data header */
+ off = 1 + SMS->UDH[0];
+
+ /* we copy the udh */
+ memcpy(ETSI->MessageText, SMS->UDH, off);
+
+// if (SMS->UDHType==GSM_HangSMS) ETSI->TPDCS=0x08; //Such SMS hangs phone (5110, 5.07),
+ //when saved to Outbox atry try to read it
+ /*from phone's menu*/
+ }
+
+ switch (SMS->Coding) {
+ /* When save SMS to SIM and it's 8 bit SMS,
+ "Edit" is not displayed in phone menu and
+ "Message cannot be displayed here" instead of message text */
+ case GSM_Coding_8bit:
+
+ /* the mask for the 8-bit data */
+ /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+ ETSI->TPDCS |= 0xf4;
+
+ memcpy(ETSI->MessageText + off, SMS->MessageText, SMS->Length);
+
+ size2 = size = SMS->Length+off;
+
+ break;
+
+ case GSM_Coding_Default:
+
+ w=(7-off)%7;
+ if (w<0) w=(14-off)%14;
+
+ size = GSM_PackSevenBitsToEight(w, SMS->MessageText, ETSI->MessageText + off);
+ size += off;
+ size2 = (off*8 + w) / 7 + strlen(SMS->MessageText);
+
+ break;
+
+ case GSM_Coding_Unicode:
+
+ /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+ ETSI->TPDCS |= 0x08;
+
+#ifdef DEBUG
+ fprintf(stdout,_("SMS Length is %i\n"),strlen(SMS->MessageText));
+#endif
+
+ EncodeUnicode (ETSI->MessageText+off,SMS->MessageText,strlen(SMS->MessageText));
+ /* here we code "special" chars */
+ for (i=0;i<strlen(SMS->MessageText);i++) {
+ if (SMS->MessageText[i]=='~') ETSI->MessageText[off+1+i*2]=1; //enables/disables blinking
+ if (SMS->MessageText[i]=='`') ETSI->MessageText[off+1+i*2]=0; //hides rest ot contents
+ }
+
+ size=size2=strlen(SMS->MessageText)*2+off;
+
+ break;
+ }
+
+ /* FIXME: support for compression */
+ /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+ /* See also GSM 03.42 */
+ /* if (SMS->Compression) ETSI->TPDCS |= 0x20; */
+
+ /* SMS->Length is:
+ - integer representation of the number od octets within the user data when UD is coded using 8bit data
+ - the sum of the number of septets in UDH including any padding and number of septets in UD in other case */
+ /* GSM 03.40 section 9.2.3.16 (TP-User-Data-Length) */
+ ETSI->TPUDL = size2;
+
+ return size;
+}
+
+GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+ int off,w,i,tmp=0;
+ unsigned char output[161];
+ bool UDHOK;
+
+ /* off - length of the user data header */
+ off = 0;
+
+ SMS->UDHType = GSM_NoUDH;
+
+ if (ETSI->firstbyte & 64) { /* UDH header available */
+
+ off = (ETSI->MessageText[0] + 1); /* Length of UDH header */
+
+ /* Copy UDH header into SMS->UDH */
+ for (i = 0; i < off; i++) SMS->UDH[i] = ETSI->MessageText[i];
+
+#ifdef DEBUG
+ fprintf(stdout, " UDH header available (length %i",off);
+#endif
+
+ SMS->UDHType = GSM_UnknownUDH;
+
+ i=-1;
+ while (true) {
+ i++;
+ if (UDHHeaders[i].UDHType==GSM_NoUDH) break;
+ tmp=UDHHeaders[i].Length;
+ if (tmp==SMS->UDH[0]) { //if length is the same
+
+ if (tmp==0x05) tmp=tmp-2;/*two last bytes can be different for such UDH*/
+ if (tmp==0x0b) tmp=tmp-3;/*three last bytes can be different for such UDH*/
+
+ UDHOK=true;
+ for (w=0;w<tmp;w++) {
+ if (UDHHeaders[i].Text[w]!=SMS->UDH[w+1]) {
+ UDHOK=false;
+ break;
+ }
+ }
+ if (UDHOK) {
+ SMS->UDHType=UDHHeaders[i].UDHType;
+ break;
+ }
+ }
+ }
+
+#ifdef DEBUG
+ switch (SMS->UDHType) {
+ case GSM_ConcatenatedMessages:
+ fprintf(stdout,_(", concatenated (linked) message %d/%d"),SMS->UDH[5],SMS->UDH[4]);break;
+ case GSM_DisableVoice:
+ fprintf(stdout,_(", disables voice indicator"));break;
+ case GSM_EnableVoice:
+ fprintf(stdout,_(", enables voice indicator"));break;
+ case GSM_DisableFax:
+ fprintf(stdout,_(", disables fax indicator"));break;
+ case GSM_EnableFax:
+ fprintf(stdout,_(", enables fax indicator"));break;
+ case GSM_DisableEmail:
+ fprintf(stdout,_(", disables email indicator"));break;
+ case GSM_EnableEmail:
+ fprintf(stdout,_(", enables email indicator"));break;
+ case GSM_VoidSMS:
+ fprintf(stdout,_(", void SMS"));break;
+ case GSM_WAPBookmarkUDH:
+ fprintf(stdout,_(", WAP Bookmark"));break;
+ case GSM_WAPBookmarkUDHLong:
+ fprintf(stdout,_(", WAP Bookmark, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ case GSM_WAPSettingsUDH:
+ fprintf(stdout,_(", WAP Settings, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ case GSM_RingtoneUDH:
+ fprintf(stdout,_(", ringtone"));break;
+ case GSM_OpLogo:
+ fprintf(stdout,_(", GSM Operator Logo"));break;
+ case GSM_CallerIDLogo:
+ fprintf(stdout,_(", Caller Logo"));break;
+ case GSM_ProfileUDH:
+ fprintf(stdout,_(", Profile SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ case GSM_CalendarNoteUDH:
+ fprintf(stdout,_(", Calendar note SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ case GSM_CalendarNoteUDH2:
+ fprintf(stdout,_(", Calendar note SMS, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ case GSM_PhonebookUDH:
+ fprintf(stdout,_(", Phonebook Entry, part %i/%i"),SMS->UDH[11],SMS->UDH[10]);break;
+ default:
+ fprintf(stdout,_(", UNKNOWN"));break;
+ }
+
+ fprintf(stdout, ")\n");
+
+ hexdump(off,SMS->UDH);
+#endif
+ }
+
+ SMS->Coding = GSM_Coding_Default;
+
+ /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+ if ((ETSI->TPDCS & 0xf4) == 0xf4) SMS->Coding=GSM_Coding_8bit;
+ if ((ETSI->TPDCS & 0x08) == 0x08) SMS->Coding=GSM_Coding_Unicode;
+
+ switch (SMS->Coding) {
+ case GSM_Coding_Default:
+ w=(7-off)%7;
+ if (w<0) w=(14-off)%14;
+
+ SMS->Length=ETSI->TPUDL - (off*8 + w) / 7;
+
+ tmp=GSM_UnpackEightBitsToSeven(w,ETSI->TPUDL-off, SMS->Length, ETSI->MessageText+off, output);
+
+#ifdef DEBUG
+ fprintf(stdout, " 7 bit SMS, body is (length %i): ",SMS->Length);
+#endif /* DEBUG */
+
+ DecodeDefault (SMS->MessageText, output, tmp);
+
+#ifdef DEBUG
+ fprintf(stdout, "%s\n",SMS->MessageText);
+#endif
+
+ break;
+ case GSM_Coding_8bit:
+ SMS->Length=ETSI->TPUDL - off;
+
+ memcpy(SMS->MessageText,ETSI->MessageText+off,SMS->Length);
+
+#ifdef DEBUG
+ fprintf(stdout, " 8 bit SMS, body is (length %i)\n",SMS->Length);
+ hexdump(SMS->Length,SMS->MessageText);
+#endif /* DEBUG */
+
+ break;
+ case GSM_Coding_Unicode:
+ SMS->Length=(ETSI->TPUDL - off) / 2;
+
+#ifdef DEBUG
+ fprintf(stdout, " 7 bit SMS, body is (length %i), Unicode coding: ",SMS->Length);
+ for (i=0; i<SMS->Length;i++) {
+ fprintf(stdout, "[%02x %02x]", ETSI->MessageText[off+i*2] , ETSI->MessageText[off+i*2+1]);
+ }
+ fprintf(stdout, "\n");
+#endif /* DEBUG */
+
+ /* here we decode "special" chars */
+ for (i=0; i<SMS->Length;i++) {
+ if (ETSI->MessageText[off+i*2] ==0x00 &&
+ ETSI->MessageText[off+i*2+1]==0x01)
+ ETSI->MessageText[off+i*2+1]='~'; //enables/disables blinking
+ if (ETSI->MessageText[off+i*2] ==0x00 &&
+ ETSI->MessageText[off+i*2+1]==0x00)
+ ETSI->MessageText[off+i*2+1]='`'; //hides rest ot contents
+ }
+
+ DecodeUnicode (SMS->MessageText, ETSI->MessageText+off, SMS->Length);
+
+ break;
+ }
+
+ return GE_NONE;
+}
+
+GSM_Error GSM_DecodeETSISMSStatusReportData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+ /* See GSM 03.40 section 9.2.3.11 (TP-Service-Centre-Time-Stamp) */
+#ifdef DEBUG
+ fprintf(stdout, _(" SMSC response date: "));
+#endif
+ GSM_DecodeSMSDateTime(&SMS->SMSCTime, ETSI->SMSCDateTime);
+
+ if (ETSI->TPStatus < 0x03) {
+ strcpy(SMS->MessageText,_("Delivered"));
+
+#ifdef DEBUG
+ /* more detailed reason only for debug */
+ /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+ switch (ETSI->TPStatus) {
+ case 0x00: fprintf(stdout, _(" SM received by the SME"));break;
+ case 0x01: fprintf(stdout, _(" SM forwarded by the SC to the SME but the SC is unable to confirm delivery"));break;
+ case 0x02: fprintf(stdout, _(" SM replaced by the SC"));break;
+ }
+#endif /* DEBUG */
+
+ SMS->Length = 10;
+
+ } else if (ETSI->TPStatus & 0x40) {
+
+ strcpy(SMS->MessageText,_("Failed"));
+
+#ifdef DEBUG
+ /* more detailed reason only for debug */
+ if (ETSI->TPStatus & 0x20) {
+
+ /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+ fprintf(stdout, _(" Temporary error, SC is not making any more transfer attempts\n"));
+ switch (ETSI->TPStatus) {
+ case 0x60: fprintf(stdout, _(" Congestion"));break;
+ case 0x61: fprintf(stdout, _(" SME busy"));break;
+ case 0x62: fprintf(stdout, _(" No response from SME"));break;
+ case 0x63: fprintf(stdout, _(" Service rejected"));break;
+ case 0x64: fprintf(stdout, _(" Quality of service not available"));break;
+ case 0x65: fprintf(stdout, _(" Error in SME"));break;
+ default : fprintf(stdout, _(" Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+ }
+
+ } else {
+
+ /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+ fprintf(stdout, _(" Permanent error, SC is not making any more transfer attempts\n"));
+ switch (ETSI->TPStatus) {
+ case 0x40: fprintf(stdout, _(" Remote procedure error"));break;
+ case 0x41: fprintf(stdout, _(" Incompatibile destination"));break;
+ case 0x42: fprintf(stdout, _(" Connection rejected by SME"));break;
+ case 0x43: fprintf(stdout, _(" Not obtainable"));break;
+ case 0x44: fprintf(stdout, _(" Quality of service not available"));break;
+ case 0x45: fprintf(stdout, _(" No internetworking available"));break;
+ case 0x46: fprintf(stdout, _(" SM Validity Period Expired"));break;
+ case 0x47: fprintf(stdout, _(" SM deleted by originating SME"));break;
+ case 0x48: fprintf(stdout, _(" SM Deleted by SC Administration"));break;
+ case 0x49: fprintf(stdout, _(" SM does not exist"));break;
+ default : fprintf(stdout, _(" Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+ }
+ }
+#endif /* DEBUG */
+
+ SMS->Length = 6;
+ } else if (ETSI->TPStatus & 0x20) {
+ strcpy(SMS->MessageText,_("Pending"));
+
+#ifdef DEBUG
+ /* more detailed reason only for debug */
+ /* See GSM 03.40 section 9.2.3.15 (TP-Status) */
+ fprintf(stdout, _(" Temporary error, SC still trying to transfer SM\n"));
+ switch (ETSI->TPStatus) {
+ case 0x20: fprintf(stdout, _(" Congestion"));break;
+ case 0x21: fprintf(stdout, _(" SME busy"));break;
+ case 0x22: fprintf(stdout, _(" No response from SME"));break;
+ case 0x23: fprintf(stdout, _(" Service rejected"));break;
+ case 0x24: fprintf(stdout, _(" Quality of service not aviable"));break;
+ case 0x25: fprintf(stdout, _(" Error in SME"));break;
+ default : fprintf(stdout, _(" Reserved/Specific to SC: %x"),ETSI->TPStatus);break;
+ }
+#endif /* DEBUG */
+ SMS->Length = 7;
+ } else {
+ strcpy(SMS->MessageText,_("Unknown"));
+
+#ifdef DEBUG
+ /* more detailed reason only for debug */
+ fprintf(stdout, _(" Reserved/Specific to SC: %x"),ETSI->TPStatus);
+#endif /* DEBUG */
+ SMS->Length = 8;
+ }
+
+#ifdef DEBUG
+ fprintf(stdout, _("\n"));
+#endif /* DEBUG */
+
+ return GE_NONE;
+}
+
+GSM_Error GSM_EncodeETSISMSSubmitHeader(GSM_SMSMessage *SMS,GSM_ETSISMSMessage *ETSI)
+{
+ GSM_Error error;
+
+ /* First of all we should get SMSC number */
+ if (SMS->MessageCenter.No) {
+ error = GSM->GetSMSCenter(&SMS->MessageCenter);
+ if (error != GE_NONE) return error;
+ SMS->MessageCenter.No = 0;
+ }
+
+#ifdef DEBUG
+ fprintf(stdout, _("Packing SMS to \"%s\" via message center \"%s\"\n"), SMS->Destination, SMS->MessageCenter.Number);
+#endif /* DEBUG */
+
+ ETSI->SMSCNumber[0]=GSM_PackSemiOctetNumber(SMS->MessageCenter.Number, ETSI->SMSCNumber+1, false);
+
+ /* GSM 03.40 section 9.2.3.17 (TP-Reply-Path) */
+ if (SMS->ReplyViaSameSMSC) ETSI->firstbyte |= 128;
+
+ /* When save to Outbox with SMS Class, "Edit" is not displayed in phone menu
+ and can forward it to another phone with set class (for example, 0=Flash) */
+ /* Message Class*/
+ /* GSM 03.40 section 9.2.3.10 (TP-Data-Coding-Scheme) and GSM 03.38 section 4 */
+ if (SMS->Class>=0 && SMS->Class<5) ETSI->TPDCS |= (240+SMS->Class);
+
+ /* When is not set for SMS saved for Inbox, phone displays "Message" instead
+ of number and doesn't display "Details" info */
+ ETSI->Number[0] = GSM_PackSemiOctetNumber(SMS->Destination, ETSI->Number+1, true);
+
+ return GE_NONE;
+}
+
+GSM_Error GSM_DecodeETSISMSHeader(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+#ifdef DEBUG
+ fprintf(stdout, _(" SMS center number: %s"), GSM_UnpackSemiOctetNumber(ETSI->SMSCNumber,false));
+ if (SMS->folder==0 && (ETSI->firstbyte & 128)!=0) //GST_INBOX
+ fprintf(stdout, _(" (centre set for reply)"));
+#endif
+
+ strcpy(SMS->MessageCenter.Number, GSM_UnpackSemiOctetNumber(ETSI->SMSCNumber,false));
+
+ SMS->ReplyViaSameSMSC=false;
+ if ((ETSI->firstbyte & 128)!=0) SMS->ReplyViaSameSMSC=true;
+
+#ifdef DEBUG
+ fprintf(stdout, _("\n Remote number (recipient or sender): %s\n"), GSM_UnpackSemiOctetNumber(ETSI->Number,true));
+#endif
+
+ strcpy(SMS->Sender, GSM_UnpackSemiOctetNumber(ETSI->Number,true));
+
+ return GE_NONE;
+}
+
+/* FIXME: we should allow for all validity formats */
+GSM_Error GSM_EncodeETSISMSSubmitValidity(GSM_SMSMessage *SMS,GSM_ETSISMSMessage *ETSI)
+{
+ /* GSM 03.40 section 9.2.3.3 (TP-Validity-Period-Format) */
+ /* Bits 4 and 3: 10. TP-VP field present and integer represent (relative) */
+ ETSI->firstbyte |= 0x10;
+
+ /* GSM 03.40 section 9.2.3.12 (TP-Validity Period) */
+ /* FIXME: error-checking for correct Validity - it should not be bigger then
+ 63 weeks and smaller then 5minutes. We should also test intervals because
+ the SMS->Validity to TP-VP is not continuos. I think that the simplest
+ solution will be an array of correct values. We should parse it and if we
+ find the closest TP-VP value we should use it. Or is it good to take
+ closest smaller TP-VP as we do now? I think it is :-) */
+
+ /* 5 minutes intervals up to 12 hours = 720 minutes */
+ if (SMS->Validity <= 720)
+ ETSI->TPVP = (unsigned char) (SMS->Validity/5)-1;
+
+ /* 30 minutes intervals up to 1 day */
+ else if ((SMS->Validity > 720) && (SMS->Validity <= 1440))
+ ETSI->TPVP = (unsigned char) ((SMS->Validity-720)/30)+143;
+
+ /* 1 day intervals up to 30 days */
+ else if ((SMS->Validity > 1440) && (SMS->Validity <= 43200))
+ ETSI->TPVP = (unsigned char) (SMS->Validity/1440)+166;
+
+ /* 1 week intervals up to 63 weeks */
+ else if ((SMS->Validity > 43200) && (SMS->Validity <= 635040))
+ ETSI->TPVP = (unsigned char) (SMS->Validity/10080)+192;
+
+ return GE_NONE;
+}
+
+/* FIXME: do we need more than SMS_Submit and SMS_Deliver ? */
+GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length)
+{
+ int size=0;
+
+ ETSI->firstbyte=0;
+ ETSI->TPPID=0;
+ ETSI->TPDCS=0;
+ ETSI->TPUDL=0;
+ ETSI->TPStatus=0;
+ ETSI->TPVP=0;
+
+ switch (PDU) {
+ case SMS_Submit:
+
+ /* GSM 03.40 section 9.2.3.1 (TP-Message-Type-Indicator) */
+ /* Bits 1 and 0: 01. SMS-Submit */
+ ETSI->firstbyte |= 0x01;
+
+ /* GSM 03.40 section 9.2.3.5 (TP-Status-Raport-Request) */
+ /* Mask for request for delivery report from SMSC */
+ if (SMS->Type == GST_DR) ETSI->firstbyte |= 32;
+
+ GSM_EncodeETSISMSSubmitHeader(SMS, ETSI);
+ GSM_EncodeETSISMSSubmitValidity(SMS, ETSI);
+ size=GSM_EncodeETSISMSSubmitData(SMS, ETSI);
+
+ break;
+ case SMS_Deliver:
+
+ /* GSM 03.40 section 9.2.3.1 (TP-Message-Type-Indicator) */
+ /* Bits 1 and 0: 00. SMS-Deliver */
+ ETSI->firstbyte |= 0x00;
+
+ GSM_EncodeETSISMSSubmitHeader(SMS, ETSI);
+ GSM_EncodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+ size=GSM_EncodeETSISMSSubmitData(SMS, ETSI);
+
+ break;
+ default:
+ break;
+ }
+
+ /* size is the length of the data in octets including udh */
+ *length=size;
+
+ return GE_NONE;
+}
+
+/* This function decodes parts of SMS coded according to GSM 03.40
+ (given in GSM_ETSISMSMessage) to GSM_SMSMessage */
+GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI)
+{
+ SMS_MessageType PDU=SMS_Deliver;
+
+ /* See GSM 03.40 section 9.2.3.1 */
+ if ((ETSI->firstbyte & 0x03) == 0x01) PDU=SMS_Submit;
+ if ((ETSI->firstbyte & 0x03) == 0x02) PDU=SMS_Status_Report;
+
+ GSM_DecodeETSISMSHeader(SMS, ETSI);
+
+ switch (PDU) {
+ case SMS_Submit:
+#ifdef DEBUG
+ fprintf(stdout, _(" SMS submit "));
+#endif
+ SMS->SMSData=false;
+ GSM_DecodeETSISMSSubmitData(SMS,ETSI);
+ break;
+ case SMS_Deliver:
+#ifdef DEBUG
+ fprintf(stdout, _(" SMS deliver "));
+ fprintf(stdout, _(" Date: "));
+#endif
+ SMS->SMSData=true;
+ GSM_DecodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+ GSM_DecodeETSISMSSubmitData(SMS,ETSI);
+ break;
+ case SMS_Status_Report:
+#ifdef DEBUG
+ fprintf(stdout, _(" SMS status report "));
+ fprintf(stdout, _(" Date: "));
+#endif
+ SMS->SMSData=true;
+ GSM_DecodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime);
+ GSM_DecodeETSISMSStatusReportData(SMS,ETSI);
+ break;
+ default:
+ break;
+ }
+
+ SMS->MessageText[SMS->Length]=0;
+
+ return GE_NONE;
+}
+
+void GSM_SetDefaultSMSData (GSM_SMSMessage *SMS)
+{
+ struct tm *now;
+ time_t nowh;
+ GSM_DateTime Date;
+
+ /* Default settings for SMS message:
+ - no delivery report
+ - Class Message 1
+ - no compression
+ - SMSC no. 1
+ - validity 3 days */
+
+ SMS->folder = GST_OUTBOX;
+ SMS->Type = GST_SMS;
+ SMS->Class = -1;
+ SMS->Compression = false;
+ SMS->MessageCenter.No = 1;
+ SMS->Validity = 4320; /* 4320 minutes == 72 hours */
+ SMS->ReplyViaSameSMSC = false;
+ SMS->UDHType = GSM_NoUDH;
+ SMS->Coding=GSM_Coding_Default;
+ strcpy(SMS->Destination,"");
+
+ /* This part is required to save SMS */
+
+ SMS->Status = GSS_NOTSENTREAD;
+ SMS->Location = 0;
+
+ nowh=time(NULL);
+ now=localtime(&nowh);
+
+ Date.Year = now->tm_year;
+ Date.Month = now->tm_mon+1;
+ Date.Day = now->tm_mday;
+ Date.Hour = now->tm_hour;
+ Date.Minute = now->tm_min;
+ Date.Second = now->tm_sec;
+
+ /* I have 100 (for 2000) Year now :-) */
+ if (Date.Year>99 && Date.Year<1900) {
+ Date.Year=Date.Year+1900;
+ }
+
+ /* We need to have only two last digits of year */
+ if (Date.Year>1900)
+ {
+ if (Date.Year<2000) Date.Year = Date.Year-1900;
+ else Date.Year = Date.Year-2000;
+ }
+
+ SMS->Time.Year=Date.Year;
+ SMS->Time.Month=Date.Month;
+ SMS->Time.Day=Date.Day;
+ SMS->Time.Hour=Date.Hour;
+ SMS->Time.Minute=Date.Minute;
+ SMS->Time.Second=Date.Second;
+
+ SMS->Name[0]=0;
+}
+
+/* This function encodes the UserDataHeader as described in:
+ - GSM 03.40 version 6.1.0 Release 1997, section 9.2.3.24
+ - Smart Messaging Specification, Revision 1.0.0, September 15, 1997
+*/
+GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType)
+{
+ int i=0;
+
+ if (UDHType!=GSM_NoUDH) {
+ while (true) {
+ if (UDHHeaders[i].UDHType==GSM_NoUDH) {
+#ifdef DEBUG
+ fprintf(stderr,_("Not supported User Data Header type\n"));
+#endif
+ break;
+ }
+ if (UDHHeaders[i].UDHType==UDHType) {
+ text[0] = UDHHeaders[i].Length; // UDH Length
+ memcpy(text+1, UDHHeaders[i].Text, UDHHeaders[i].Length);
+ break;
+ }
+ i++;
+ }
+ }
+ return GE_NONE;
+}
+
+int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS,
+ unsigned char *MessageBuffer,int cur, GSM_UDH UDHType, GSM_Coding_Type Coding){
+
+ int j;
+ int current,smsudhlength;
+
+ GSM_SetDefaultSMSData(SMS);
+
+ EncodeUDHHeader(SMS->UDH, UDHType);
+ SMS->UDHType=UDHType;
+
+ switch (UDHType) {
+ case GSM_EnableVoice:
+ case GSM_DisableVoice:
+ case GSM_EnableEmail:
+ case GSM_DisableEmail:
+ case GSM_EnableFax:
+ case GSM_DisableFax:
+ SMS->Class=1;
+ SMS->Coding=Coding;
+ break;
+ case GSM_NoUDH:
+ case GSM_ConcatenatedMessages:
+ case GSM_VoidSMS:
+ case GSM_HangSMS:
+ case GSM_BugSMS:
+ case GSM_PhonebookUDH:
+ case GSM_CalendarNoteUDH: //class=1?
+ SMS->Class=-1;
+ SMS->Coding=Coding;
+ break;
+ case GSM_OpLogo:
+ case GSM_CallerIDLogo:
+ case GSM_RingtoneUDH:
+ case GSM_WAPBookmarkUDH:
+ case GSM_WAPBookmarkUDHLong:
+ case GSM_WAPSettingsUDH:
+ case GSM_ProfileUDH:
+ SMS->Class=1;
+ SMS->Coding=GSM_Coding_8bit;
+ break;
+ default:
+ fprintf(stderr,_("Error in makesinglepartsms !\n\n\n"));
+ }
+
+ current=cur;
+
+ smsudhlength=0;
+ if (UDHType!=GSM_NoUDH)
+ smsudhlength=SMS->UDH[0]+1;
+
+ j=0;
+ switch (SMS->Coding) {
+ case GSM_Coding_8bit:
+ j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength); //max=140
+ break;
+ case GSM_Coding_Default:
+ j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength)*8/7; //max=160
+ break;
+ case GSM_Coding_Unicode:
+ j=(GSM_MAX_SMS_8_BIT_LENGTH-smsudhlength)/2; //max=70
+ break;
+ }
+ if (current>j) current=j;
+
+ memcpy(SMS->MessageText,MessageBuffer,current);
+ SMS->MessageText[current]=0;
+ SMS->Length=current;
+
+ return current;
+}
+
+void GSM_MakeMultiPartSMS2(GSM_MultiSMSMessage *SMS,
+ unsigned char *MessageBuffer,int MessageLength, GSM_UDH UDHType, GSM_Coding_Type Coding){
+
+ int i=0,j,pos=0,current=0;
+
+ for (i=0;i<4;i++) {
+ if (pos==MessageLength) break;
+
+ current=MessageLength-pos;
+
+ pos=pos+GSM_MakeSinglePartSMS2(&SMS->SMS[i],MessageBuffer+pos,current,UDHType,Coding);
+ }
+
+ for (j=0;j<i;j++)
+ {
+ switch (UDHType) {
+ case GSM_ProfileUDH:
+ case GSM_WAPBookmarkUDHLong:
+ case GSM_WAPSettingsUDH:
+ case GSM_CalendarNoteUDH:
+ case GSM_CalendarNoteUDH2:
+ case GSM_PhonebookUDH:
+ SMS->SMS[j].UDH[10]=i;
+ SMS->SMS[j].UDH[11]=j+1;
+ break;
+ case GSM_ConcatenatedMessages:
+ SMS->SMS[j].UDH[4]=i;
+ SMS->SMS[j].UDH[5]=j+1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ SMS->number=i;
+}
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <string.h>\r
+#include <ctype.h>\r
+#include <time.h>\r
+
+#ifndef WIN32
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <signal.h>
+ #include <unistd.h>
+ #include <errno.h>
+#endif\r
+\r
+#include "misc.h"\r
+#include "gsm-common.h"\r
+
+#ifndef HAVE_TIMEOPS
+
+/* FIXME: I have timersub defined in sys/time.h :-( PJ
+ FIXME: Jano wants this function too... PJ
+
+int timersub(struct timeval *a, struct timeval *b, struct timeval *result) {
+ do {
+ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;
+ (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;
+ if ((result)->tv_usec < 0) {
+ --(result)->tv_sec;
+ (result)->tv_usec += 1000000;
+ }
+ } while (0);
+}
+*/
+
+#endif
+
+int GetLine(FILE *File, char *Line, int count) {
+
+ char *ptr;
+
+ if (fgets(Line, count, File)) {
+ ptr=Line+strlen(Line)-1;
+
+ while ( (*ptr == '\n' || *ptr == '\r') && ptr>=Line) *ptr--='\0';
+
+ return strlen(Line);
+ } else return -1;
+}
+
+/*
+ * like atoi, but of a non-null-terminated string of a specified portion
+ */
+int mem_to_int(const char str[], int len)
+{
+ char aux[81];
+
+ strncpy(aux, str, len);
+ aux[len]=0;
+ return( atoi(aux) );
+}
+
+/*
+ * make hexdump of Message
+ */
+#ifdef DEBUG
+void hexdump(u16 MessageLength, u8 *MessageBuffer)
+{
+
+ int count;
+ int n=0;
+ char string1[80]="";
+ char string2[80]="";
+ char hex1[10];
+ char hex2[10];
+
+ for (count = 0; count < MessageLength; count ++)
+ {
+ n++;
+
+ switch (MessageBuffer[count]) {
+ case 0x09:
+ sprintf(hex1,"%02x ",MessageBuffer[count]);
+ strcpy(hex2,".");
+ break;
+ default:
+ if (isprint(MessageBuffer[count]))
+ sprintf(hex1,"%02x%c ",MessageBuffer[count],MessageBuffer[count]);
+ else
+ sprintf(hex1,"%02x ",MessageBuffer[count]);
+
+ if (isprint(MessageBuffer[count])) sprintf(hex2,"%c",MessageBuffer[count]);
+ else strcpy(hex2,".");
+ break;
+ }
+
+ if ( n!=15 && count != MessageLength-1 ) hex1[3]='|';
+
+ strcat(string1,hex1);
+ strcat(string2,hex2);
+
+ if ( n==15 || count == MessageLength-1 )
+ {
+ fprintf(stdout,"%-60s%03x %s\n",string1,count+1,string2);
+ strcpy(string1,"");
+ strcpy(string2,"");
+ n=0;
+ }
+ }//for count
+
+ if (n!=0) fprintf (stdout,_("\n"));
+
+ fflush(stdout);
+}
+
+void txhexdump(u16 MessageLength, u8 *MessageBuffer)
+{
+ int count;
+ int n=0;
+
+ for (count = 0; count < MessageLength; count ++)
+ {
+ n++;
+ fprintf(stdout,_("%02x"),MessageBuffer[count]);
+ switch (MessageBuffer[count]) {
+ case 0x09:
+ fprintf(stdout,_(" |"));
+ break;
+ default:
+ if (isprint(MessageBuffer[count])) fprintf(stdout, _("%c|"),MessageBuffer[count]);
+ else fprintf(stdout,_(" |"));
+ break;
+ }
+
+ if (n==18)
+ {
+ fprintf (stdout,_("\n"));
+ n=0;
+ }
+ }//for count
+
+ if (n!=0) fprintf (stdout,_("\n"));
+
+ fflush(stdout);
+}
+#endif
+
+#ifndef WIN32
+
+#define max_buf_len 128
+#define lock_path "/var/lock/LCK.."
+
+/* Lock the device. Return allocated string with a lock name */
+char *lock_device(const char* port)
+{
+ char *lock_file = NULL;
+ char buffer[max_buf_len];
+ char *aux = rindex(port, '/');
+ int fd, len = strlen(aux) + strlen(lock_path);
+
+ memset(buffer, 0, sizeof(buffer));
+ lock_file = calloc(len + 1, 1);
+ if (!lock_file) {
+ fprintf(stderr, _("Cannot lock device\n"));
+ return NULL;
+ }
+ /* I think we don't need to use strncpy, as we should have enough
+ * buffer due to strlen results
+ */
+ strcpy(lock_file, lock_path);
+ strcat(lock_file, aux);
+
+ /* Check for the stale lockfile.
+ * The code taken from minicom by Miquel van Smoorenburg */
+ if ((fd = open(lock_file, O_RDONLY)) >= 0) {
+ char buf[max_buf_len];
+ int pid, n = 0;
+
+ n = read(fd, buf, sizeof(buf) - 1);
+ close(fd);
+ if (n > 0) {
+ pid = -1;
+ if (n == 4)
+ /* Kermit-style lockfile. */
+ pid = *(int *)buf;
+ else {
+ /* Ascii lockfile. */
+ buf[n] = 0;
+ sscanf(buf, "%d", &pid);
+ }
+ if (pid > 0 && kill((pid_t)pid, 0) < 0 && errno == ESRCH) {
+ fprintf(stderr, _("Lockfile is stale. Overriding it..\n"));
+ sleep(1);
+ unlink(lock_file);
+ } else
+ n = 0;
+ }
+ if (n == 0) {
+ free(lock_file);
+ fprintf(stderr, _("Device is already locked.\n"));
+ return NULL;
+ }
+ }
+
+ /* Try to create a new file, with 0644 mode */
+ fd = open(lock_file, O_CREAT | O_EXCL, 0644);
+ if (fd == -1) {
+ free(lock_file);
+ fprintf(stderr, _("Cannot lock device\n"));
+ return NULL;
+ }
+ sprintf(buffer, "%10ld gnokii\n", (long)getpid());
+ write(fd, buffer, strlen(buffer));
+ close(fd);
+ return lock_file;
+}
+
+/* Removes lock and frees memory */
+bool unlock_device(char *lock_file)
+{
+ int err;
+
+ if (!lock_file) {
+ fprintf(stderr, _("Cannot unlock device\n"));
+ return false;
+ }
+ err = unlink(lock_file);
+ free(lock_file);
+ return (err + 1);
+}
+#endif /* WIN32 */
--- /dev/null
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+
+timestamp='2001-07-12'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# Please send patches to <config-patches@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int dummy(){}" > $dummy.c ;
+ for c in cc gcc c89 ; do
+ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+ if test $? = 0 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ rm -f $dummy.c $dummy.o $dummy.rel ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # Netbsd (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ # Determine the machine/vendor (is the vendor relevant).
+ case "${UNAME_MACHINE}" in
+ amiga) machine=m68k-unknown ;;
+ arm32) machine=arm-unknown ;;
+ atari*) machine=m68k-atari ;;
+ sun3*) machine=m68k-sun ;;
+ mac68k) machine=m68k-apple ;;
+ macppc) machine=powerpc-apple ;;
+ hp3[0-9][05]) machine=m68k-hp ;;
+ ibmrt|romp-ibm) machine=romp-ibm ;;
+ *) machine=${UNAME_MACHINE}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE}" in
+ i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ cat <<EOF >$dummy.s
+ .data
+\$Lformat:
+ .byte 37,100,45,37,120,10,0 # "%d-%x\n"
+
+ .text
+ .globl main
+ .align 4
+ .ent main
+main:
+ .frame \$30,16,\$26,0
+ ldgp \$29,0(\$27)
+ .prologue 1
+ .long 0x47e03d80 # implver \$0
+ lda \$2,-1
+ .long 0x47e20c21 # amask \$2,\$1
+ lda \$16,\$Lformat
+ mov \$0,\$17
+ not \$1,\$18
+ jsr \$26,printf
+ ldgp \$29,0(\$26)
+ mov 0,\$16
+ jsr \$26,exit
+ .end main
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ case `./$dummy` in
+ 0-0)
+ UNAME_MACHINE="alpha"
+ ;;
+ 1-0)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 1-1)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 1-101)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 2-303)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ 2-307)
+ UNAME_MACHINE="alphaev67"
+ ;;
+ esac
+ fi
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ arc64:OpenBSD:*:*)
+ echo mips64el-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hkmips:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy \
+ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ case "${HPUX_REV}" in
+ 11.[0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ esac ;;
+ esac
+ fi ;;
+ esac
+ if [ "${HP_ARCH}" = "" ]; then
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ eval $set_cc_for_build
+ (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+ rm -f $dummy.c $dummy
+ fi ;;
+ esac
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ hppa*:OpenBSD:*:*)
+ echo hppa-unknown-openbsd
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3D:*:*:*)
+ echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
+ big) echo mips-unknown-linux-gnu && exit 0 ;;
+ little) echo mipsel-unknown-linux-gnu && exit 0 ;;
+ esac
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev67 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ ld_supported_targets=`cd /; ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+# if __GLIBC__ >= 2
+ printf ("%s-pc-linux-gnu\n", argv[1]);
+# else
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+# else
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+ printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ echo `uname -p`-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ if test "${UNAME_MACHINE}" = "x86pc"; then
+ UNAME_MACHINE=pc
+ fi
+ echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-[KW]:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+eval $set_cc_for_build
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- /dev/null
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+
+timestamp='2001-06-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
+ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
+ | pyramid | mn10200 | mn10300 | tron | a29k \
+ | 580 | i960 | h8300 \
+ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
+ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+ | hppa64 \
+ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
+ | alphaev6[78] \
+ | we32k | ns16k | clipper | i370 | sh | sh[34] \
+ | powerpc | powerpcle \
+ | 1750a | dsp16xx | pdp10 | pdp11 \
+ | mips16 | mips64 | mipsel | mips64el \
+ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+ | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \
+ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
+ | v850 | c4x \
+ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
+ | pj | pjl | h8500 | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ # FIXME: clean up the formatting here.
+ vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
+ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
+ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
+ | xmp-* | ymp-* \
+ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
+ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
+ | hppa2.0n-* | hppa64-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
+ | alphaev6[78]-* \
+ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+ | clipper-* | orion-* \
+ | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \
+ | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
+ | mips16-* | mips64-* | mipsel-* \
+ | mips64el-* | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+ | mipstx39-* | mipstx39el-* | mcore-* \
+ | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
+ | [cjt]90-* \
+ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+ | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
+ | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ cray2)
+ basic_machine=cray2-cray
+ os=-unicos
+ ;;
+ [cjt]90)
+ basic_machine=${basic_machine}-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mipsel*-linux*)
+ basic_machine=mipsel-unknown
+ os=-linux-gnu
+ ;;
+ mips*-linux*)
+ basic_machine=mips-unknown
+ os=-linux-gnu
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ mmix*)
+ basic_machine=mmix-knuth
+ os=-mmixware
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+ basic_machine=i686-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sparclite-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=t3e-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ windows32)
+ basic_machine=i386-pc
+ os=-windows32-msvcrt
+ ;;
+ xmp)
+ basic_machine=xmp-cray
+ os=-unicos
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ mips)
+ if [ x$os = x-linux-gnu ]; then
+ basic_machine=mips-unknown
+ else
+ basic_machine=mips-mips
+ fi
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ c4x*)
+ basic_machine=c4x-none
+ os=-coff
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto*)
+ os=-nto-qnx
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- /dev/null
+#!/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
--- /dev/null
+dnl
+dnl Makefile for the GNOKII tool suite.
+dnl
+dnl Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+dnl 2000 Karel Zak, Pawe³ Kot
+dnl
+dnl $Id$
+dnl
+
+AC_INIT(gnokii/gnokii.c)
+
+AC_CONFIG_AUX_DIR(config)
+
+AC_CANONICAL_SYSTEM
+AC_PREFIX_DEFAULT("/usr/local")
+
+dnl ======================== Default setting
+CFLAGS="-O2 -Wall"
+ALL_LINGUAS="cs de et fi nl sk pl it"
+
+dnl ======================== Checks for programs.
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_LEX
+AC_PATH_PROG(RM, rm, no)
+AC_PATH_PROG(FIND, find, no)
+AC_CHECK_PROGS(MAKE, gmake make)
+AC_PROG_INSTALL
+
+dnl Let us have $prefix variable aviable here
+test x"$prefix" = xNONE && prefix="$ac_default_prefix"
+
+AC_ARG_ENABLE(debug,
+ [ --enable-debug compile with debug code],
+ [ CFLAGS="-g -Wall"
+ AC_DEFINE(DEBUG)
+ debug="yes" ],
+ [ debug="no" ]
+)
+
+AC_ARG_ENABLE(xdebug,
+ [ --enable-xdebug compile with xdebug code],
+ [ AC_DEFINE(XDEBUG)
+ xdebug="yes" ],
+ [ xdebug="no" ]
+)
+
+AC_ARG_ENABLE(rlpdebug,
+ [ --enable-rlpdebug compile with RLP debug code],
+ [ AC_DEFINE(RLP_DEBUG)
+ rlpdebug="yes" ],
+ [ rlpdebug="no" ]
+)
+
+dnl ======================== NLS support
+
+LIBS=""
+NLS_LIBS=""
+NLS_CFLAGS=""
+
+AC_ARG_WITH(libintl,
+ [ --with-libintl=DIR specifies the base NLS],
+ [ if test "x$withval" = "xyes"; then
+ AC_MSG_WARN(Usage is --with-libintl=DIR)
+ else
+ NLS_LIBS="-L$withval/lib"
+ NLS_CFLAGS="-I$withval/include"
+ fi
+ ]
+)
+
+AC_ARG_ENABLE(nls,
+ [ --disable-nls do not use NLS],
+ [ USE_NLS=$enableval ],
+ [ USE_NLS=yes ]
+)
+
+if test "$USE_NLS" = "yes"; then
+ AC_PROG_MAKE_SET
+ AC_CHECK_HEADERS(locale.h)
+ AC_CHECK_FUNCS(setlocale)
+ AC_SUBST(HAVE_LOCALE_H)
+
+ CPPFLAGS="$CPPFLAGS $NLS_CFLAGS"
+ AC_TRY_CPP([#include <libintl.h>],
+ [ AC_DEFINE(HAVE_LIBINTL_H)
+ AC_MSG_RESULT([checking for libintl.h... yes]) ],
+ [ AC_MSG_WARN(not found header file: libintl.h !!!)
+ USE_NLS=no ]
+ )
+fi
+
+if test "$USE_NLS" = "yes"; then
+ AC_CHECK_FUNC(gettext,
+ AC_DEFINE(HAVE_LIBINTL),
+ AC_CHECK_LIB(intl, gettext,
+ [ NLS_LIBS="$NLS_LIBS -lintl"
+ AC_DEFINE(HAVE_LIBINTL) ],
+ [ AC_MSG_WARN(not found library: intl !!!)
+ USE_NLS=no ],
+ $NLS_LIBS
+ )
+ )
+fi
+
+if test "$USE_NLS" = "yes"; then
+
+ AC_SUBST(HAVE_LIBINTL_H)
+ AC_SUBST(HAVE_LIBINTL)
+
+ dnl Handle localedir
+ LOCALEDIR='${prefix}/share/locale'
+ AC_ARG_WITH(locale-dir,
+ [ --with-locale-dir=DIR Location of the locale file(s)
+ [PREFIX/share/locale]],
+ [ if test x$withval = xyes; then
+ AC_MSG_WARN(Usage is: --with-locale-dir=basedir)
+ else
+ if test x$withval = xno; then
+ AC_MSG_WARN(Usage is: --with-locale-dir=basedir)
+ else
+ LOCALEDIR=$withval
+ fi
+ fi
+ ]
+ )
+ AC_SUBST(LOCALEDIR)
+
+ AC_PATH_PROG(MSGFMT, msgfmt, $MSGFMT)
+ if test -n "$MSGFMT"; then
+ AC_CHECK_FUNCS(dcgettext)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+ AC_PATH_PROG(XGETTEXT, xgettext, $XGETTEXT)
+ AC_PATH_PROG(MSGMERGE, msgmerge, $MSGMERGE)
+
+ dnl Test whether we really found GNU xgettext.
+ if test -n "$XGETTEXT"; then
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it])
+ XGETTEXT=""
+ fi
+ fi
+
+ dnl We add another test for comparing GNU xgettext with openwin xgettext
+ if test -n "$XGETTEXT"; then
+ if $XGETTEXT --help > /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it])
+ XGETTEXT=""
+ fi
+ fi
+
+ dnl Test whether we really found GNU msgfmt.
+ if test -n "$MSGFMT"; then
+ if $MSGFMT < /dev/null 2> /dev/null; then
+ AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; NLS will not be installed])
+ MSGFMT=""
+ fi
+ fi
+
+ AC_TRY_LINK(,
+ [ extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr],
+ [ CATOBJEXT=.gmo
+ DATADIRNAME=share],
+ [ CATOBJEXT=.mo
+ DATADIRNAME=lib]
+ )
+ INSTOBJEXT=.mo
+ fi
+
+ if test -n "$ALL_LINGUAS"; then
+ for lang in $ALL_LINGUAS; do
+ CATALOGS="$CATALOGS $lang$CATOBJEXT"
+ done
+ fi
+ AC_SUBST(CATALOGS)
+ AC_SUBST(CATOBJEXT)
+ AC_SUBST(INSTOBJEXT)
+ AC_SUBST(DATADIRNAME)
+fi
+
+dnl don't use NLS, when there is no gettext installed
+if test x"$MSGFMT" = x; then
+ USE_NLS=no
+fi
+
+if test x"$USE_NLS" = xyes; then
+ AC_DEFINE(USE_NLS)
+fi
+
+dnl ======================== Checks for libraries.
+
+AC_ARG_WITH(libpthread,
+ [ --with-libpthread=DIR specifies the base libpthread],
+ [ if test x$withval = xyes
+ then
+ AC_MSG_WARN(Usage is: --with-libpthread=DIR)
+ else
+ PTHREAD_LIBS="-L$withval/lib/"
+ PTHREAD_CFLAGS="-I$withval/include/"
+ fi
+ ]
+)
+
+dnl Check for libpthread
+PTHREAD_LIBS_SAVE="$PTHREAD_LIBS"
+PTHREAD_LIBS=error
+AC_CHECK_LIB(pthread, pthread_attr_init, [
+ PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT"
+ PTHREAD_LIBS="$PTHREAD_LIBS_SAVE -lpthread" ])
+
+dnl FIXME: test this on *BSD and report results immediatelly to the ml please
+dnl If it is not found, try to check for c_r (on FreeBSD)
+if test "x$PTHREAD_LIBS" = xerror; then
+ AC_CHECK_LIB(c_r, pthread_attr_init, [
+ PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE"
+ PTHREAD_LIBS="-pthread" ])
+fi
+
+dnl FIXME: do we really test here if libc contains this function?
+if test "x$PTHREAD_LIBS" = xerror; then
+ AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="",
+ AC_MSG_ERROR(not found library: pthread !!!))
+fi
+
+dnl The following is taken from inn sources
+AC_MSG_CHECKING(for tm_gmtoff in struct tm)
+AC_TRY_LINK([#include <time.h>],
+ [struct tm t; t.tm_gmtoff = 0],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_TM_GMTON)],
+ [AC_MSG_RESULT(no)])
+
+dnl The following is taken from inn sources
+AC_MSG_CHECKING(for timersub)
+AC_TRY_LINK([#include <sys/time.h>],
+ [timersub(NULL, NULL, NULL)],
+ [AC_DEFINE(HAVE_TIMEOPS)
+ AC_DEFINE(HAVE_TIMEOPS)
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)])
+
+have_termios="no"
+dnl Checking for setspeed in termios.h
+AC_MSG_CHECKING(for cfsetspeed in termios.h)
+AC_TRY_LINK([#include <termios.h>],
+ [struct termios t; cfsetspeed(&t, B9600);],
+ [AC_DEFINE(HAVE_CFSETSPEED)
+ have_termios="yes"
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
+
+if test $have_termios = "no"; then
+ AC_MSG_CHECKING(for cfsetispeed and cfsetospeed in termios.h)
+ AC_TRY_LINK([#include <termios.h>],
+ [struct termios t; cfsetispeed(&t, B9600); cfsetospeed(&t, B9600);],
+ [AC_DEFINE(HAVE_CFSETISPEED)
+ AC_DEFINE(HAVE_CFSETOSPEED)
+ have_termios="yes"
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)])
+
+ if test $have_termios = "no"; then
+ AC_MSG_CHECKING(for c_ispeed and c_ospeed in struct termios)
+ AC_TRY_LINK([#include <termios.h>],
+ [struct termios t; t.c_iflag = B9600; t.c_oflag = B9600;],
+ [AC_DEFINE(HAVE_TERMIOS_CSPEED)
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)])
+ fi
+fi
+
+dnl ======================== Checks for getopt_long support
+
+AC_CHECK_HEADER(getopt.h, ,
+ [CFLAGS="$CFLAGS -I../getopt"])
+
+AC_ARG_WITH(gnugetopt,
+ [ --with-getopt=DIR specifies the getopt library location directory],
+ [ if test x$withval=yes; then
+ AC_MSG_WARN(Usage is: --with-getopt=DIR)
+ else
+ GETOPT_LIBS="-L$withval"
+ fi
+ ]
+)
+
+OWN_GETOPT=""
+AC_CHECK_FUNC(getopt_long, , [
+ LIBS="$LIBS $GETOPT_LIBS"
+ AC_CHECK_LIB(gnugetopt, getopt_long, LIBS="$LIBS -lgnugetopt",
+ OWN_GETOPT="1")])
+
+dnl ======================== Checks for X base support
+
+if test "$no_x" = yes -o "$with_x" = "no"; then
+ x_support="no"
+ XPM_CFLAGS=""
+ XPM_LIBS=""
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+else
+ AC_PATH_X
+ CPPFLAGS="$CPPFLAGS -I$x_includes"
+ AC_CHECK_HEADERS(X11/xpm.h,
+ [ XPMINC="yes" ],
+ [ XPMINC="no" ])
+
+ if test "x$XPMINC" = "xno"; then
+ x_support="no"
+ XPM_CFLAGS=""
+ XPM_LIBS=""
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+ AC_MSG_WARN(Cannot find include X11/xpm.h)
+ AC_MSG_WARN(Disabling xgnokii.)
+ elif test "x$x_libraries" = "xNONE"; then
+ x_support="no"
+ XPM_CFLAGS=""
+ XPM_LIBS=""
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+ AC_MSG_WARN(Cannot find library libX11.)
+ AC_MSG_WARN(Disabling xgnokii.)
+ else
+ AC_CHECK_LIB(Xpm, XpmWriteFileFromXpmImage,
+ [ XPM_CFLAGS="-I$x_includes" XPM_LIBS="-L$x_libraries -lXpm -lX11"
+ AC_DEFINE(XPM) ],
+ AC_MSG_WARN(Cannot found library libXpm - disabling XPM support.),
+ [ -L$x_libraries -lX11 ]
+ )
+
+ AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config, no)
+ if test "$GTK_CONFIG" = no; then
+ x_support="no"
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+ AC_MSG_WARN(Cannot find gtk-config.)
+ AC_MSG_WARN(Disabling xgnokii.)
+ else
+ GTK_CFLAGS=`$GTK_CONFIG --cflags`
+ GTK_LIBS=`$GTK_CONFIG --libs`
+ x_support="yes"
+
+ XGNOKIIDIR='${prefix}/share'
+ XGNOKIIPATH=${prefix}/share
+ AC_ARG_WITH(xgnokiidir,
+ [ --with-xgnokiidir=DIR specifies the base for xgnokii],
+ [ if test x$withval = xyes; then
+ AC_MSG_WARN(Usage is: --with-xgnokiilib=DIR)
+ else
+ XGNOKIIDIR="$withval"
+ XGNOKIIPATH="$withval"
+ fi
+ ]
+ )
+ fi
+ fi
+fi
+
+dnl ======================== Check for libsocket
+AC_CHECK_LIB(socket, socket)
+
+dnl ======================== Additional switches
+
+AC_ARG_ENABLE(security,
+ [ --enable-security enable all security features ],
+ [ AC_DEFINE(SECURITY)
+ security="yes" ],
+ [ security="no" ]
+)
+
+AC_ARG_ENABLE(win32,
+ [ --enable-win32 if you want win32 suport ],
+ [ AC_DEFINE(WIN32)
+ win32="-DWIN32" ],
+ [ win32=""]
+)
+
+AC_CHECK_FUNC(grantpt,
+ [ AC_TRY_RUN([
+#define _XOPEN_SOURCE 500
+
+#include <features.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main()
+{
+ char *name = NULL;
+ int master, err;
+
+ master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK);
+ if (master >= 0) {
+ err = grantpt(master);
+ err = err || unlockpt(master);
+ if (!err) {
+ name = ptsname(master);
+ } else {
+ exit(-1);
+ }
+ } else {
+ exit(-1);
+ }
+ close(master);
+ exit(0);
+}
+ ],
+ AC_DEFINE(USE_UNIX98PTYS),
+ AC_MSG_WARN("No unix98ptys"),
+ AC_MSG_WARN("Ensure to disable unix98ptys when crosscompiling"))
+ ]
+)
+
+dnl ======================== Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h)
+
+dnl ======================== Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+dnl ======================== Checks for library functions.
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_MEMCMP
+AC_TYPE_SIGNAL
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS(mktime select strdup strstr strtol strtok strsep snprintf)
+
+CFLAGS="$CFLAGS $NLS_CFLAGS"
+LIBS="$LIBS $NLS_LIBS"
+
+PACKAGE=gnokii
+XPACKAGE=xgnokii
+VERSION=`cat VERSION`
+XVERSION=`cat xgnokii/VERSION`
+HAVE_XGNOKII=$x_support
+
+case "$INSTALL" in
+ 'config/install-sh -c') INSTALL=`pwd`/$INSTALL
+ ;;
+esac
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+AC_SUBST(SHELL)
+case "$build_os" in
+ solaris*) SHELL=/bin/ksh
+ ;;
+esac
+
+AC_CONFIG_HEADER(include/config.h)
+
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_SUBST(XVERSION)
+AC_SUBST(XPACKAGE)
+AC_SUBST(XGNOKIIDIR)
+AC_SUBST(XGNOKIIPATH)
+AC_SUBST(exec_prefix)
+AC_SUBST(USE_NLS)
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(GTK_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(XPM_CFLAGS)
+AC_SUBST(XPM_LIBS)
+AC_SUBST(OWN_GETOPT)
+AC_SUBST(USE_UNIX98PTYS)
+AC_SUBST(HAVE_XGNOKII)
+
+AC_OUTPUT(
+ include/config.h.in
+ Makefile.global
+ po/Makefile.in
+ packaging/RedHat/gnokii.spec
+ packaging/Slackware/SlackBuild,
+ [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile]
+ )
+
+
+dnl ======================== Final report
+
+echo "
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999-2000 The Gnokii Development Team.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ See file COPYING for more details.
+
+ Host system: $host_os
+ Gnokii version: $VERSION
+ Xgnokii version: $XVERSION
+ X (GTK) support: $x_support
+ Debug: $debug
+ XDebug: $xdebug
+ RLPDebug: $rlpdebug
+ NLS: $USE_NLS
+ Security: $security
+ Win32: $win32
+ Prefix: $prefix
+
+ Type '${MAKE}' for compilation or '${MAKE} makelib' when want to compile
+ all binaries with one shared library
+
+ After it '${MAKE} install', '${MAKE} install-suid', '${MAKE} install-strip'
+ or '${MAKE} install-ss' to install gnokii.
+"
--- /dev/null
+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
--- /dev/null
+/* Getopt for GNU.
+ NOTE: getopt is now part of the C library, so if you don't know what
+ "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+ before changing it!
+
+ Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94
+ Free Software Foundation, Inc.
+
+This file is part of the GNU C Library. Its master source is NOT part of
+the C library, however. The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+\f
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+ Ditto for AIX 3.2 and <stdlib.h>. */
+#ifndef _NO_PROTO
+#define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+#include <stdlib.h>
+#endif /* GNU C library. */
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of ARGV so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg = NULL;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns EOF, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+/* XXX 1003.2 says this must be 1 before any call. */
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIXLY_CORRECT, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we scan,
+ so that eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written to
+ expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were written
+ to expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1.
+ Using `-' as the first character of the list of option characters
+ selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return EOF with `optind' != ARGC. */
+
+static enum
+{
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable. */
+static char *posixly_correct;
+\f
+#ifdef __GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+ because there are many ways it can cause trouble.
+ On some systems, it contains special magic macros that don't work
+ in GCC. */
+#include <string.h>
+#define my_index strchr
+#else
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+char *getenv ();
+
+static char *
+my_index (str, chr)
+ const char *str;
+ int chr;
+{
+ while (*str)
+ {
+ if (*str == chr)
+ return (char *) str;
+ str++;
+ }
+ return 0;
+}
+
+/* If using GCC, we can safely declare strlen this way.
+ If not using GCC, it is ok not to declare it. */
+#ifdef __GNUC__
+/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+ That was relevant to code that was here before. */
+#if !defined (__STDC__) || !__STDC__
+/* gcc with -traditional declares the built-in strlen to return int,
+ and has done so at least since version 2.4.5. -- rms. */
+extern int strlen (const char *);
+#endif /* not __STDC__ */
+#endif /* __GNUC__ */
+
+#endif /* not __GNU_LIBRARY__ */
+\f
+/* Handle permutation of arguments. */
+
+/* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first of them;
+ `last_nonopt' is the index after the last of them. */
+
+static int first_nonopt;
+static int last_nonopt;
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (argv)
+ char **argv;
+{
+ int bottom = first_nonopt;
+ int middle = last_nonopt;
+ int top = optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ but it consists of two parts that need to be swapped next. */
+
+ while (top > middle && middle > bottom)
+ {
+ if (top - middle > middle - bottom)
+ {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ register int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else
+ {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ register int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ first_nonopt += (optind - last_nonopt);
+ last_nonopt = optind;
+}
+
+/* Initialize the internal data when the first call is made. */
+
+static const char *
+_getopt_initialize (optstring)
+ const char *optstring;
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ first_nonopt = last_nonopt = optind = 1;
+
+ nextchar = NULL;
+
+ posixly_correct = getenv ("POSIXLY_CORRECT");
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (posixly_correct != NULL)
+ ordering = REQUIRE_ORDER;
+ else
+ ordering = PERMUTE;
+
+ return optstring;
+}
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns `EOF'.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `--' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ if the `flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+ const struct option *longopts;
+ int *longind;
+ int long_only;
+{
+ optarg = NULL;
+
+ if (optind == 0)
+ optstring = _getopt_initialize (optstring);
+
+ if (nextchar == NULL || *nextchar == '\0')
+ {
+ /* Advance to the next ARGV-element. */
+
+ if (ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (last_nonopt != optind)
+ first_nonopt = optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (optind < argc
+ && (argv[optind][0] != '-' || argv[optind][1] == '\0'))
+ optind++;
+ last_nonopt = optind;
+ }
+
+ /* The special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (optind != argc && !strcmp (argv[optind], "--"))
+ {
+ optind++;
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (first_nonopt == last_nonopt)
+ first_nonopt = optind;
+ last_nonopt = argc;
+
+ optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (first_nonopt != last_nonopt)
+ optind = first_nonopt;
+ return EOF;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
+ {
+ if (ordering == REQUIRE_ORDER)
+ return EOF;
+ optarg = argv[optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Skip the initial punctuation. */
+
+ nextchar = (argv[optind] + 1
+ + (longopts != NULL && argv[optind][1] == '-'));
+ }
+
+ /* Decode the current option-ARGV-element. */
+
+ /* Check whether the ARGV-element is a long option.
+
+ If long_only and the ARGV-element has the form "-f", where f is
+ a valid short option, don't consider it an abbreviated form of
+ a long option that starts with f. Otherwise there would be no
+ way to give the -f short option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an abbreviation of
+ the long option, just like "--fu", and not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+
+ if (longopts != NULL
+ && (argv[optind][1] == '-'
+ || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = 0;
+ int option_index;
+
+ for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, nextchar, nameend - nextchar))
+ {
+ if (nameend - nextchar == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ if (opterr)
+ fprintf (stderr, "%s: option `%s' is ambiguous\n",
+ argv[0], argv[optind]);
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ optind++;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = nameend + 1;
+ else
+ {
+ if (opterr)
+ {
+ if (argv[optind - 1][1] == '-')
+ /* --option */
+ fprintf (stderr,
+ "%s: option `--%s' doesn't allow an argument\n",
+ argv[0], pfound->name);
+ else
+ /* +option or -option */
+ fprintf (stderr,
+ "%s: option `%c%s' doesn't allow an argument\n",
+ argv[0], argv[optind - 1][0], pfound->name);
+ }
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else
+ {
+ if (opterr)
+ fprintf (stderr, "%s: option `%s' requires an argument\n",
+ argv[0], argv[optind - 1]);
+ nextchar += strlen (nextchar);
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ nextchar += strlen (nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[optind][1] == '-'
+ || my_index (optstring, *nextchar) == NULL)
+ {
+ if (opterr)
+ {
+ if (argv[optind][1] == '-')
+ /* --option */
+ fprintf (stderr, "%s: unrecognized option `--%s'\n",
+ argv[0], nextchar);
+ else
+ /* +option or -option */
+ fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+ argv[0], argv[optind][0], nextchar);
+ }
+ nextchar = (char *) "";
+ optind++;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *nextchar++;
+ char *temp = my_index (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*nextchar == '\0')
+ ++optind;
+
+ if (temp == NULL || c == ':')
+ {
+ if (opterr)
+ {
+ if (posixly_correct)
+ /* 1003.2 specifies the format of this message. */
+ fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c);
+ else
+ fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c);
+ }
+ optopt = c;
+ return '?';
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ optind++;
+ }
+ else
+ optarg = NULL;
+ nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc)
+ {
+ if (opterr)
+ {
+ /* 1003.2 specifies the format of this message. */
+ fprintf (stderr, "%s: option requires an argument -- %c\n",
+ argv[0], c);
+ }
+ optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+ nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+getopt (argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ return _getopt_internal (argc, argv, optstring,
+ (const struct option *) 0,
+ (int *) 0,
+ 0);
+}
+
+#endif /* _LIBC or not __GNU_LIBRARY__. */
+\f
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
--- /dev/null
+/* 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 */
--- /dev/null
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
+ Free Software Foundation, Inc.
+
+This file is part of the GNU C Library. Its master source is NOT part of
+the C library, however. The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+\f
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "getopt.h"
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#else
+char *getenv ();
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+
+#endif /* _LIBC or not __GNU_LIBRARY__. */
+\f
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
--- /dev/null
+
+#
+# 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
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Mainline code for gnokii utility. Handles command line parsing and
+ reading/writing phonebook entries and other stuff.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+#include <sys/stat.h>
+
+#ifndef VC6
+ #if defined(__svr4__) || defined(__FreeBSD__)
+ # include <strings.h> /* for bzero */
+ #endif
+#else
+ /* for VC6 make scripts save VERSION constant in mversion.h file */
+ #include "mversion.h"
+#endif
+
+#ifdef WIN32
+
+ #include <windows.h>
+
+ #include "misc_win32.h"
+ #include "getopt.h"
+
+ #define DEV_CONSOLE "CON:"
+
+#else
+
+ #include <unistd.h>
+ #include <termios.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <getopt.h>
+
+ #define DEV_CONSOLE "/dev/tty"
+#endif
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "gsm-networks.h"
+#include "gsm-ringtones.h"
+#include "gsm-bitmaps.h"
+#include "gsm-wap.h"
+#include "gsm-sms.h"
+#include "gsm-datetime.h"
+#include "gsm-phonebook.h"
+#include "gsm-calendar.h"
+#include "gsm-coding.h"
+#include "newmodules/n6110.h"
+#include "files/cfgreader.h"
+#include "files/gsm-filetypes.h"
+#include "gnokii.h"
+
+#ifdef USE_NLS
+ #include <locale.h>
+#endif
+
+char *model; /* Model from .gnokiirc file. */
+char *Port; /* Port from .gnokiirc file */
+char *Initlength; /* Init length from .gnokiirc file */
+char *Connection; /* Connection type from .gnokiirc file */
+char *SynchronizeTime; /* If we set date and time from computer to phone (from .gnokiirc file) */
+char *BinDir; /* Binaries directory from .gnokiirc file - not used here yet */
+
+GSM_SMSMessage SMS[4];
+
+char *GetProfileCallAlertString(int code) {
+
+ switch (code) {
+ case PROFILE_CALLALERT_RINGING : return "Ringing";
+ case PROFILE_CALLALERT_ASCENDING : return "Ascending";
+ case PROFILE_CALLALERT_RINGONCE : return "Ring once";
+ case PROFILE_CALLALERT_BEEPONCE : return "Beep once";
+ case PROFILE_CALLALERT_CALLERGROUPS: return "Caller groups";
+ case PROFILE_CALLALERT_OFF : return "Off";
+ default : return "Unknown";
+ }
+}
+
+char *GetProfileVolumeString(int code) {
+
+ switch (code) {
+ case PROFILE_VOLUME_LEVEL1 : return "Level 1";
+ case PROFILE_VOLUME_LEVEL2 : return "Level 2";
+ case PROFILE_VOLUME_LEVEL3 : return "Level 3";
+ case PROFILE_VOLUME_LEVEL4 : return "Level 4";
+ case PROFILE_VOLUME_LEVEL5 : return "Level 5";
+ default : return "Unknown";
+ }
+}
+
+char *GetProfileKeypadToneString(int code) {
+
+ switch (code) {
+ case PROFILE_KEYPAD_OFF : return "Off";
+ case PROFILE_KEYPAD_LEVEL1 : return "Level 1";
+ case PROFILE_KEYPAD_LEVEL2 : return "Level 2";
+ case PROFILE_KEYPAD_LEVEL3 : return "Level 3";
+ default : return "Unknown";
+ }
+}
+
+char *GetProfileMessageToneString(int code) {
+
+ switch (code) {
+ case PROFILE_MESSAGE_NOTONE : return "No tone";
+ case PROFILE_MESSAGE_STANDARD : return "Standard";
+ case PROFILE_MESSAGE_SPECIAL : return "Special";
+ case PROFILE_MESSAGE_BEEPONCE : return "Beep once";
+ case PROFILE_MESSAGE_ASCENDING : return "Ascending";
+ default : return "Unknown";
+ }
+}
+
+char *GetProfileWarningToneString(int code) {
+
+ switch (code) {
+ case PROFILE_WARNING_OFF : return "Off";
+ case PROFILE_WARNING_ON : return "On";
+ default : return "Unknown";
+ }
+}
+
+char *GetProfileOnOffString(int code) {
+
+ switch (code) {
+ case 0x00 : return "Off";
+ case 0x01 : return "On";
+ default : return "Unknown";
+ }
+}
+
+static char *GetProfileVibrationString(int code)
+{
+ switch (code) {
+ case PROFILE_VIBRATION_OFF: return "Off";
+ case PROFILE_VIBRATION_ON: return "On";
+ case PROFILE_VIBRATION_FIRST: return "Vibrate first";
+ default: return "Unknown";
+ }
+}
+
+char BufferProfileGroups[90];
+
+char *GetProfileCallerGroups(int code)
+{
+ static char az_group_name[5][MAX_BITMAP_TEXT_LENGTH];
+ static bool enteronce=false;
+ register int i;
+ GSM_Bitmap bitmap;
+
+ if( code == PROFILE_CALLERGROUPS_ALL )
+ return _("All calls alert");
+
+ if( !enteronce ) {
+ for(i=0;i<5;i++) az_group_name[i][0]='\0';
+ enteronce=true;
+ }
+
+ BufferProfileGroups[0]=0;
+
+ for(i=0;i<5;i++)
+ {
+ int code2test;
+ char z_gtype[12];
+
+ code2test=(i==0) ? 1 : 2<<(i-1);
+
+ if( code & code2test )
+ {
+ if (!strcmp(az_group_name[i],""))
+ {
+ if (GetModelFeature (FN_CALLERGROUPS)!=0) {
+ bitmap.type=GSM_CallerLogo;
+ bitmap.number=i;
+ strcpy(z_gtype,_("unknown"));
+ if (GSM->GetBitmap(&bitmap)==GE_NONE)
+ strcpy( az_group_name[i], bitmap.text );
+ }
+ if ((!strcmp(az_group_name[i],""))) {
+ switch(i) {
+ case 0:strcpy(az_group_name[i],_("Family"));break;
+ case 1:strcpy(az_group_name[i],_("VIP"));break;
+ case 2:strcpy(az_group_name[i],_("Friends"));break;
+ case 3:strcpy(az_group_name[i],_("Colleagues"));break;
+ case 4:strcpy(az_group_name[i],_("Other"));break;
+ default:break;
+ }
+ }
+ }
+ strcpy(z_gtype,az_group_name[i]);
+
+ if( strlen(BufferProfileGroups) ) strcat(BufferProfileGroups,"+");
+ strcat(BufferProfileGroups, z_gtype);
+ }
+
+ }
+
+ return BufferProfileGroups;
+}
+
+char *print_error(GSM_Error e)
+{
+
+// case GE_DEVICEOPENFAILED: return "Couldn't open specified serial device.";
+// case GE_UNKNOWNMODEL: return "Model specified isn't known/supported.";
+// case GE_NOLINK: return "Couldn't establish link with phone.";
+// case GE_TRYAGAIN: return "Try again.";
+// case GE_INVALIDSMSLOCATION: return "Invalid SMS location.";
+// case GE_INVALIDPHBOOKLOCATION: return "Invalid phonebook location.";
+// case GE_INVALIDMEMORYTYPE: return "Invalid type of memory.";
+// case GE_INVALIDSPEEDDIALLOCATION: return "Invalid speed dial location.";
+// case GE_INVALIDCALNOTELOCATION: return "Invalid calendar note location.";
+// case GE_INVALIDDATETIME: return "Invalid date, time or alarm specification.";
+// case GE_EMPTYSMSLOCATION: return "SMS location is empty.";
+// case GE_PHBOOKNAMETOOLONG: return "Phonebook name is too long.";
+// case GE_PHBOOKNUMBERTOOLONG: return "Phonebook number is too long.";
+// case GE_PHBOOKWRITEFAILED: return "Phonebook write failed.";
+// case GE_SMSSENDOK: return "SMS was send correctly.";
+// case GE_SMSSENDFAILED: return "SMS send fail.";
+// case GE_SMSTOOLONG: return "SMS message too long.";
+// case GE_NONEWCBRECEIVED: return "Attempt to read CB when no new CB received";
+// case GE_INTERNALERROR: return "Problem occured internal to model specific code.";
+// case GE_NOTSUPPORTED: return "Function not supported by the phone";
+// case GE_BUSY: return "Command is still being executed.";
+// case GE_USERCANCELED: return "User has cancelled the action.";
+// case GE_UNKNOWN: return "Unknown error - well better than nothing!!";
+// case GE_MEMORYFULL: return "Memory is full";
+// case GE_LINEBUSY: return "Outgoing call requested reported line busy";
+// case GE_NOCARRIER: return "No Carrier error during data call setup ?";
+
+ switch (e) {
+ case GE_NONE: return "No error, done OK";
+ case GE_INVALIDSECURITYCODE: return "Invalid Security code.";
+ case GE_NOTIMPLEMENTED: return "Called command is not implemented for the used model. Please contact marcin-wiacek@topnet.pl, if you want to help in implementing it";
+ case GE_TIMEOUT: return "Command timed out.";
+ case GE_CANTOPENFILE: return "Can't open file with bitmap/ringtone";
+ case GE_SUBFORMATNOTSUPPORTED: return "Subformat of file not supported";
+ case GE_WRONGNUMBEROFCOLORS: return "Wrong number of colors in specified bitmap file (only 2 colors files supported)";
+ case GE_WRONGCOLORS: return "Wrong colors in bitmap file";
+ case GE_INVALIDIMAGESIZE: return "Invalid size of bitmap (in file, sms etc.)";
+ case GE_INVALIDFILEFORMAT: return "Invalid format of file";
+ case GE_TOOSHORT: return "File too short";
+ case GE_INSIDEBOOKMARKSMENU: return "Inside WAP Bookmarks menu. Please leave it and try again";
+ case GE_INVALIDBOOKMARKLOCATION: return "Invalid or empty WAP bookmark location";
+ case GE_INSIDESETTINGSMENU: return "Inside WAP Settings menu. Please leave it and try again";
+ case GE_INVALIDSETTINGSLOCATION: return "Invalid or empty WAP settings location";
+ default: return "Unknown error.";
+ }
+}
+
+
+GSM_Error GSM_ReadRingtoneFileOnConsole(char *FileName, GSM_Ringtone *ringtone)
+{
+ GSM_Error error;
+
+ error=GSM_ReadRingtoneFile(FileName, ringtone);
+
+ switch (error) {
+ case GE_CANTOPENFILE:
+ case GE_SUBFORMATNOTSUPPORTED:
+ fprintf(stderr, _("File \"%s\"\nError: %s\n"),FileName,print_error(error));
+ break;
+ default:
+ break;
+ }
+
+ return error;
+}
+
+GSM_Error GSM_SaveRingtoneFileOnConsole(char *FileName, GSM_Ringtone *ringtone)
+{
+ int confirm,confirm2;
+ char ans[4];
+ struct stat buf;
+ GSM_Error error;
+
+ /* Ask before overwriting */
+ while (stat(FileName, &buf) == 0) {
+
+ confirm=-1;
+ confirm2=-1;
+
+ while (confirm < 0) {
+ fprintf(stderr, _("Saving ringtone. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "),FileName);
+ GetLine(stdin, ans, 4);
+ if (!strcmp(ans, "O") || !strcmp(ans, "o")) confirm = 1;
+ if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm = 2;
+ if (!strcmp(ans, "S") || !strcmp(ans, "s")) return GE_USERCANCELED;
+ }
+ if (confirm==1) break;
+ if (confirm==2) {
+ while (confirm2 < 0) {
+ fprintf(stderr, _("Enter name of new file: "));
+ GetLine(stdin, FileName, 50);
+ if (&FileName[0]==0) return GE_USERCANCELED;
+ confirm2=1;
+ }
+ }
+ }
+
+ error=GSM_SaveRingtoneFile(FileName,ringtone);
+
+ switch (error) {
+ case GE_CANTOPENFILE: fprintf(stderr, _("Failed to write file \"%s\"\n"),FileName);
+ break;
+ default: break;
+ }
+
+ return error;
+}
+
+GSM_Error GSM_ReadBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap)
+{
+ GSM_Error error;
+
+ error=GSM_ReadBitmapFile(FileName, bitmap);
+
+ switch (error) {
+ case GE_CANTOPENFILE:
+ case GE_WRONGNUMBEROFCOLORS:
+ case GE_WRONGCOLORS:
+ case GE_INVALIDFILEFORMAT:
+ case GE_SUBFORMATNOTSUPPORTED:
+ case GE_TOOSHORT:
+ case GE_INVALIDIMAGESIZE:
+ fprintf(stderr, _("File \"%s\"\nError: %s\n"),FileName,print_error(error));
+ break;
+ default:
+ break;
+ }
+
+ return error;
+}
+
+GSM_Error GSM_SaveBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap)
+{
+ int confirm,confirm2;
+ char ans[4];
+ struct stat buf;
+ GSM_Error error;
+
+ /* Ask before overwriting */
+ while (stat(FileName, &buf) == 0) {
+
+ confirm=-1;
+ confirm2=-1;
+
+ while (confirm < 0) {
+ fprintf(stderr, _("Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "),FileName);
+ GetLine(stdin, ans, 4);
+ if (!strcmp(ans, "O") || !strcmp(ans, "o")) confirm = 1;
+ if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm = 2;
+ if (!strcmp(ans, "S") || !strcmp(ans, "s")) return GE_USERCANCELED;
+ }
+ if (confirm==1) break;
+ if (confirm==2) {
+ while (confirm2 < 0) {
+ fprintf(stderr, _("Enter name of new file: "));
+ GetLine(stdin, FileName, 50);
+ if (&FileName[0]==0) return GE_USERCANCELED;
+ confirm2=1;
+ }
+ }
+ }
+
+ error=GSM_SaveBitmapFile(FileName,bitmap);
+
+ switch (error) {
+ case GE_CANTOPENFILE: fprintf(stderr, _("Failed to write file \"%s\"\n"),FileName);
+ break;
+ default: break;
+ }
+
+ return error;
+}
+
+/* mode == 0 -> overwrite
+ * mode == 1 -> ask
+ * mode == 2 -> append
+ */
+int GSM_SaveTextFileOnConsole(char *FileName, char *text, int mode)
+{
+ int confirm, confirm2;
+ char ans[4];
+ struct stat buf;
+ int error;
+
+ /* Ask before overwriting */
+ if (mode==1) {
+ while (stat(FileName, &buf) == 0 && mode==1) {
+
+ confirm=-1;
+ confirm2=-1;
+
+ while (confirm < 0) {
+ fprintf(stderr, _("File \"%s\" exists. (O)verwrite, (a)ppend, create (n)ew or (s)kip ? "),FileName);
+ GetLine(stdin, ans, 4);
+ if (!strcmp(ans, "O") || !strcmp(ans, "o")) {
+ mode = 0;
+ confirm = 1;
+ }
+ if (!strcmp(ans, "A") || !strcmp(ans, "a")) {
+ mode = 2;
+ confirm = 1;
+ }
+ if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm=2;
+ if (!strcmp(ans, "S") || !strcmp(ans, "s")) return -1;
+ }
+
+ if (confirm==2) {
+ while (confirm2 < 0) {
+ fprintf(stderr, _("Enter name of new file: "));
+ GetLine(stdin, FileName, 50);
+ if (&FileName[0]==0) return -1;
+ mode=1;
+ confirm2=1;
+ }
+ }
+
+ }
+ }
+
+ error=GSM_SaveTextFile(FileName, text, mode);
+
+ switch (error) {
+ case -1: fprintf(stderr, _("Failed to write file \"%s\"\n"), FileName);
+ break;
+ default: break;
+ }
+
+ return error;
+}
+
+int GSM_SendMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[],
+ bool unicode, bool profile, bool scale) {
+
+ int w,i;
+
+ struct option options[] = {
+ { "smscno", required_argument, NULL, '1'},
+ { "smsc", required_argument, NULL, '2'},
+ { "name", required_argument, NULL, '3'},
+ { "unicode", no_argument, NULL, '4'},
+ { "profilestyle", no_argument, NULL, '5'},
+ { "scale", no_argument, NULL, '6'},
+ { NULL, 0, NULL, 0 }
+ };
+
+ GSM_Error error;
+
+ for (w=0;w<MultiSMS->number;w++) {
+
+ if (argnum!=0) {
+ optarg = NULL;
+
+ /* We check optional parameters from ... */
+ optind = argnum;
+
+ while ((i = getopt_long(argc, argv, "v:ds", options, NULL)) != -1) {
+ switch (i) {
+
+ case '1': /* SMSC number */
+ MultiSMS->SMS[w].MessageCenter.No = 0;
+ strcpy(MultiSMS->SMS[w].MessageCenter.Number,optarg);
+ break;
+
+ case '2': /* SMSC number index in phone memory */
+ MultiSMS->SMS[w].MessageCenter.No = atoi(optarg);
+
+ if (MultiSMS->SMS[w].MessageCenter.No < 1 || MultiSMS->SMS[w].MessageCenter.No > 5) {
+ fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ break;
+
+ case '3': /* Receiver/recipient */
+ strncpy(MultiSMS->SMS[w].Destination,optarg,11); break;
+
+ case '4': /* Unicode */
+ if (unicode) break;
+
+ case '5': /* Profile */
+ if (profile) break;
+
+ case '6': /* Scale */
+ if (scale) break;
+
+ case 'v': /* Set validaty of SMS */
+ MultiSMS->SMS[w].Validity = atoi(optarg);
+ break;
+
+ case 'd': /* delivery report */
+ MultiSMS->SMS[w].Type=GST_DR;
+ break;
+
+ case 's': /* Set replying via the same SMSC */
+ MultiSMS->SMS[w].ReplyViaSameSMSC = true; break;
+
+ default:
+ fprintf(stderr,_("Unknown option number %i\n"),argc);
+ GSM->Terminate();
+ return -1;
+
+ }
+ }
+ }
+
+ error=GSM->SendSMSMessage(&MultiSMS->SMS[w]);
+
+ if (error == GE_SMSSENDOK) {
+ fprintf(stdout, _("SMS %i/%i sent OK !\n"),w+1,MultiSMS->number);
+ } else {
+ fprintf(stdout, _("SMS %i/%i, sending failed (error=%d)\n"),w+1,MultiSMS->number, error);
+ }
+
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[],
+ bool inter, bool unicode, bool profile, bool scale) {
+
+ int w,i;
+
+ GSM_SMSMessage SMSold;
+
+ struct option options[] = {
+ { "smscno", required_argument, NULL, '1'},
+ { "smsc", required_argument, NULL, '2'},
+ { "name", required_argument, NULL, '3'},
+ { "unicode", no_argument, NULL, '4'},
+ { "profilestyle", no_argument, NULL, '5'},
+ { "scale", no_argument, NULL, '6'},
+ { NULL, 0, NULL, 0 }
+ };
+
+ int interactive;
+ int confirm = -1;
+ char ans[8];
+
+ GSM_Error error;
+
+ interactive = inter;
+
+ for (w=0;w<MultiSMS->number;w++) {
+
+ if (argnum!=0) {
+ optarg = NULL;
+
+ /* We check optional parameters from ... */
+ optind = argnum;
+
+ while ((i = getopt_long(argc, argv, "risal:", options, NULL)) != -1) {
+ switch (i) {
+
+ case '1': /* SMSC number */
+ MultiSMS->SMS[w].MessageCenter.No = 0;
+ strcpy(MultiSMS->SMS[w].MessageCenter.Number,optarg);
+ break;
+
+ case '2': /* SMSC number index in phone memory */
+ MultiSMS->SMS[w].MessageCenter.No = atoi(optarg);
+
+ if (MultiSMS->SMS[w].MessageCenter.No < 1 || MultiSMS->SMS[w].MessageCenter.No > 5) {
+ fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ break;
+
+ case '3': /* Receiver/recipient */
+ strncpy(MultiSMS->SMS[w].Destination,optarg,11); break;
+
+ case '4': /* Unicode */
+ if (unicode) break;
+
+ case '5': /* Profile */
+ if (profile) break;
+
+ case '6': /* Scale */
+ if (scale) break;
+
+ case 'r': /* mark as read */
+ MultiSMS->SMS[w].Status = GSS_SENTREAD; break;
+
+ case 'i': /* Save into Inbox */
+ MultiSMS->SMS[w].folder = GST_INBOX; break;
+
+ case 's': /* Set replying via the same SMSC */
+ MultiSMS->SMS[w].ReplyViaSameSMSC = true; break;
+
+ case 'a': /* Ask before overwriting */
+ interactive=true;break;
+
+ case 'l': /* Specify location */
+ MultiSMS->SMS[0].Location = atoi(optarg); break;
+
+ default:
+ fprintf(stderr,_("Unknown option number %i\n"),argc);
+ GSM->Terminate();
+ return -1;
+ }
+ }
+ }
+
+ if (interactive && MultiSMS->SMS[0].Location!=0 && w==0) {
+ SMSold.Location=MultiSMS->SMS[0].Location;
+ error = GSM->GetSMSMessage(&SMSold);
+ switch (error) {
+ case GE_NONE:
+ fprintf(stderr, _("Message at specified location exists. "));
+ while (confirm < 0) {
+ fprintf(stderr, _("Overwrite? (yes/no) "));
+ GetLine(stdin, ans, 7);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no")) confirm = 0;
+ }
+ if (!confirm) { GSM->Terminate(); return 0; }
+ else break;
+ case GE_INVALIDSMSLOCATION:
+ fprintf(stderr, _("Invalid location\n"));
+ GSM->Terminate();
+ return -1;
+ default:
+/* FIXME: Remove this fprintf when the function is thoroughly tested */
+#ifdef DEBUG
+ fprintf(stderr, _("Location %d empty. Saving\n"), SMS[w].Location);
+#endif
+ break;
+ }
+ }
+
+ error=GSM->SaveSMSMessage(&MultiSMS->SMS[w]);
+
+ if (error == GE_NONE)
+ fprintf(stdout, _("SMS %i/%i saved at location %i !\n"),w+1,MultiSMS->number,MultiSMS->SMS[w].MessageNumber);
+ else
+ fprintf(stdout, _("SMS %i/%i saving failed (error=%d, location=%i)\n"), w+1, MultiSMS->number, error,MultiSMS->SMS[w].Location);
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+void GSM_PlayRingtoneOnConsole(GSM_Ringtone *ringtone)
+{
+ int i;
+#ifdef VC6
+ char mychar;
+#endif
+
+ for (i=0;i<ringtone->NrNotes;i++) {
+#ifdef VC6
+ if (_kbhit()) {
+ mychar=_getch();
+ break;
+ }
+#endif
+ GSM_PlayOneNote (ringtone->notes[i]);
+ }
+ GSM->PlayTone(255*255,0);
+}
+
+/* This function shows the copyright and some informations usefull for
+ debugging. */
+int version(void)
+{
+
+ fprintf(stdout, _("GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, model, Port);
+
+ return 0;
+}
+
+/* The function usage is only informative - it prints this program's usage and
+ command-line options. */
+
+int usage(void)
+{
+
+ fprintf(stdout, _(" usage: gnokii [--help|--monitor [-noloop|-nl]|--version]\n"
+" gnokii --getmemory memory_type [start [end]] [-short|-v30|-v21|-v]\n"
+" gnokii --writephonebook [-i]\n"
+" gnokii --sendphonebookentry destination memory_type location\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --savephonebookentry memory_type location\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [--name name]\n"
+" gnokii --getvoicemailbox\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n\n"
+
+" gnokii --getsms memory_type start [end] [-f file]\n"
+" gnokii --getsmsstatus\n"
+" gnokii --getsmsfolders\n"
+" gnokii --deletesms memory_type start [end]\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [--long n] [-s] [-C n]\n"
+" [--enablevoice|--disablevoice|--enablefax|--disablefax|\n"
+" --enableemail|--disableemail|--void][--unicode][-v n][-d]\n"
+" gnokii --savesms destination|\"\" [--smsc \n"
+" message_center_number] [--smscno message_center_index]\n"
+" [--long n] [-r] [-i] [-s][-C n][-a][-l][F n][--smsname name]\n"
+" [--enablevoice|--disablevoice|--enablefax|--disablefax|\n"
+" --enableemail|--disableemail|--void|--hang|--bug][--unicode]\n"
+" gnokii --receivesms\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --renamesmsc number new_name\n\n"
+
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n\n"
+
+" gnokii --getcalendarnote { start end [-v30|-v10] | --short|-s }\n"
+" gnokii --writecalendarnote vcardfile number\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --sendcalendarnote destination vcardfile number\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --savecalendarnote vcardfile number\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [--name name]\n\n"
+
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --nm_collect screen1|-d [screen2|-d]...\n"
+" gnokii --netmonitordata [-S file] [-I file] [-h] [-n n] [-ts n][-tm n]\n"
+" [-fs str] [-ls str] FLD1:FLD2:FLDn:... \n"
+" (see files netmonitordata_????_??? for details)\n\n"
+
+" gnokii --bitmapconvert source destination\n"
+" gnokii --bitmapconvert source destination op|7110op [network code]\n"
+" gnokii --bitmapconvert source destination caller [caller group number]\n"
+" gnokii --bitmapconvert source destination\n"
+" startup|7110startup|6210startup\n"
+" gnokii --bitmapconvert source destination picture\n"
+" gnokii --showbitmap logofile\n"
+" gnokii --sendlogo op destination logofile network_code\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --sendlogo picture destination logofile text\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d] [--unicode]\n"
+" gnokii --sendlogo screensaver destination logofile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --sendlogo caller destination logofile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --savelogo op logofile network_code\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+" gnokii --savelogo picture logofile text\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name] [--unicode]\n"
+" gnokii --savelogo screensaver logofile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+" gnokii --savelogo caller logofile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+" gnokii --setlogo op|7110op [logofile] [network code]\n"
+" gnokii --setlogo startup|7110startup|6210startup [logofile]\n"
+" gnokii --setlogo startup 1|2|3\n"
+" gnokii --setlogo caller [logofile] [caller group number] [group name]\n"
+" gnokii --setlogo picture [logofile] [number] [text] [sender]\n"
+" gnokii --setlogo {dealer|text} [text]\n"
+" gnokii --getlogo op|7110op [logofile] [network code]\n"
+" gnokii --getlogo startup|7110startup|6210startup [logofile]\n"
+" gnokii --getlogo caller [logofile][caller group number]\n"
+" gnokii --getlogo picture [logofile][number]\n"
+" gnokii --getlogo {dealer|text}\n\n"
+
+" gnokii --sendringtone destination ringtonefile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d] [--scale] [--profilestyle]\n"
+" gnokii --saveringtone ringtonefile\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [--name name] [--scale] [--profilestyle]\n"
+" gnokii --setringtone ringtonefile [location]\n"
+" gnokii --getringtone ringtonefile [location]\n"
+" gnokii --ringtoneconvert source destination\n"
+" gnokii --binringtoneconvert source destination\n"
+" gnokii --playringtone ringtonefile\n"
+" gnokii --composer ringtonefile\n"
+" gnokii --allringtones\n\n"
+
+" gnokii --getprofile [number]\n"
+" gnokii --setprofile number feature value\n"
+" gnokii --sendprofile destination profile_name ringtonefile\n"
+" picturefile [--smsc message_center_number]\n"
+" [--smscno message_center_index] [-s] [-v n] [-d] [--scale]\n\n"
+
+" gnokii --reset [soft|hard]\n"
+" gnokii --dialvoice number\n"
+" gnokii --cancelcall\n"
+" gnokii --displayoutput\n"
+" gnokii --presskeysequence sequence\n"
+" gnokii --backupsettings file\n"
+" gnokii --restoresettings file\n"
+" gnokii --getphoneprofile\n"
+" gnokii --setphoneprofile feature value\n"
+" gnokii --getoperatorname\n"
+" gnokii --setoperatorname code name\n"
+" gnokii --senddtmf string\n"
+" gnokii --divert register|enable|query|disable|erasure\n"
+" all|busy|noans|outofreach all|voice|fax|data\n"
+" [number timeout]\n\n"
+
+" gnokii --phonetests\n"
+" gnokii --simlock\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --identify\n\n"
+
+" gnokii --getwapbookmark location\n"
+" gnokii --setwapbookmark title url [location]\n"
+" gnokii --sendwapbookmark location destination\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+" gnokii --savewapbookmark location\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+" gnokii --getwapsettings location\n"
+" gnokii --savewapsettings location\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-r] [-i] [-s] [-a] [-l] [--name name]\n"
+" gnokii --sendwapsettings location destination\n"
+" [--smsc message_center_number] [--smscno message_center_index]\n"
+" [-s] [-v n] [-d]\n"
+ ));
+
+#ifdef SECURITY
+ fprintf(stdout, _(
+"\n gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+" gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode\n"
+" gnokii --geteeprom\n"
+" gnokii --resetphonesettings\n"
+ ));
+#endif
+
+#ifdef DEBUG
+ fprintf(stdout, _(
+" gnokii --sniff [port]\n"
+" gnokii --decodefile file\n"
+ ));
+#endif
+
+ return 0;
+}
+
+/* fbusinit is the generic function which waits for the FBUS link. The limit
+ is 10 seconds. After 10 seconds we quit. */
+
+void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame))
+{
+
+ int count=0;
+ GSM_Error error;
+
+#ifndef WIN32
+ if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+ fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of gnokii (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+ /* Initialise the code for the GSM interface. */
+ error = GSM_Initialise(model, Port, Initlength, GetConnectionTypeFromString(Connection), rlp_handler, SynchronizeTime);
+
+ if (error != GE_NONE) {
+ fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+ exit(-1);
+ }
+
+ /* First (and important!) wait for GSM link to be active. We allow 10
+ seconds... */
+ while (count++ < 200 && *GSM_LinkOK == false)
+ usleep(50000);
+
+ if (*GSM_LinkOK == false) {
+ fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting.\n"));
+ exit(-1);
+ }
+}
+
+/* This function checks that the argument count for a given options is withing
+ an allowed range. */
+
+int checkargs(int opt, struct gnokii_arg_len gals[], int argc)
+{
+
+ int i;
+
+ /* Walk through the whole array with options requiring arguments. */
+
+ for(i = 0;!(gals[i].gal_min == 0 && gals[i].gal_max == 0); i++) {
+
+ /* Current option. */
+
+ if(gals[i].gal_opt == opt) {
+
+ /* Argument count checking. */
+
+ if(gals[i].gal_flags == GAL_XOR) {
+ if(gals[i].gal_min == argc || gals[i].gal_max == argc) return 0;
+ }
+ else {
+ if(gals[i].gal_min <= argc && gals[i].gal_max >= argc) return 0;
+ }
+
+ return 1;
+
+ }
+
+ }
+
+ /* We do not have options without arguments in the array, so check them. */
+
+ if (argc==0) return 0;
+ else return 1;
+}
+
+/* Main function - handles command line arguments, passes them to separate
+ functions accordingly. */
+
+int main(int argc, char *argv[])
+{
+
+ int c, i, rc = -1;
+ int nargc = argc-2;
+ char **nargv;
+
+ /* Every option should be in this array. */
+
+ static struct option long_options[] =
+ {
+
+ { "help", no_argument, NULL, OPT_HELP },// Display usage.
+ { "version", no_argument, NULL, OPT_VERSION },// Display version and build information.
+ { "getsmsfolders", no_argument, NULL, OPT_GETSMSFOLDERS },// Gets SMS folders
+ { "getsmsstatus", no_argument, NULL, OPT_GETSMSSTATUS },// Get SMS Folder Status
+ { "identify", no_argument, NULL, OPT_IDENTIFY },// Identify
+ { "pmon", no_argument, NULL, OPT_PMON },// For development purposes: run in passive monitoring mode
+ { "foogle", no_argument, NULL, OPT_FOOGLE },// For development purposes: insert you function calls here
+ { "getdatetime", no_argument, NULL, OPT_GETDATETIME },// Get date and time mode
+ { "getalarm", no_argument, NULL, OPT_GETALARM },// Get alarm
+ { "cancelcall", no_argument, NULL, OPT_CANCELCALL },// Cancel Call
+ { "getdisplaystatus", no_argument, NULL, OPT_GETDISPLAYSTATUS },// Get display status mode
+ { "allringtones", no_argument, NULL, OPT_ALLRINGTONES },/* Displays names of available ringtones */
+ { "displayoutput", no_argument, NULL, OPT_DISPLAYOUTPUT },/* Show texts from phone's display */
+ { "getphoneprofile", no_argument, NULL, OPT_GETPHONEPROFILE },/* Get/Set phone profile settings */
+ { "getoperatorname", no_argument, NULL, OPT_GETOPERATORNAME },/* Get downloaded operator name */
+ { "getvoicemailbox", no_argument, NULL, OPT_GETVOICEMAILBOX },/* Gets voice mailbox number */
+ { "phonetests", no_argument, NULL, OPT_PHONETESTS },
+ { "simlockinfo", no_argument, NULL, OPT_SIMLOCKINFO },
+ { "receivesms", no_argument, NULL, OPT_RECEIVESMS },
+ { "setoperatorname", optional_argument, NULL, OPT_SETOPERATORNAME },/* Set downloaded operator name */
+ { "setdatetime", optional_argument, NULL, OPT_SETDATETIME },// Set date and time
+ { "writephonebook", optional_argument, NULL, OPT_WRITEPHONEBOOK },// Write phonebook (memory) mode
+ { "reset", optional_argument, NULL, OPT_RESET },// Resets the phone
+ { "monitor", optional_argument, NULL, OPT_MONITOR },// Monitor mode
+ { "setlogo", optional_argument, NULL, OPT_SETLOGO },// Set logo
+ { "getprofile", optional_argument, NULL, OPT_GETPROFILE },// Show profile
+ { "setalarm", required_argument, NULL, OPT_SETALARM },// Set alarm
+ { "dialvoice", required_argument, NULL, OPT_DIALVOICE },// Voice call mode
+ { "getcalendarnote", required_argument, NULL, OPT_GETCALENDARNOTE },// Get calendar note mode
+ { "writecalendarnote", required_argument, NULL, OPT_WRITECALENDARNOTE},// Write calendar note mode
+ { "sendcalendarnote", required_argument, NULL, OPT_SENDCALENDARNOTE },
+ { "savecalendarnote", required_argument, NULL, OPT_SAVECALENDARNOTE },
+ { "sendphonebookentry", required_argument, NULL, OPT_SENDPHONEBOOKENTRY},
+ { "savephonebookentry", required_argument, NULL, OPT_SAVEPHONEBOOKENTRY},
+ { "deletecalendarnote", required_argument, NULL, OPT_DELCALENDARNOTE },// Delete calendar note mode
+ { "getmemory", required_argument, NULL, OPT_GETMEMORY },// Get memory mode
+ { "getspeeddial", required_argument, NULL, OPT_GETSPEEDDIAL },// Get speed dial mode
+ { "setspeeddial", required_argument, NULL, OPT_SETSPEEDDIAL },// Set speed dial mode
+ { "getsms", required_argument, NULL, OPT_GETSMS },// Get SMS message mode
+ { "deletesms", required_argument, NULL, OPT_DELETESMS },// Delete SMS message mode
+ { "sendsms", required_argument, NULL, OPT_SENDSMS },// Send SMS message mode
+ { "savesms", required_argument, NULL, OPT_SAVESMS },// Save SMS message mode
+ { "sendlogo", required_argument, NULL, OPT_SENDLOGO },// Send logo as SMS message mode
+ { "savelogo", required_argument, NULL, OPT_SAVELOGO },// Save logo on SIM
+ { "sendringtone", required_argument, NULL, OPT_SENDRINGTONE },// Send ringtone as SMS message
+ { "saveringtone", required_argument, NULL, OPT_SAVERINGTONE },// Saves ringtone on SIM
+ { "setringtone", required_argument, NULL, OPT_SETRINGTONE },// Set ringtone
+ { "getringtone", required_argument, NULL, OPT_GETRINGTONE },// Get bin/normal ringtone
+ { "presskeysequence", required_argument, NULL, OPT_PRESSKEYSEQUENCE },/* Presses keys in phone's display */
+ { "getsmsc", required_argument, NULL, OPT_GETSMSC },// Get SMS center number mode
+ { "renamesmsc", required_argument, NULL, OPT_RENAMESMSC },// Rename SMSC
+ { "netmonitor", required_argument, NULL, OPT_NETMONITOR },// NetMonitor mode
+ { "senddtmf", required_argument, NULL, OPT_SENDDTMF },// Send DTMF sequence
+ { "getlogo", required_argument, NULL, OPT_GETLOGO },// Get logo
+ { "setprofile", required_argument, NULL, OPT_SETPROFILE },// Set profile feature
+ { "sendprofile", required_argument, NULL, OPT_SENDPROFILE },// Send profile via SMS
+ { "setphoneprofile", required_argument, NULL, OPT_SETPHONEPROFILE },/* Get/Set phone profile settings */
+ { "restoresettings", required_argument, NULL, OPT_RESTORESETTINGS },//Restore various settings from one file
+ { "backupsettings", required_argument, NULL, OPT_BACKUPSETTINGS },//Backup various settings to one file
+ { "playringtone", required_argument, NULL, OPT_PLAYRINGTONE },/* Plays ringtones */
+ { "composer", required_argument, NULL, OPT_COMPOSER },/* Shows ringtone like in Nokia Composer */
+ { "ringtoneconvert", required_argument, NULL, OPT_RINGTONECONVERT },/* Convert ringtone files */
+ { "binringtoneconvert", required_argument, NULL, OPT_BINRINGTONECONVERT},/* Convert binary ringtone files */
+ { "bitmapconvert", required_argument, NULL, OPT_BITMAPCONVERT },/* Convert bitmap files */
+ { "showbitmap", required_argument, NULL, OPT_SHOWBITMAP },
+ { "nm_collect", required_argument, NULL, OPT_NM_COLLECT },// NetMonitor periodical data collection mode (newbiee)
+ { "netmonitordata", required_argument, NULL, OPT_NETMONITORDATA },// NetMonitor periodical data collection mode (advanced)
+ { "getwapbookmark", required_argument, NULL, OPT_GETWAPBOOKMARK },
+ { "setwapbookmark", required_argument, NULL, OPT_SETWAPBOOKMARK },
+ { "savewapbookmark", required_argument, NULL, OPT_SAVEWAPBOOKMARK },
+ { "savewapsettings", required_argument, NULL, OPT_SAVEWAPSETTINGS },
+ { "sendwapsettings", required_argument, NULL, OPT_SENDWAPSETTINGS },
+ { "sendwapbookmark", required_argument, NULL, OPT_SENDWAPBOOKMARK },
+ { "getwapsettings", required_argument, NULL, OPT_GETWAPSETTINGS },
+ { "divert", required_argument, NULL, OPT_DIVERT },
+
+#ifdef SECURITY
+ { "entersecuritycode", required_argument, NULL, OPT_ENTERSECURITYCODE },// Enter Security Code mode
+ { "getsecuritycode", required_argument, NULL, OPT_GETSECURITYCODE },// Get Security Code
+ { "getsecuritycodestatus",no_argument, NULL, OPT_GETSECURITYCODESTATUS},// Get Security Code status
+ { "geteeprom", no_argument, NULL, OPT_GETEEPROM },// Gets EEPROM
+ { "resetphonesettings", no_argument, NULL, OPT_RESETPHONESETTINGS },// Reset phone settings
+ { "setsimlock", no_argument, NULL, OPT_SETSIMLOCK },// Sets simlock
+#endif
+
+#ifdef DEBUG
+ { "sniff", optional_argument, NULL, OPT_SNIFFER },// Will show datas from port
+ { "decodefile", required_argument, NULL, OPT_DECODEFILE },//decode input file
+#endif
+
+ { 0, 0, 0, 0},
+ };
+
+ /* Every command which requires arguments should have an appropriate entry
+ in this array. */
+
+ struct gnokii_arg_len gals[] =
+ {
+
+ { OPT_MONITOR, 0, 1, 0 },
+
+#ifdef SECURITY
+ { OPT_ENTERSECURITYCODE, 1, 1, 0 },
+ { OPT_GETSECURITYCODE, 1, 1, 0 },
+#endif
+
+#ifdef DEBUG
+ { OPT_SNIFFER, 0, 1, 0 },
+ { OPT_DECODEFILE, 1, 1, 0 },
+#endif
+
+ { OPT_SETDATETIME, 0, 5, 0 },
+ { OPT_BACKUPSETTINGS, 1, 1, 0 },
+ { OPT_RESTORESETTINGS, 1, 1, 0 },
+ { OPT_SETALARM, 2, 2, 0 },
+ { OPT_DIALVOICE, 1, 1, 0 },
+ { OPT_GETCALENDARNOTE, 1, 3, 0 },
+ { OPT_WRITECALENDARNOTE, 2, 2, 0 },
+ { OPT_SAVECALENDARNOTE, 2, 9, 0 },
+ { OPT_SENDCALENDARNOTE, 3, 9, 0 },
+ { OPT_SAVEPHONEBOOKENTRY,2, 9, 0 },
+ { OPT_SENDPHONEBOOKENTRY,3, 9, 0 },
+ { OPT_DELCALENDARNOTE, 1, 1, 0 },
+ { OPT_GETMEMORY, 2, 4, 0 },
+ { OPT_GETSPEEDDIAL, 1, 1, 0 },
+ { OPT_SETSPEEDDIAL, 3, 3, 0 },
+ { OPT_GETSMS, 2, 5, 0 },
+ { OPT_DELETESMS, 2, 3, 0 },
+ { OPT_SENDSMS, 1,10, 0 },
+ { OPT_SAVESMS, 1,11, 0 },
+ { OPT_SENDLOGO, 3, 9, 0 },
+ { OPT_SAVELOGO, 2,10, 0 },
+ { OPT_SENDRINGTONE, 2, 7, 0 },
+ { OPT_SAVERINGTONE, 1, 9, 0 },
+ { OPT_GETSMSC, 1, 1, 0 },
+ { OPT_RENAMESMSC, 2, 2, 0 },
+ { OPT_NETMONITOR, 1, 1, 0 },
+ { OPT_SENDDTMF, 1, 1, 0 },
+ { OPT_SETLOGO, 1, 5, 0 },
+ { OPT_GETLOGO, 1, 4, 0 },
+ { OPT_SETRINGTONE, 1, 3, 0 },
+ { OPT_GETRINGTONE, 1, 2, 0 },
+ { OPT_PRESSKEYSEQUENCE, 1, 1, 0 },
+ { OPT_RESET, 0, 1, 0 },
+ { OPT_GETPROFILE, 0, 1, 0 },
+ { OPT_SETPROFILE, 3, 3, 0 },
+ { OPT_SENDPROFILE, 4,10, 0 },
+ { OPT_WRITEPHONEBOOK, 0, 1, 0 },
+ { OPT_PLAYRINGTONE, 1, 1, 0 },
+ { OPT_COMPOSER, 1, 1, 0 },
+ { OPT_RINGTONECONVERT, 2, 2, 0 },
+ { OPT_BINRINGTONECONVERT,2, 2, 0 },
+ { OPT_BITMAPCONVERT, 2, 4, 0 },
+ { OPT_SHOWBITMAP, 1, 1, 0 },
+ { OPT_SETOPERATORNAME, 0, 2, 0 },
+ { OPT_SETPHONEPROFILE, 2, 2, 0 },
+ { OPT_NM_COLLECT, 1, MAX_NM_COLLECT, 0 },
+ { OPT_NETMONITORDATA, 0,99, 0 },
+ { OPT_GETWAPBOOKMARK, 1, 1, 0 },
+ { OPT_SETWAPBOOKMARK, 2, 3, 0 },
+ { OPT_SAVEWAPBOOKMARK, 1, 9, 0 },
+ { OPT_SENDWAPBOOKMARK, 2, 9, 0 },
+ { OPT_GETWAPSETTINGS, 1, 1, 0 },
+ { OPT_SAVEWAPSETTINGS, 1, 9, 0 },
+ { OPT_SENDWAPSETTINGS, 2, 9, 0 },
+ { OPT_DIVERT, 3, 5, 0 },
+
+ { 0, 0, 0, 0 },
+ };
+
+ opterr = 0;
+
+ /* For GNU gettext */
+
+#ifdef USE_NLS
+#ifndef VC6
+ textdomain("gnokii");
+ setlocale(LC_ALL, "pl_PL"); //here is string for Polish localisation
+#else
+ setlocale(LC_ALL, ".852"); //Polish codepage for console, not "real" WIN CP
+#endif
+
+#endif
+
+ /* Read config file */
+ if (CFG_ReadConfig(&model, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,false) < 0) {
+ exit(-1);
+ }
+
+ /* Handle command line arguments. */
+
+ c = getopt_long(argc, argv, "", long_options, NULL);
+
+ if (c == -1) {
+
+ /* No argument given - we should display usage. */
+ usage();
+ exit(-1);
+ }
+
+ /* We have to build an array of the arguments which will be passed to the
+ functions. Please note that every text after the --command will be
+ passed as arguments. A syntax like gnokii --cmd1 args --cmd2 args will
+ not work as expected; instead args --cmd2 args is passed as a
+ parameter. */
+
+ if((nargv = malloc(sizeof(char *) * argc)) != NULL) {
+
+ for(i = 2; i < argc; i++)
+ nargv[i-2] = argv[i];
+
+ if(checkargs(c, gals, nargc)) {
+
+ free(nargv);
+
+ /* Wrong number of arguments - we should display usage. */
+ usage();
+ exit(-1);
+ }
+
+#ifndef VC6
+#if defined(__svr4__)
+ /* have to ignore SIGALARM */
+ sigignore(SIGALRM);
+#endif
+#endif
+
+ switch(c) {
+
+ // First, error conditions
+ case '?':
+ fprintf(stderr, _("Use '%s --help' for usage informations.\n"), argv[0]);
+ break;
+
+ // Then, options with no arguments
+ case OPT_HELP: rc = usage(); break;
+ case OPT_VERSION: rc = version(); break;
+ case OPT_MONITOR: rc = monitormode(nargc, nargv); break;
+ case OPT_GETSMSFOLDERS: rc = getsmsfolders(); break;
+ case OPT_GETDATETIME: rc = getdatetime(); break;
+ case OPT_GETALARM: rc = getalarm(); break;
+ case OPT_GETDISPLAYSTATUS: rc = getdisplaystatus(); break;
+ case OPT_PMON: rc = pmon(); break;
+ case OPT_WRITEPHONEBOOK: rc = writephonebook(nargc, nargv);break;
+
+#ifdef SECURITY
+ case OPT_ENTERSECURITYCODE: rc = entersecuritycode(optarg); break;
+ case OPT_GETSECURITYCODESTATUS: rc = getsecuritycodestatus(); break;
+ case OPT_GETSECURITYCODE: rc = getsecuritycode(optarg); break;
+ case OPT_GETEEPROM: rc = geteeprom(); break;
+ case OPT_RESETPHONESETTINGS: rc = resetphonesettings(); break;
+ case OPT_SETSIMLOCK: rc = setsimlock(); break;
+#endif
+
+#ifdef DEBUG
+ case OPT_SNIFFER: rc = sniff(nargc, nargv); break;
+ case OPT_DECODEFILE: rc = decodefile(nargc, nargv); break;
+#endif
+
+ // Now, options with arguments
+ case OPT_SETDATETIME: rc = setdatetime(nargc, nargv); break;
+ case OPT_SETALARM: rc = setalarm(nargv); break;
+ case OPT_DIALVOICE: rc = dialvoice(optarg); break;
+ case OPT_CANCELCALL: rc = cancelcall(); break;
+ case OPT_GETCALENDARNOTE: rc = getcalendarnote(nargc, nargv);break;
+ case OPT_DELCALENDARNOTE: rc = deletecalendarnote(optarg);break;
+ case OPT_SAVECALENDARNOTE: rc = savecalendarnote(nargc, nargv);break;
+ case OPT_SENDCALENDARNOTE: rc = sendcalendarnote(nargc, nargv);break;
+ case OPT_SAVEPHONEBOOKENTRY: rc = savephonebookentry(nargc, nargv);break;
+ case OPT_SENDPHONEBOOKENTRY: rc = sendphonebookentry(nargc, nargv);break;
+ case OPT_WRITECALENDARNOTE: rc = writecalendarnote(nargv); break;
+ case OPT_GETMEMORY: rc = getmemory(nargc, nargv); break;
+ case OPT_GETSPEEDDIAL: rc = getspeeddial(optarg); break;
+ case OPT_SETSPEEDDIAL: rc = setspeeddial(nargv); break;
+ case OPT_GETSMS: rc = getsms(argc, argv); break;
+ case OPT_GETSMSSTATUS: rc = getsmsstatus(argc, argv); break;
+ case OPT_DELETESMS: rc = deletesms(nargc, nargv); break;
+ case OPT_SENDSMS: rc = sendsms(nargc, nargv); break;
+ case OPT_SAVESMS: rc = savesms(nargc, nargv); break;
+ case OPT_DIVERT: rc = divert(nargc, nargv); break;
+ case OPT_SENDLOGO: rc = sendlogo(nargc, nargv); break;
+ case OPT_SAVELOGO: rc = savelogo(nargc, nargv); break;
+ case OPT_GETSMSC: rc = getsmsc(optarg); break;
+ case OPT_RENAMESMSC: rc = renamesmsc(nargc,nargv); break;
+ case OPT_NETMONITOR: rc = netmonitor(optarg); break;
+ case OPT_IDENTIFY: rc = identify(); break;
+ case OPT_SETLOGO: rc = setlogo(nargc, nargv); break;
+ case OPT_GETLOGO: rc = getlogo(nargc, nargv); break;
+ case OPT_RECEIVESMS: rc = receivesms(nargc, nargv); break;
+ case OPT_SETRINGTONE: rc = setringtone(nargc, nargv); break;
+ case OPT_GETRINGTONE: rc = getringtone(nargc, nargv); break;
+ case OPT_PRESSKEYSEQUENCE: rc = presskeysequence(nargv); break;
+ case OPT_SENDRINGTONE: rc = sendringtone(nargc, nargv);break;
+ case OPT_SAVERINGTONE: rc = saveringtone(nargc, nargv);break;
+ case OPT_GETPROFILE: rc = getprofile(nargc, nargv); break;
+ case OPT_SETPROFILE: rc = setprofile(nargc, nargv); break;
+ case OPT_SENDPROFILE: rc = sendprofile(nargc, nargv); break;
+ case OPT_DISPLAYOUTPUT: rc = displayoutput(); break;
+ case OPT_RESTORESETTINGS: rc = restoresettings(nargv); break;
+ case OPT_BACKUPSETTINGS: rc = backupsettings(nargv); break;
+ case OPT_RINGTONECONVERT: rc = ringtoneconvert(nargc, nargv);break;
+ case OPT_BINRINGTONECONVERT: rc = binringtoneconvert(nargc, nargv);break;
+ case OPT_BITMAPCONVERT: rc = bitmapconvert(nargc, nargv);break;
+ case OPT_SHOWBITMAP: rc = showbitmap(nargc, nargv); break;
+ case OPT_PLAYRINGTONE: rc = playringtone(nargc, nargv);break;
+ case OPT_COMPOSER: rc = composer(nargc, nargv); break;
+ case OPT_FOOGLE: rc = foogle(nargv); break;
+ case OPT_PHONETESTS: rc = phonetests(); break;
+ case OPT_SIMLOCKINFO: rc = simlockinfo(); break;
+ case OPT_SENDDTMF: rc = senddtmf(optarg); break;
+ case OPT_RESET: rc = reset(nargc,nargv); break;
+ case OPT_GETOPERATORNAME: rc = getoperatorname(); break;
+ case OPT_SETOPERATORNAME: rc = setoperatorname(nargc,nargv);break;
+ case OPT_GETWAPBOOKMARK: rc = getwapbookmark(nargc,nargv);break;
+ case OPT_SETWAPBOOKMARK: rc = setwapbookmark(nargc,nargv);break;
+ case OPT_SAVEWAPBOOKMARK: rc = savewapbookmark(nargc,nargv);break;
+ case OPT_SENDWAPBOOKMARK: rc = sendwapbookmark(nargc,nargv);break;
+ case OPT_GETWAPSETTINGS: rc = getwapsettings(nargc,nargv);break;
+ case OPT_SAVEWAPSETTINGS: rc = savewapsettings(nargc,nargv);break;
+ case OPT_SENDWAPSETTINGS: rc = sendwapsettings(nargc,nargv);break;
+ case OPT_ALLRINGTONES: rc = allringtones(); break;
+ case OPT_GETPHONEPROFILE: rc = getphoneprofile(); break;
+ case OPT_SETPHONEPROFILE: rc = setphoneprofile(nargc,nargv);break;
+ case OPT_GETVOICEMAILBOX: rc = getvoicemailbox(); break;
+ case OPT_NM_COLLECT: rc = nm_collect(nargc, nargv); break;
+ case OPT_NETMONITORDATA: rc = netmonitordata(nargc, nargv);break;
+
+ default: fprintf(stderr, _("Unknown option: %d\n"), c); break;
+
+ }
+
+ free(nargv);
+
+ return(rc);
+ }
+
+ fprintf(stderr, _("Wrong number of arguments\n"));
+
+ exit(-1);
+}
+
+/* Restores various phone settings from one file */
+int restoresettings(char *argv[])
+{
+ fprintf(stdout,_("Work in progress. Not usefull now. Sorry\n"));
+ return 0;
+}
+
+/* Backup various phone settings from one file */
+int backupsettings(char *argv[])
+{
+ GSM_PhonebookEntry PbkEntry;
+ GSM_Error error;
+ GSM_Backup Backup;
+ int i;
+
+ GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0};
+ GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0};
+
+ fbusinit(NULL);
+
+ fprintf(stderr,_("Backup phonebook from SIM..."));
+ Backup.SIMPhonebookUsed=0;
+ if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE) {//FIXME
+ Backup.SIMPhonebookSize=SIMMemoryStatus.Used+SIMMemoryStatus.Free;
+
+ PbkEntry.MemoryType=GMT_SM;
+
+ for (i=0;i<Backup.SIMPhonebookSize;i++)
+ {
+ if (SIMMemoryStatus.Used==Backup.SIMPhonebookUsed) break;
+
+ PbkEntry.Location=i;
+
+ error=GSM->GetMemoryLocation(&PbkEntry);
+ switch (error) {
+ case GE_NONE:
+ Backup.SIMPhonebook[Backup.SIMPhonebookUsed]=PbkEntry;
+ Backup.SIMPhonebookUsed++;
+ fprintf(stderr,_("."));
+ break;
+ default:
+ break;
+ }
+ }
+ fprintf(stderr,_("Done\n"));
+ } else fprintf(stderr,_("ERROR\n"));
+
+ fprintf(stderr,_("Backup phonebook from phone..."));
+ Backup.PhonePhonebookUsed=0;
+ if (GSM->GetMemoryStatus(&PhoneMemoryStatus) == GE_NONE) {
+ Backup.PhonePhonebookSize=PhoneMemoryStatus.Used+PhoneMemoryStatus.Free;
+
+ PbkEntry.MemoryType=GMT_ME;
+
+ for (i=0;i<Backup.PhonePhonebookSize;i++)
+ {
+ if (PhoneMemoryStatus.Used==Backup.PhonePhonebookUsed) break;
+
+ PbkEntry.Location=i;
+
+ error=GSM->GetMemoryLocation(&PbkEntry);
+ switch (error) {
+ case GE_NONE:
+ Backup.PhonePhonebook[Backup.PhonePhonebookUsed]=PbkEntry;
+ Backup.PhonePhonebookUsed++;
+ fprintf(stderr,_("."));
+ break;
+ default:
+ break;
+ }
+ }
+ fprintf(stderr,_("Done\n"));
+ } else fprintf(stderr,_("ERROR\n"));
+
+ if( GetModelFeature (FN_CALLERGROUPS)!=0) {
+ fprintf(stderr,_("Backup caller logos..."));
+ Backup.CallerAvailable=true;
+ for (i=0;i<5;i++) {
+ Backup.CallerGroups[i].number=i;
+ Backup.CallerGroups[i].type=GSM_CallerLogo;
+ if (GSM->GetBitmap(&Backup.CallerGroups[i])!=GE_NONE) return 1;
+ }
+ fprintf(stderr,_("Done\n"));
+ } else Backup.CallerAvailable=false;
+
+// fprintf(stderr,_("Backup speed dials..."));
+ Backup.SpeedAvailable=false;
+// for (i=0;i<8;i++) {
+// Backup.SpeedDials[i].Number=i+1;
+// if (GSM->GetSpeedDial(&Backup.SpeedDials[i])!=GE_NONE) return 1;
+// }
+// fprintf(stderr,_("Done\n"));
+
+ fprintf(stderr,_("Backup operator logo..."));
+ Backup.OperatorLogoAvailable=true;
+ Backup.OperatorLogo.type=GSM_7110OperatorLogo;
+ if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) {
+ Backup.OperatorLogoAvailable=true;
+ Backup.OperatorLogo.type=GSM_OperatorLogo;
+ if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) {
+ Backup.OperatorLogoAvailable=false;
+ fprintf(stderr,_("Error\n"));
+ } else fprintf(stderr,_("Done\n"));
+ } else fprintf(stderr,_("Done\n"));
+
+ Backup.StartupLogoAvailable=false;
+ if( GetModelFeature (FN_STARTUP)!=0) {
+ fprintf(stderr,_("Backup startup logo..."));
+ Backup.StartupLogoAvailable=true;
+ switch (GetModelFeature (FN_STARTUP)) {
+ case F_STA62: Backup.StartupLogo.type=GSM_6210StartupLogo;break;
+ case F_STA71: Backup.StartupLogo.type=GSM_7110StartupLogo;break;
+ default : Backup.StartupLogo.type=GSM_StartupLogo;break;
+ }
+ if (GSM->GetBitmap(&Backup.StartupLogo)!=GE_NONE) {
+ Backup.StartupLogoAvailable=false;
+ fprintf(stderr,_("Error\n"));
+ } else fprintf(stderr,_("Done\n"));
+ }
+
+ fprintf(stderr,_("Backup welcome note..."));
+ Backup.StartupText.type=GSM_WelcomeNoteText;
+ if (GSM->GetBitmap(&Backup.StartupText)!=GE_NONE) {
+ fprintf(stderr,_("Error\n"));
+ } else fprintf(stderr,_("Done\n"));
+
+ GSM->Terminate();
+
+ GSM_SaveBackupFile(argv[0], &Backup);
+
+ return 0;
+}
+
+/* Presses keys on phone's keyboard */
+
+int presskeysequence(char *argv[])
+{
+ int i,j;
+ int keycode;
+ char key;
+
+ sleep(1);
+
+ /* We need to make sure that the init is finished to avoid interrupted */
+ /* multiframe packets... */
+
+ fbusinit(NULL);
+
+ for (i=0;i<strlen(argv[0]);i++)
+ {
+ key=argv[0][i];
+ keycode=0;
+ j=0;
+
+ if (key!='w' && key!='W')
+ {
+ while (Keys[j].whatchar!=' ') {
+ if (Keys[j].whatchar==key) {
+ keycode=Keys[j].whatcode;
+ break;
+ }
+ j++;
+ }
+
+ if (keycode==0) {
+ fprintf(stderr,_("Unknown key: %c !\n"),key);
+ GSM->Terminate();
+ return -1;
+ }
+
+ if (GSM->PressKey(keycode,PRESSPHONEKEY)!=GE_NONE)
+ {
+ fprintf(stderr,_("Can't press key !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ if (GSM->PressKey(keycode,RELEASEPHONEKEY)!=GE_NONE)
+ {
+ fprintf(stderr,_("Can't release key !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ } else
+ {
+ sleep(2);
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Send SMS messages. */
+int sendsms(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ char message_buffer[GSM_MAX_CONCATENATED_SMS_LENGTH];
+ int input_len, chars_read,i,msgnum;
+
+ GSM_SMSMessageType SMSType=GST_SMS;
+ int SMSValidity= 4320; /* 4320 minutes == 72 hours */
+ bool SMSReply=false;
+ int SMSClass=-1,SMSCenter=1;
+ char SMSCNumber[100];
+ GSM_Coding_Type SMSCoding=GSM_Coding_Default;
+ GSM_UDH SMSUDHType=GSM_NoUDH;
+
+ struct option options[] = {
+ { "smscno", required_argument, NULL, '1'},
+ { "smsc", required_argument, NULL, '2'},
+ { "long", required_argument, NULL, '3'},
+ { "enablevoice", no_argument, NULL, '4'},
+ { "disablevoice", no_argument, NULL, '5'},
+ { "enableemail", no_argument, NULL, '6'},
+ { "disableemail", no_argument, NULL, '7'},
+ { "enablefax", no_argument, NULL, '8'},
+ { "disablefax", no_argument, NULL, '9'},
+ { "unicode", no_argument, NULL, '-'},
+ { "void", no_argument, NULL, '+'},
+ { "hang", no_argument, NULL, '('},
+ { "bug", no_argument, NULL, ')'},
+ { NULL, 0, NULL, 0}
+ };
+
+ input_len = GSM_MAX_SMS_LENGTH;
+
+ if (argc!=0) {
+
+ optarg = NULL;
+ optind = 0;
+
+ while ((i = getopt_long(argc, argv, "v:dsC:", options, NULL)) != -1) {
+ switch (i) {
+
+ case '1': /* SMSC number */
+ SMSCenter = 0;
+ strcpy(SMSCNumber,optarg);
+ break;
+
+ case '2': /* SMSC number index in phone memory */
+ SMSCenter = atoi(optarg);
+
+ if (SMSCenter < 1 || SMSCenter > 5) {
+ fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ break;
+
+ case '3': /* we send long message */
+ SMSUDHType=GSM_ConcatenatedMessages;
+ input_len = atoi(optarg);
+ if (input_len > GSM_MAX_CONCATENATED_SMS_LENGTH) {
+ fprintf(stderr, _("Input too long, max %i!\n"),GSM_MAX_CONCATENATED_SMS_LENGTH);
+ exit(-1);
+ }
+ break;
+
+ case '4': /* SMS enables voice indicator */
+ SMSUDHType=GSM_EnableVoice; break;
+
+ case '5': /* SMS disables voice indicator */
+ SMSUDHType=GSM_DisableVoice; break;
+
+ case '6': /* SMS enables email indicator */
+ SMSUDHType=GSM_EnableEmail; break;
+
+ case '7': /* SMS disables email indicator */
+ SMSUDHType=GSM_DisableEmail; break;
+
+ case '8': /* SMS enables fax indicator */
+ SMSUDHType=GSM_EnableFax; break;
+
+ case '9': /* SMS disables fax indicator */
+ SMSUDHType=GSM_DisableFax; break;
+
+ case '-': /* SMS coding type */
+ SMSCoding=GSM_Coding_Unicode; break;
+
+ case '+': /* SMS ghost */
+ SMSUDHType=GSM_VoidSMS; break;
+
+ case '(': /* SMS hanging phone, when saved to Outbox */
+ SMSUDHType=GSM_HangSMS; break;
+
+ case ')': /* SMS showed incorrectly in phone */
+ SMSUDHType=GSM_BugSMS; break;
+
+ case 'v': /* Set validaty of SMS */
+ SMSValidity = atoi(optarg); break;
+
+ case 'd': /* delivery report */
+ SMSType=GST_DR; break;
+
+ case 's': /* Set replying via the same SMSC */
+ SMSReply = true; break;
+
+ case 'C': /* class Message */
+
+ if (SMSUDHType!=GSM_NoUDH) {
+ fprintf(stderr, _("Can't specify SMS Class with --enablevoice, --disablevoice, --enableemail, --disableemail, --enablefax, --disablefax options !\n"));
+ return -1;
+ }
+
+ switch (*optarg) {
+ case '0': SMSClass = 0; break;
+ case '1': SMSClass = 1; break;
+ case '2': SMSClass = 2; break;
+ case '3': SMSClass = 3; break;
+ default:
+ fprintf(stderr, _("SMS Class (\"C\" option) can be 0, 1, 2 or 3 only !\n"));
+ return -1;
+ }
+ break;
+
+ default:
+ fprintf(stderr,_("Unknown option number %i\n"),argc);
+ return -1;
+ }
+ }
+ }
+
+ /* Get message text from stdin. */
+ chars_read = fread(message_buffer, 1, input_len, stdin);
+
+ if (chars_read == 0) {
+ fprintf(stderr, _("Couldn't read from stdin!\n"));
+ return -1;
+ }
+ if (chars_read > input_len) {
+ fprintf(stderr, _("Input too long!\n"));
+ return -1;
+ }
+
+ /* Null terminate. */
+ message_buffer[chars_read] = 0x00;
+
+ GSM_MakeMultiPartSMS2(&MultiSMS,message_buffer,chars_read,SMSUDHType,SMSCoding);
+ msgnum=MultiSMS.number;
+
+ switch (SMSUDHType) {
+ case GSM_NoUDH:
+ case GSM_BugSMS:
+ case GSM_VoidSMS:
+ case GSM_HangSMS:
+ case GSM_EnableVoice:
+ case GSM_DisableVoice:
+ case GSM_EnableFax:
+ case GSM_DisableFax:
+ case GSM_EnableEmail:
+ case GSM_DisableEmail:
+ fprintf(stdout,_("Warning: saving %i chars\n"),strlen(MultiSMS.SMS[0].MessageText));
+ msgnum=1;
+ break;
+ default:
+ break;
+ }
+
+ for (i=0;i<msgnum;i++) {
+ strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+ MultiSMS.SMS[i].Class=SMSClass;
+ MultiSMS.SMS[i].ReplyViaSameSMSC=SMSReply;
+ MultiSMS.SMS[i].Type=SMSType;
+ MultiSMS.SMS[i].Validity=SMSValidity;
+ }
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ MultiSMS.number=msgnum;
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, 0,0,NULL,false,false,false);
+
+ return 0;
+}
+
+int savesms(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ char message_buffer[GSM_MAX_CONCATENATED_SMS_LENGTH];
+ int input_len, chars_read,i,msgnum;
+
+ int SMSClass=-1,SMSCenter=1;
+ char SMSName[25+1];
+ char SMSCNumber[100];
+ GSM_Coding_Type SMSCoding=GSM_Coding_Default;
+ GSM_UDH SMSUDHType=GSM_NoUDH;
+ GSM_SMSMessageStatus SMSStatus;
+ int SMSFolder;
+ bool SMSReply=false;
+ int SMSLocation=0;
+ bool interactive=false;
+
+ struct option options[] = {
+ { "smscno", required_argument, NULL, '1'},
+ { "smsc", required_argument, NULL, '2'},
+ { "long", required_argument, NULL, '3'},
+ { "enablevoice", no_argument, NULL, '4'},
+ { "disablevoice", no_argument, NULL, '5'},
+ { "enableemail", no_argument, NULL, '6'},
+ { "disableemail", no_argument, NULL, '7'},
+ { "enablefax", no_argument, NULL, '8'},
+ { "disablefax", no_argument, NULL, '9'},
+ { "unicode", no_argument, NULL, '-'},
+ { "void", no_argument, NULL, '+'},
+ { "hang", no_argument, NULL, '('},
+ { "bug", no_argument, NULL, ')'},
+ { "smsname", required_argument, NULL, '/'},
+ { NULL, 0, NULL, 0}
+ };
+
+ SMSCNumber[0]=0;
+ SMSName[0]=0;
+ SMSStatus=GSS_NOTSENTREAD;
+ SMSFolder=GST_OUTBOX;
+
+ input_len = GSM_MAX_SMS_LENGTH;
+
+ if (argc!=0) {
+
+ optarg = NULL;
+ optind = 0;
+
+ while ((i = getopt_long(argc, argv, "risal:C:F:", options, NULL)) != -1) {
+ switch (i) {
+
+ case '1': /* SMSC number */
+ SMSCenter = 0;
+ strcpy(SMSCNumber,optarg);
+ break;
+
+ case '2': /* SMSC number index in phone memory */
+ SMSCenter = atoi(optarg);
+
+ if (SMSCenter < 1 || SMSCenter > 5) {
+ fprintf(stderr, _("Incorrect SMSC number with \"smscno\" option (can't be <1 and >5) !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ break;
+
+ case '3': /* we send long message */
+ SMSUDHType=GSM_ConcatenatedMessages;
+ input_len = atoi(optarg);
+ if (input_len > GSM_MAX_CONCATENATED_SMS_LENGTH) {
+ fprintf(stderr, _("Input too long, max %i!\n"),GSM_MAX_CONCATENATED_SMS_LENGTH);
+ exit(-1);
+ }
+ break;
+
+ case '4': /* SMS enables voice indicator */
+ SMSUDHType=GSM_EnableVoice; break;
+
+ case '5': /* SMS disables voice indicator */
+ SMSUDHType=GSM_DisableVoice; break;
+
+ case '6': /* SMS enables email indicator */
+ SMSUDHType=GSM_EnableEmail; break;
+
+ case '7': /* SMS disables email indicator */
+ SMSUDHType=GSM_DisableEmail; break;
+
+ case '8': /* SMS enables fax indicator */
+ SMSUDHType=GSM_EnableFax; break;
+
+ case '9': /* SMS disables fax indicator */
+ SMSUDHType=GSM_DisableFax; break;
+
+ case '-': /* SMS coding type */
+ SMSCoding=GSM_Coding_Unicode; break;
+
+ case '+': /* SMS ghost */
+ SMSUDHType=GSM_VoidSMS; break;
+
+ case '(': /* SMS hanging phone, when saved to Outbox */
+ SMSUDHType=GSM_HangSMS; break;
+
+ case ')': /* SMS showed incorrectly in phone */
+ SMSUDHType=GSM_BugSMS; break;
+
+ case 'r': /* mark as read */
+ SMSStatus = GSS_SENTREAD; break;
+
+ case 'i': /* Save into Inbox */
+ SMSFolder = GST_INBOX; break;
+
+ case 's': /* Set replying via the same SMSC */
+ SMSReply = true; break;
+
+ case 'a': /* Ask before overwriting */
+ interactive=true;break;
+
+ case 'l': /* Specify location */
+ SMSLocation = atoi(optarg); break;
+
+ case '/': /* Name */
+ strncpy(SMSName,optarg,25);break;
+
+ case 'C': /* class Message */
+
+ if (SMSUDHType!=GSM_NoUDH) {
+ fprintf(stderr, _("Can't specify SMS Class with --enablevoice, --disablevoice, --enableemail, --disableemail, --enablefax, --disablefax options !\n"));
+ return -1;
+ }
+
+ switch (*optarg) {
+ case '0': SMSClass = 0; break;
+ case '1': SMSClass = 1; break;
+ case '2': SMSClass = 2; break;
+ case '3': SMSClass = 3; break;
+ default:
+ fprintf(stderr, _("SMS Class (\"C\" option) can be 0, 1, 2 or 3 only !\n"));
+ return -1;
+ }
+ break;
+
+ case 'F': /* save into folder n */
+ SMSFolder = atoi(optarg);
+ break;
+
+ default:
+ fprintf(stderr,_("Unknown option number %i\n"),argc);
+ return -1;
+ }
+ }
+ }
+
+ /* Get message text from stdin. */
+ chars_read = fread(message_buffer, 1, input_len, stdin);
+
+ if (chars_read == 0) {
+ fprintf(stderr, _("Couldn't read from stdin!\n"));
+ return -1;
+ }
+ if (chars_read > input_len) {
+ fprintf(stderr, _("Input too long!\n"));
+ return -1;
+ }
+
+ /* Null terminate. */
+ message_buffer[chars_read] = 0x00;
+
+ GSM_MakeMultiPartSMS2(&MultiSMS,message_buffer,chars_read,SMSUDHType,SMSCoding);
+ msgnum=MultiSMS.number;
+
+ switch (SMSUDHType) {
+ case GSM_NoUDH:
+ case GSM_BugSMS:
+ case GSM_VoidSMS:
+ case GSM_HangSMS:
+ case GSM_EnableVoice:
+ case GSM_DisableVoice:
+ case GSM_EnableFax:
+ case GSM_DisableFax:
+ case GSM_EnableEmail:
+ case GSM_DisableEmail:
+ fprintf(stdout,_("Warning: saving %i chars\n"),strlen(MultiSMS.SMS[0].MessageText));
+ msgnum=1;
+ break;
+ default:
+ break;
+ }
+
+ for (i=0;i<msgnum;i++) {
+ MultiSMS.SMS[i].Destination[0]=0;
+ if (argc!=0) strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+ MultiSMS.SMS[i].Location=0;
+ MultiSMS.SMS[i].Class=SMSClass;
+ MultiSMS.SMS[i].MessageCenter.No=SMSCenter;
+ strcpy(MultiSMS.SMS[i].MessageCenter.Number,SMSCNumber);
+ MultiSMS.SMS[i].Status=SMSStatus;
+ strcpy(MultiSMS.SMS[i].Name,SMSName);
+ MultiSMS.SMS[i].folder=SMSFolder;
+ MultiSMS.SMS[i].ReplyViaSameSMSC=SMSReply;
+ }
+
+ MultiSMS.SMS[0].Location=SMSLocation;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ MultiSMS.number=msgnum;
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 0,0,NULL,interactive,false,false,false);
+
+ return 0;
+}
+
+/* Get SMSC number */
+
+int getsmsc(char *MessageCenterNumber)
+{
+
+ GSM_MessageCenter MessageCenter;
+
+ MessageCenter.No=atoi(MessageCenterNumber);
+
+ fbusinit(NULL);
+
+ if (GSM->GetSMSCenter(&MessageCenter) == GE_NONE) {
+
+ fprintf(stdout, _("%d. SMS center ("),MessageCenter.No);
+
+ if (!strcmp(MessageCenter.Name,""))
+ fprintf(stdout,_("Set %d"),MessageCenter.No);
+ else fprintf(stdout,_("%s"),MessageCenter.Name);
+
+ fprintf(stdout,_(") number is "));
+
+ if (!strcmp(MessageCenter.Number,"")) fprintf(stdout,_("not set\n"));
+ else fprintf(stdout,_("%s\n"),MessageCenter.Number);
+
+ fprintf(stdout,_("Default recipient number is "));
+
+ if (!strcmp(MessageCenter.DefaultRecipient,""))
+ fprintf(stdout,_("not set\n"));
+ else fprintf(stdout,_("%s\n"),MessageCenter.DefaultRecipient);
+
+ fprintf(stdout, _("Messages sent as "));
+
+ switch (MessageCenter.Format) {
+ case GSMF_Text :fprintf(stdout, _("Text"));break;
+ case GSMF_Paging:fprintf(stdout, _("Paging"));break;
+ case GSMF_Fax :fprintf(stdout, _("Fax"));break;
+ case GSMF_Email :
+ case GSMF_UCI :fprintf(stdout, _("Email"));break;
+ case GSMF_ERMES :fprintf(stdout, _("ERMES"));break;
+ case GSMF_X400 :fprintf(stdout, _("X.400"));break;
+ default :fprintf(stdout, _("Unknown"));
+ }
+
+ printf("\n");
+
+ fprintf(stdout, _("Message validity is "));
+
+ switch (MessageCenter.Validity) {
+ case GSMV_1_Hour :fprintf(stdout, _("1 hour"));break;
+ case GSMV_6_Hours :fprintf(stdout, _("6 hours"));break;
+ case GSMV_24_Hours:fprintf(stdout, _("24 hours"));break;
+ case GSMV_72_Hours:fprintf(stdout, _("72 hours"));break;
+ case GSMV_1_Week :fprintf(stdout, _("1 week"));break;
+ case GSMV_Max_Time:fprintf(stdout, _("Maximum time"));break;
+ default :fprintf(stdout, _("Unknown"));
+ }
+
+ fprintf(stdout, "\n");
+
+ }
+ else
+ fprintf(stdout, _("SMS center can not be found :-(\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Get SMS messages. */
+int getsms(int argc, char *argv[])
+{
+
+ GSM_SMSMessage message;
+ GSM_WAPBookmark bookmark;
+ char memory_type_string[20];
+ int start_message, end_message, count, mode = 1;
+ char filename[64];
+ GSM_Error error;
+ GSM_Bitmap bitmap;
+ GSM_Ringtone ringtone;
+ GSM_SMSFolders folders;
+
+ int confirm = -1, i;
+ char ans[8];
+
+ /* Handle command line args that set type, start and end locations. */
+ if (!GetMemoryTypeID(argv[2], &message.MemoryType))
+ {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[2]);
+ return (-1);
+ }
+ GetMemoryTypeString(memory_type_string, &message.MemoryType);
+
+ for (i=0;i<64;i++) filename[i]=0;
+
+ start_message = atoi(argv[3]);
+ if (argc > 4) {
+ int i;
+
+ /* [end] can be only argv[4] */
+ if (argv[4][0] == '-') {
+ end_message = start_message;
+ } else {
+ end_message = atoi(argv[4]);
+ }
+
+ /* parse all options (beginning with '-' */
+ while ((i = getopt(argc, argv, "f:")) != -1) {
+ switch (i) {
+ case 'f':
+ if (optarg) {
+#ifdef DEBUG
+ fprintf(stderr, _("Saving into file \"%s\"\n"), optarg);
+#endif /* DEBUG */
+ strncpy(filename, optarg, 64);
+ if (strlen(optarg) > 63) {
+ fprintf(stderr, _("Filename too long - will be truncated to 63 characters.\n"));
+ filename[63] = 0;
+ } else {
+ filename[strlen(optarg)] = 0;
+ }
+ } else {
+ usage();
+ exit(1);
+ }
+ break;
+ default:
+ usage();
+ exit(1);
+ }
+ }
+ } else {
+ end_message = start_message;
+ }
+
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ GSM->GetSMSFolders(&folders);
+
+
+ /* Now retrieve the requested entries. */
+
+ for (count = start_message; count <= end_message; count ++) {
+
+ message.Location = count;
+
+ error = GSM->GetSMSMessage(&message);
+
+ switch (error) {
+
+ case GE_NONE:
+
+ switch (message.Type) {
+
+ case GST_DR:
+
+ /* RTH FIXME: Test that out ! */
+ fprintf(stdout, _("%d. Delivery Report "), message.MessageNumber);
+ switch (message.Status)
+ {
+ case GSS_SENTREAD:
+ if (message.folder==0) //GST_INBOX
+ fprintf(stdout, _("(read)\n"));
+ else
+ fprintf(stdout, _("(sent)\n"));
+ break;
+ case GSS_NOTSENTREAD:
+ if (message.folder==0) //GST_INBOX
+ fprintf(stdout, _("(unread)\n"));
+ else
+ fprintf(stdout, _("(not sent)\n"));
+ break;
+ case GSS_UNKNOWN:
+ fprintf(stdout, _("(not known :-()\n"));
+ break;
+ case GSS_TEMPLATE:
+ fprintf(stdout, _("(template)\n"));
+ break;
+ default:
+ fprintf(stdout, _("(unknown: %d)\n"),message.Status);
+ break;
+ }
+
+ fprintf(stdout, _("Sending date/time : %s %02d/%02d/%02d %d:%02d:%02d "), \
+ DayOfWeek(message.Time.Year, message.Time.Month, message.Time.Day), \
+ message.Time.Day, message.Time.Month, message.Time.Year, \
+ message.Time.Hour, message.Time.Minute, message.Time.Second);
+
+ if (message.Time.Timezone) {
+ if (message.Time.Timezone > 0)
+ fprintf(stdout,_("+%02d00"), message.Time.Timezone);
+ else
+ fprintf(stdout,_("%02d00"), message.Time.Timezone);
+ }
+
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, _("Response date/time: %s %02d/%02d/%02d %d:%02d:%02d "), \
+ DayOfWeek(message.SMSCTime.Year, message.SMSCTime.Month, message.SMSCTime.Day), \
+ message.SMSCTime.Day, message.SMSCTime.Month, message.SMSCTime.Year, \
+ message.SMSCTime.Hour, message.SMSCTime.Minute, message.SMSCTime.Second);
+
+ if (message.SMSCTime.Timezone) {
+ if (message.SMSCTime.Timezone > 0)
+ fprintf(stdout,_("+%02d00"),message.SMSCTime.Timezone);
+ else
+ fprintf(stdout,_("%02d00"),message.SMSCTime.Timezone);
+ }
+
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, _("Receiver: %s Msg Center: %s\n"), message.Sender, message.MessageCenter.Number);
+ fprintf(stdout, _("Text: %s\n\n"), message.MessageText);
+
+ break;
+
+ case GST_SMS:
+ fprintf(stdout, _("%d. %s Message "), message.MessageNumber,
+ folders.Folder[message.folder].Name);
+
+ switch (message.Status)
+ {
+ case GSS_SENTREAD:
+ if (message.folder==0) //GST_INBOX
+ fprintf(stdout, _("(read)\n"));
+ else
+ fprintf(stdout, _("(sent)\n"));
+ break;
+ case GSS_NOTSENTREAD:
+ if (message.folder==0) //GST_INBOX
+ fprintf(stdout, _("(unread)\n"));
+ else
+ fprintf(stdout, _("(not sent)\n"));
+ break;
+ case GSS_UNKNOWN:
+ fprintf(stdout, _("(not known :-()\n"));
+ break;
+ case GSS_TEMPLATE:
+ fprintf(stdout, _("(template)\n"));
+ break;
+ default:
+ fprintf(stdout, _("(unknown: %d)\n"),message.Status);
+ break;
+ }
+
+ /* RTH FIXME: date for other status ok ? */
+ if (message.SMSData) {
+
+ fprintf(stdout, _("Date/time: %s %02d/%02d/%02d %d:%02d:%02d "), \
+ DayOfWeek(message.Time.Year, message.Time.Month, message.Time.Day), \
+ message.Time.Day, message.Time.Month, message.Time.Year, \
+ message.Time.Hour, message.Time.Minute, message.Time.Second);
+
+ if (message.Time.Timezone) {
+ if (message.Time.Timezone > 0)
+ fprintf(stdout,_("+%02d00"),message.Time.Timezone);
+ else
+ fprintf(stdout,_("%02d00"),message.Time.Timezone);
+ }
+
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, _("Msg Center: %s "), message.MessageCenter.Number);
+
+ if (message.ReplyViaSameSMSC)
+ fprintf(stdout, _("(centre set for reply) "));
+ }
+
+ if (strcmp(message.Sender,"")) {
+ if (message.folder==1) { //GST_OUTBOX
+ fprintf(stdout, _("Recipient: %s"),message.Sender);
+ } else {
+ fprintf(stdout, _("Sender: %s"),message.Sender);
+ }
+ }
+
+ if (strcmp(message.Sender,"") || message.folder==0)
+ fprintf(stdout, "\n");
+
+ switch (message.UDHType) {
+
+ case GSM_OpLogo:
+
+ /* put bitmap into bitmap structure */
+ switch (GSM_ReadBitmap(&message, &bitmap)) {
+ case GE_INVALIDIMAGESIZE:
+ fprintf(stdout,_("Image size not supported\n"));
+ break;
+ case GE_NONE:
+ fprintf(stdout, _("GSM operator logo for %s (%s) network.\n"), bitmap.netcode, GSM_GetNetworkName(bitmap.netcode));
+
+ GSM_PrintBitmap(&bitmap);
+
+ if (filename[0]!=0) {
+ GSM_SaveBitmapFileOnConsole(filename, &bitmap);
+ }
+
+ break;
+ default:
+ fprintf(stdout,_("Error reading image\n"));
+ break;
+ }
+
+#ifdef DEBUG
+ if (message.folder==0) { //GST_INBOX
+ if (!strcmp(message.Sender, "+998000005") &&
+ !strcmp(message.MessageCenter.Number, "+886935074443") &&
+ message.Time.Day==27 &&
+ message.Time.Month==7 &&
+ message.Time.Year==99 &&
+ message.Time.Hour==0 &&
+ message.Time.Minute==10 &&
+ message.Time.Second==48) fprintf(stdout, _("Saved by Logo Express\n"));
+
+ /* Is it changed in next versions ? Or what ? */
+ if (!strcmp(message.Sender, "+998000002") ||
+ !strcmp(message.Sender, "+998000003") ||
+ !strcmp(message.Sender, "+998000004")) fprintf(stdout, _("Saved by Operator Logo Uploader by Thomas Kessler\n"));
+ } else {
+ if (!strcmp(message.Sender, "+8861234567890") &&
+ !strcmp(message.MessageCenter.Number, "+886935074443")) fprintf(stdout, _("Saved by Logo Express\n"));
+ }
+ if (!strncmp(message.Sender, "OpLogo",6) &&
+ strlen(message.Sender)==11)
+ fprintf(stdout, _("Saved by gnokii\n"));
+#endif
+
+ break;
+
+ case GSM_WAPBookmarkUDH:
+
+ /* put bookmark into bookmark structure */
+ switch (GSM_ReadWAPBookmark(&message, &bookmark)) {
+ case GE_NONE:
+ fprintf(stdout, ("WAP Bookmark\n"));
+
+ fprintf(stdout,_("Address: \"%s\"\n"),bookmark.address);
+
+ if (bookmark.title[0]==0)
+ fprintf(stdout,_("Title: \"%s\"\n"),bookmark.address);
+ else
+ fprintf(stdout,_("Title: \"%s\"\n"),bookmark.title);
+
+ break;
+ default:
+ fprintf(stdout,_("Error reading WAP Bookmark\n"));
+ break;
+ }
+
+#ifdef DEBUG
+ if (!strcmp(message.Sender, "WAPBookmark"))
+ fprintf(stdout, _("Saved by gnokii\n"));
+#endif
+
+ break;
+
+ case GSM_CallerIDLogo:
+
+ /* put bitmap into bitmap structure */
+ switch (GSM_ReadBitmap(&message, &bitmap)) {
+ case GE_INVALIDIMAGESIZE:
+ fprintf(stdout,_("Image size not supported\n"));
+ break;
+ case GE_NONE:
+ fprintf(stdout, ("Caller Logo\n"));
+
+ GSM_PrintBitmap(&bitmap);
+
+ if (filename[0]!=0) {
+ GSM_SaveBitmapFileOnConsole(filename, &bitmap);
+ }
+
+ break;
+ default:
+ fprintf(stdout,_("Error reading image\n"));
+ break;
+ }
+
+#ifdef DEBUG
+ if (message.folder==0) { //GST_INBOX
+ if (!strcmp(message.Sender, "+998000005") &&
+ !strcmp(message.MessageCenter.Number, "+886935074443") &&
+ message.Time.Day==27 &&
+ message.Time.Month==7 &&
+ message.Time.Year==99 &&
+ message.Time.Hour==0 &&
+ message.Time.Minute==10 &&
+ message.Time.Second==48) fprintf(stdout, _("Saved by Logo Express\n"));
+ } else {
+ if (!strcmp(message.Sender, "+8861234567890") &&
+ !strcmp(message.MessageCenter.Number, "+886935074443")) fprintf(stdout, _("Saved by Logo Express\n"));
+ }
+ if (!strcmp(message.Sender, "GroupLogo"))
+ fprintf(stdout, _("Saved by gnokii\n"));
+#endif
+
+ break;
+
+ case GSM_ProfileUDH:
+ fprintf(stdout, ("Profile SMS, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+ break;
+
+ case GSM_WAPBookmarkUDHLong:
+ fprintf(stdout, ("WAP Bookmark, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+ break;
+
+ case GSM_WAPSettingsUDH:
+ fprintf(stdout, ("WAP Settings, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+ break;
+
+ case GSM_RingtoneUDH:
+
+ /* put ringtone into ringtone structure */
+ switch (GSM_ReadRingtone(&message, &ringtone)) {
+ case GE_NONE:
+
+ fprintf(stdout, ("Ringtone \"%s\"\n"),ringtone.name);
+
+ while (confirm < 0) {
+ fprintf(stderr, _("Do you want to play it ? (yes/no) "));
+ GetLine(stdin, ans, 7);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ if (!strcmp(ans, "no")) confirm = 0;
+ }
+
+ if (confirm==1) GSM_PlayRingtoneOnConsole(&ringtone);
+
+ if (filename[0]!=0) GSM_SaveRingtoneFileOnConsole(filename, &ringtone);
+
+ break;
+
+ default:
+ fprintf(stdout,_("Gnokii can't read this ringtone - there is probably error inside\n"));
+ break;
+ }
+
+ break;
+
+ case GSM_CalendarNoteUDH:
+ fprintf(stdout, ("Calendar note SMS, part %i/%i\n"),message.UDH[11],message.UDH[10]);
+ fprintf(stdout, _("Text:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_ConcatenatedMessages:
+ fprintf(stdout, _("Linked (%d/%d)\nText:\n%s\n\n"),message.UDH[5],message.UDH[4], message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_EnableVoice:
+ fprintf(stdout, _("Enables voice indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_DisableVoice:
+ fprintf(stdout, _("Disables voice indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_EnableFax:
+ fprintf(stdout, _("Enables fax indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_DisableFax:
+ fprintf(stdout, _("Disables fax indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_EnableEmail:
+ fprintf(stdout, _("Enables email indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_DisableEmail:
+ fprintf(stdout, _("Disables email indicator\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_VoidSMS:
+ fprintf(stdout, _("Void SMS\nText:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ break;
+
+ case GSM_NoUDH:
+ if (message.Coding!=GSM_Coding_8bit) {
+ fprintf(stdout, _("Text:\n%s\n\n"), message.MessageText);
+ if (filename[0]!=0 && mode != -1) mode = GSM_SaveTextFileOnConsole(filename, message.MessageText, mode);
+ } else {
+ fprintf(stdout, _("Message cannot be displayed here\n")); // like in phone :-)
+ }
+ break;
+
+ default: //GSM_UnknownUDH and other
+ fprintf(stderr, _("Unknown\n"));
+ }
+
+ break;
+
+ default:
+ fprintf(stdout,_("Unknown SMS type. Report it\n"));
+ break;
+ }
+
+ break;
+
+ case GE_NOTIMPLEMENTED:
+
+ fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+ GSM->Terminate();
+ return -1;
+
+ case GE_INVALIDSMSLOCATION:
+
+ fprintf(stderr, _("Invalid location: %s %d\n"), memory_type_string, count);
+
+ break;
+
+ case GE_EMPTYSMSLOCATION:
+
+ fprintf(stderr, _("SMS location %s %d empty.\n"), memory_type_string, count);
+
+ break;
+
+ case GE_NOACCESS:
+
+ fprintf(stderr, _("No access to %s memory.\n"), memory_type_string);
+
+ break;
+
+ default:
+
+ fprintf(stderr, _("GetSMS %s %d failed!(%d)\n\n"), memory_type_string, count, error);
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int getsmsstatus(int argc, char *argv[])
+{
+ GSM_SMSStatus SMSStatus;
+ GSM_SMSFolders folders;
+ GSM_Error error;
+ GSM_SMSMessage SMS;
+
+ int i,j;
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ error = GSM->GetSMSStatus(&SMSStatus);
+ if (error!=GE_NONE) return error;
+
+ fprintf(stdout, _("SMS Messages: UnRead %d, Number %d\n"),SMSStatus.UnRead, SMSStatus.Number);
+
+ error=GSM->GetSMSFolders(&folders);
+ if (error!=GE_NONE) return error;
+
+ /* For not 7110 compatible phones we have to read all SMS and prepare sms table */
+ if( GetModelFeature (FN_SMS)!=F_SMS71 )
+ {
+ i=1;j=0;
+ while (true) {
+ if (j==SMSStatus.Number) break;
+ SMS.Location=i;
+ if (GSM->GetSMSMessage(&SMS)==GE_NONE) {
+ SMSStatus.foldertable[j].smsnum=i;
+
+ /* We set such folders ID like in 7110 compatible phones */
+ if (SMS.Status==GSS_NOTSENTREAD && SMS.folder==0) //GST_INBOX
+ SMSStatus.foldertable[j].folder=0;
+ else {
+ switch (SMS.folder) {
+ case 0://GST_INBOX
+ SMSStatus.foldertable[j].folder=GST_7110_INBOX;
+ break;
+ case 1://GST_OUTBOX
+ SMSStatus.foldertable[j].folder=GST_7110_OUTBOX;
+ break;
+ }
+ }
+ j++;
+ }
+ i++;
+ }
+ }
+
+ printf("0.Unread : ");
+ for(j=0; j<SMSStatus.Number; j++)
+ {
+ if (SMSStatus.foldertable[j].folder == 0)
+ printf("%d ",SMSStatus.foldertable[j].smsnum);
+ }
+ printf("\n");
+
+ for (i=0;i<folders.number;i++) {
+ fprintf(stdout,_("%d.%-15s: "),i+1,folders.Folder[i].Name);
+ for(j=0; j<SMSStatus.Number; j++)
+ {
+ if ( SMSStatus.foldertable[j].folder / 8 == i+1)
+ printf("%d ",SMSStatus.foldertable[j].smsnum);
+ }
+ printf("\n");
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Delete SMS messages. */
+int deletesms(int argc, char *argv[])
+{
+
+ GSM_SMSMessage message;
+ char memory_type_string[20];
+ int start_message, end_message, count;
+ GSM_Error error;
+
+ /* Handle command line args that set type, start and end locations. */
+ if (!GetMemoryTypeID(argv[0], &message.MemoryType))
+ {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+ return (-1);
+ }
+ GetMemoryTypeString(memory_type_string, &message.MemoryType);
+
+ start_message = atoi (argv[1]);
+ if (argc > 2) end_message = atoi (argv[2]);
+ else end_message = start_message;
+
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ /* Now delete the requested entries. */
+
+ for (count = start_message; count <= end_message; count ++) {
+
+ message.Location = count;
+
+ error = GSM->DeleteSMSMessage(&message);
+
+ if (error == GE_NONE)
+ fprintf(stdout, _("Deleted SMS %s %d\n"), memory_type_string, count);
+ else {
+ if (error == GE_NOTIMPLEMENTED) {
+ fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+ GSM->Terminate();
+ return -1;
+ }
+ fprintf(stdout, _("DeleteSMS %s %d failed!(%d)\n\n"), memory_type_string, count, error);
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+static volatile bool bshutdown = false;
+
+/* SIGINT signal handler. */
+
+static void interrupted(int sig)
+{
+
+ signal(sig, SIG_IGN);
+ bshutdown = true;
+
+}
+
+#ifdef SECURITY
+
+/* In this mode we get the code from the keyboard and send it to the mobile
+ phone. */
+
+int entersecuritycode(char *type)
+{
+ GSM_Error test;
+ GSM_SecurityCode SecurityCode;
+
+ if (!strcmp(type,"PIN")) SecurityCode.Type=GSCT_Pin;
+ else if (!strcmp(type,"PUK")) SecurityCode.Type=GSCT_Puk;
+ else if (!strcmp(type,"PIN2"))SecurityCode.Type=GSCT_Pin2;
+ else if (!strcmp(type,"PUK2"))SecurityCode.Type=GSCT_Puk2;
+
+ // FIXME: Entering of SecurityCode does not work :-(
+ // else if (!strcmp(type,"SecurityCode"))
+ // SecurityCode.Type=GSCT_SecurityCode;
+
+ else {
+ fprintf(stdout, _("Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"));
+ return -1;
+ }
+
+#ifdef WIN32
+ printf("Enter your code: ");
+ gets(SecurityCode.Code);
+#else
+ strcpy(SecurityCode.Code,getpass(_("Enter your code: ")));
+#endif
+
+ fbusinit(NULL);
+
+ test = GSM->EnterSecurityCode(SecurityCode);
+ if (test==GE_NONE)
+ fprintf(stdout,_("Code OK !\n"));
+ else
+ fprintf(stderr,_("%s\n"),print_error(test));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int getsecuritycodestatus(void)
+{
+
+ int Status;
+
+ fbusinit(NULL);
+
+ if (GSM->GetSecurityCodeStatus(&Status) == GE_NONE) {
+
+ fprintf(stdout, _("Security code status: "));
+
+ switch(Status) {
+ case GSCT_SecurityCode:fprintf(stdout, _("waiting for Security Code.\n"));break;
+ case GSCT_Pin: fprintf(stdout, _("waiting for PIN.\n")); break;
+ case GSCT_Pin2: fprintf(stdout, _("waiting for PIN2.\n")); break;
+ case GSCT_Puk: fprintf(stdout, _("waiting for PUK.\n")); break;
+ case GSCT_Puk2: fprintf(stdout, _("waiting for PUK2.\n")); break;
+ case GSCT_None: fprintf(stdout, _("nothing to enter.\n")); break;
+ default: fprintf(stdout, _("Unknown!\n"));
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int getsecuritycode(char *type)
+{
+
+ GSM_SecurityCode SecurityCode;
+ GSM_Error error;
+
+ if (!strcmp(type,"PIN")) SecurityCode.Type=GSCT_Pin;
+ else if (!strcmp(type,"PUK")) SecurityCode.Type=GSCT_Puk;
+ else if (!strcmp(type,"PIN2")) SecurityCode.Type=GSCT_Pin2;
+ else if (!strcmp(type,"PUK2")) SecurityCode.Type=GSCT_Puk2;
+ else if (!strcmp(type,"SecurityCode"))SecurityCode.Type=GSCT_SecurityCode;
+ else {
+ fprintf(stdout, _("Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"));
+ return -1;
+ }
+
+ fbusinit(NULL);
+
+ error=GSM->GetSecurityCode(&SecurityCode);
+
+ switch (error) {
+ case GE_INVALIDSECURITYCODE:
+ fprintf(stdout, _("Error: getting "));
+ switch (SecurityCode.Type) {
+ case GSCT_SecurityCode:fprintf(stdout, _("security code"));break;
+ case GSCT_Pin :fprintf(stdout, _("PIN"));break;
+ case GSCT_Pin2:fprintf(stdout, _("PIN2"));break;
+ case GSCT_Puk :fprintf(stdout, _("PUK"));break;
+ case GSCT_Puk2:fprintf(stdout, _("PUK2"));break;
+ default:break;
+ }
+ fprintf(stdout, _(" not allowed\n"));
+ break;
+ case GE_NONE:
+ switch (SecurityCode.Type) {
+ case GSCT_SecurityCode:fprintf(stdout, _("Security code"));break;
+ case GSCT_Pin :fprintf(stdout, _("PIN"));break;
+ case GSCT_Pin2:fprintf(stdout, _("PIN2"));break;
+ case GSCT_Puk :fprintf(stdout, _("PUK"));break;
+ case GSCT_Puk2:fprintf(stdout, _("PUK2"));break;
+ default:break;
+ }
+ fprintf(stdout, _(" is %s\n"),SecurityCode.Code);
+ break;
+ default:
+ fprintf(stderr, _("%s\n"),print_error(error));
+ break;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+#endif
+
+/* Voice dialing mode. */
+
+int dialvoice(char *Number)
+{
+ fbusinit(NULL);
+
+ if (GSM->DialVoice(Number)!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Cancel a call */
+int cancelcall(void)
+{
+ fbusinit(NULL);
+
+ if (GSM->CancelCall()!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int savelogo(int argc, char *argv[])
+{
+ GSM_Bitmap bitmap;
+ GSM_NetworkInfo NetworkInfo;
+ GSM_MultiSMSMessage MultiSMS;
+
+ /* Operator logos will be saved with this number */
+ char oplogonumber[]={'O','p','L','o','g','o',
+ '0','0','0','0','0', /* MMC+MNC */
+ '\0'};
+ int i=0;
+
+ bool UnicodeText=false;
+
+ /* The first argument is the type of the logo. */
+ if (!strcmp(argv[0], "op")) {
+ fprintf(stdout, _("Saving operator logo.\n"));
+ } else if (!strcmp(argv[0], "caller")) {
+ fprintf(stdout, _("Saving caller line identification logo.\n"));
+ } else if (!strcmp(argv[0], "startup")) {
+ fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "7110startup")) {
+ fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "6210startup")) {
+ fprintf(stderr, _("It isn't possible to save startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "7110op")) {
+ fprintf(stderr, _("It isn't possible to save big operator logos!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "picture")) {
+ fprintf(stderr, _("Saving picture image.\n"));
+ } else if (!strcmp(argv[0], "screensaver")) {
+ fprintf(stderr, _("Saving screen saver.\n"));
+ } else {
+ fprintf(stderr, _("You should specify what kind of logo to save!\n"));
+ return (-1);
+ }
+
+ /* The second argument is the bitmap file. */
+ if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return -1;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ /* We check optional parameters from 2'rd */
+ optind = 2;
+
+ if (!strcmp(argv[0], "op")) {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+
+ /* The third argument, if present, is the Network code of the operator.
+ * Network code is in this format: "xxx yy" */
+ if (argc > 2) {
+ strcpy(bitmap.netcode, argv[2]);
+#ifdef DEBUG
+ fprintf(stdout, _("Operator code: %s\n"), argv[2]);
+#endif
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown")) {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ GSM->Terminate();
+ return -1;
+ }
+ optind++;
+ } else
+ {
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ }
+ bitmap.type=GSM_OperatorLogo;
+
+ /* Put bitmap into SMS structure */
+ GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,false);
+
+ oplogonumber[6]=bitmap.netcode[0];
+ oplogonumber[7]=bitmap.netcode[1];
+ oplogonumber[8]=bitmap.netcode[2];
+ oplogonumber[9]=bitmap.netcode[4];
+ oplogonumber[10]=bitmap.netcode[5];
+ for(i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,oplogonumber);
+ }
+ if (!strcmp(argv[0], "caller")) {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+
+ bitmap.type=GSM_CallerLogo;
+
+ /* Put bitmap into SMS structure */
+ GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,false);
+
+ for(i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,"GroupLogo");
+ }
+ if (!strcmp(argv[0], "screensaver")) {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+ bitmap.text[0]=0;
+
+ for(i=0;i<argc;i++)
+ if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+ /* Put bitmap into SMS structure */
+ GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,true,UnicodeText);
+
+ for(i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,"ScreenSaver");
+ }
+ if (!strcmp(argv[0], "picture")) {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+ for(i=0;i<argc;i++)
+ if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+ bitmap.text[0]=0;
+ if (argc>2) {
+ optind++;
+ if (strlen(argv[2])>121) {
+ fprintf(stdout,_("Sorry: length of text (parameter \"%s\") can be 121 chars or shorter only !\n"),argv[2]);
+ return -1;
+ }
+ strcpy(bitmap.text,argv[2]);
+ }
+
+ /* Put bitmap into SMS structure */
+ GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,false,UnicodeText);
+
+ for(i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,"Picture");
+ }
+
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,false,true,false,false);
+
+ return i;
+}
+
+/* The following function allows to send logos using SMS */
+int sendlogo(int argc, char *argv[])
+{
+ GSM_Bitmap bitmap;
+ GSM_NetworkInfo NetworkInfo;
+ GSM_MultiSMSMessage MultiSMS;
+
+ int i;
+
+ bool UnicodeText=false;
+ bool ScreenSaver=false;
+
+ /* The first argument is the type of the logo. */
+ if (!strcmp(argv[0], "op")) {
+ fprintf(stdout, _("Sending operator logo.\n"));
+ } else if (!strcmp(argv[0], "caller")) {
+ fprintf(stdout, _("Sending caller line identification logo.\n"));
+ } else if (!strcmp(argv[0], "picture")) {
+ fprintf(stdout, _("Sending picture image.\n"));
+ } else if (!strcmp(argv[0], "screensaver")) {
+ fprintf(stdout, _("Sending screen saver.\n"));
+ } else if (!strcmp(argv[0], "startup")) {
+ fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "7110startup")) {
+ fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "6210startup")) {
+ fprintf(stderr, _("It isn't possible to send startup logo!\n"));
+ return (-1);
+ } else if (!strcmp(argv[0], "7110op")) {
+ fprintf(stderr, _("It isn't possible to send big operator logos!\n"));
+ return (-1);
+ } else {
+ fprintf(stderr, _("You should specify what kind of logo to send!\n"));
+ return (-1);
+ }
+
+ /* The third argument is the bitmap file. */
+ if (GSM_ReadBitmapFileOnConsole(argv[2], &bitmap)!=GE_NONE) return -1;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ optind = 3;
+
+ if (!strcmp(argv[0], "op")) {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+
+ /* The third argument, if present, is the Network code of the operator.
+ * Network code is in this format: "xxx yy" */
+ if (argc > 3) {
+ strcpy(bitmap.netcode, argv[3]);
+#ifdef DEBUG
+ fprintf(stdout, _("Operator code: %s\n"), argv[3]);
+#endif
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown")) {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ GSM->Terminate();
+ return -1;
+ }
+ optind++;
+ } else
+ {
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ }
+ bitmap.type=GSM_OperatorLogo;
+ }
+ if (!strcmp(argv[0], "caller")) {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+
+ bitmap.type=GSM_CallerLogo;
+ }
+ if (!strcmp(argv[0], "screensaver")) {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+ bitmap.text[0]=0;
+
+ for(i=0;i<argc;i++)
+ if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+ ScreenSaver=true;
+ }
+ if (!strcmp(argv[0], "picture")) {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+ for(i=0;i<argc;i++)
+ if (!strcmp(argv[i],"--unicode")) UnicodeText=true;
+
+ bitmap.text[0]=0;
+ if (argc>3) {
+ optind++;
+ if (strlen(argv[3])>121) {
+ fprintf(stdout,_("Sorry: length of text (parameter \"%s\") can be 121 chars or shorter only !\n"),argv[3]);
+ return -1;
+ }
+ strcpy(bitmap.text,argv[3]);
+ }
+ }
+
+ /* Put bitmap into SMS structure */
+ GSM_SaveBitmapToSMS(&MultiSMS,&bitmap,ScreenSaver,UnicodeText);
+
+ /* The second argument is the destination, ie the phone number of recipient. */
+ for(i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,argv[1]);
+
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,true,false,false);
+
+ return i;
+}
+
+/* Getting logos. */
+
+int getlogo(int argc, char *argv[])
+{
+ GSM_Bitmap bitmap;
+ GSM_Error error;
+ int num;
+
+ bitmap.type=GSM_None;
+
+ if (!strcmp(argv[0],"7110op"))
+ bitmap.type=GSM_7110OperatorLogo;
+
+ if (!strcmp(argv[0],"op"))
+ bitmap.type=GSM_OperatorLogo;
+
+ if (!strcmp(argv[0],"caller")) {
+ /* There is caller group number missing in argument list. */
+ if (argc==3) {
+ num=argv[2][0]-'0';
+ if ((num<1)||(num>9)) num=1;
+ bitmap.number=num;
+ } else
+ {
+ bitmap.number=1;
+ }
+ bitmap.number--;
+ bitmap.type=GSM_CallerLogo;
+ }
+
+ if (!strcmp(argv[0],"picture")) {
+ /* There is a number missing in argument list. */
+ if (argc==3) {
+ if (strlen(argv[2])==2) {
+ num=(argv[2][0]-'0')*10+(argv[2][1]-'0');
+ } else {
+ num=argv[2][0]-'0';
+ }
+ if (num<1) num=1;
+ bitmap.number=num;
+ } else
+ {
+ bitmap.number=1;
+ }
+ bitmap.number--;
+ bitmap.type=GSM_PictureImage;
+ }
+
+ if (!strcmp(argv[0],"startup"))
+ bitmap.type=GSM_StartupLogo;
+
+ if (!strcmp(argv[0],"7110startup"))
+ bitmap.type=GSM_7110StartupLogo;
+
+ if (!strcmp(argv[0],"6210startup"))
+ bitmap.type=GSM_6210StartupLogo;
+
+ if (!strcmp(argv[0],"dealer"))
+ bitmap.type=GSM_DealerNoteText;
+
+ if (!strcmp(argv[0],"text"))
+ bitmap.type=GSM_WelcomeNoteText;
+
+ if (bitmap.type!=GSM_None) {
+
+ fbusinit(NULL);
+
+ fprintf(stdout, _("Getting Logo\n"));
+
+ error=GSM->GetBitmap(&bitmap);
+
+ GSM->Terminate();
+
+ switch (error)
+ {
+ case GE_NONE:
+ if (bitmap.type==GSM_DealerNoteText) fprintf(stdout, _("Dealer welcome note "));
+ if (bitmap.type==GSM_WelcomeNoteText) fprintf(stdout, _("Welcome note "));
+ if (bitmap.type==GSM_DealerNoteText || bitmap.type==GSM_WelcomeNoteText)
+ {
+ if (bitmap.text[0]!=0)
+ {
+ fprintf(stdout, _("currently set to \"%s\"\n"), bitmap.text);
+ } else {
+ fprintf(stdout, _("currently empty\n"));
+ }
+ } else
+ {
+ if (bitmap.width!=0)
+ {
+ if (bitmap.type==GSM_OperatorLogo || bitmap.type==GSM_7110OperatorLogo)
+ {
+ fprintf(stdout,"Operator logo for %s (%s) network got succesfully\n",bitmap.netcode,GSM_GetNetworkName(bitmap.netcode));
+ }
+ if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_7110StartupLogo || bitmap.type==GSM_6210StartupLogo)
+ {
+ fprintf(stdout,"Startup logo got successfully\n");
+ }
+ if (bitmap.type==GSM_CallerLogo)
+ {
+ fprintf(stdout,"Caller logo got successfully\n");
+ }
+ if (bitmap.type==GSM_PictureImage)
+ {
+ fprintf(stdout,"Picture Image got successfully");
+ if (strcmp(bitmap.text,""))
+ fprintf(stdout,_(", text \"%s\""),bitmap.text);
+ if (strcmp(bitmap.Sender,""))
+ fprintf(stdout,_(", sender \"%s\""),bitmap.Sender);
+ fprintf(stdout,"\n");
+ }
+ if (argc>1)
+ {
+ if (GSM_SaveBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return(-1);
+ }
+ } else
+ {
+ fprintf(stdout,"Your phone doesn't have logo uploaded !\n");
+ return -1;
+ }
+ }
+ break;
+ case GE_NOTIMPLEMENTED:
+ fprintf(stderr, _("Function not implemented !\n"));
+ return -1;
+ case GE_NOTSUPPORTED:
+ fprintf(stderr, _("This kind of logo is not supported !\n"));
+ return -1;
+ default:
+ fprintf(stderr, _("Error getting logo (wrong location ?) !\n"));
+ return -1;
+ }
+ } else
+ {
+ fprintf(stderr, _("What kind of logo do you want to get ?\n"));
+ return -1;
+ }
+
+ return 0;
+}
+
+/* Setting logos. */
+
+int setlogo(int argc, char *argv[])
+{
+
+ GSM_Bitmap bitmap,oldbit;
+ GSM_NetworkInfo NetworkInfo;
+ GSM_Error error;
+ char model[64];
+ int num;
+
+ bool ok=true;
+
+ int i;
+
+ fbusinit(NULL);
+
+ if (!strcmp(argv[0],"text") || !strcmp(argv[0],"dealer"))
+ {
+ if (!strcmp(argv[0],"text")) bitmap.type=GSM_WelcomeNoteText;
+ else bitmap.type=GSM_DealerNoteText;
+ bitmap.text[0]=0x00;
+ if (argc>1) strncpy(bitmap.text,argv[1],255);
+ } else
+ {
+ if (!strcmp(argv[0],"op") || !strcmp(argv[0],"startup") || !strcmp(argv[0],"caller") ||
+ !strcmp(argv[0],"7110op") || !strcmp(argv[0],"6210startup") || !strcmp(argv[0],"7110startup") ||
+ !strcmp(argv[0],"picture"))
+ {
+ if (argc>1)
+ {
+ if (!strcmp(argv[0],"startup"))
+ {
+ bitmap.type=GSM_StartupLogo;
+ bitmap.width=84;
+ bitmap.height=48;
+ bitmap.size=bitmap.width*bitmap.height/8;
+ num=argv[1][0]-'0';
+ if (num>=1 && num<=3) {
+ bitmap.number=num;
+ } else {
+ if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) {
+ GSM->Terminate();
+ return(-1);
+ }
+ bitmap.number=0;
+ GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+ }
+ } else {
+ if (GSM_ReadBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) {
+ GSM->Terminate();
+ return(-1);
+ }
+ }
+ if (!strcmp(argv[0],"op"))
+ {
+ if (bitmap.type!=GSM_OperatorLogo || argc<3)
+ {
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ }
+ GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+ if (argc==3)
+ {
+ strncpy(bitmap.netcode,argv[2],7);
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+ {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ return -1;
+ }
+ }
+ }
+ if (!strcmp(argv[0],"7110op"))
+ {
+ if (bitmap.type!=GSM_7110OperatorLogo || argc<3)
+ {
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ }
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+ if (argc==3)
+ {
+ strncpy(bitmap.netcode,argv[2],7);
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+ {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ return -1;
+ }
+ }
+ }
+ if (!strcmp(argv[0],"picture"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+ bitmap.number=1;
+ if (argc>2)
+ {
+ if (strlen(argv[2])==2) {
+ num=(argv[2][0]-'0')*10+(argv[2][1]-'0');
+ } else {
+ num=argv[2][0]-'0';
+ }
+ if (num<1) num=1;
+ bitmap.number=num;
+ }
+ bitmap.number--;
+ bitmap.text[0]=0;
+ if (argc>3)
+ strncpy(bitmap.text,argv[3],121);
+ strcpy(bitmap.Sender,"\0");
+ if (argc>4)
+ strncpy(bitmap.Sender,argv[4],GSM_MAX_SENDER_LENGTH);
+ }
+ if (!strcmp(argv[0],"7110startup"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+ }
+ if (!strcmp(argv[0],"6210startup"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+ }
+ if (!strcmp(argv[0],"caller"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+ if (argc>2)
+ {
+ num=argv[2][0]-'0';
+ if ((num<0)||(num>9)) num=0;
+ bitmap.number=num;
+ } else
+ {
+ bitmap.number=0;
+ }
+ oldbit.type=GSM_CallerLogo;
+ oldbit.number=bitmap.number;
+ if (GSM->GetBitmap(&oldbit)==GE_NONE)
+ {
+ /* We have to get the old name and ringtone!! */
+ bitmap.ringtone=oldbit.ringtone;
+ strncpy(bitmap.text,oldbit.text,255);
+ }
+ if (argc>3) strncpy(bitmap.text,argv[3],255);
+ }
+ fprintf(stdout, _("Setting Logo.\n"));
+ } else
+ {
+ /* FIX ME: is it possible to permanently remove op logo ? */
+ if (!strcmp(argv[0],"op"))
+ {
+ bitmap.type=GSM_OperatorLogo;
+ strncpy(bitmap.netcode,"000 00",7);
+ bitmap.width=72;
+ bitmap.height=14;
+ bitmap.size=bitmap.width*bitmap.height/8;
+ GSM_ClearBitmap(&bitmap);
+ }
+ if (!strcmp(argv[0],"7110op"))
+ {
+ bitmap.type=GSM_7110OperatorLogo;
+ strncpy(bitmap.netcode,"000 00",7);
+ bitmap.width=78;
+ bitmap.height=21;
+ bitmap.size=(bitmap.width*bitmap.height + 7)/8;
+ GSM_ClearBitmap(&bitmap);
+ }
+ /* FIX ME: how to remove startup and group logos ? */
+ fprintf(stdout, _("Removing Logo.\n"));
+ }
+ } else
+ {
+ fprintf(stderr, _("What kind of logo do you want to set ?\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ }
+
+ while (GSM->GetModel(model) != GE_NONE)
+ sleep(1);
+
+ /* For Nokia 6110/6130/6150 we use different method of uploading.
+ Phone will display menu, when received it */
+ if (!strcmp(model,"NSE-3") || !strcmp(model,"NSK-3") || !strcmp(model,"NSM-1"))
+ {
+ if (!strcmp(argv[0],"caller") && argc<3)
+ bitmap.number=255;
+ if (!strcmp(argv[0],"op") && argc<3)
+ bitmap.number=255;
+ }
+
+ error=GSM->SetBitmap(&bitmap);
+
+ switch (error)
+ {
+ case GE_NONE: oldbit.type=bitmap.type;
+ oldbit.number=bitmap.number;
+ if (GSM->GetBitmap(&oldbit)==GE_NONE) {
+ if (bitmap.type==GSM_WelcomeNoteText ||
+ bitmap.type==GSM_DealerNoteText) {
+ if (strcmp(bitmap.text,oldbit.text)) {
+ fprintf(stderr, _("Error setting"));
+ if (bitmap.type==GSM_DealerNoteText) fprintf(stderr, _(" dealer"));
+ fprintf(stderr, _(" welcome note - "));
+
+ /* I know, it looks horrible, but... */
+ /* I set it to the short string - if it won't be set */
+ /* it means, PIN is required. If it will be correct, previous */
+ /* (user) text was too long */
+
+ /* Without it, I could have such thing: */
+ /* user set text to very short string (for example, "Marcin") */
+ /* then enable phone without PIN and try to set it to the very long (too long for phone) */
+ /* string (which start with "Marcin"). If we compare them as only length different, we could think, */
+ /* that phone accepts strings 6 chars length only (length of "Marcin") */
+ /* When we make it correct, we don't have this mistake */
+
+ strcpy(oldbit.text,"!\0");
+ GSM->SetBitmap(&oldbit);
+ GSM->GetBitmap(&oldbit);
+ if (oldbit.text[0]!='!') {
+ fprintf(stderr, _("SIM card and PIN is required\n"));
+ } else {
+ GSM->SetBitmap(&bitmap);
+ GSM->GetBitmap(&oldbit);
+ fprintf(stderr, _("too long, truncated to \"%s\" (length %i)\n"),oldbit.text,strlen(oldbit.text));
+ }
+ ok=false;
+ }
+ } else {
+ if (bitmap.type==GSM_StartupLogo) {
+ for (i=0;i<oldbit.size;i++) {
+ if (oldbit.bitmap[i]!=bitmap.bitmap[i]) {
+ fprintf(stderr, _("Error setting startup logo - SIM card and PIN is required\n"));
+ ok=false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (ok) fprintf(stdout, _("Done.\n"));
+ break;
+ case GE_NOTIMPLEMENTED:fprintf(stderr, _("Function not implemented.\n"));
+ break;
+ case GE_NOTSUPPORTED:fprintf(stderr, _("This kind of logo is not supported.\n"));
+ break;
+ default:fprintf(stderr, _("Error (wrong location ?) !\n"));
+ break;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Calendar notes receiving. */
+
+int getcalendarnote(int argc, char *argv[])
+{
+ GSM_CalendarNote CalendarNote;
+ GSM_NotesInfo NotesInfo;
+ GSM_Error error;
+ int i;
+ int vCalVer=0;
+ bool vInfo=false;
+ int start, stop;
+ bool was_note=false;
+ char z_text[MAX_CALENDAR_TEXT_LENGTH+11];
+
+ /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+ char model[64];
+
+ struct tm *now;
+ time_t nowh;
+ GSM_DateTime Date;
+
+ nowh=time(NULL);
+ now=localtime(&nowh);
+
+ Date.Year = now->tm_year;
+
+ /* I have 100 (for 2000) Year now :-) */
+ if (Date.Year>99 && Date.Year<1900) {
+ Date.Year=Date.Year+1900;
+ }
+
+ start=atoi(argv[0]);
+ stop=start;
+
+ switch (argc) {
+ case 2:
+ if (!strcmp(argv[argc-1],"-v10")) {
+ vCalVer=10;
+ } else {
+ if (!strcmp(argv[argc-1],"-v30")) {
+ vCalVer=30;
+ } else {
+ stop=atoi(argv[1]);
+ }
+ }
+ break;
+ case 3:
+ stop=atoi(argv[1]);
+ if (!strcmp(argv[argc-1],"-v10")) {
+ vCalVer=10;
+ } else {
+ if (!strcmp(argv[argc-1],"-v30")) {
+ vCalVer=30;
+ } else {
+ usage();
+ return -1;
+ }
+ }
+ break;
+ }
+
+ fbusinit(NULL);
+
+ while (GSM->GetModel(model) != GE_NONE)
+ sleep(1);
+
+ if (!strcmp(argv[0],"-s") || !strcmp(argv[0],"--short"))
+ vInfo=true;
+ else if (!isdigit(argv[0][0])) {
+ usage();
+ return -1;
+ }
+
+ error=GSM->GetCalendarNotesInfo(&NotesInfo);
+ if ( error == GE_NONE ) {
+ if( NotesInfo.HowMany == 0 ) {
+ fprintf(stderr, _("Sorry! No Calendar Notes present on phone.\n"));
+ start=0; stop=(-1); /* This for skipping next 'for' loop ;-> */
+ }
+#ifdef DEBUG
+ fprintf(stdout, _(" CALENDAR NOTES INFO \n"));
+ fprintf(stdout, _("---------------------\n"));
+ fprintf(stdout, _("How Many Locations :%d\n"), NotesInfo.HowMany);
+
+ /* For 6210 (NPE-3) and 7110 (NSE-5), Locations have a different behaviour */
+ if ( GetModelFeature (FN_CALENDAR)==F_CAL71 ) {
+ fprintf(stdout, _("Locations are :\n"));
+ for(i=0;i<NotesInfo.HowMany;i++)
+ fprintf(stdout, _("%4d) %4d\n"), i+1, NotesInfo.Location[i]);
+ }
+#endif
+ } else {
+ /* For 6210 (NPE-3) and 7110 (NSE-5), Locations have a different behaviour */
+ if ( GetModelFeature (FN_CALENDAR)==F_CAL71 ) {
+ fprintf(stderr, _("Can't read Notes Infos from phone.\n"));
+ start=0; stop=(-1); /* This for skipping next 'for' loop ;-> */
+ }
+ }
+
+ if (GetModelFeature (FN_CALENDAR)!=F_CAL71) {
+ error=GE_NONE;
+ NotesInfo.HowMany=200;
+ for (i=0;i<200;i++) {
+ NotesInfo.Location[i]=i+1;
+ }
+ }
+
+ if( vInfo && stop!=(-1) && error==GE_NONE )
+ {
+ /* Info datas (for 7110 and comp.) */
+ fprintf(stdout, _(" CALENDAR NOTES SUMMARY INFORMATION \n"));
+ fprintf(stdout, _(" ==================================\n"));
+ if (GetModelFeature (FN_CALENDAR)==F_CAL71) {
+ fprintf(stdout, _("Calendar notes present on phone: %d\n"), NotesInfo.HowMany);
+ fprintf(stdout, _("Locations are :\n"));
+ }
+ fprintf(stdout, "----------------------------------------------------------------------------\n");
+ fprintf(stdout,_(" Loc Phys Type Summary description Dt start Alarm Recurs\n") );
+ fprintf(stdout, "----------------------------------------------------------------------------\n");
+
+ for(i=0;i<NotesInfo.HowMany;i++)
+ {
+ /* very short format ... */
+ /*
+ fprintf(stdout, _("%4d) %4d\n"), i, NotesInfo.Location[i]);
+ */
+ CalendarNote.Location=i+1;
+ CalendarNote.ReadNotesInfo=false;
+
+ if (GSM->GetCalendarNote(&CalendarNote) == GE_NONE) {
+ char z_type[11];
+ char z_recur[15];
+ switch (CalendarNote.Type) {
+ case GCN_REMINDER:strcpy(z_type, "REMIND"); break;
+ case GCN_CALL: strcpy(z_type, "CALL"); break;
+ case GCN_MEETING: strcpy(z_type, "MEETING"); break;
+ case GCN_BIRTHDAY:strcpy(z_type, "BDAY"); break;
+ default: strcpy(z_type, "UNKNOWN"); break;
+ }
+
+ if( CalendarNote.Recurrance ) {
+ sprintf( z_recur,"%d ", CalendarNote.Recurrance/24 );
+ strcat( z_recur, CalendarNote.Recurrance == 1 ? "day" : "days" );
+ }
+ else
+ strcpy( z_recur, "No" );
+
+ strcpy(z_text,"");
+
+ if( CalendarNote.Type == GCN_CALL )
+ sprintf(z_text, "\"%s\"", CalendarNote.Phone );
+
+ if (CalendarNote.Text[0]!=0)
+ sprintf(z_text, "\"%s\"", CalendarNote.Text );
+
+ if(CalendarNote.Type == GCN_BIRTHDAY) {
+ int i_age;
+ i_age = Date.Year - CalendarNote.Time.Year;
+ sprintf(z_text, "\"%s (%d %s)\"", CalendarNote.Text,
+ i_age, (i_age==1)?"year":"years");
+ strcpy( z_recur, "-" );
+ if (GetModelFeature (FN_CALENDAR)==F_CAL71)
+ fprintf(stdout,
+ _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d %s %s\n"),
+ i+1,NotesInfo.Location[i], z_type, z_text,
+ CalendarNote.Time.Year,
+ CalendarNote.Time.Month,
+ CalendarNote.Time.Day,
+ (CalendarNote.AlarmType==0x00) ? "Tone " : "Silent",
+ " " );
+ else
+ fprintf(stdout,
+ _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d %s %s\n"),
+ i+1,NotesInfo.Location[i], z_type, z_text,
+ CalendarNote.Time.Year,
+ CalendarNote.Time.Month,
+ CalendarNote.Time.Day,
+ (CalendarNote.Alarm.Year) ? "Yes" : "No ",
+ " " );
+ } else
+ if (GetModelFeature (FN_CALENDAR)==F_CAL71)
+ fprintf(stdout,
+ _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d %s %s\n"),
+ i+1,NotesInfo.Location[i], z_type, z_text,
+ CalendarNote.Time.Year,
+ CalendarNote.Time.Month,
+ CalendarNote.Time.Day,
+ (CalendarNote.Alarm.Year) ? "Yes" : "No ",
+ z_recur );
+ else
+ fprintf(stdout,
+ _("%4d %4d %-7.7s %-32.32s %04d-%02d-%02d %s\n"),
+ i+1,NotesInfo.Location[i], z_type, z_text,
+ CalendarNote.Time.Year,
+ CalendarNote.Time.Month,
+ CalendarNote.Time.Day,
+ (CalendarNote.Alarm.Year) ? "Yes" : "No ");
+ } else {
+ if (GetModelFeature (FN_CALENDAR)!=F_CAL71) break;
+ }
+ }
+ }
+ else
+ for (i=start;i<=stop;i++) {
+ if (error==GE_NONE) {
+ if( i>NotesInfo.HowMany ) {
+ fprintf(stderr, _("Only %d Calendar Notes present on phone!\n"),NotesInfo.HowMany);
+ break;
+ }
+ if( i==0 ) {
+ fprintf(stderr, _("Calendar Notes location can't be zero... skipping.\n"));
+ continue;
+ }
+ }
+
+ CalendarNote.Location=i;
+ CalendarNote.ReadNotesInfo=false;
+
+ if (GSM->GetCalendarNote(&CalendarNote) == GE_NONE) {
+
+ if (vCalVer!=0) {
+ if (!was_note) {
+ fprintf(stdout, GSM_GetVCALENDARStart(vCalVer));
+ was_note=true;
+ }
+
+ fprintf(stdout, GSM_GetVCALENDARNote(&CalendarNote,vCalVer));
+
+ } else { /* not vCal */
+
+ if (was_note) {
+ fprintf(stdout, "\n");
+ } else {
+ was_note=true;
+ }
+
+ fprintf(stdout, _(" Type of the note: "));
+
+ switch (CalendarNote.Type) {
+
+ case GCN_REMINDER:fprintf(stdout, _("Reminder\n"));break;
+ case GCN_CALL :fprintf(stdout, _("Call\n")); break;
+ case GCN_MEETING :fprintf(stdout, _("Meeting\n")); break;
+ case GCN_BIRTHDAY:fprintf(stdout, _("Birthday\n"));break;
+ default: fprintf(stdout, _("Unknown\n"));
+
+ }
+
+ /* For 3310: set date to 2090! */
+ if (GetModelFeature (FN_CALENDAR)==F_CAL33) {
+ fprintf(stdout, _(" Date: xxxx-%02d-%02d\n"), CalendarNote.Time.Month,
+ CalendarNote.Time.Day);
+ } else {
+ fprintf(stdout, _(" Date: %s %d-%02d-%02d\n"),
+ DayOfWeek(CalendarNote.Time.Year, CalendarNote.Time.Month, CalendarNote.Time.Day),
+ CalendarNote.Time.Year,
+ CalendarNote.Time.Month,
+ CalendarNote.Time.Day);
+ }
+
+ fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CalendarNote.Time.Hour,
+ CalendarNote.Time.Minute,
+ CalendarNote.Time.Second);
+
+ if (CalendarNote.Alarm.Year!=0) {
+ fprintf(stdout, _(" Alarm date: %s %d-%02d-%02d\n"),
+ DayOfWeek(CalendarNote.Alarm.Year, CalendarNote.Alarm.Month, CalendarNote.Alarm.Day),
+ CalendarNote.Alarm.Year,
+ CalendarNote.Alarm.Month,
+ CalendarNote.Alarm.Day);
+
+ fprintf(stdout, _(" Alarm time: %02d:%02d:%02d\n"), CalendarNote.Alarm.Hour,
+ CalendarNote.Alarm.Minute,
+ CalendarNote.Alarm.Second);
+ if ( GetModelFeature (FN_CALENDAR)==F_CAL71 )
+ fprintf(stdout, _(" Alarm type: %s\n"), (CalendarNote.AlarmType==0x00) ?
+ "With Tone" : "Silent" );
+ }
+
+ if ( GetModelFeature (FN_CALENDAR)==F_CAL71 && CalendarNote.Recurrance!= 0 )
+ fprintf(stdout, " It repeat every %d day%s\n", CalendarNote.Recurrance/24,
+ ((CalendarNote.Recurrance/24)>1) ? "s":"" );
+
+ if (CalendarNote.Type == GCN_BIRTHDAY)
+ {
+ int i_age;
+ i_age = Date.Year - CalendarNote.Time.Year;
+ fprintf(stdout, _(" Text: %s (%d %s)\n"), CalendarNote.Text,
+ i_age, (i_age==1)?"year":"years");
+ } else {
+ if (CalendarNote.Text[0]!=0)
+ fprintf(stdout, _(" Text: %s\n"), CalendarNote.Text);
+ }
+
+ if (CalendarNote.Type == GCN_CALL)
+ fprintf(stdout, _(" Phone: %s\n"), CalendarNote.Phone);
+ }
+ } else {
+ fprintf(stderr, _("The calendar note %i can not be read\n"),i);
+ }
+ }
+
+ if (was_note && vCalVer!=0) {
+ fprintf(stdout, GSM_GetVCALENDAREnd(vCalVer));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Writing calendar notes. */
+
+int writecalendarnote(char *argv[])
+{
+ GSM_CalendarNote CalendarNote;
+ GSM_Error error;
+ int number;
+
+ number=atoi(argv[1]);
+
+ if (number<1) {
+ fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+ return -1;
+ }
+
+ switch ( GSM_ReadVCalendarFile(argv[0], &CalendarNote, &number) ) {
+ case GE_NONE:
+ break;
+ case GE_CANTOPENFILE:
+ fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[0]);
+ return -1;
+ case GE_TOOSHORT:
+ fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+ return(-1);
+ default:
+ fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[0]);
+ return -1;
+ }
+
+ fbusinit(NULL);
+
+ /* Error 22=Calendar full ;-) */
+
+ error=GSM->WriteCalendarNote(&CalendarNote);
+ switch (error) {
+ case GE_NONE:
+ fprintf(stdout, _("Succesfully written!\n"));break;
+ case GE_TOOLONG:
+ fprintf(stdout, _("Too long text in calendar note!\n"));break;
+ default:
+ fprintf(stdout, _("Failed to write calendar note!\n"));break;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Calendar note deleting. */
+
+int deletecalendarnote(char *Index)
+{
+
+ GSM_CalendarNote CalendarNote;
+
+ CalendarNote.Location=atoi(Index);
+
+ fbusinit(NULL);
+
+ if (GSM->DeleteCalendarNote(&CalendarNote) == GE_NONE) {
+ fprintf(stdout, _(" Calendar note deleted.\n"));
+ }
+ else {
+ fprintf(stderr, _("The calendar note can not be deleted\n"));
+
+ GSM->Terminate();
+ return -1;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Setting the date and time. */
+
+int setdatetime(int argc, char *argv[])
+{
+ struct tm *now;
+ time_t nowh;
+ GSM_DateTime Date;
+
+ fbusinit(NULL);
+
+ nowh=time(NULL);
+ now=localtime(&nowh);
+
+ Date.Year = now->tm_year;
+ Date.Month = now->tm_mon+1;
+ Date.Day = now->tm_mday;
+ Date.Hour = now->tm_hour;
+ Date.Minute = now->tm_min;
+ Date.Second = now->tm_sec;
+
+ if (argc>0) Date.Year = atoi (argv[0]);
+ if (argc>1) Date.Month = atoi (argv[1]);
+ if (argc>2) Date.Day = atoi (argv[2]);
+ if (argc>3) Date.Hour = atoi (argv[3]);
+ if (argc>4) Date.Minute = atoi (argv[4]);
+
+ if (Date.Year<1900)
+ {
+
+ /* Well, this thing is copyrighted in U.S. This technique is known as
+ Windowing and you can read something about it in LinuxWeekly News:
+ http://lwn.net/1999/features/Windowing.phtml. This thing is beeing
+ written in Czech republic and Poland where algorithms are not allowed
+ to be patented. */
+
+ if (Date.Year>90)
+ Date.Year = Date.Year+1900;
+ else
+ Date.Year = Date.Year+2000;
+ }
+
+ /* FIXME: Error checking should be here. */
+ GSM->SetDateTime(&Date);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* In this mode we receive the date and time from mobile phone. */
+
+int getdatetime(void) {
+
+ GSM_DateTime date_time;
+
+ fbusinit(NULL);
+
+ if (GSM->GetDateTime(&date_time)==GE_NONE) {
+ if (date_time.IsSet) {
+ fprintf(stdout, _("Date: %s %4d/%02d/%02d\n"),
+ DayOfWeek(date_time.Year, date_time.Month, date_time.Day),
+ date_time.Year, date_time.Month, date_time.Day);
+ fprintf(stdout, _("Time: %02d:%02d:%02d\n"), date_time.Hour, date_time.Minute, date_time.Second);
+ } else {
+ fprintf(stdout, _("Date and time not set in phone\n"));
+ }
+ } else {
+ fprintf(stdout,_("Error!\n"));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Setting the alarm. */
+
+int setalarm(char *argv[])
+{
+
+ GSM_DateTime Date;
+
+ fbusinit(NULL);
+
+ Date.Hour = atoi(argv[0]);
+ Date.Minute = atoi(argv[1]);
+
+ GSM->SetAlarm(1, &Date);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Getting the alarm. */
+
+int getalarm(void) {
+
+ GSM_DateTime date_time;
+
+ fbusinit(NULL);
+
+ if (GSM->GetAlarm(0, &date_time)==GE_NONE) {
+ fprintf(stdout, _("Alarm: %s\n"), (date_time.IsSet)?"on":"off");
+ fprintf(stdout, _("Time: %02d:%02d\n"), date_time.Hour, date_time.Minute);
+ } else {
+ fprintf(stdout,_("Error!\n"));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* In monitor mode we don't do much, we just initialise the fbus code.
+ Note that the fbus code no longer has an internal monitor mode switch,
+ instead compile with DEBUG enabled to get all the gumpf. */
+
+int monitormode(int argc, char *argv[])
+{
+
+ float rflevel=-1, batterylevel=-1;
+ unsigned char loop=1;
+
+ GSM_PowerSource powersource=-1;
+ GSM_RFUnits rf_units = GRF_Arbitrary;
+ GSM_BatteryUnits batt_units = GBU_Arbitrary;
+
+ GSM_NetworkInfo NetworkInfo;
+ GSM_CBMessage CBMessage;
+
+ GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0};
+ GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0};
+ GSM_MemoryStatus DC_MemoryStatus = {GMT_DC, 0, 0};
+ GSM_MemoryStatus EN_MemoryStatus = {GMT_EN, 0, 0};
+ GSM_MemoryStatus FD_MemoryStatus = {GMT_FD, 0, 0};
+ GSM_MemoryStatus LD_MemoryStatus = {GMT_LD, 0, 0};
+ GSM_MemoryStatus MC_MemoryStatus = {GMT_MC, 0, 0};
+ GSM_MemoryStatus ON_MemoryStatus = {GMT_ON, 0, 0};
+ GSM_MemoryStatus RC_MemoryStatus = {GMT_RC, 0, 0};
+
+ GSM_SMSStatus SMSStatus = {0, 0};
+
+ char Number[20];
+
+ /* evaluate for presence of "-noloop" argument in parameter */
+ if(argc>0)
+ {
+ if( strcmp(argv[0],"-noloop" ) && strcmp(argv[0],"-nl" ))
+ {
+ usage();
+ return -1;
+ }
+ else
+ loop=0;
+ }
+
+ /* We do not want to monitor serial line forever - press Ctrl+C to stop the
+ monitoring mode. */
+
+ signal(SIGINT, interrupted);
+
+ fprintf (stderr, _("Entering monitor mode...\n"));
+ fprintf (stderr, _("Initialising GSM interface...\n"));
+
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ sleep(1);
+ GSM->EnableCellBroadcast();
+
+ /* Loop here indefinitely - allows you to see messages from GSM code in
+ response to unknown messages etc. The loops ends after pressing the
+ Ctrl+C. */
+ while (!bshutdown) {
+ if (GSM->GetRFLevel(&rf_units, &rflevel) == GE_NONE)
+ fprintf(stdout, _("RFLevel: %d\n"), (int)rflevel);
+
+ if (GSM->GetBatteryLevel(&batt_units, &batterylevel) == GE_NONE)
+ fprintf(stdout, _("Battery: %d\n"), (int)batterylevel);
+
+ if (GSM->GetPowerSource(&powersource) == GE_NONE)
+ fprintf(stdout, _("Power Source: %s\n"), (powersource==GPS_ACDC)?_("AC/DC"):_("battery"));
+
+ if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE)
+ fprintf(stdout, _("SIM: Used %d, Free %d\n"), SIMMemoryStatus.Used, SIMMemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&PhoneMemoryStatus) == GE_NONE)
+ fprintf(stdout, _("Phone: Used %d, Free %d\n"), PhoneMemoryStatus.Used, PhoneMemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&DC_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("DC: Used %d, Free %d\n"), DC_MemoryStatus.Used, DC_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&EN_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("EN: Used %d, Free %d\n"), EN_MemoryStatus.Used, EN_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&FD_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("FD: Used %d, Free %d\n"), FD_MemoryStatus.Used, FD_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&LD_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("LD: Used %d, Free %d\n"), LD_MemoryStatus.Used, LD_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&MC_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("MC: Used %d, Free %d\n"), MC_MemoryStatus.Used, MC_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&ON_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("ON: Used %d, Free %d\n"), ON_MemoryStatus.Used, ON_MemoryStatus.Free);
+
+ if (GSM->GetMemoryStatus(&RC_MemoryStatus) == GE_NONE)
+ fprintf(stdout, _("RC: Used %d, Free %d\n"), RC_MemoryStatus.Used, RC_MemoryStatus.Free);
+
+ if (GSM->GetSMSStatus(&SMSStatus) == GE_NONE)
+ fprintf(stdout, _("SMS Messages: UnRead %d, Number %d\n"), SMSStatus.UnRead, SMSStatus.Number);
+
+ if (GSM->GetIncomingCallNr(Number) == GE_NONE)
+ fprintf(stdout, _("Incoming call: %s\n"), Number);
+
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE)
+ fprintf(stdout, _("Network: %s (%s), LAC: %s, CellID: %s\n"), GSM_GetNetworkName (NetworkInfo.NetworkCode), GSM_GetCountryName(NetworkInfo.NetworkCode), NetworkInfo.LAC, NetworkInfo.CellID);
+
+ if (GSM->ReadCellBroadcast(&CBMessage) == GE_NONE)
+ fprintf(stdout, _("Cell broadcast received on channel %d: %s\n"), CBMessage.Channel, CBMessage.Message);
+
+ if( !loop ) break;
+
+ sleep(1);
+ }
+
+ if( loop ) fprintf (stderr, _("Leaving monitor mode...\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Shows texts from phone's display */
+
+int displayoutput()
+{
+
+ GSM_Error error;
+
+ fbusinit(NULL);
+
+ error=GSM->EnableDisplayOutput();
+
+ if (error == GE_NONE)
+ {
+
+ /* We do not want to see texts forever - press Ctrl+C to stop. */
+
+ signal(SIGINT, interrupted);
+
+ fprintf (stderr, _("Entering display monitoring mode...\n"));
+
+ /* Loop here indefinitely - allows you to read texts from phone's
+ display. The loops ends after pressing the Ctrl+C. */
+
+ while (!bshutdown)
+ sleep(1);
+
+ fprintf (stderr, _("Leaving display monitor mode...\n"));
+
+ error=GSM->DisableDisplayOutput();
+ if (error!=GE_NONE)
+ fprintf (stderr, _("Error!\n"));
+ } else
+ fprintf (stderr, _("Error!\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Displays names of available ringtones */
+int allringtones()
+{
+ char model[64], rev[64];
+ int i;
+
+ fbusinit(NULL);
+
+ while (GSM->GetRevision(rev) != GE_NONE)
+ sleep(1);
+
+ while (GSM->GetModel(model) != GE_NONE)
+ sleep(1);
+
+ strncpy(rev,rev+2,5);
+ rev[5]=0;
+ PrepareRingingTones(model,rev);
+
+ for (i=1;i<=NumberOfRingtones();i++)
+ {
+ fprintf(stdout,_("%i. %s\n"),i,RingingToneName(0,i));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+/* Reads profile from phone and displays its' settings */
+
+int getprofile(int argc, char *argv[])
+{
+
+ int max_profiles;
+ int start, stop, i;
+ GSM_Profile profile;
+ GSM_Error error;
+
+ /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+ char model[64], rev[64];
+
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ profile.Number = 0;
+ error=GSM->GetProfile(&profile);
+
+ if (error == GE_NONE)
+ {
+
+ while (GSM->GetModel(model) != GE_NONE) sleep(1);
+
+ while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+
+ strncpy(rev,rev+2,5);
+ rev[5]=0;
+ PrepareRingingTones(model,rev);
+
+ switch(GetModelFeature (FN_PROFILES)) {
+ case F_PROF33:max_profiles=6;break;
+ case F_PROF51:max_profiles=3;break;
+ default :max_profiles=7;break;
+ }
+
+ if (argc>0)
+ {
+ profile.Number=atoi(argv[0])-1;
+ start=profile.Number;
+ stop=start+1;
+
+ if (profile.Number < 0)
+ {
+ fprintf(stderr, _("Profile number must be value from 1 to %d!\n"), max_profiles);
+ GSM->Terminate();
+ return -1;
+ }
+
+ if (profile.Number >= max_profiles)
+ {
+ fprintf(stderr, _("This phone supports only %d profiles!\n"), max_profiles);
+ GSM->Terminate();
+ return -1;
+ }
+ } else {
+ start=0;
+ stop=max_profiles;
+ }
+
+ i=start;
+ while (i<stop)
+ {
+ profile.Number=i;
+
+ if (profile.Number!=0) GSM->GetProfile(&profile);
+
+ printf("%d. \"%s\"", (profile.Number+1), profile.Name);
+ if (profile.DefaultName==-1) printf(" (name defined)");
+ printf("\n");
+
+#ifdef DEBUG
+ printf("Incoming call alert: %d\n", profile.CallAlert);
+ printf("Ringtone ID: %d\n", profile.Ringtone);
+ printf("Ringing volume: %d\n", profile.Volume);
+ printf("Message alert tone: %d\n", profile.MessageTone);
+ printf("Keypad tones: %d\n", profile.KeypadTone);
+ printf("Warning and game tones: %d\n", profile.WarningTone);
+ printf("Lights: %d\n", profile.Lights);
+ printf("Vibration: %d\n", profile.Vibration);
+ printf("Caller groups: 0x%02x\n", profile.CallerGroups);
+ printf("Automatic answer: %d\n", profile.AutomaticAnswer);
+ printf("Screen saver: %d\n", profile.ScreenSaver);
+ printf("\n");
+#endif
+
+ printf("Incoming call alert: %s\n", GetProfileCallAlertString(profile.CallAlert));
+
+ /* For different phones different ringtones names */
+ if (strcmp(RingingToneName(profile.Ringtone,0),""))
+ printf(_("Ringing tone: %s (number %d in phone menu)\n"),
+ RingingToneName(profile.Ringtone,0), RingingToneMenu(profile.Ringtone));
+ else
+ printf(_("Ringtone number: %d\n"), profile.Ringtone);
+
+ printf(_("Ringing volume: %s\n"), GetProfileVolumeString(profile.Volume));
+
+ printf(_("Message alert tone: %s\n"), GetProfileMessageToneString(profile.MessageTone));
+
+ printf(_("Keypad tones: %s\n"), GetProfileKeypadToneString(profile.KeypadTone));
+
+ printf(_("Warning and game tones: %s\n"), GetProfileWarningToneString(profile.WarningTone));
+
+ if (GetModelFeature (FN_SCREENSAVER)!=0)
+ printf(_("Screen saver: %s\n"), GetProfileOnOffString(profile.ScreenSaver));
+
+ printf(_("Vibration: %s\n"), GetProfileVibrationString(profile.Vibration));
+
+ /* It has been nice to add here reading caller group name. ;^) */
+ if (GetModelFeature (FN_CALENDAR)==F_CAL71)
+ printf(_("Caller groups: %s\n"),
+ GetProfileCallerGroups(profile.CallerGroups) );
+
+ /* FIXME: need make investigation for 3310 for these features. For now unknown */
+ if (GetModelFeature (FN_PROFILES)!=F_PROF33) {
+ /* FIXME: Light settings is only used for Car */
+ if (profile.Number==(max_profiles-2)) printf(_("Lights: %s\n"), profile.Lights ? _("On") : _("Automatic"));
+
+ /* FIXME: Automatic answer is only used for Car and Headset. */
+ if (profile.Number>=(max_profiles-2)) printf(_("Automatic answer: %s\n"), GetProfileOnOffString(profile.AutomaticAnswer));
+ }
+
+ printf("\n");
+
+ i++;
+ }
+ } else {
+ if (error == GE_NOTIMPLEMENTED) {
+ fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+ GSM->Terminate();
+ return -1;
+ } else
+ {
+ fprintf(stderr, _("Unspecified error\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+/* Sets profile feature */
+
+int setprofile(int argc, char *argv[])
+{
+
+/* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+ char model[64], rev[64];
+
+ int max_profiles;
+ GSM_Profile profile;
+ GSM_Profile profile2, profile3;
+ GSM_Error error;
+ bool correct_arg1;
+ bool correct_arg2;
+
+/* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ profile.Number = 0;
+
+ error = GSM->GetProfile(&profile);
+
+ if (error == GE_NONE)
+ {
+
+ while (GSM->GetModel(model) != GE_NONE) sleep(1);
+
+ while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+
+ strncpy(rev,rev+2,5);
+ rev[5]=0;
+ PrepareRingingTones(model,rev);
+
+ switch(GetModelFeature (FN_PROFILES)) {
+ case F_PROF33:max_profiles=6;break;
+ case F_PROF51:max_profiles=3;break;
+ default :max_profiles=7;break;
+ }
+
+ profile.Number=atoi (argv[0]);
+ profile.Number=profile.Number-1;
+
+ if (profile.Number < 0)
+ {
+ fprintf(stderr, _("Profile number must be value from 1 to %i!\n"), max_profiles);
+ GSM->Terminate();
+ return -1;
+ }
+
+ if (profile.Number >= max_profiles)
+ {
+ fprintf(stderr, _("This phone supports only %i profiles!\n"), max_profiles);
+ GSM->Terminate();
+ return -1;
+ }
+
+ if (profile.Number!=0) GSM->GetProfile(&profile);
+
+ correct_arg1=false;
+ correct_arg2=false;
+
+ if (strcmp(argv[1], "callalert")==0)
+ {
+ if (strcmp(argv[2], "ringing")==0) {profile.CallAlert=PROFILE_CALLALERT_RINGING;correct_arg2=true;}
+ if (strcmp(argv[2], "ascending")==0) {profile.CallAlert=PROFILE_CALLALERT_ASCENDING;correct_arg2=true;}
+ if (strcmp(argv[2], "ringonce")==0) {profile.CallAlert=PROFILE_CALLALERT_RINGONCE;correct_arg2=true;}
+ if (strcmp(argv[2], "beeponce")==0) {profile.CallAlert=PROFILE_CALLALERT_BEEPONCE;correct_arg2=true;}
+ if (strcmp(argv[2], "groups")==0)
+ {
+ profile.CallAlert=PROFILE_CALLALERT_CALLERGROUPS;
+ correct_arg2=true;
+ /*Ignored by N5110*/
+ /*FIX ME: it's ignored by N5130 and 3210 too*/
+ if (max_profiles==3) fprintf(stdout, _("Warning: value \"groups\" for profile feature \"callalert\" will be ignored in this phone model !\n"));
+ }
+ if (strcmp(argv[2], "off")==0 || strcmp(argv[2], "0")==0) {profile.CallAlert=PROFILE_CALLALERT_OFF;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"callalert\" are ringing|ascending|ringonce|beeponce|groups|off|0 !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "volume")==0)
+ {
+ if (strcmp(argv[2], "1")==0) {profile.Volume=PROFILE_VOLUME_LEVEL1;correct_arg2=true;}
+ if (strcmp(argv[2], "2")==0) {profile.Volume=PROFILE_VOLUME_LEVEL2;correct_arg2=true;}
+ if (strcmp(argv[2], "3")==0) {profile.Volume=PROFILE_VOLUME_LEVEL3;correct_arg2=true;}
+ if (strcmp(argv[2], "4")==0) {profile.Volume=PROFILE_VOLUME_LEVEL4;correct_arg2=true;}
+ if (strcmp(argv[2], "5")==0) {profile.Volume=PROFILE_VOLUME_LEVEL5;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"volume\" are 0|1|2|3|4|5 !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "keypad")==0 || strcmp(argv[1], "keypadtone")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.KeypadTone=PROFILE_KEYPAD_OFF;correct_arg2=true;}
+ if (strcmp(argv[2], "1")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL1;correct_arg2=true;}
+ if (strcmp(argv[2], "2")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL2;correct_arg2=true;}
+ if (strcmp(argv[2], "3")==0) {profile.KeypadTone=PROFILE_KEYPAD_LEVEL3;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"keypad|keypadtone\" are off|0|1|2|3 !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "messagetone")==0 || strcmp(argv[1], "smstone")==0 || strcmp(argv[1], "sms")==0 || strcmp(argv[1], "message")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.MessageTone=PROFILE_MESSAGE_NOTONE;correct_arg2=true;}
+ if (strcmp(argv[2], "standard")==0) {profile.MessageTone=PROFILE_MESSAGE_STANDARD;correct_arg2=true;}
+ if (strcmp(argv[2], "special")==0) {profile.MessageTone=PROFILE_MESSAGE_SPECIAL;correct_arg2=true;}
+ if (strcmp(argv[2], "beeponce")==0 || strcmp(argv[2], "once")==0) {profile.MessageTone=PROFILE_MESSAGE_BEEPONCE;correct_arg2=true;}
+ if (strcmp(argv[2], "ascending")==0) {profile.MessageTone=PROFILE_MESSAGE_ASCENDING;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"messagetone|smstone|message|sms\" are 0|off|standard|special|beeponce|once|ascending !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "warningtone")==0 || strcmp(argv[1], "warning")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.WarningTone=PROFILE_WARNING_OFF;correct_arg2=true;}
+ if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.WarningTone=PROFILE_WARNING_ON;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"warningtone|warning\" are 0|off|1|on !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "vibra")==0 || strcmp(argv[1], "vibration")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.Vibration=PROFILE_VIBRATION_OFF;correct_arg2=true;}
+ if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.Vibration=PROFILE_VIBRATION_ON;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"vibration|vibra\" are 0|off|1|on !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "lights")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.Lights=-1;correct_arg2=true;}
+ if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.Lights=0;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"lights\" are 0|off|1|on !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ if (profile.Number!=(max_profiles-2))
+ {
+ profile2.Number=max_profiles-2;
+ if (GSM->GetProfile(&profile2)==GE_NONE)
+ {
+ fprintf(stdout, _("Warning: \"Lights\" feature is ignored in this profile (only setting it for \"%s\" profile get some results) !\n"), profile2.Name);
+ }
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "answer")==0)
+ {
+ if (strcmp(argv[2], "0")==0 || strcmp(argv[2], "off")==0) {profile.AutomaticAnswer=-1;correct_arg2=true;}
+ if (strcmp(argv[2], "1")==0 || strcmp(argv[2], "on")==0) {profile.AutomaticAnswer=0;correct_arg2=true;}
+ if (!correct_arg2)
+ {
+ fprintf(stderr, _("Correct parameters for profile feature \"answer\" are 0|off|1|on !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ if (profile.Number<(max_profiles-2))
+ {
+ profile2.Number=max_profiles-2;
+ if (GSM->GetProfile(&profile2)==GE_NONE)
+ {
+ profile3.Number=max_profiles-1;
+ if (GSM->GetProfile(&profile3)==GE_NONE)
+ {
+ fprintf(stdout, _("Warning: \"Automatic Answer\" feature is ignored in this profile (only setting it for \"%s\" and \"%s\" profiles get some results) !\n"), profile2.Name, profile3.Name);
+ }
+ }
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "name")==0)
+ {
+ strcpy(profile.Name,argv[2]);
+ /*Ignored by N5110*/
+ /*FIX ME: it's ignored by N5130 and 3210 too*/
+ if (max_profiles==3) fprintf(stdout, _("Warning: this phone model doesn't allow to change profile name !\n"));
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "ringtone")==0)
+ {
+ profile.Ringtone=atoi(argv[2]);
+ if (profile.Ringtone<1)
+ {
+ /*With value 0 results are interesting in N5110, but can't be used for anything*/
+ fprintf(stderr, _("Ringtone number must be higher than 0 !\n"));
+ GSM->Terminate();
+ return -1;
+ } else
+ {
+ if (profile.Ringtone>NumberOfRingtones())
+ {
+ fprintf(stderr, _("Ringtone number too high (max %i) !\n"),NumberOfRingtones());
+ GSM->Terminate();
+ return -1;
+ }
+ profile.Ringtone=RingingToneCode(profile.Ringtone);
+ if (profile.Ringtone==0)
+ {
+ fprintf(stderr, _("Warning: we don't know ringtones codes for this model ! Can you contact with gnokii authors to add it into source ?\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ if (max_profiles==3) fprintf(stdout, _("Warning: ringtone is changed for all profiles. You must reset phone or select profile in phone againg to see result.\n"));
+ }
+ correct_arg1=true;
+ }
+ if (strcmp(argv[1], "groups")==0)
+ {
+ /*Ignored by N5110*/
+ /*FIX ME: it's ignored by N5130 and 3210 too*/
+ if (max_profiles==3) fprintf(stdout, _("Warning: this phone model doesn't allow to change caller group name !\n"));
+ profile.CallerGroups=atoi(argv[2]);
+ correct_arg1=true;
+ }
+
+ if (!correct_arg1)
+ {
+ fprintf(stderr, _("Correct profile feature names are callalert|volume|keypad|keypadtone|messagetone|smstone|message|sms|warningtone|warning|vibra|vibration|lights|answer|name|groups !\n"));
+ GSM->Terminate();
+ return -1;
+ }
+
+ GSM->SetProfile(&profile);
+
+ } else {
+ if (error == GE_NOTIMPLEMENTED) {
+ fprintf(stderr, _("Function not implemented in %s model!\n"), model);
+ GSM->Terminate();
+ return -1;
+ } else
+ {
+ fprintf(stderr, _("Unspecified error\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+/* Get requested range of memory storage entries and output to stdout in
+ easy-to-parse format */
+
+int getmemory(int argc, char *argv[])
+{
+
+ GSM_PhonebookEntry entry;
+ int count;
+ register int i;
+ GSM_Error error;
+ GSM_Bitmap bitmap;
+ char memory_type_string[20];
+ int start_entry;
+ int end_entry;
+ int i_used = 0, n_used=0;
+ int do_all;
+ char *output_opt = NULL;
+ bool wasdate=false;
+ char az_group_name[5][MAX_BITMAP_TEXT_LENGTH];
+ bool formatdone=false;
+ char buf[64];
+
+ /* group names init */
+ for(i=0;i<5;i++) az_group_name[i][0]='\0';
+
+ /* Handle command line args that set type, start and end locations. */
+ if (!GetMemoryTypeID(argv[0], &entry.MemoryType))
+ {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+ return (-1);
+ }
+ GetMemoryTypeString(memory_type_string, &entry.MemoryType);
+
+ if (argv[argc-1][0] == '-')
+ output_opt = argv[--argc];
+
+ /* Do generic initialisation routine */
+
+ fbusinit(NULL);
+
+ while ((error = GSM->GetModel(buf)) != GE_NONE && i++ < 15)
+ sleep(1);
+
+ if (argc > 1) {
+ do_all = 0;
+ start_entry = atoi (argv[1]);
+ end_entry = argc > 2 ? atoi( argv[2]) : start_entry;
+ } else {
+ GSM_MemoryStatus stats = {entry.MemoryType, 0, 0};
+
+ do_all = 1;
+ start_entry = 1;
+ if (GSM->GetMemoryStatus( &stats) != GE_NONE) {
+ fprintf( stderr, _("Error reading memory status.\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ n_used = stats.Used;
+ end_entry = stats.Used + stats.Free;
+ }
+
+
+ /* Now retrieve the requested entries. */
+
+ for (count = start_entry;
+ count <= end_entry && (!do_all || i_used < n_used);
+ count++) {
+
+ entry.Location=count;
+
+ error=GSM->GetMemoryLocation(&entry);
+
+ switch (error) {
+ case GE_NONE:
+ if (entry.SubEntriesCount || strcmp( entry.Number, ""))
+ i_used++;
+ else if (do_all)
+ break;
+ if (output_opt && !strcmp( output_opt,"-v30")) {
+ semicolon_pipe_substitution( &entry, 0 );
+ fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,30));
+ formatdone=true;
+ }
+ if (output_opt && !strcmp(output_opt,"-v21")) {
+ semicolon_pipe_substitution( &entry, 0 );
+ fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,21));
+ formatdone=true;
+ }
+ if (output_opt && !strcmp(output_opt,"-v")) {
+ semicolon_pipe_substitution( &entry, 0 );
+ fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,10));
+ formatdone=true;
+ }
+ if (output_opt && !strcmp(output_opt,"-short")) {
+ semicolon_pipe_substitution( &entry, 0 );
+ fprintf(stdout, "%s;%s;%s;%d;%d;", entry.Name, entry.Number, memory_type_string, entry.Location, entry.Group);
+ for( i = 0; i < entry.SubEntriesCount; i++ )
+ {
+ if( entry.SubEntries[i].EntryType == GSM_Date )
+ fprintf(stdout,_("%u;%u;%u;%02u.%02u.%04u;%02u:%02u:%02u;"),
+ entry.SubEntries[i].EntryType,
+ entry.SubEntries[i].NumberType,
+ entry.SubEntries[i].BlockNumber,
+ entry.SubEntries[i].data.Date.Day,
+ entry.SubEntries[i].data.Date.Month,
+ entry.SubEntries[i].data.Date.Year,
+ entry.SubEntries[i].data.Date.Hour,
+ entry.SubEntries[i].data.Date.Minute,
+ entry.SubEntries[i].data.Date.Second );
+ else
+ fprintf(stdout,_("%u;%u;%u;%s;"),
+ entry.SubEntries[i].EntryType,
+ entry.SubEntries[i].NumberType,
+ entry.SubEntries[i].BlockNumber,
+ entry.SubEntries[i].data.Number );
+ }
+ fprintf(stdout,_("\n"));
+ formatdone=true;
+ }
+ if (!formatdone) {
+ char z_gtype[12];
+ wasdate=false;
+ fprintf(stdout, "Memory %s, location %d\n",memory_type_string, entry.Location);
+
+ // check if some info in subentries
+ for( i = 0; i < entry.SubEntriesCount; i++ )
+ if( entry.SubEntries[i].EntryType != GSM_Date &&
+ strcmp(entry.SubEntries[i].data.Number,"") )
+ break;
+
+ if (strcmp(entry.Number,"") || i < entry.SubEntriesCount) {
+ if (strcmp(entry.Name,"")) fprintf(stdout,_(" Name: %s\n"),entry.Name);
+ if (strcmp(entry.Number,"")) fprintf(stdout,_(" Number: %s\n"),entry.Number);
+ bitmap.type=GSM_CallerLogo;
+ bitmap.number=entry.Group;
+ strcpy(z_gtype,"unknown");
+ if (entry.Group==5) strcpy(z_gtype,"No group");
+ if (entry.Group<5 && entry.Group>=0) {
+ if (!strcmp(az_group_name[entry.Group],"")) {
+ if (GetModelFeature (FN_CALLERGROUPS)!=0) {
+ if (GSM->GetBitmap(&bitmap)==GE_NONE)
+ strcpy( az_group_name[entry.Group], bitmap.text );
+ }
+ if ((!strcmp(az_group_name[entry.Group],""))) {
+ switch(entry.Group) {
+ case 0:strcpy(az_group_name[entry.Group],"Family");break;
+ case 1:strcpy(az_group_name[entry.Group],"VIP");break;
+ case 2:strcpy(az_group_name[entry.Group],"Friends");break;
+ case 3:strcpy(az_group_name[entry.Group],"Colleagues");break;
+ case 4:strcpy(az_group_name[entry.Group],"Other");break;
+ default:break;
+ }
+ }
+ }
+ strcpy(z_gtype,az_group_name[entry.Group]);
+ }
+ fprintf(stdout,_(" Group: %d (%s)\n"),entry.Group+1,z_gtype);
+ for( i = 0; i < entry.SubEntriesCount; i++ )
+ {
+ if( entry.SubEntries[i].EntryType == GSM_Date ) {
+ fprintf(stdout, " Date and time: %s %02u.%02u.%04u %02u:%02u:%02u\n",
+ DayOfWeek(entry.SubEntries[i].data.Date.Year,
+ entry.SubEntries[i].data.Date.Month,
+ entry.SubEntries[i].data.Date.Day),
+ entry.SubEntries[i].data.Date.Day,
+ entry.SubEntries[i].data.Date.Month,
+ entry.SubEntries[i].data.Date.Year,
+ entry.SubEntries[i].data.Date.Hour,
+ entry.SubEntries[i].data.Date.Minute,
+ entry.SubEntries[i].data.Date.Second);
+ wasdate=true;
+ } else {
+ if( strcmp(entry.SubEntries[i].data.Number,"") ) {
+ char z_etype[19];
+ switch( entry.SubEntries[i].EntryType ) {
+ case GSM_Number:
+ switch( entry.SubEntries[i].NumberType ) {
+ case GSM_General: strcpy(z_etype,"General "); break;
+ case GSM_Home: strcpy(z_etype,"Home "); break;
+ case GSM_Mobile: strcpy(z_etype,"Mobile "); break;
+ case GSM_Work: strcpy(z_etype,"Work "); break;
+ case GSM_Fax: strcpy(z_etype,"Fax "); break;
+ default: strcpy(z_etype,""); break;
+ }
+ strcat(z_etype,"Number"); break;
+ case GSM_Note:
+ strcpy(z_etype,"Note"); break;
+ case GSM_Postal:
+ strcpy(z_etype,"Postal"); break;
+ case GSM_Email:
+ strcpy(z_etype,"E-Mail"); break;
+ default:
+ strcpy(z_etype,"unknown data"); break;
+ }
+#ifdef DEBUG
+ fprintf(stdout,_(" ---> Subentry: %u\n"),i+1);
+ fprintf(stdout,_(" Entry type: %u (%s)\n"),entry.SubEntries[i].EntryType,z_etype);
+ fprintf(stdout,_(" Number type: %u\n"),entry.SubEntries[i].NumberType);
+ fprintf(stdout,_(" Block Number: %u\n"),entry.SubEntries[i].BlockNumber);
+#endif
+ fprintf(stdout,_(" %s: %s\n"),z_etype,entry.SubEntries[i].data.Number);
+ }
+ }
+ }
+ if ((entry.MemoryType==GMT_DC ||
+ entry.MemoryType==GMT_RC ||
+ entry.MemoryType==GMT_MC) && !wasdate)
+ fprintf(stdout,_(" Date and time not available\n"));
+ } else
+ fprintf(stdout,_(" Location empty\n"));
+ }
+ break;
+ case GE_NOTIMPLEMENTED:
+ fprintf( stderr, _("Function not implemented in %s model!\n"), model);
+ GSM->Terminate();
+ return -1;
+ case GE_INVALIDMEMORYTYPE:
+ fprintf( stderr, _("Memory type %s not supported!\n"),
+ memory_type_string);
+ GSM->Terminate();
+ return -1;
+ default:
+ fprintf(stdout, _("%s|%d|Bad location or other error!(%d)\n"),
+ memory_type_string, count, error);
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Read data from stdin, parse and write to phone. The parsing is relatively
+ crude and doesn't allow for much variation from the stipulated format. */
+
+int writephonebook(int argc, char *args[])
+{
+
+ GSM_PhonebookEntry entry;
+ GSM_Error error;
+ char *memory_type_string;
+ int line_count=0,current,i;
+ int subentry;
+
+ char *Line, OLine[1024], BackLine[1024];
+ char *ptr;
+
+ /* Check argument */
+ if (argc) {
+ if (strcmp("-i", args[0])) {
+ usage();
+ return 0;
+ }
+ }
+ /* Initialise fbus code */
+
+ fbusinit(NULL);
+
+ Line = OLine;
+
+ /* Go through data from stdin. */
+
+ while (GetLine(stdin, Line, sizeof(OLine))!=-1) {
+
+ current=0;BackLine[current++]=Line[0];
+ for (i=1;i<strlen(Line);i++) {
+ if (Line[i-1]==';' && Line[i]==';') BackLine[current++]=' ';
+ BackLine[current++]=Line[i];
+ }
+ BackLine[current++]=0;
+
+ strcpy(Line,BackLine);
+
+ line_count++;
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(Line, ";"); if (ptr) strcpy(entry.Name, ptr);
+
+ entry.Number[0]=0;
+ ptr=strtok(NULL, ";"); if (ptr && ptr[0]!=' ') strcpy(entry.Number, ptr);
+
+ ptr=strtok(NULL, ";");
+#else
+ ptr=strsep(&Line, ";"); if (ptr) strcpy(entry.Name, ptr);
+
+ entry.Number[0]=0;
+ ptr=strsep(&Line, ";"); if (ptr && ptr[0]!=' ') strcpy(entry.Number, ptr);
+
+ ptr=strsep(&Line, ";");
+#endif
+
+ if (!ptr) {
+ fprintf(stderr, _("Format problem on line %d [%s] 1\n"), line_count, BackLine);
+ Line = OLine;
+ continue;
+ }
+
+ if (!strncmp(ptr,"ME", 2))
+ {
+ memory_type_string = "int";
+ entry.MemoryType = GMT_ME;
+ }
+ else if (!strncmp(ptr,"SM", 2))
+ {
+ memory_type_string = "sim";
+ entry.MemoryType = GMT_SM;
+ }
+ else
+ {
+ fprintf(stderr, _("Format problem on line %d [%s] 2: %s\n"),
+ line_count, BackLine,ptr);
+ break;
+ }
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(NULL, ";"); if (ptr) entry.Location=atoi(ptr);
+
+ ptr=strtok(NULL, ";"); if (ptr) entry.Group=atoi(ptr);
+#else
+ ptr=strsep(&Line, ";"); if (ptr) entry.Location=atoi(ptr);
+
+ ptr=strsep(&Line, ";"); if (ptr) entry.Group=atoi(ptr);
+#endif
+
+ if (!ptr) {
+ fprintf(stderr, _("Format problem on line %d [%s] 3\n"),
+ line_count, BackLine);
+ continue;
+ }
+
+ for( subentry = 0; ; subentry++ )
+ {
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(NULL, ";");
+#else
+ ptr=strsep(&Line, ";");
+#endif
+ if( ptr && *ptr != 0 )
+ entry.SubEntries[subentry].EntryType=atoi(ptr);
+ else
+ break;
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(NULL, ";");
+#else
+ ptr=strsep(&Line, ";");
+#endif
+ if(ptr)
+ entry.SubEntries[subentry].NumberType=atoi(ptr);
+ // Phone Numbers need to have a number type.
+ if(!ptr && entry.SubEntries[subentry].EntryType == GSM_Number)
+ {
+ fprintf(stderr, _("Missing phone number type on line %d"
+ " entry %d [%s]\n"), line_count, subentry, BackLine);
+ subentry--;
+ break;
+ }
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(NULL, ";");
+#else
+ ptr=strsep(&Line, ";");
+#endif
+ if(ptr)
+ entry.SubEntries[subentry].BlockNumber=atoi(ptr);
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ ptr=strtok(NULL, ";");
+#else
+ ptr=strsep(&Line, ";");
+#endif
+ // 0x13 Date Type; it is only for Dailed Numbers, etc.
+ // we don't store to this memories so it's an error to use it.
+ if(!ptr || entry.SubEntries[subentry].EntryType == GSM_Date)
+ {
+ fprintf(stderr, _("Is not a phone number on line %d entry %d [%s]\n"),
+ line_count, subentry, BackLine);
+ subentry--;
+ break;
+ }
+ else
+ strcpy( entry.SubEntries[subentry].data.Number, ptr );
+ }
+
+ entry.SubEntriesCount = subentry;
+
+
+ /* This is to send other exports (like from 6110) to 7110 */
+ if (!entry.SubEntriesCount) {
+ entry.SubEntriesCount = 1;
+ entry.SubEntries[subentry].EntryType = GSM_Number;
+ entry.SubEntries[subentry].NumberType = GSM_General;
+ entry.SubEntries[subentry].BlockNumber = 2;
+ strcpy(entry.SubEntries[subentry].data.Number, entry.Number);
+ }
+
+ Line = OLine;
+
+ if (argc) {
+ GSM_PhonebookEntry tmp_entry;
+
+ memcpy(&tmp_entry, &entry, sizeof(GSM_PhonebookEntry) );
+ error = GSM->GetMemoryLocation(&tmp_entry);
+ if (error == GE_NONE) {
+ if (!tmp_entry.Empty) {
+ int confirm = -1;
+ char ans[8];
+ FILE *input_flow; //for reading from console, even when input redir.
+
+ input_flow = fopen(DEV_CONSOLE, "r");
+
+ if (!input_flow) {
+ fprintf(stderr, _("Can't open \"%s\" for input !\n"),DEV_CONSOLE);
+ return(-1);
+ }
+
+ fprintf(stderr, _("Location busy. "));
+ while (confirm < 0) {
+ fprintf(stderr, _("Overwrite? (yes/no) "));
+ GetLine(input_flow, ans, 7);
+ if (!strcmp(ans, "yes")) confirm = 1;
+ else if (!strcmp(ans, "no")) confirm = 0;
+ }
+ if (!confirm) continue;
+ }
+ } else {
+ fprintf(stderr, _("Unknown error (%d)\n"), error);
+ GSM->Terminate();
+ return 0;
+ }
+ }
+
+ /* Do write and report success/failure. */
+ semicolon_pipe_substitution( &entry, 1 );
+
+ error = GSM->WritePhonebookLocation(&entry);
+
+ if (error == GE_NONE)
+ fprintf (stdout, _("Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"), memory_type_string, entry.Location, entry.Name, entry.Number);
+ else
+ fprintf (stdout, _("Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"), error, memory_type_string, entry.Location, entry.Name, entry.Number);
+
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Getting speed dials. */
+
+int getspeeddial(char *Number) {
+
+ GSM_SpeedDial entry;
+ GSM_Error error;
+ GSM_PhonebookEntry pbentry;
+
+ entry.Number = atoi(Number);
+
+ fbusinit(NULL);
+
+ if (GSM->GetSpeedDial(&entry)==GE_NONE) {
+ pbentry.Location=entry.Location;
+ if (pbentry.Location==0) pbentry.Location=entry.Number;
+ pbentry.MemoryType=entry.MemoryType;
+
+ error=GSM->GetMemoryLocation(&pbentry);
+
+ if (error == GE_NONE)
+ {
+ fprintf(stdout, _("SpeedDial nr. %d: %d:%d (%s)\n"), entry.Number, entry.MemoryType, entry.Location,pbentry.Name);
+ } else
+ fprintf(stdout, _("Error\n"));
+ } else {
+ fprintf(stdout, _("Error\n"));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Setting speed dials. */
+
+int setspeeddial(char *argv[]) {
+
+ GSM_SpeedDial entry;
+
+ char *memory_type_string;
+
+ /* Handle command line args that set type, start and end locations. */
+
+ if (strcmp(argv[1], "ME") == 0) {
+ entry.MemoryType = GMT_ME;
+ memory_type_string = "ME";
+ }
+ else if (strcmp(argv[1], "SM") == 0) {
+ entry.MemoryType = GMT_SM;
+ memory_type_string = "SM";
+ }
+ else {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[1]);
+
+ return -1;
+ }
+
+ entry.Number = atoi(argv[0]);
+ entry.Location = atoi(argv[2]);
+
+ fbusinit(NULL);
+
+ if (GSM->SetSpeedDial(&entry) == GE_NONE) {
+ fprintf(stdout, _("Succesfully written!\n"));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Getting the status of the display. */
+
+int getdisplaystatus()
+{
+
+ int Status;
+
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ if (GSM->GetDisplayStatus(&Status)==GE_NONE) {
+
+ printf(_("Call in progress: %s\n"), Status & (1<<DS_Call_In_Progress)?_("on"):_("off"));
+ printf(_("Unknown: %s\n"), Status & (1<<DS_Unknown)?_("on"):_("off"));
+ printf(_("Unread SMS: %s\n"), Status & (1<<DS_Unread_SMS)?_("on"):_("off"));
+ printf(_("Voice call: %s\n"), Status & (1<<DS_Voice_Call)?_("on"):_("off"));
+ printf(_("Fax call active: %s\n"), Status & (1<<DS_Fax_Call)?_("on"):_("off"));
+ printf(_("Data call active: %s\n"), Status & (1<<DS_Data_Call)?_("on"):_("off"));
+ printf(_("Keyboard lock: %s\n"), Status & (1<<DS_Keyboard_Lock)?_("on"):_("off"));
+ printf(_("SMS storage full: %s\n"), Status & (1<<DS_SMS_Storage_Full)?_("on"):_("off"));
+
+ } else {
+ printf(_("Error\n"));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int netmonitor(char *Mode)
+{
+
+ unsigned char mode=atoi(Mode);
+ char Screen[NM_MAX_SCREEN_WIDTH];
+ int i;
+
+ fbusinit(NULL);
+
+ if (!strcmp(Mode,"reset")) mode=0xf0;
+ else if (!strcmp(Mode,"off")) mode=0xf1;
+ else if (!strcmp(Mode,"field"))mode=0xf2;
+ else if (!strcmp(Mode,"devel"))mode=0xf3;
+ else if (!strcmp(Mode,"next")) mode=0x00;
+
+ /* We clear it */
+ for (i=0;i<NM_MAX_SCREEN_WIDTH;i++) Screen[i]=0;
+
+ GSM->NetMonitor(mode, Screen);
+
+ if (Screen)
+ printf("%s\n", Screen);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int identify( void )
+{
+ /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */
+ char imei[64], model[64], rev[64], manufacturer[64];
+
+ fbusinit(NULL);
+
+ while (GSM->GetIMEI(imei) != GE_NONE) sleep(1);
+ while (GSM->GetRevision(rev) != GE_NONE) sleep(1);
+ while (GSM->GetModel(model) != GE_NONE) sleep(1);
+
+ strcpy(manufacturer, "(unknown)");
+ GSM->GetManufacturer(manufacturer);
+
+ fprintf(stdout, _("IMEI: %s\n"), imei);
+ fprintf(stdout, _("Model: %s %s (%s)\n"), manufacturer, GetModelName (model), model);
+ fprintf(stdout, _("Revision: %s\n"), rev);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int senddtmf(char *String)
+{
+
+ fbusinit(NULL);
+
+ if (GSM->SendDTMF(String)!=GE_NONE) fprintf(stdout,_("Error!\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Resets the phone */
+int reset(int argc, char *argv[])
+{
+
+ unsigned char _type=0x03;
+
+ if (argc>0) {
+ _type=0x10;
+
+ if (!strcmp(argv[0],"soft")) _type = 0x03;
+
+ /* Doesn't work with 5110 */
+ if (!strcmp(argv[0],"hard")) _type = 0x04;
+
+ if (_type==0x10) {
+ fprintf(stderr, _("What kind of reset do you want (second parameter can be \"soft\" or \"hard\") ?\n"));
+ return -1;
+ }
+ }
+
+ fbusinit(NULL);
+
+ GSM->Reset(_type);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* This is a "convenience" function to allow quick test of new API stuff which
+ doesn't warrant a "proper" command line function. */
+
+int foogle(char *argv[])
+{
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ // Fill in what you would like to test here...
+
+ sleep(5);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int phonetests()
+{
+ /* Initialise the code for the GSM interface. */
+
+ fbusinit(NULL);
+
+ if (GSM->PhoneTests()!=GE_NONE) fprintf(stderr,_("Error\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* pmon allows fbus code to run in a passive state - it doesn't worry about
+ whether comms are established with the phone. A debugging/development
+ tool. */
+
+int pmon()
+{
+
+ GSM_Error error;
+ GSM_ConnectionType connection=GCT_FBUS;
+
+ /* Initialise the code for the GSM interface. */
+
+ error = GSM_Initialise(model, Port, Initlength, connection, RLP_DisplayF96Frame, SynchronizeTime);
+
+ if (error != GE_NONE) {
+ fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+ return -1;
+ }
+
+
+ while (1) {
+ usleep(50000);
+ }
+
+ return 0;
+}
+
+int setringtone(int argc, char *argv[])
+{
+ GSM_Ringtone ringtone;
+ GSM_BinRingtone binringtone,binringtone2;
+
+ GSM_Error error;
+
+ int current=0; //number of packed notes or location
+ int i;
+
+ char model[64];
+
+ /* If not binary ringtone */
+ if (GSM_ReadBinRingtoneFile(argv[0],&binringtone2)!=GE_NONE) {
+ fprintf(stdout,_("Not binary ringtone, trying RTTL\n"));
+
+ if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+ ringtone.location=1;
+ if (argc>1) ringtone.location=atoi(argv[1]);
+
+ ringtone.allnotesscale=false;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ while (GSM->GetModel(model) != GE_NONE)
+ sleep(1);
+
+ /* For Nokia 6110/6130/6150/6210 we use different method of uploading.
+ Phone will display menu, when received it */
+ if ( !strcmp(model,"NSE-3") || !strcmp(model,"NSK-3") ||
+ !strcmp(model,"NSM-1") || !strcmp(model,"NPE-3") ) {
+ if (argc==1) ringtone.location=255;
+ }
+
+ error=GSM->SetRingtone(&ringtone,¤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;i<ringtone.NrNotes;i++) {
+ if (DefNoteTempo!=ringtone.notes[i].tempo) {
+ fprintf(stdout,_("WARNING: IN FACT RINGTONE HAS DIFFERENT TEMPO FOR DIFFERENT NOTES AND THAT'S WHY YOU CAN'T ENTER IT ALL IN THE COMPOSITOR\n\n"));
+ break;
+ }
+ }
+
+ for (i=0;i<ringtone.NrNotes;i++) {
+
+ if (firstnote) {
+ if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+ firstnote=false;
+ }
+
+ if (!firstnote) {
+ break;
+ }
+
+ }
+
+ if ((ringtone.NrNotes-i)>50)
+ fprintf(stdout,_("WARNING: LENGTH=%i, BUT YOU WILL ENTER ONLY FIRST 50 TONES. TO ENTER FULL RINGTONE MUST SEND IT (--sendringtone) OR DOWNLOAD (--setringtone)\n\n"),ringtone.NrNotes-i);
+
+ fprintf(stdout,_("This ringtone in Nokia Composer in phone should look: "));
+
+ firstnote=true;
+
+ for (i=0;i<ringtone.NrNotes;i++) {
+
+ if (firstnote) {
+ if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+ firstnote=false;
+ }
+
+ if (!firstnote) {
+
+ switch (ringtone.notes[i].duration) {
+ case 192:fprintf(stdout,_("1."));break; //192=128*1.5
+ case 128:fprintf(stdout,_("1"));break;
+ case 96 :fprintf(stdout,_("2."));break; //96=64*1.5
+ case 64 :fprintf(stdout,_("2"));break;
+ case 48 :fprintf(stdout,_("4."));break; //48=32*1.5
+ case 32 :fprintf(stdout,_("4"));break;
+ case 24 :fprintf(stdout,_("8."));break; //24=16*1.5
+ case 16 :fprintf(stdout,_("8"));break;
+ case 12 :fprintf(stdout,_("16."));break; //12=8*1.5
+ case 8 :fprintf(stdout,_("16"));break;
+ case 6 :fprintf(stdout,_("32."));break; //6=4*1.5
+ case 4 :fprintf(stdout,_("32"));break;
+ }
+
+ unknown=false;
+
+ /* What note here ? */
+ switch (GSM_GetNote(ringtone.notes[i].note)) {
+ case Note_C :fprintf(stdout,_("c"));break;
+ case Note_Cis:fprintf(stdout,_("#c"));break;
+ case Note_D :fprintf(stdout,_("d"));break;
+ case Note_Dis:fprintf(stdout,_("#d"));break;
+ case Note_E :fprintf(stdout,_("e"));break;
+ case Note_F :fprintf(stdout,_("f"));break;
+ case Note_Fis:fprintf(stdout,_("#f"));break;
+ case Note_G :fprintf(stdout,_("g"));break;
+ case Note_Gis:fprintf(stdout,_("#g"));break;
+ case Note_A :fprintf(stdout,_("a"));break;
+ case Note_Ais:fprintf(stdout,_("#a"));break;
+ case Note_H :fprintf(stdout,_("h"));break;
+ default :fprintf(stdout,_("-"));unknown=true;break; //Pause ?
+ }
+
+ if (!unknown)
+ fprintf(stdout,_("%i"),ringtone.notes[i].note/14);
+
+ /* And separator before next note */
+ if (i!=ringtone.NrNotes-1)
+ fprintf(stdout,_(" "));
+
+ }
+
+ }
+
+ fprintf(stdout,_("\n\nTo enter it please press: "));
+
+ firstnote=true;
+
+ for (i=0;i<ringtone.NrNotes;i++) {
+
+ if (firstnote) {
+ if (GSM_GetNote(ringtone.notes[i].note)!=Note_Pause)
+ firstnote=false;
+ }
+
+ if (!firstnote) {
+
+ unknown=false;
+
+ /* What note here ? */
+ switch (GSM_GetNote(ringtone.notes[i].note)) {
+ case Note_C :fprintf(stdout,_("1"));break;
+ case Note_Cis:fprintf(stdout,_("1"));break;
+ case Note_D :fprintf(stdout,_("2"));break;
+ case Note_Dis:fprintf(stdout,_("2"));break;
+ case Note_E :fprintf(stdout,_("3"));break;
+ case Note_F :fprintf(stdout,_("4"));break;
+ case Note_Fis:fprintf(stdout,_("4"));break;
+ case Note_G :fprintf(stdout,_("5"));break;
+ case Note_Gis:fprintf(stdout,_("5"));break;
+ case Note_A :fprintf(stdout,_("6"));break;
+ case Note_Ais:fprintf(stdout,_("6"));break;
+ case Note_H :fprintf(stdout,_("7"));break;
+ default :fprintf(stdout,_("0"));unknown=true;break;
+ }
+
+ switch (ringtone.notes[i].duration) {
+ case 192:fprintf(stdout,_("(longer)"));break; //192=128*1.5
+ case 96 :fprintf(stdout,_("(longer)"));break; //96=64*1.5
+ case 48 :fprintf(stdout,_("(longer)"));break; //48=32*1.5
+ case 24 :fprintf(stdout,_("(longer)"));break; //24=16*1.5
+ case 12 :fprintf(stdout,_("(longer)"));break; //12=8*1.5
+ case 6 :fprintf(stdout,_("(longer)"));break; //6=4*1.5
+ default:break;
+ }
+
+ /* What note here ? */
+ switch (GSM_GetNote(ringtone.notes[i].note)) {
+ case Note_Cis:fprintf(stdout,_("#"));break;
+ case Note_Dis:fprintf(stdout,_("#"));break;
+ case Note_Fis:fprintf(stdout,_("#"));break;
+ case Note_Gis:fprintf(stdout,_("#"));break;
+ case Note_Ais:fprintf(stdout,_("#"));break;
+ default :break;
+ }
+
+ if (!unknown)
+ {
+ nownotesscale=ringtone.notes[i].note/14;
+
+ if (nownotesscale!=oldnotesscale) {
+ switch (nownotesscale) {
+ case 1:
+ switch (oldnotesscale) {
+ case 2:fprintf(stdout,_("**"));break;
+ case 3:fprintf(stdout,_("*"));break;
+ }
+ break;
+ case 2:
+ switch (oldnotesscale) {
+ case 1:fprintf(stdout,_("*"));break;
+ case 3:fprintf(stdout,_("**"));break;
+ }
+ break;
+ case 3:
+ switch (oldnotesscale) {
+ case 1:fprintf(stdout,_("**"));break;
+ case 2:fprintf(stdout,_("*"));break;
+ }
+ break;
+ }
+ }
+
+ oldnotesscale=nownotesscale;
+ }
+
+ nownoteslen=0;
+ oldnoteslen2=oldnoteslen;
+
+ switch (ringtone.notes[i].duration) {
+ case 192:nownoteslen=1;break; //192=128*1.5
+ case 128:nownoteslen=1;break;
+ case 96 :nownoteslen=2;break; //96=64*1.5
+ case 64 :nownoteslen=2;break;
+ case 48 :nownoteslen=4;break; //48=32*1.5
+ case 32 :nownoteslen=4;break;
+ case 24 :nownoteslen=8;break; //24=16*1.5
+ case 16 :nownoteslen=8;break;
+ case 12 :nownoteslen=16;break; //12=8*1.5
+ case 8 :nownoteslen=16;break;
+ case 6 :nownoteslen=32;break; //6=4*1.5
+ case 4 :nownoteslen=32;break;
+ }
+
+ if (nownoteslen>oldnoteslen) {
+ while (oldnoteslen!=nownoteslen) {
+ fprintf(stdout,_("8"));
+ oldnoteslen=oldnoteslen*2;
+ }
+ }
+
+ if (nownoteslen<oldnoteslen) {
+ while (oldnoteslen!=nownoteslen) {
+ fprintf(stdout,_("9"));
+ oldnoteslen=oldnoteslen/2;
+ }
+ }
+
+ if (GSM_GetNote(ringtone.notes[i].note)==Note_Pause)
+ oldnoteslen=oldnoteslen2;
+
+ /* And separator before next note */
+ if (i!=ringtone.NrNotes-1)
+ fprintf(stdout,_(" "));
+
+ }
+ }
+
+ fprintf(stdout,_("\n"));
+
+ return 0;
+
+}
+
+int sendringtone(int argc, char *argv[])
+{
+ GSM_Ringtone ringtone;
+ GSM_MultiSMSMessage SMS;
+ int current,i;
+ bool ProfileStyle=false; /* If we use profile style available in new Nokia models */
+
+ if (GSM_ReadRingtoneFileOnConsole(argv[1], &ringtone)!=GE_NONE) return(-1);
+
+ ringtone.allnotesscale=false;
+
+ for (i=0;i<argc;i++) {
+ if (!strcmp(argv[i],"--profilestyle")) ProfileStyle=true;
+ if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+ }
+
+ current=GSM_SaveRingtoneToSMS(&SMS,&ringtone,ProfileStyle);
+
+ if (current!=ringtone.NrNotes) {
+ if (current>FB61_MAX_RINGTONE_NOTES) {
+ fprintf(stderr,_("Warning: due to phone limitation"));
+ } else {
+ fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+ }
+ fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+ }
+
+ for (i=0;i<SMS.number;i++) {
+ strcpy(SMS.SMS[i].Destination,argv[0]);
+ }
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ GSM_SendMultiPartSMSOnConsole(&SMS, 2,argc,argv,false,true,true);
+
+ return 0;
+}
+
+int saveringtone(int argc, char *argv[])
+{
+ GSM_Ringtone ringtone;
+ GSM_MultiSMSMessage SMS;
+ int current,i;
+ bool ProfileStyle=false; /* If we use profile style available in new Nokia models */
+
+ if (GSM_ReadRingtoneFileOnConsole(argv[0], &ringtone)!=GE_NONE) return(-1);
+
+ ringtone.allnotesscale=false;
+
+ for (i=0;i<argc;i++) {
+ if (!strcmp(argv[i],"--profilestyle")) ProfileStyle=true;
+ if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+ }
+
+ current=GSM_SaveRingtoneToSMS(&SMS,&ringtone,ProfileStyle);
+
+ if (current!=ringtone.NrNotes) {
+ if (current>FB61_MAX_RINGTONE_NOTES) {
+ fprintf(stderr,_("Warning: due to phone limitation"));
+ } else {
+ fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+ }
+ fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+ }
+
+ for (i=0;i<SMS.number;i++) {
+ /* Only 11 chars could be here */
+ strncpy(SMS.SMS[i].Destination,ringtone.name,11);
+ }
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ GSM_SaveMultiPartSMSOnConsole(&SMS,1,argc,argv,false,false,true,true);
+
+ return 0;
+}
+
+/* Converts logo files. */
+
+int bitmapconvert(int argc, char *argv[])
+{
+ GSM_Bitmap bitmap;
+ GSM_NetworkInfo NetworkInfo;
+ bool doit;
+ int num;
+
+ if (!strcmp(argv[0],argv[1]))
+ {
+ fprintf(stderr, _("Files can't have the same names !\n"));
+ return -1;
+ }
+
+ if (GSM_ReadBitmapFileOnConsole(argv[0], &bitmap)!=GE_NONE) return(-1);
+
+ if (argc>2)
+ {
+ doit=false;
+ if (!strcmp(argv[2],"op"))
+ {
+ doit=false;
+ if (argc<4) doit=true;
+ if (argc<4 && bitmap.type!=GSM_OperatorLogo) doit=true;
+ if (doit)
+ {
+ fbusinit(NULL);
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ GSM->Terminate();
+ }
+ GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+ if (argc==4)
+ {
+ strncpy(bitmap.netcode,argv[3],7);
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+ {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ return -1;
+ }
+ }
+ doit=true;
+ }
+ if (!strcmp(argv[2],"7110op"))
+ {
+ doit=false;
+ if (argc<4) doit=true;
+ if (argc<4 && bitmap.type!=GSM_7110OperatorLogo) doit=true;
+ if (doit)
+ {
+ fbusinit(NULL);
+ if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode,NetworkInfo.NetworkCode,7);
+ GSM->Terminate();
+ }
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+ if (argc==4)
+ {
+ strncpy(bitmap.netcode,argv[3],7);
+ if (!strcmp(GSM_GetNetworkName(bitmap.netcode),"unknown"))
+ {
+ fprintf(stderr,"Sorry, gnokii doesn't know \"%s\" network !\n",bitmap.netcode);
+ return -1;
+ }
+ }
+ doit=true;
+ }
+ if (!strcmp(argv[2],"caller"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+ if (argc>3)
+ {
+ num=argv[3][0]-'0';
+ if ((num<0)||(num>9)) num=0;
+ bitmap.number=num;
+ } else
+ {
+ bitmap.number=0;
+ }
+ doit=true;
+ }
+ if (!strcmp(argv[2],"startup"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+ doit=true;
+ }
+ if (!strcmp(argv[2],"7110startup"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+ doit=true;
+ }
+ if (!strcmp(argv[2],"6210startup"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+ doit=true;
+ }
+ if (!strcmp(argv[2],"picture"))
+ {
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+ doit=true;
+ }
+ if (!doit)
+ {
+ fprintf(stderr,"Unknown type of logo: %s !\n",argv[2]);
+ return -1;
+ }
+ }
+
+ if (GSM_SaveBitmapFileOnConsole(argv[1], &bitmap)!=GE_NONE) return(-1);
+
+ return 0;
+}
+
+int getphoneprofile()
+{
+ GSM_PPS PPS;
+ GSM_Error error;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ PPS.Name=PPS_ALS;
+ error=GSM->GetProductProfileSetting(&PPS);
+ if (error!=GE_NONE) {
+ fprintf(stdout,_("Error!\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ fprintf(stdout,_("ALS : "));
+ if (PPS.bool_value) fprintf(stdout,_("on\n"));
+ else fprintf(stdout,_("off\n"));
+
+ PPS.Name=PPS_VibraMenu;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("Vibra menu : "));
+ if (PPS.bool_value) fprintf(stdout,_("on\n"));
+ else fprintf(stdout,_("off\n"));
+
+ PPS.Name=PPS_GamesMenu;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("Games menu : "));
+ if (PPS.bool_value) fprintf(stdout,_("on\n"));
+ else fprintf(stdout,_("off\n"));
+
+ PPS.Name=PPS_HRData;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("HR Data : "));
+ if (PPS.bool_value) fprintf(stdout,_("on\n"));
+ else fprintf(stdout,_("off\n"));
+
+ PPS.Name=PPS_14400Data;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("14400 Data : "));
+ if (PPS.bool_value) fprintf(stdout,_("on\n"));
+ else fprintf(stdout,_("off\n"));
+
+ PPS.Name=PPS_LCDContrast;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("LCD Contrast : %i%%\n"),PPS.int_value);
+
+ PPS.Name=PPS_EFR;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("EFR : "));
+ switch (PPS.int_value) {
+ case 0: fprintf(stdout,_("off\n")); break;
+ case 1: fprintf(stdout,_("last\n")); break;
+ case 2: fprintf(stdout,_("second\n"));break;
+ case 3: fprintf(stdout,_("first\n")); break;
+ }
+
+ PPS.Name=PPS_FR;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("FR : "));
+ switch (PPS.int_value) {
+ case 0: fprintf(stdout,_("off\n")); break;
+ case 1: fprintf(stdout,_("last\n")); break;
+ case 2: fprintf(stdout,_("second\n"));break;
+ case 3: fprintf(stdout,_("first\n")); break;
+ }
+
+ PPS.Name=PPS_HR;
+ GSM->GetProductProfileSetting(&PPS);
+ fprintf(stdout,_("HR : "));
+ switch (PPS.int_value) {
+ case 0: fprintf(stdout,_("off\n")); break;
+ case 1: fprintf(stdout,_("last\n")); break;
+ case 2: fprintf(stdout,_("second\n"));break;
+ case 3: fprintf(stdout,_("first\n")); break;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int setphoneprofile(int argc, char *argv[])
+{
+ GSM_PPS PPS;
+ GSM_Error error;
+ bool correct_arg1=false, correct_arg2=false;
+
+ if (!strcmp(argv[0],"ALS")) {
+ PPS.Name=PPS_ALS;
+ correct_arg1=true;
+ if (!strcmp(argv[1],"1")) {
+ PPS.bool_value=true;
+ correct_arg2=true;
+ }
+ if (!strcmp(argv[1],"0")) {
+ PPS.bool_value=false;
+ correct_arg2=true;
+ }
+ if (!correct_arg2) {
+ fprintf(stdout,_("Settings for ALS parameter can be \"0\" or \"1\" !\n"));
+ return -1;
+ }
+ }
+ if (!strcmp(argv[0],"HRData")) {
+ PPS.Name=PPS_HRData;
+ correct_arg1=true;
+ if (!strcmp(argv[1],"1")) {
+ PPS.bool_value=true;
+ correct_arg2=true;
+ }
+ if (!strcmp(argv[1],"0")) {
+ PPS.bool_value=false;
+ correct_arg2=true;
+ }
+ if (!correct_arg2) {
+ fprintf(stdout,_("Settings for HRData parameter can be \"0\" or \"1\" !\n"));
+ return -1;
+ }
+ }
+ if (!correct_arg1) {
+ fprintf(stdout,_("First parameter can be \"ALS\" or \"HRData\" only !\n"));
+ return -1;
+ }
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->SetProductProfileSetting(&PPS);
+
+ if (error!=GE_NONE) {
+ fprintf(stdout,_("Error!\n"));
+ GSM->Terminate();
+ return -1;
+ }
+
+ GSM->Reset(0x03);
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int getoperatorname()
+{
+
+ GSM_Network network;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ if (GSM->GetOperatorName(&network)==GE_NONE)
+ {
+ if (!strcmp(network.Name,"")) {
+ fprintf(stdout,_("Phone doesn't have downloaded operator name\n"));
+ } else {
+ fprintf(stdout,_("Phone has downloaded operator name (\"%s\") for \"%s\" (\"%s\") network\n"),
+ network.Name,network.Code,GSM_GetNetworkName(network.Code));
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int setoperatorname(int argc, char *argv[])
+{
+
+ GSM_Network network;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ if (argc==2) {
+ strncpy(network.Code,argv[0],7);
+ strncpy(network.Name,argv[1],50);
+ } else {
+ strcpy(network.Code,"000 00\0");
+ strcpy(network.Name,"\0");
+ }
+
+ if (GSM->SetOperatorName(&network)==GE_NONE) {
+ if (GSM->GetOperatorName(&network)==GE_NONE) {
+ if (!strcmp(network.Name,"")) {
+ fprintf(stdout,_("Downloaded operator name is removed\n"));
+ } else {
+ fprintf(stdout,_("Downloaded operator name changed for \"%s\" network (\"%s\") to \"%s\"\n"),
+ network.Code,GSM_GetNetworkName(network.Code),network.Name);
+ }
+ }
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int getvoicemailbox()
+{
+ GSM_PhonebookEntry entry;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ if (GSM->GetVoiceMailbox(&entry)==GE_NONE) {
+ fprintf(stdout,_("Voice mailbox number is "));
+ if (!strcmp(entry.Number,""))
+ fprintf(stdout,_("not set\n"));
+ else
+ fprintf(stdout,_("\"%s\"\n"),entry.Number);
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// flow diagram of netmonitordata():
+///////////////////////////////////////////////////////////////////////////////
+//
+// get command line argument
+// |
+// v
+//
+// if specific phone model
+// use that model
+// else
+// identify-phone: (((((((( TO DO )))))))))))))
+//
+// |
+// v
+// get_mon_param_info() get phone netmonitor parameters name
+// specifically to a 'model'
+// |
+// v
+// parse_check() check command line arguments
+// | if all OK, go on else stop.
+// | because we can have a input file
+// v containing multiple
+// parse_process() command lines, we process each at once
+// so we can exit early on errors.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// private functions, see netmonitordata()
+void free_nm_info(PARAM_INFO_MON *info)
+{
+ PARAM_INFO_MON *tmp; // pointer, iterator on info
+
+ // go to end of list
+
+ while (info->next != NULL)
+ { tmp = info->next;
+ free(info->name);
+ free(info->mname);
+ free(info);
+ info = tmp;
+ }
+ free(info);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// this func retrieve parameters info from a file
+// and load it in a dynamic array, NULL terminated,
+// if 2rd parameter is not NULL, it load also description of screen
+// return (PARAM_INFO_MON *start) if all is OK, else NULL
+///////////////////////////////////////////////////////////////////////////////
+// start->->next->next->next-> ...->next->NULL
+// | | | | |
+// V V V V V
+// par0 par1 par2 parN
+///////////////////////////////////////////////////////////////////////////////
+// this should be de-allocated from calling function,
+// also, screen_name should be deallocated from calling function
+///////////////////////////////////////////////////////////////////////////////
+
+PARAM_INFO_MON *get_mon_param_info(char *f_name, char *screen_name[NM_MAX_SCREEN+1])
+{
+ PARAM_INFO_MON *start; // pointer to netmonitor parameters info
+ PARAM_INFO_MON *info; // pointer, iterator on info
+ PARAM_INFO_MON *check; // pointer, iterator on info, for check usage
+
+ FILE *f_info;
+
+ char buf[256];
+ char *param;
+ char *param_name;
+ char *tmp;
+
+ char tmp_mname[55]; // very larger, but if netmon bug ...
+ int x, y, len, s, t; // x & y coord, len, screen nr, type
+ int i;
+
+ if (screen_name != NULL)
+ for (i = 0; i <= NM_MAX_SCREEN; i++)
+ screen_name[i] = NULL;
+
+
+ if ((f_info = fopen(f_name, "r")) == NULL)
+ { fprintf(stderr, "Can' t open file parameter info: <%s>\n", f_name);
+ return(NULL);
+ }
+
+ if ((start = malloc(sizeof(PARAM_INFO_MON))) == NULL)
+ { fprintf(stderr, "no mem\n");
+ return(NULL);
+ }
+ else
+ { start->next = NULL;
+ }
+
+ info = start;
+ while (fgets(buf, 256, f_info) != NULL)
+ {
+ param = buf;
+
+ // Truncate from '#' at right of comments
+ if ((tmp = strchr(param, '#')) != NULL)
+ *tmp = '\0';
+
+ // Strip leading, trailing whitespace
+ while(isspace((int) *param))
+ param++;
+
+ while((strlen(param) > 0) && isspace((int) param[strlen(param) - 1]))
+ param[strlen(param) - 1] = '\0';
+
+ // Ignore blank lines
+ if ((*param == '\n') || (*param == '\0'))
+ continue;
+
+
+#ifdef DEBUG
+ fprintf(stderr, "%s: info line: <%s>\n", f_name, param);
+#endif
+ // check for param name
+ if ((param_name = strtok(param, "=\t\n")) == NULL)
+ continue;
+
+ // check if screen name
+ if (strncmp("SCREEN", param_name, 6) == 0)
+ {
+ // if we do not want screen names ...
+ if (screen_name == NULL)
+ continue;
+
+// FIXME check for screen nr
+ if ((tmp = strtok(NULL, ":\n")) == NULL)
+ continue;
+
+ i = atoi(tmp);
+// FIXME: check if already defined screen
+
+ if ((i <= 0) || (i > NM_MAX_SCREEN))
+ continue;
+ // check for screen name
+ if ((tmp = strtok(NULL, ":\n")) == NULL)
+ continue;
+
+ screen_name[i] = strdup(tmp);
+ }
+ else
+ {
+ // parameter
+
+// FIXME: check for NM_MAX_FIELDS
+
+ // check for x coord
+ if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+ continue;
+ x = atoi(tmp);
+
+ // check for y coord
+ if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+ continue;
+ y = atoi(tmp);
+
+ // check for len
+ if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+ continue;
+ len = atoi(tmp);
+
+ // check for screen
+ if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+ continue;
+ s = atoi(tmp);
+
+ // check for netmon manual name
+ if ((tmp = strtok(NULL, ":\t\n")) == NULL)
+ { fprintf(stderr,
+ "%s: PARAMETER <%s> in screen <%d>, not have netmon manual reference\n",
+ f_name, param_name, s);
+ free_nm_info(start);
+ return(NULL);
+ }
+ strcpy(tmp_mname, tmp);
+
+ // check for data type (optional)
+ if ((tmp = strtok(NULL, ":\t\n")) != NULL)
+ t = *tmp;
+ else
+ t = '\0';
+
+ // check len, here, so we print parameter name
+ if (len == 0)
+ { fprintf(stderr,
+ "%s: PARAMETER <%s> in screen <%d>, has invalid data lenght\n",
+ f_name, param_name, s);
+ free_nm_info(start);
+ return(NULL);
+ }
+
+ // check if already defined same param_name
+ check = start;
+ while (check->next != NULL)
+ { check = check->next;
+ if (strcmp(param_name, check->name) == 0)
+ {
+ fprintf(stderr,
+ "%s: PARAMETER <%s> in screen <%d> already defined as in screen <%d>\n",
+ f_name, param_name, s, check->s_nr);
+ free_nm_info(start);
+ return(NULL);
+ }
+ }
+
+ // make space, and add parameter
+ if ((info->next = malloc(sizeof(PARAM_INFO_MON))) != NULL)
+ {
+ info = info->next;
+ info->name = strdup(param_name);
+ info->x = x;
+ info->y = y;
+ info->len = len;
+ info->s_nr = s;
+ info->mname = strdup(tmp_mname);
+ info->type = t;
+
+ info->next = NULL; // mark end
+ }
+ else
+ {
+ fprintf(stderr, "no mem");
+ free_nm_info(start);
+ return(NULL);
+ }
+
+ }
+
+ }
+
+ fclose(f_info);
+
+#ifdef DEBUG
+ info = start;
+ while (info->next != NULL)
+ {
+ info = info->next;
+ fprintf(stderr, "info name %s\n", info->name);
+ }
+#endif
+ return(start);
+}
+
+// 2, parse the arguments and check command(s) line
+// command line, phone spec input, and output are complex,
+// so we exit printing info about error instead of std help
+///////////////////////////////////////////////////////////////////////////////
+
+int parse_check(int argc, char *argv[], PARAM_INFO_MON *start, char *f_name, int line)
+{
+ int ctr;
+ int i;
+ int time_spec;
+ int found_data;
+ char *p;
+ char *tmp;
+ char *o;
+ PARAM_INFO_MON *info; // iterator on this list
+
+#ifdef DEBUG
+ for (i = 0; i < argc; i++)
+ fprintf(stderr, "argv[%d] = <%s>\n",i, argv[i]);
+#endif
+
+ time_spec = 0;
+ ctr = 0;
+ i = 0;
+ while (i < argc)
+ {
+ p = argv[i];
+ if (*p == '-')
+ { // should be one of the short option
+ if (strcmp(argv[i], "-fs") == 0)
+ { // field separator, next arg should be a string
+ if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+ { i++;
+ // arg OK, do nothing
+ }
+ else
+ { if (line)
+ fprintf(stderr,
+ "-fs: Invalid field separator in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-fs: Invalid field separator\n");
+ return(-1);
+ }
+ }
+ else if (strcmp(argv[i], "-ls") == 0)
+ { // line separator, next arg should be a string
+ if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+ { i++;
+ // arg OK, do nothing
+ }
+ else
+ { if (line)
+ fprintf(stderr,
+ "-ls: Invalid line separator in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-ls: Invalid line separator\n");
+ return(-1);
+ }
+ }
+ else if (strcmp(argv[i], "-tm") == 0)
+ { // time separator, next arg should be a millisecond (200-10000)
+ if (time_spec)
+ { if (line)
+ fprintf(stderr,
+ "-tm, -ts, are mutually exclusive in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-tm, -ts, are mutually exclusive\n");
+ return(-1);
+ }
+
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 200) && (atoi(argv[i+1]) <= 10000))
+ { i++;
+ time_spec = 1;
+ // arg OK, do nothing
+ }
+ else
+ { if (line)
+ fprintf(stderr,
+ "-tm: Invalid argument (200-10000 milliseconds), in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-tm: Invalid argument (200-10000 milliseconds)\n");
+ return(-1);
+ }
+ }
+ else if (strcmp(argv[i], "-ts") == 0)
+ { // time separator, next arg should be a seconds (1-3600)
+ if (time_spec)
+ { if (line)
+ fprintf(stderr,
+ "-tm, -ts, are mutually exclusive, in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-tm, -ts, are mutually exclusive\n");
+ return(-1);
+ }
+
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 3600))
+ { i++;
+ time_spec = 1;
+ // arg OK, do nothing
+ }
+ else
+ { if (line)
+ fprintf(stderr,
+ "-ts: Invalid argument (1-3600 seconds) in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-ts: Invalid argument (1-3600 seconds)\n");
+ return(-1);
+ }
+ }
+ else if (strcmp(argv[i], "-n") == 0)
+ { // nr of data pump, before stop collection,
+ // next arg should be a int > 0
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 99999))
+ { i++;
+ // arg OK, do nothing
+ }
+ else
+ { if (line)
+ fprintf(stderr,
+ "-n: Invalid argument (1-99999 times) in <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "-n: Invalid argument (1-99999 times)\n");
+ return(-1);
+ }
+ }
+ else if (strcmp(argv[i], "-h") == 0)
+ { // we do NOT want header (default with header)
+ // arg OK, do nothing
+ }
+ else if (strcmp(argv[i], "-S") == 0)
+ { // we have used use specs from a file instead of standard info,
+ // next arg is an existing readable filename
+ // as already parsed correctly, we skip here.
+ i++;
+ }
+ else if (strcmp(argv[i], "-I") == 0)
+ { // we have used input from a file instead of command line
+ // next arg is an existing readable filename
+ // as already parsed correctly, we skip here.
+ i++;
+ }
+ else
+ {
+ if (line)
+ fprintf(stderr, "Unrecognized option %s in <%s> at line %d\n",
+ argv[i], f_name, line);
+ else
+ fprintf(stderr, "Unrecognized option %s\n", argv[i]);
+ return(-1);
+ }
+ }
+ else
+ { // should be required data
+ tmp = strdup(argv[i]);
+ p = strtok(tmp, ":\t\n");
+ while (p != NULL)
+ {
+ // check if there is an output format specification
+ o = p;
+ while (*o)
+ {
+ o++;
+ if (*o == '-')
+ { *o = '\0';
+ o++;
+ if (strlen(o) == 0)
+ {
+ // we have 'minus', so, probably forget format ...
+
+ if (line)
+ fprintf(stderr,
+ "Required data <%s->, without format specifiers in <%s> at line %d\n",
+ p, f_name, line);
+ else
+ fprintf(stderr,
+ "Required data <%s->, without format specifiers\n", p);
+ return(-1);
+ }
+ }
+ }
+
+ // we check for params
+ found_data = 0;
+ info = start;
+ while (info->next != NULL)
+ {
+ info = info->next;
+ if (strcmp(p, info->name) == 0)
+ {
+ if (ctr > NM_MAX_FIELDS)
+ {
+ if (line)
+ fprintf(stderr,
+ "too much data field ... in file <%s> at line %d\n",
+ f_name, line);
+ else
+ fprintf(stderr, "too much data field ...\n");
+ return (-1);
+ }
+/*
+ data[ctr] = info;
+ out_f[ctr] = *o;
+*/
+ found_data = 1;
+ ctr++;
+ break;
+ }
+ }
+
+ if (found_data == 0)
+ {
+ if (line)
+ fprintf(stderr,
+ "Required data <%s>, not found in info-mon specifications in <%s> at line %d\n",
+ p, f_name, line);
+ else
+ fprintf(stderr,
+ "Required data <%s>, not found in info-mon specifications\n", p);
+ return(-1);
+ }
+
+ p = strtok(NULL, ":\t\n");
+
+ } // end while strtok
+
+ } // end else '-' (short options)
+
+ i++;
+
+ } // end while
+
+ if (ctr == 0)
+ {
+ if (line)
+ fprintf(stderr, "no required data! in <%s> at line %d\n", f_name, line);
+ else
+ fprintf(stderr, "no required data!\n");
+ return(-1);
+ }
+
+ return 0;
+}
+
+// 2, parse the arguments and process the command line
+// no checks are needed here, because already do in parse_check
+// it return a pointer to info needed for make output, or NULL if errors
+///////////////////////////////////////////////////////////////////////////////
+OUT_INFO_MON *parse_process(int argc, char *argv[], PARAM_INFO_MON *start)
+{
+ int ctr;
+ int i;
+ int time_spec;
+ int found_data;
+ int req_tm;
+ int req_ts;
+ char *p;
+ char *tmp;
+ char *o;
+ PARAM_INFO_MON *info; // iterator on this list
+ OUT_INFO_MON *out_param; // iterator on this list
+
+ if ((out_param = malloc(sizeof(OUT_INFO_MON))) == NULL)
+ { fprintf(stderr, "no mem\n");
+ return(NULL);
+ }
+
+#ifdef DEBUG
+ fprintf(stderr, "parse_process: argc = %d\n", argc);
+ for (i = 0; i < argc; i++)
+ fprintf(stderr, "argv[%d] = <%s>\n",i, argv[i]);
+#endif
+
+ for (i = 0; i < NM_MAX_FIELDS; i++)
+ out_param->data[i] = NULL;
+
+ strcpy(out_param->req_fs, " ");
+#ifdef WIN32
+ strcpy(out_param->req_ls, "\n\r");
+#else
+ strcpy(out_param->req_ls, "\n");
+#endif
+ time_spec = 0;
+ out_param->req_n = 0;
+ out_param->req_header = 1;
+
+ time_spec = 0;
+ req_tm = 200; /* default wait */
+ req_ts = 0;
+
+ ctr = 0;
+ i = 0;
+ while (i < argc)
+ {
+ p = argv[i];
+ if (*p == '-')
+ { // should be one of the short option
+ if (strcmp(argv[i], "-fs") == 0)
+ { // field separator, next arg should be a string
+ if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+ { i++;
+ strcpy(out_param->req_fs, argv[i]);
+ }
+ else
+ { fprintf(stderr, "NEVER BE:-fs: Invalid field separator\n");
+ return(NULL);
+ }
+ }
+ else if (strcmp(argv[i], "-ls") == 0)
+ { // line separator, next arg should be a string
+ if (((i+1) < argc) && (strlen(argv[i+1]) < 10))
+ { i++;
+ strcpy(out_param->req_ls, argv[i]);
+ }
+ else
+ { fprintf(stderr, "NEVER BE:-ls: Invalid line separator\n");
+ return(NULL);
+ }
+ }
+ else if (strcmp(argv[i], "-tm") == 0)
+ { // time separator, next arg should be a millisecond (200-10000)
+ if (time_spec)
+ { fprintf(stderr, "NEVER BE:-tm, -ts, are mutually exclusive");
+ return(NULL);
+ }
+
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 200) && (atoi(argv[i+1]) <= 10000))
+ { i++;
+ req_tm = atoi(argv[i]);
+ time_spec = 1;
+ }
+ else
+ { fprintf(stderr, "NEVER BE:-tm: Invalid argument (200-10000 milliseconds)\n");
+ return(NULL);
+ }
+ }
+ else if (strcmp(argv[i], "-ts") == 0)
+ { // time separator, next arg should be a seconds (1-3600)
+ if (time_spec)
+ { fprintf(stderr, "NEVER BE:-tm, -ts, are mutually exclusive");
+ return(NULL);
+ }
+
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 3600))
+ { i++;
+ req_ts = atoi(argv[i]);
+ time_spec = 1;
+
+ // delete default
+ req_tm = 0;
+ }
+ else
+ { fprintf(stderr, "NEVER BE:-ts: Invalid argument (1-3600 seconds)\n");
+ return(NULL);
+ }
+ }
+ else if (strcmp(argv[i], "-n") == 0)
+ { // nr of data pump, before stop collection,
+ // next arg should be a int > 0
+ if (((i+1) < argc) && (atoi(argv[i+1]) >= 1) && (atoi(argv[i+1]) <= 99999))
+ { i++;
+ out_param->req_n = atoi(argv[i]);
+ }
+ else
+ { fprintf(stderr, "NEVER BE:-n: Invalid argument (1-99999 times)\n");
+ return(NULL);
+ }
+ }
+ else if (strcmp(argv[i], "-h") == 0)
+ { // we do NOT want header (default with header)
+ out_param->req_header = 0;
+ }
+ else if (strcmp(argv[i], "-S") == 0)
+ { // we have used use specs from a file instead of standard info,
+ // next arg is an existing readable filename
+ // as already parsed correctly, we skip here.
+ i++;
+ }
+ else if (strcmp(argv[i], "-I") == 0)
+ { // we have used input from a file instead of command line
+ // next arg is an existing readable filename
+ // as already parsed correctly, we skip here.
+ i++;
+ }
+ else
+ {
+ fprintf(stderr, "NEVER BE:Unrecognized option %s\n", argv[i]);
+ return(NULL);
+ }
+ }
+ else
+ { // should be required data
+ tmp = strdup(argv[i]);
+ p = strtok(tmp, ":\t\n");
+ while (p != NULL)
+ {
+ // check if there is an output format specification
+ o = p;
+ while (*o)
+ {
+ o++;
+ if (*o == '-')
+ { *o = '\0';
+ o++;
+ if (strlen(o) == 0)
+ {
+ // we have 'minus', so, probably forget format ...
+
+ fprintf(stderr,
+ "NEVER BE:Required data <%s->, without format specifiers\n", p);
+ return(NULL);
+ }
+ }
+ }
+
+ // we check for params
+ found_data = 0;
+ info = start;
+ while (info->next != NULL)
+ {
+ info = info->next;
+ if (strcmp(p, info->name) == 0)
+ {
+ if (ctr > NM_MAX_FIELDS)
+ {
+ fprintf(stderr, "NEVER BE:too much data field ...");
+ return(NULL);
+ }
+ out_param->data[ctr] = info;
+ out_param->out_f[ctr] = *o;
+ found_data = 1;
+ ctr++;
+ break;
+ }
+ }
+
+ if (found_data == 0)
+ {
+ fprintf(stderr,
+ "NEVER BE:Required data <%s>, not found in info-mon specifications\n", p);
+ return(NULL);
+ }
+
+
+ p = strtok(NULL, ":\t\n");
+
+ } // end while strtok
+
+ // here, we have an array of pointers to required data
+ // and an array of output specifiers, from 0 to [ctr-1]
+
+ } // end else '-' (short options)
+
+ i++;
+
+ } // end while
+
+ if (ctr == 0)
+ {
+ fprintf(stderr, "NEVER BE:no required data!\n");
+ return(NULL);
+ }
+
+ // now, what netmon screen we need to retrieve ?
+ // we need somewhat were checking is faster, as our goal is lower cicle time
+
+ // we can have NM_MAX_SCREEN=254 screens, so we use an array, of unsigned char,
+ // each char contain number of needed screen, 255 is list terminator
+
+ for (i = 0; i <= NM_MAX_SCREEN; i++)
+ out_param->req_screen[i] = 255;
+
+ ctr = 0;
+#ifdef DEBUG
+fprintf(stderr, "Start Required data %s screen %d\n", out_param->data[ctr]->name, out_param->data[ctr]->s_nr);
+#endif
+ while (out_param->data[ctr] != NULL)
+ {
+#ifdef DEBUG
+fprintf(stderr, "Required data %s screen %d\n", out_param->data[ctr]->name, out_param->data[ctr]->s_nr);
+#endif
+ // check if screen already in
+ found_data = 0;
+ i = 0;
+ while (out_param->req_screen[i] != 255)
+ {
+ if (out_param->req_screen[i] == out_param->data[ctr]->s_nr)
+ { // already load, skip
+ found_data = 1;
+ break;
+ }
+ i++;
+ }
+
+ if (found_data == 0)
+ {
+#ifdef DEBUG
+fprintf(stderr, "i = %d, out_param->req_screen[%d] = %d\n", i, i, out_param->data[ctr]->s_nr);
+#endif
+ out_param->req_screen[i] = out_param->data[ctr]->s_nr;
+ i++;
+ }
+
+ ctr++;
+ }
+
+#ifdef DEBUG
+i = 0;
+while (out_param->req_screen[i] != 255)
+{
+ fprintf(stderr, "Required screen %d\n", out_param->req_screen[i]);
+ i++;
+}
+#endif
+
+ if (req_tm)
+ out_param->req_wait = req_tm * 1000;
+ else if (req_ts)
+ out_param->req_wait = req_ts * 1000000;
+ else
+ out_param->req_wait = req_tm * 1000;
+
+
+ return(out_param);
+}
+
+int nmd_output(OUT_INFO_MON *out_param)
+{
+ int d;
+ int len;
+ int ctr;
+ int i;
+ int nr_line;
+ char *p;
+ int nr_chr;
+ int n;
+ char Screen[NM_MAX_SCREEN_WIDTH];
+ time_t sec;
+ struct tm *date_time;
+
+ if (out_param->req_header)
+ {
+// print phone help header
+ d = 0;
+ while (out_param->data[d] != NULL)
+ { len = out_param->data[d]->len;
+ if (strlen(out_param->data[d]->name) > len)
+ len = strlen(out_param->data[d]->name);
+ if (strlen(out_param->data[d]->mname) > len)
+ len = strlen(out_param->data[d]->mname);
+ printf("%*.*s%s", len, len, out_param->data[d]->name, out_param->req_fs);
+ d++;
+ }
+ printf("%s", out_param->req_ls);
+
+// print netmon manual header
+ d = 0;
+ while (out_param->data[d] != NULL)
+ { len = out_param->data[d]->len;
+ if (strlen(out_param->data[d]->name) > len)
+ len = strlen(out_param->data[d]->name);
+ if (strlen(out_param->data[d]->mname) > len)
+ len = strlen(out_param->data[d]->mname);
+ printf("%*.*s%s", len, len, out_param->data[d]->mname, out_param->req_fs);
+ d++;
+ }
+ printf("%s", out_param->req_ls);
+ printf("%s", out_param->req_ls);
+ }
+
+ ctr = 0;
+ while (!bshutdown)
+ {
+// stop after n data punp
+
+ ctr++;
+ if ((out_param->req_n) && (ctr > out_param->req_n))
+ break;
+
+// datapump: for each screen, for each required data, load data info->value
+
+ i = 0;
+ while(out_param->req_screen[i] != 255)
+ {
+ if (out_param->req_screen[i] == 0)
+ {
+ sec = time(0);
+ date_time = localtime(&sec);
+ sprintf(Screen, "%02d-%02d-%04d\n%02d:%02d:%02d\n",
+ date_time->tm_mday,
+ date_time->tm_mon+1,
+ date_time->tm_year+1900,
+ date_time->tm_hour,
+ date_time->tm_min,
+ date_time->tm_sec);
+#ifdef DEBUG
+ fprintf(stderr, "%02d-%02d-%04d\n%02d:%02d:%02d\n",
+ date_time->tm_mday,
+ date_time->tm_mon+1,
+ date_time->tm_year+1900,
+ date_time->tm_hour,
+ date_time->tm_min,
+ date_time->tm_sec);
+#endif
+ }
+ else
+ {
+ GSM->NetMonitor(out_param->req_screen[i], Screen);
+ }
+
+// we have one screen of data, load those required
+
+ d = 0;
+ while (out_param->data[d] != NULL)
+ {
+ if (out_param->data[d]->s_nr == out_param->req_screen[i])
+ {
+ p = Screen;
+// goto req y
+ nr_line = out_param->data[d]->y;
+ while ((*p) && (nr_line))
+ {
+ if (*p == '\n')
+ { nr_line--;
+ }
+ p++;
+ }
+#ifdef DEBUG
+fprintf(stderr, "\nthis line: %s\n\n", p);
+#endif
+
+// goto req x
+ nr_chr = out_param->data[d]->x;
+ while ((*p) && (nr_chr))
+ { p++;
+ nr_chr--;
+ }
+// this the start of data
+ n = 0;
+ len = out_param->data[d]->len;
+ while ((*p) && (len))
+ { out_param->data[d]->value[n] = *p;
+ p++;
+ n++;
+ len--;
+ }
+// pad with space if shorter than presumed
+ while ((*p) && (len))
+ { out_param->data[d]->value[n] = ' ';
+ n++;
+ len--;
+ }
+
+ out_param->data[d]->value[n] = '\0';
+ }
+
+ d++; // next screen
+ }
+
+ i++; // next screen
+ }
+
+// print row of data
+ d = 0;
+ while (out_param->data[d] != NULL)
+ {
+ len = out_param->data[d]->len;
+ if (out_param->req_header)
+ { if (strlen(out_param->data[d]->name) > len)
+ len = strlen(out_param->data[d]->name);
+ if (strlen(out_param->data[d]->mname) > len)
+ len = strlen(out_param->data[d]->mname);
+ }
+// FIXME check format
+ printf("%*.*s%s", len, len, out_param->data[d]->value, out_param->req_fs);
+ d++;
+ }
+ printf("%s", out_param->req_ls);
+
+ usleep(out_param->req_wait);
+
+ }
+
+ printf("%s%s", out_param->req_ls, out_param->req_ls);
+
+ return(0);
+}
+
+// main func
+///////////////////////////////////////////////////////////////////////////////
+int netmonitordata(int argc, char *argv[])
+{
+ char *loc_info = NULL; // path to --netmonitordata directory
+ char *f_name; // absolute path of phone info-file
+ int flag_phone_spec = 0; // flags, set if used -S option
+
+ char model[20] = "phonepar"; // TO DO: PHONE AUTODETECTION
+// char phver[20] = "";
+
+ PARAM_INFO_MON *start; // pointer to list of parsed phone params
+ OUT_INFO_MON *out_param; // pointer to struct of output data
+
+ char *f_commands = NULL; // file containings input line arguments
+ FILE *commands; // Handle for this file
+ char buf[1024]; // buffer
+ char *f_argv[NM_MAX_FIELDS+30]; // space for parameters and cmdline options
+ int f_argc;
+ char *p, *tmp; // various counter, flags, tmp area ...
+ int i;
+ int line;
+
+
+ fbusinit(NULL);
+
+ signal(SIGINT, interrupted);
+
+// FIXME model, phone_version
+
+ // before parsing phone-info-file, we check for user specified phone-info-file
+
+ i = 0;
+ while (i < argc)
+ {
+ if (strcmp(argv[i], "-S") == 0)
+ {
+ if ((i+1) < argc)
+ {
+ flag_phone_spec = 1;
+ loc_info = strdup(argv[i+1]);
+ break;
+ }
+ else
+ { fprintf(stderr, "option -S require an argument ...\n");
+ return -1;
+ }
+ }
+
+ i++;
+ }
+
+ if (loc_info != NULL)
+ { f_name = strdup(loc_info);
+ }
+ else // we use standard file specification
+ {
+ if ((tmp = getenv("INFOMONPATH")) == NULL)
+ { loc_info = strdup(".");
+ }
+ else
+ { loc_info = strdup(tmp);
+ }
+
+ f_name = malloc(strlen(loc_info)+strlen(model)+10);
+ sprintf(f_name, "%s/%s", loc_info, model);
+ }
+
+
+#ifdef DEBUG
+// fprintf(stderr, "Loc_info <%s> model <%s> version <%s>\n", loc_info, model, phver);
+ fprintf(stderr, "Info file: <%s>\n", f_name);
+#endif
+ if ((start = get_mon_param_info(f_name, NULL)) == NULL)
+ return(-1);
+
+ // option -I give us the possibility of specify a filename,
+ // containing a "sequence" of command line args.
+ // if you specify this option, you can use (on command line) only -S option.
+ // other options may be specified inside the input-file.
+ // contents of this file as the same sintax as the command line,
+ // except it must not contain "--netmonitordata" or "-I" or "-S" options
+ ///////////////////////////////////////////////////////////////////////
+
+ i = 0;
+ while (i < argc)
+ {
+ if (strcmp(argv[i], "-I") == 0)
+ {
+ if ((i+1) < argc)
+ {
+ if ((argc == 2) || ((argc == 4) && flag_phone_spec == 1))
+ { f_commands = strdup(argv[i+1]);
+ }
+ else
+ { fprintf(stderr, "option -I accept only additional -S option.\n");
+ return -1;
+ }
+
+ break;
+ }
+ else
+ { fprintf(stderr, "option -I require an argument ...\n");
+ return -1;
+ }
+ }
+
+ i++;
+ }
+
+ // before all, we check all command line
+
+ if (f_commands != NULL)
+ {
+#ifdef DEBUG
+ fprintf(stderr, "netmonitordata(check): commands from <%s>\n", f_commands);
+#endif
+ // for each line
+ // do
+ // read line, make array f_argv, and counter f_argc
+ // parse & check args, so errors are checked before real processing
+ // (-I option here is ignored)
+ // (-S option can be here, and it is used)
+ // done
+
+ if ((commands = fopen(f_commands, "r")) == NULL)
+ { fprintf(stderr, "Can' t open file commands input :<%s>n", f_commands);
+ return(-1);
+ }
+
+// FIXME line may be be splitted
+ line = 0;
+ while (fgets(buf, 1024, commands) != NULL)
+ {
+ p = buf;
+ line++;
+
+ // Truncate from '#' at right of comments
+ if ((tmp = strchr(p, '#')) != NULL)
+ *tmp = '\0';
+
+ // Strip leading, trailing whitespace
+ while(isspace((int) *p))
+ p++;
+
+ while((strlen(p) > 0) && isspace((int) p[strlen(p) - 1]))
+ p[strlen(p) - 1] = '\0';
+
+ // Ignore blank lines
+ if ((*p == '\n') || (*p == '\0'))
+ continue;
+
+#ifdef DEBUG
+fprintf(stderr, "netmonitordata(check): row <%s>\n", p);
+#endif
+ // make args
+ f_argc = 0;
+
+ p = strtok(p, " \t");
+ do
+ { f_argv[f_argc++] = strdup(p);
+#ifdef DEBUG
+fprintf(stderr, "netmonitordata(check): token <%s>\n", p);
+#endif
+ p = strtok(NULL, " \t"); // OK p, (NULL)
+ }
+ while ((p != NULL) && (*p));
+
+ // here we have f_argc, f_argv, this line is OK
+
+ if (parse_check(f_argc, f_argv, start, f_commands, line) != 0)
+ { free_nm_info(start);
+ return(-1);
+ }
+ }
+
+ fclose(commands);
+ }
+ else // as above, but we have only command line, argv, argc.
+ {
+ if (parse_check(argc, argv, start, NULL, 0) != 0)
+ { free_nm_info(start);
+ return(-1);
+ }
+ }
+
+ // here, all commands line are checked, and are correct
+
+ if (f_commands != NULL)
+ {
+#ifdef DEBUG
+ fprintf(stderr, "netmonitordata(process): commands from <%s>\n", f_commands);
+#endif
+
+ // for each line
+ // do
+ // read line, make array f_argv, and counter f_argc
+ // parse_process argument, (-I option here is ignored)
+ // (-S option can be here, and it is used)
+ // (make header // these are in nmd_output();
+ // loop
+ // get net-mon-info
+ // make output
+ // done)
+ // done
+
+ if ((commands = fopen(f_commands, "r")) == NULL)
+ { fprintf(stderr, "Can' t open file commands input :<%s>n", f_commands);
+ return(-1);
+ }
+
+// FIXME line may be be splitted
+ while (fgets(buf, 1024, commands) != NULL)
+ {
+ p = buf;
+
+ // Truncate from '#' at right of comments
+ if ((tmp = strchr(p, '#')) != NULL)
+ *tmp = '\0';
+
+ // Strip leading, trailing whitespace
+ while(isspace((int) *p))
+ p++;
+
+ while((strlen(p) > 0) && isspace((int) p[strlen(p) - 1]))
+ p[strlen(p) - 1] = '\0';
+
+ // Ignore blank lines
+ if ((*p == '\n') || (*p == '\0'))
+ continue;
+
+ // make args
+
+ f_argc = 0;
+ p = strtok(p, " \t");
+ do
+ { f_argv[f_argc++] = strdup(p);
+ p = strtok(NULL, " \t"); // OK p, (NULL)
+ }
+ while ((p != NULL) && (*p));
+
+ // here we have f_argc, f_argv, this line is OK
+
+ if ((out_param = parse_process(f_argc, f_argv, start)) == NULL)
+ { free_nm_info(start);
+ return(-1); /* NEVER BE */
+ }
+
+ // here, command line has no error ...
+
+ nmd_output(out_param);
+
+ free(out_param);
+ }
+
+ fclose(commands);
+ }
+ else // as above, but we have only command line, argv, argc.
+ {
+ if ((out_param = parse_process(argc, argv, start)) == NULL)
+ { free_nm_info(start);
+ return(-1); /* NEVER BE */
+ }
+ nmd_output(out_param);
+
+ free(out_param);
+ }
+ GSM->Terminate();
+
+ free(loc_info);
+ free(f_name);
+
+/* I analised this source and this should be done. But when compile with VC6 */
+/* I have error. So, commented... MW */
+#ifndef VC6
+ free_nm_info(start);
+#endif
+
+ return(0);
+}
+
+
+// used by nm_collect()
+///////////////////////////////////////////////////////////////////////////////
+char *rowScreen(char *s)
+{
+ char *p;
+
+ // make Screen in one row
+ p = s;
+ while(*p)
+ {
+ if (*p == '\n')
+ *p = ' ';
+ p++;
+ }
+
+ return(s);
+}
+
+void printtime(void)
+{
+
+ struct mydate {
+ int Year; /* The complete year specification - e.g. 1999. Y2K :-) */
+ int Month; /* January = 1 */
+ int Day;
+ int Hour;
+ int Minute;
+ int Second;
+ int Timezone; /* The difference between local time and GMT */
+ } Date;
+
+ struct tm *now;
+ time_t nowh;
+ nowh=time(NULL);
+ now=localtime(&nowh);
+
+ Date.Year = now->tm_year;
+ Date.Month = now->tm_mon+1;
+ Date.Day = now->tm_mday;
+ Date.Hour = now->tm_hour;
+ Date.Minute = now->tm_min;
+ Date.Second = now->tm_sec;
+
+ /* I have 100 (for 2000) Year now :-) */
+ if (Date.Year>99 && Date.Year<1900) {
+ Date.Year=Date.Year+1900;
+ }
+
+ printf("%d:%d:%d:%d:%d:%d ",Date.Day,Date.Month,Date.Year,Date.Hour,Date.Minute,Date.Second);
+
+}
+
+// like netmonitor(), but print in one row, 1, 2 or 3 screen, every ~0.3 s
+///////////////////////////////////////////////////////////////////////////////
+int nm_collect(int argc, char *argv[])
+{
+ int mode[MAX_NM_COLLECT];
+ char Screen[NM_MAX_SCREEN_WIDTH];
+ int i;
+
+ for (i=0;i<argc;i++) {
+ argc > i ? (mode[i] = atoi(argv[i])): (mode[i] = 0);
+ }
+
+ for (i=0;i<argc;i++) {
+ if (mode[i]==0 && strcmp(argv[i],"-d")) {
+ fprintf(stderr, "Wrong %i parameter (not number and not -d)\n",i);
+ return(-1);
+ }
+ }
+
+ signal(SIGINT, interrupted);
+
+ fbusinit(NULL);
+
+ // end on CTRL-C
+ while (!bshutdown)
+ {
+ for (i=0;i<argc;i++) {
+ if (!strcmp(argv[i],"-d")) {
+ printtime();
+ break;
+ }
+ }
+
+ for (i=0;i<argc;i++) {
+ if (mode[i]!=0)
+ {
+ GSM->NetMonitor(mode[i], Screen);
+ printf("%s::", rowScreen(Screen));
+ }
+ }
+
+ printf("\n\n");
+
+ usleep(150000);
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+#ifdef DEBUG
+int sniff(int argc, char *argv[])
+{
+ /* base model comes from gnokiirc */
+ strcat(model,"sniff");
+
+ if (argc>0) strcpy(Port,argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ /* Loop here indefinitely - allows you to see messages from GSM code in
+ response to unknown messages etc. The loops ends after pressing the
+ Ctrl+C. */
+ while (!bshutdown) {
+ sleep(1);
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int decodefile(int argc, char *argv[])
+{
+ FILE *infile;
+ unsigned char in_buffer[255];
+ int nr_read = 0;
+ int i = 0;
+
+ /* base model comes from gnokiirc */
+ strcat(model,"decode");
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ printf ("open InPutFile: %s\n", argv[0]);
+ if ( (infile = fopen( argv[0], "rb")) == NULL ) {
+ printf ("Failed to open InPutFile: %s\n", argv[0]);
+ exit (1); }
+
+ while ( (nr_read = fread(in_buffer, 1, 16, infile)) > 0 ) {
+ for (i=0; i < nr_read; i++)
+ Protocol->StateMachine(in_buffer[i]);
+ }
+
+ return 0;
+}
+
+#endif
+
+int getringtone(int argc, char *argv[])
+{
+ GSM_BinRingtone ringtone;
+ GSM_Error error;
+ GSM_Ringtone SMringtone;
+
+ int i;
+
+ char model[64];
+
+ FILE *file;
+
+ ringtone.location=1;
+ if (argc>1) ringtone.location=atoi(argv[1]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetBinRingtone(&ringtone);
+
+ while (GSM->GetModel(model) != GE_NONE)
+ sleep(1);
+
+ GSM->Terminate();
+
+ fprintf(stdout, _("Downloaded ringtone, location %i: "),ringtone.location);
+
+ switch (error) {
+ case GE_NONE:
+ fprintf(stdout, _("get succeeded!\n"));
+ fprintf(stdout, _("Name: %s (binary format)\n"),ringtone.name);
+ break;
+ case GE_INVALIDRINGLOCATION:
+ fprintf(stdout, _("invalid location %i!\n"),ringtone.location);
+ break;
+ case GE_UNKNOWNMODEL:
+
+ /* In 3310 we have normal "Smart Messaging" format */
+ if (GetModelFeature (FN_RINGTONES)==F_RING_SM) {
+
+ i=7;
+ if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8;
+ ringtone.frame[i]=0x02;
+
+ GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i);
+
+ fprintf(stdout, _("Name: %s (normal format)\n"),SMringtone.name);
+
+ GSM_SaveRingtoneFileOnConsole(argv[0], &SMringtone);
+
+ return 0;
+ }
+
+ fprintf(stdout, _("mygnokii doesn't know format for this model!\n"));
+ break;
+ case GE_NOTIMPLEMENTED:
+ fprintf(stdout, _("not implemented for this model!\n"));
+ break;
+ default:
+ fprintf(stdout, _("not supported by this model!\n"));
+ break;
+ }
+
+ if (error!=GE_NONE)
+ return(-1);
+
+ file = fopen(argv[0], "wb");
+
+ if (!file)
+ return(GE_CANTOPENFILE);
+
+ fwrite(ringtone.frame, 1, ringtone.length, file);
+
+ fclose(file);
+
+ return 0;
+
+}
+
+int binringtoneconvert(int argc, char *argv[])
+{
+ GSM_BinRingtone ringtone;
+
+ int i,j,z;
+ bool isok;
+ int deflen=7,m,w;
+ bool pause;
+
+ FILE *file;
+
+//{ "c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "a#", "h" };
+ int binary_notes[12] =
+ { 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11 , 12};
+
+ if (GSM_ReadBinRingtoneFile(argv[0],&ringtone)!=GE_NONE) {
+ fprintf(stdout,_("Failed to read %s file!\n"),argv[0]);
+ return -1;
+ }
+
+ file = fopen(argv[1], "wb");
+
+ if (!file)
+ return(GE_CANTOPENFILE);
+
+ i=5;
+ while (true) {
+ if (ringtone.frame[i]==0) break;
+ fprintf(file,_("%c"),ringtone.frame[i]);
+ i++;
+ }
+
+ fprintf(file,_(":d=32,o=5,b=300:"));
+
+ i=i+5;j=0;z=0;
+ while (true) {
+ if (ringtone.frame[i]!=j) {
+ if (j!=0) {
+ isok=false;
+ if (j==64) {
+ j=255;//Pause
+ isok=true;
+ }
+ if (!isok && j>=114 && j<=125) {
+ j=14*3+binary_notes[j-114];
+ isok=true;
+ }
+ if (!isok && j>=126 && j<=137) {
+ j=14*1+binary_notes[j-126];
+ isok=true;
+ }
+ if (!isok && j>=138 && j<=149) {
+ j=14*2+binary_notes[j-138];
+ isok=true;
+ }
+ if (!isok && j>=150 && j<=161) {
+ j=14*4+binary_notes[j-150];
+ isok=true;
+ }
+ if (!isok) {
+ if (j!=10) {
+ fprintf(stdout,_("Unknown block in binary ringtone %i %i\n"),j,z);
+ }
+ } else {
+ w=deflen;
+ for (m=0;m<6;m++) {
+ w=w*2;
+ if (w>z && (w/2)<=z) {
+ switch (m) {
+ case 1:fprintf(file,_("16"));break;\r
+ case 2:fprintf(file,_("8"));break;\r
+ case 3:fprintf(file,_("4"));break;\r
+ case 4:fprintf(file,_("2"));break;\r
+ case 5:fprintf(file,_("1"));break;\r
+ }
+ break;
+ }
+ }
+ if (z>w) fprintf(file,_("1"));
+ pause=false;
+ switch (GSM_GetNote(j)) {\r
+ case Note_C :fprintf(file,_("c"));break;\r
+ case Note_Cis:fprintf(file,_("c#"));break;\r
+ case Note_D :fprintf(file,_("d"));break;\r
+ case Note_Dis:fprintf(file,_("d#"));break;\r
+ case Note_E :fprintf(file,_("e"));break;\r
+ case Note_F :fprintf(file,_("f"));break;\r
+ case Note_Fis:fprintf(file,_("f#"));break;\r
+ case Note_G :fprintf(file,_("g"));break;\r
+ case Note_Gis:fprintf(file,_("g#"));break;\r
+ case Note_A :fprintf(file,_("a"));break;\r
+ case Note_Ais:fprintf(file,_("a#"));break;\r
+ case Note_H :fprintf(file,_("h"));break;\r
+ default :pause=true;fprintf(file,_("p"));break; //Pause ?\r
+ }\r
+ w=deflen*1.5;
+ for (m=0;m<6;m++) {
+ w=w*2;
+ if (w>z && (w/2)<=z) {
+ fprintf(file,_("."));
+ break;
+ }
+ }
+ if ((j/14)!=1 && !pause) fprintf(file,_("%i"),j/14);
+ fprintf(file,_(","));
+ }
+ }
+ j=ringtone.frame[i];
+ z=ringtone.frame[i+1];
+ } else {
+ z=z+ringtone.frame[i+1];
+ }
+ i=i+2;
+ if (i>=ringtone.length) break;
+ }
+
+ fclose(file);
+
+ return 0;
+
+}
+
+int renamesmsc(int argc, char *argv[])
+{
+ GSM_MessageCenter MessageCenter;
+
+ MessageCenter.No=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ if (GSM->GetSMSCenter(&MessageCenter) == GE_NONE) {
+ fprintf(stdout,_("SMSC number %i get OK\n"),MessageCenter.No);
+ } else {
+ GSM->Terminate();
+ fprintf(stdout,_("Error getting SMSC number %i\n"),MessageCenter.No);
+ return 0;
+ }
+
+ strncpy(MessageCenter.Name,argv[1],10);
+
+ if (GSM->SetSMSCenter(&MessageCenter) == GE_NONE) {
+ fprintf(stdout,_("SMSC number %i set OK (renamed to \"%s\")\n"),MessageCenter.No,MessageCenter.Name);
+ } else {
+ GSM->Terminate();
+ fprintf(stdout,_("Error setting SMSC number %i\n"),MessageCenter.No);
+ return 0;
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/*
+ * Returns number of sostituited characters.
+ * ... may be useful one day ??
+ */
+int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction )
+ /* direction = 0 : after reading phone memory (
+ * 1 : writing phone memory
+ */
+{
+ register int i;
+ register int count=0;
+ char charfrom, charto;
+
+ charfrom= (direction==0) ? ';' : '|';
+ charto = (direction==0) ? '|' : ';';
+
+ count+=str_substch(pentry->Name, charfrom, charto );
+ count+=str_substch(pentry->Number, charfrom, charto );
+
+ for( i = 0; i < pentry->SubEntriesCount; i++ )
+ {
+ if( pentry->SubEntries[i].EntryType != GSM_Date )
+ count+=str_substch(pentry->SubEntries[i].data.Number ,charfrom,charto);
+ }
+
+ return( count );
+}
+
+int str_substch( char *str, const char toric, const char sost )
+{
+ unsigned int ct;
+ int i_sost=0;
+
+ for( ct = 0; ct < strlen(str); ct++ )
+ if( str[ct] == (unsigned char) toric )
+ { str[ct] = sost; i_sost++; }
+
+ return( i_sost );
+}
+
+/* Allows to set simlock state.
+ With older phone (older 51xx, 61xx) can open them, with older
+ and newer should be able to close them */
+/* DO NOT TRY, IF DON'T WANT, WHAT YOU DO !!!!!!!!!! */
+int setsimlock()
+{
+ GSM_AllSimlocks siml;
+
+ unsigned char closebuffer[20]=
+ { 0x00, 0x01, 0x82, 0x01,
+ 0x00, /* which simlock */
+ 0x00, 0x00,
+ 0x00, 0x00, 0x00, /* lock 1 info */
+ 0x00, 0x00, 0x00, 0x00, 0x00, /* lock 4 info */
+ 0x00, 0x00, /* lock 2 info */
+ 0x00, 0x00, /* lock 3 info */
+ 0x00};
+ unsigned char openbuffer[10]= { 0x00, 0x01, 0x81, 0x01,
+ 0x00, /* lock number */
+ 0x10, 0x10, 0x10, 0x10, 0x10 };
+ unsigned char openbuffer0[10]= {0x00, 0x01, 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00 };
+
+ unsigned char info[120];
+ int i,j;
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+ if (strstr(GSM_Info->FBUSModels, "3310") == NULL)
+ {
+ fprintf(stderr,("Not supported\n"));
+ GSM->Terminate();
+ return -1;
+ }
+ N6110_EnableExtendedCommands(0x02);
+ /* Initial info */
+ if (GSM->SimlockInfo(&siml)!=GE_NONE) {
+ fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1;
+ }
+ /* Opening all locks (we must check, if we can open them) */
+ NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer0);
+ openbuffer[4]=1;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=2;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=4;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=8;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ if (GSM->SimlockInfo(&siml)!=GE_NONE) {
+ fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1;
+ }
+ for (i=0;i<4;i++) {
+ if (siml.simlocks[i].enabled) {
+ fprintf(stderr,_("Can not open simlock %i\n"),i+1);GSM->Terminate();return -1;
+ }
+ }
+ /* Making frame for closing simlocks */
+ strcpy(info,"00101");
+ j=0;i=7;
+ while (j!=strlen(info)) {
+ if (j+2<=strlen(info)) {
+ closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+ } else {
+ closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+ }i++;
+ }
+ strcpy(info,"0000");j=0;i=15;
+ while (j!=strlen(info)) {
+ if (j+2<=strlen(info)) {
+ closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+ } else {
+ closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+ }i++;
+ }
+ strcpy(info,"0000");j=0;i=17;
+ while (j!=strlen(info)) {
+ if (j+2<=strlen(info)) {
+ closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+ } else {
+ closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+ }i++;
+ }
+ strcpy(info,"0000000001");j=0;i=9;
+ while (j!=strlen(info)) {
+ if (j+2<=strlen(info)) {
+ if (j==0) {
+ closebuffer[i]=closebuffer[i] | (info[j] & 0x0f);j++;
+ } else {
+ closebuffer[i]=((info[j] & 0x0f)<<4) | (info[j+1] & 0x0f);j=j+2;
+ }
+ } else {
+ closebuffer[i]=(info[j] & 0x0f) << 4;j++;
+ }i++;
+ }
+ /* Closing simlock with given values */
+ closebuffer[4]=1+2+4+8;
+ NULL_SendMessageSequence\r(50, &CurrentMagicError, 20, 0x40,closebuffer);
+ /* Opening all locks */
+ NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer0);
+ openbuffer[4]=1;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=2;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=4;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ openbuffer[4]=8;NULL_SendMessageSequence\r(50, &CurrentMagicError, 10, 0x40,openbuffer);
+ GSM->Reset(0x03);
+ GSM->Terminate();
+ return 0;
+}
+
+int simlockinfo()
+{
+ GSM_AllSimlocks siml;
+ char s[7];
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ if (GSM->SimlockInfo(&siml)!=GE_NONE) fprintf(stderr,_("Error\n"));
+
+ fprintf(stdout,_("MCC + MNC : %s ("),siml.simlocks[0].data);
+ if (siml.simlocks[0].enabled) fprintf(stdout,_("CLOSED"));
+ else fprintf(stdout,_("opened"));
+ if (siml.simlocks[0].factory) fprintf(stdout,_(") (factory"));
+ else fprintf(stdout,_(") (user"));
+ fprintf(stdout,_(") (counter %i"),siml.simlocks[0].counter);
+
+ s[0]=siml.simlocks[0].data[0];
+ s[1]=siml.simlocks[0].data[1];
+ s[2]=siml.simlocks[0].data[2];
+ s[3]=' ';
+ s[4]=siml.simlocks[0].data[3];
+ s[5]=siml.simlocks[0].data[4];
+ s[6]=0;
+
+ if (strcmp(GSM_GetNetworkName(s),"unknown"))
+ fprintf(stdout,_(") (network \"%s\""),GSM_GetNetworkName(s));
+
+ fprintf(stdout,_(")\n"));
+
+ fprintf(stdout,_("GID1 : %s ("),siml.simlocks[1].data);
+ if (siml.simlocks[1].enabled) fprintf(stdout,_("CLOSED"));
+ else fprintf(stdout,_("opened"));
+ if (siml.simlocks[1].factory) fprintf(stdout,_(") (factory"));
+ else fprintf(stdout,_(") (user"));
+ fprintf(stdout,_(") (counter %i"),siml.simlocks[1].counter);
+ fprintf(stdout,_(")\n"));
+
+ fprintf(stdout,_("GID2 : %s ("),siml.simlocks[2].data);
+ if (siml.simlocks[2].enabled) fprintf(stdout,_("CLOSED"));
+ else fprintf(stdout,_("opened"));
+ if (siml.simlocks[2].factory) fprintf(stdout,_(") (factory"));
+ else fprintf(stdout,_(") (user"));
+ fprintf(stdout,_(") (counter %i"),siml.simlocks[2].counter);
+ fprintf(stdout,_(")\n"));
+
+ fprintf(stdout,_("MSIN : %s ("),siml.simlocks[3].data);
+ if (siml.simlocks[3].enabled) fprintf(stdout,_("CLOSED"));
+ else fprintf(stdout,_("opened"));
+ if (siml.simlocks[3].factory) fprintf(stdout,_(") (factory"));
+ else fprintf(stdout,_(") (user"));
+ fprintf(stdout,_(") (counter %i"),siml.simlocks[3].counter);
+ fprintf(stdout,_(")\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Getting EEPROM from older phones */
+/* Tested with N5110 5.07, 6150 5.22 */
+int geteeprom()
+{
+ int i=0x40;
+
+ unsigned char buffer[1000]={ 0x00, 0x01, 0xd4, 0x02, 0x00, 0xa0,
+ 0x00, 0x00, /* location Lo and Hi */
+ 0x10 }; /* how many bytes */
+
+ strcpy(Connection,"mbus");
+ fprintf(stderr,_("Switching connection type to MBUS\n"));
+
+ strcpy(model,"5110");
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ if (strstr(GSM_Info->FBUSModels, "3310") == NULL)
+ {
+ fprintf(stderr,("Not supported\n"));
+ GSM->Terminate();
+ return -1;
+ }
+
+ for (i=0;i<64;i++) {
+ fprintf(stdout,_("%c"),0xff);
+ }
+
+ while (i<300000) {
+ buffer[6] = i/256;
+ buffer[7] = i%256;
+
+ if ((i/256)!=((i-1)/256)) fprintf(stderr,_("."));
+
+ if (NULL_SendMessageSequence(50, &CurrentMagicError, 9, 0x40,buffer)!=GE_NONE)\r break;
+
+ i=i+0x10;
+ }
+
+ fprintf(stderr,_("\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int getsmsfolders()
+{
+ GSM_SMSFolders folders;
+ GSM_Error error;
+
+ int i;
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ folders.number = 0;
+
+ error=GSM->GetSMSFolders(&folders);
+
+ GSM->Terminate();
+
+ if (error!=GE_NONE && !folders.number) {
+ fprintf(stdout,_("Error!\n"));
+ return -1;
+ }
+
+ for (i=0;i<folders.number;i++) {
+ fprintf(stdout,_("%i. %s\n"),i+1,folders.Folder[i].Name);
+ }
+
+ return 0;
+}
+
+int resetphonesettings()
+{
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ GSM->ResetPhoneSettings();
+
+ GSM->Reset(0x03);
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+/* Checked on 3310 4.02 and doesn't work.
+ Possible reasons: SMSC has problems (possible), bug in phone firmware
+ (very possible) or here in code.
+ I quess, that the second is the most possible - 3310 treat only 3 SMS
+ as linked (the most often profile needs 4 - 2 and few bytes in 3'th
+ for screen saver, few bytes for profile name and 1 or 2 sms for ringtone).
+ When send separate ringtone (see --sendringtone with --profilestyle)
+ and screen saver (--sendlogo screensaver...), it's received OK.
+ It's for checking in higher firmware. */
+int sendprofile(int argc, char *argv[])
+{
+ GSM_Ringtone ringtone;
+ GSM_Bitmap bitmap;
+ GSM_MultiSMSMessage MultiSMS;
+
+ int current=0,i,j;
+
+ u8 MessageBuffer[140*4];
+ u16 MessageLength=0;
+
+ char profilename[10+1];
+
+ if (GSM_ReadRingtoneFileOnConsole(argv[2], &ringtone)!=GE_NONE) return(-1);
+
+ ringtone.allnotesscale=false;
+ for (i=0;i<argc;i++)
+ if (!strcmp(argv[i],"--scale")) ringtone.allnotesscale=true;
+
+ /* The fourth argument is the bitmap file. */
+ if (GSM_ReadBitmapFileOnConsole(argv[3], &bitmap)!=GE_NONE) return -1;
+
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+
+ strncpy(profilename,argv[1],10);
+
+ MessageBuffer[MessageLength++]=0x30; //SM version. Here 3.0
+
+ MessageBuffer[MessageLength++]=SM30_PROFILENAME; //ID for profile name
+ MessageBuffer[MessageLength++]=0x00; //length hi
+ MessageBuffer[MessageLength++]=strlen(profilename);//length lo
+
+ EncodeUnicode (MessageBuffer+MessageLength,profilename ,strlen(profilename));
+ MessageLength=MessageLength+2*strlen(profilename);
+
+ MessageBuffer[MessageLength++]=SM30_RINGTONE; //ID for ringtone
+ i=MessageLength;
+ MessageBuffer[MessageLength++]=0x01; //length hi
+ MessageBuffer[MessageLength++]=0x00; //length lo
+
+ j=SM30_MAX_RINGTONE_FRAME_LENGTH;
+ current=GSM_PackRingtone(&ringtone, MessageBuffer+MessageLength, &j);
+ MessageLength=MessageLength+j;
+
+ if (current!=ringtone.NrNotes) {
+ if (current>FB61_MAX_RINGTONE_NOTES) {
+ fprintf(stderr,_("Warning: due to phone limitation"));
+ } else {
+ fprintf(stderr,_("Warning: ringtone was too long to be saved into SMS,"));
+ }
+ fprintf(stderr, _(" only %i first notes were packed (%i cut)\n"),current,ringtone.NrNotes-current);
+ }
+
+ MessageBuffer[i]=(j)/256;
+ MessageBuffer[i+1]=(j)%256;
+
+ MessageBuffer[MessageLength++]=SM30_SCREENSAVER; //ID for OTA screen saver
+ MessageBuffer[MessageLength++]=0x01; //length hi
+ MessageBuffer[MessageLength++]=0x00; //length lo
+ MessageBuffer[MessageLength++]=0x00;
+ MessageBuffer[MessageLength++]=bitmap.width;
+ MessageBuffer[MessageLength++]=bitmap.height;
+ MessageBuffer[MessageLength++]=0x01;
+
+ memcpy(MessageBuffer+MessageLength,bitmap.bitmap,bitmap.size);
+ MessageLength=MessageLength+bitmap.size;
+
+ GSM_MakeMultiPartSMS2(&MultiSMS,MessageBuffer,MessageLength, GSM_ProfileUDH, GSM_Coding_Default);
+
+ optind = 4;
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ for (i=0;i<MultiSMS.number;i++)
+ strcpy(MultiSMS.SMS[i].Destination,argv[0]);
+
+ return GSM_SaveMultiPartSMSOnConsole(&MultiSMS, optind,argc,argv,false,false,false,false);
+}
+
+int showbitmap(int argc, char *argv[])
+{
+ GSM_Bitmap bitmap;
+
+ if (GSM_ReadBitmapFileOnConsole(argv[0], &bitmap)!=GE_NONE) return(-1);
+
+ GSM_PrintBitmap(&bitmap);
+
+ return 0;
+}
+
+int getwapsettings(int argc, char *argv[])
+{
+ GSM_WAPSettings settings;
+ GSM_Error error;
+
+ settings.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPSettings(&settings);
+
+ switch (error) {
+ case GE_NONE:
+ fprintf(stdout,_("%s."),argv[0]);
+ if (!(strcmp(settings.title,""))) fprintf(stdout,_("Set %s\n"),argv[0]);
+ else fprintf(stdout,_("%s\n"),settings.title);
+ fprintf(stdout,_("Homepage: %s\n"),settings.homepage);
+ if (settings.iscontinuous) fprintf(stdout,_("Connection type: continuous\n"));
+ else fprintf(stdout,_("Connection type: temporary\n"));
+ if (settings.issecurity) fprintf(stdout,_("Connection security: on\n"));
+ else fprintf(stdout,_("Connection security: off\n"));
+ switch (settings.bearer) {
+ case WAPSETTINGS_BEARER_SMS:
+ fprintf(stdout,_("Bearer: SMS\n"));
+ fprintf(stdout,_("Server number: %s\n"),settings.server);
+ fprintf(stdout,_("Service number: %s\n"),settings.service);
+ break;
+ case WAPSETTINGS_BEARER_DATA:
+ fprintf(stdout,_("Bearer: Data (CSD)\n"));
+ fprintf(stdout,_("Dial-up number: %s\n"),settings.dialup);
+ fprintf(stdout,_("IP address: %s\n"),settings.ipaddress);
+ if (settings.isnormalauthentication) fprintf(stdout,_("Authentication type: normal\n"));
+ else fprintf(stdout,_("Authentication type: secure\n"));
+ if (settings.isISDNcall) fprintf(stdout,_("Data call type: ISDN\n"));
+ else fprintf(stdout,_("Data call type: analogue\n"));
+ if (settings.isspeed14400) fprintf(stdout,_("Data call speed: 14400\n"));
+ else fprintf(stdout,_("Data call speed: 9600\n"));
+ fprintf(stdout,_("User name: %s\n"),settings.user);
+ fprintf(stdout,_("Password: %s\n"),settings.password);
+ break;
+ case WAPSETTINGS_BEARER_USSD:
+ fprintf(stdout,_("Bearer: USSD\n"));
+ fprintf(stdout,_("Service code: %s\n"),settings.code);
+ if (settings.isIP) fprintf(stdout,_("Address type: IP address\nIPaddress: %s\n"),settings.service);
+ else fprintf(stdout,_("Address type: service number\nService number: %s\n"),settings.service);
+ break;
+ }
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+/* Not full done now */
+int savewapsettings(int argc, char *argv[])
+{
+ GSM_WAPSettings settings;
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_Error error;
+ int w;
+
+ settings.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPSettings(&settings);
+// strcpy(settings.homepage,"http://OtherSites/");
+// strcpy(settings.title,"Orange");
+
+ error=GE_NONE;
+
+ switch (error) {
+ case GE_NONE:
+ /* Put settings into SMS structure */
+ GSM_SaveWAPSettingsToSMS(&MultiSMS,&settings);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,"WAPSettings");
+
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS,1,argc,argv,false,false,false,false);
+ return 0;
+
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int sendwapsettings(int argc, char *argv[])
+{
+ GSM_WAPSettings settings;
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_Error error;
+ int w;
+
+ settings.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPSettings(&settings);
+// strcpy(settings.homepage,"http://OtherSites/");
+// strcpy(settings.title,"Orange");
+
+ error=GE_NONE;
+
+ switch (error) {
+ case GE_NONE:
+ /* Put settings into SMS structure */
+ GSM_SaveWAPSettingsToSMS(&MultiSMS,&settings);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,argv[1]);
+
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false);
+
+ return 0;
+
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int getwapbookmark(int argc, char *argv[])
+{
+ GSM_WAPBookmark bookmark;
+ GSM_Error error;
+
+ bookmark.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPBookmark(&bookmark);
+
+ switch (error) {
+ case GE_NONE:
+ if (bookmark.address[0]==0) {
+ fprintf(stdout,_("Empty bookmark location\n"));
+ } else {
+ fprintf(stdout,_("Address: \"%s\"\n"),bookmark.address);
+ if (bookmark.title[0]==0)
+ fprintf(stdout,_("Title: \"%s\"\n"),bookmark.address);
+ else
+ fprintf(stdout,_("Title: \"%s\"\n"),bookmark.title);
+ }
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int setwapbookmark(int argc, char *argv[])
+{
+ GSM_WAPBookmark bookmark;
+ GSM_Error error;
+
+ if (argc == 3) /* if location given, use it */
+ bookmark.location=atoi(argv[2]);
+ else /* else use first empty location */
+ bookmark.location=0xffff;
+
+ strcpy(bookmark.title, argv[0]);
+ strcpy(bookmark.address, argv[1]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->SetWAPBookmark(&bookmark);
+
+ switch (error) {
+ case GE_NONE:
+ fprintf(stdout,_("No errors\n"));
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int savewapbookmark(int argc, char *argv[])
+{
+ GSM_WAPBookmark bookmark;
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_Error error;
+ int w;
+
+ bookmark.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPBookmark(&bookmark);
+
+// strcpy(bookmark.title,"tytulagagagagagagagagagagagagagagagagagagagagagend");
+// strcpy(bookmark.address,"http://jajajajajajajajajajajajagagagagagagagagagagagagagagagagagagagagagpapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap¥papapapapapapapapagagagagagagagagagagagagagagagagagagagagagagagagagadadadadadadadajdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdstp");
+ error=GE_NONE;
+
+ switch (error) {
+ case GE_NONE:
+
+ if (bookmark.address[0]==0) {
+ fprintf(stdout,_("Empty bookmark location\n"));
+ GSM->Terminate();
+ return 1;
+ }
+
+ /* Put bookmark into SMS structure */
+ GSM_SaveWAPBookmarkToSMS(&MultiSMS,&bookmark);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,"WAPBookmark");
+
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 1,argc,argv,false,false,false,false);
+ return 0;
+
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int sendwapbookmark(int argc, char *argv[])
+{
+ GSM_WAPBookmark bookmark;
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_Error error;
+ int w;
+
+ bookmark.location=atoi(argv[0]);
+
+ /* Initialise the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->GetWAPBookmark(&bookmark);
+
+ switch (error) {
+ case GE_NONE:
+
+ if (bookmark.address[0]==0) {
+ fprintf(stdout,_("Empty bookmark location\n"));
+ GSM->Terminate();
+ return 1;
+ }
+
+ /* Put bookmark into SMS structure */
+ GSM_SaveWAPBookmarkToSMS(&MultiSMS,&bookmark);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,argv[1]);
+
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false);
+ return 0;
+
+ break;
+ default:
+ fprintf(stderr,_("%s\n"),print_error(error));
+ }
+
+ GSM->Terminate();
+
+ return 0;
+
+}
+
+int savecalendarnote(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ int w;
+ GSM_CalendarNote CalendarNote;
+ int number;
+
+ number=atoi(argv[1]);
+
+ if (number<1) {
+ fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+ return -1;
+ }
+
+ switch ( GSM_ReadVCalendarFile(argv[0], &CalendarNote, &number) ) {
+ case GE_NONE:
+ break;
+ case GE_CANTOPENFILE:
+ fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[0]);
+ return -1;
+ case GE_TOOSHORT:
+ fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+ return(-1);
+ default:
+ fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[0]);
+ return -1;
+ }
+
+ fbusinit(NULL);
+
+ /* Put note into SMS structure */
+ GSM_SaveCalendarNoteToSMS(&MultiSMS,&CalendarNote);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,"Calendar");
+
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false,false);
+
+ return 0;
+}
+
+int sendcalendarnote(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ int w;
+ GSM_CalendarNote CalendarNote;
+ int number;
+
+ number=atoi(argv[2]);
+
+ if (number<1) {
+ fprintf(stdout, _("Number of calendar note must be 1 or higher\n"));
+ return -1;
+ }
+
+ switch ( GSM_ReadVCalendarFile(argv[1], &CalendarNote, &number) ) {
+ case GE_NONE:
+ break;
+ case GE_CANTOPENFILE:
+ fprintf(stdout, _("Failed to open vCalendar file \"%s\"\n"),argv[1]);
+ return -1;
+ case GE_TOOSHORT:
+ fprintf(stdout, _("Number of given calendar note is too high (max=%i)\n"),number);
+ return(-1);
+ default:
+ fprintf(stdout, _("Failed to parse vCalendar file \"%s\"\n"),argv[1]);
+ return -1;
+ }
+
+ fbusinit(NULL);
+
+ /* Put note into SMS structure */
+ GSM_SaveCalendarNoteToSMS(&MultiSMS,&CalendarNote);
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,argv[0]);
+
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, 3,argc,argv,false,false,false);
+
+ return 0;
+}
+
+/* Example function for continuous receiving SMS */
+/* When phone receives SMS, it's read by mygnokii, ID number is created
+ and SMS is saved to file. After it it's deleted
+ Checking many errors is also done */
+int receivesms(int argc, char *argv[])
+{
+ char Dir[500];
+
+ GSM_SMSStatus SMSStatus = {0, 0};
+ GSM_SMSMessage SMS;
+ int read, location, number;
+ unsigned char name[50],filename[400];
+ char nowdate[12]="", nowtime[12]="";
+ FILE *file;
+ FILE *logfile;
+ struct CFG_Header *cfg_info;
+
+ /* We do not want to monitor serial line forever - press Ctrl+C to stop the
+ monitoring mode. */
+
+ signal(SIGINT, interrupted);
+
+ fprintf (stderr, _("Entering monitor mode (press CTRL+C to break)...\n"));
+
+ cfg_info=CFG_FindGnokiirc();
+
+ strcpy(Dir,"");
+ if (cfg_info!=NULL) {
+ if (CFG_Get(cfg_info, "receivesms", "path")) {
+ strcpy(Dir,CFG_Get(cfg_info, "receivesms", "path"));
+ }
+ }
+
+ fprintf(stderr,_("Path for sms files is \"%s\"\n"),Dir);
+
+ fprintf (stderr, _("Initialising GSM interface..."));
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ fprintf (stderr, _("done\n"));
+
+ sleep(1);
+
+ /* Loop here indefinitely - allows you to see messages from GSM code in
+ response to unknown messages etc. The loops ends after pressing the
+ Ctrl+C. */
+ while (!bshutdown) {
+ if (GSM->GetSMSStatus(&SMSStatus) == GE_NONE) {
+ if (SMSStatus.Number!=0) {
+
+ GetMachineDateTime(nowdate, nowtime );
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile, _("%s %s SMS Messages: UnRead %d, Number %d\n"),
+ nowdate, nowtime, SMSStatus.UnRead, SMSStatus.Number);
+ fclose(logfile);
+ }
+
+ read=0;
+ location=1;
+
+ while (!bshutdown) {
+
+ SMS.Location=location;
+ if (GSM->GetSMSMessage(&SMS)==GE_NONE) {
+ if (SMS.folder==0 || SMS.folder==0x08) { //GST_7110_INBOX
+
+ GetMachineDateTime(nowdate, nowtime );
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s SMS on location %i\n"),
+ nowdate,nowtime,SMS.MessageNumber);
+ fclose(logfile);
+ }
+
+ number= 16*(SMS.MessageText[2] >> 4)+ (SMS.MessageText[2] & 0x0f);
+ number=number+ 256*16*(SMS.MessageText[1] >> 4)+ 256*(SMS.MessageText[1] & 0x0f);
+ number=number+65536*16*(SMS.MessageText[0] >> 4)+65536*(SMS.MessageText[0] & 0x0f);
+
+ sprintf( name, "%07i_%02d%02d%02d_%02d%02d%02d.sms", number,
+ SMS.Time.Year, SMS.Time.Month, SMS.Time.Day,
+ SMS.Time.Hour, SMS.Time.Minute, SMS.Time.Second);
+
+ strcpy(filename,Dir);
+ strcat(filename,name);
+
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s Name is \"%s\"\n"),nowdate,nowtime,filename);
+ fclose(logfile);
+ }
+
+ file = fopen(filename, "rb");
+ if (!file) {
+ file = fopen(filename, "wb");
+ if (!file) {
+ GetMachineDateTime(nowdate, nowtime );
+ fprintf(stderr,_("%s %s ERROR: opening file \"%s\" failed !\n"),nowdate,nowtime,filename);
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s ERROR: opening file \"%s\" failed !\n"),nowdate,nowtime,filename);
+ fclose(logfile);
+ }
+ } else {
+ fwrite(SMS.MessageText,1,SMS.Length,file);
+ fclose(file);
+ }
+ } else {
+ fclose(file);
+
+ GetMachineDateTime(nowdate, nowtime );
+ fprintf(stderr,_("%s %s ERROR: file \"%s\" already exist !\n"),nowdate,nowtime,filename);
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s ERROR: file \"%s\" already exist !\n"),nowdate,nowtime,filename);
+ fclose(logfile);
+ }
+ }
+
+ SMS.Location=SMS.MessageNumber;
+ if (GSM->DeleteSMSMessage(&SMS)!=GE_NONE) {
+ GetMachineDateTime(nowdate, nowtime );
+ fprintf(stderr,_("%s %s ERROR: Deleting SMS location %i failed !\n"),nowdate,nowtime,SMS.MessageNumber);
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s ERROR: Deleting SMS location %i failed !\n"),nowdate,nowtime,SMS.MessageNumber);
+ fclose(logfile);
+ }
+ }
+ }
+ read++;
+ }
+ location++;
+ if (read==SMSStatus.Number) break;
+ }
+ }
+ } else {
+ GetMachineDateTime(nowdate, nowtime );
+ fprintf(stderr,_("%s %s ERROR: Can't get SMS status !\n"),nowdate,nowtime);
+ logfile = fopen("log", "a");
+ if (logfile) {
+ fprintf(logfile,_("%s %s ERROR: Can't get SMS status !\n"),nowdate,nowtime);
+ fclose(logfile);
+ }
+ }
+
+ sleep(1);
+ }
+
+ fprintf (stderr, _("Leaving monitor mode...\n"));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int divert(int argc, char *argv[])
+{
+ GSM_CallDivert cd;
+ GSM_Error error;
+
+ memset(&cd, 0, sizeof(GSM_CallDivert));
+
+ if (!strcmp("register", argv[0])){cd.Operation = GSM_CDV_Register ;}
+ else if (!strcmp("enable" , argv[0])){cd.Operation = GSM_CDV_Enable ;}
+ else if (!strcmp("disable" , argv[0])){cd.Operation = GSM_CDV_Disable ;}
+ else if (!strcmp("erasure" , argv[0])){cd.Operation = GSM_CDV_Erasure ;}
+ else if (!strcmp("query" , argv[0])){cd.Operation = GSM_CDV_Query ;}
+ else {
+ usage();
+ exit(-1);
+ }
+
+ if (!strcmp("all" , argv[1])) {cd.DType = GSM_CDV_AllTypes ;}
+ else if (!strcmp("busy" , argv[1])) {cd.DType = GSM_CDV_Busy ;}
+ else if (!strcmp("noans" , argv[1])) {cd.DType = GSM_CDV_NoAnswer ;}
+ else if (!strcmp("outofreach", argv[1])) {cd.DType = GSM_CDV_OutOfReach;}
+ else {
+ usage();
+ exit(-1);
+ }
+
+ if (!strcmp("all" , argv[2])) {cd.CType = GSM_CDV_AllCalls ;}
+ else if (!strcmp("voice", argv[2])) {cd.CType = GSM_CDV_VoiceCalls;}
+ else if (!strcmp("fax" , argv[2])) {cd.CType = GSM_CDV_FaxCalls ;}
+ else if (!strcmp("data" , argv[2])) {cd.CType = GSM_CDV_DataCalls ;}
+ else {
+ usage();
+ exit(-1);
+ }
+
+ if (argc>3) strcpy(cd.Number, argv[3]);
+
+ if (argc>4) cd.Timeout = atoi(argv[4]);
+
+ /* Initialise the code for the GSM interface. */
+ fbusinit(NULL);
+
+ error=GSM->CallDivert(&cd);
+
+ if (error == GE_NONE) {
+ switch (cd.Operation)
+ {
+ case GSM_CDV_Query:
+ fprintf(stdout, _("Divert type: "));
+ switch (cd.DType) {
+ case GSM_CDV_Busy :fprintf(stdout, _("when busy"));break;
+ case GSM_CDV_NoAnswer :fprintf(stdout, _("when not answered"));break;
+ case GSM_CDV_OutOfReach:fprintf(stdout, _("when phone off or no coverage"));break;
+ case GSM_CDV_AllTypes :fprintf(stdout, _("all call diverts"));break; //?
+ default: fprintf(stdout, _("unknown %i"),cd.DType);break;
+ }
+
+ fprintf(stdout, _("\nCalls type : "));
+ switch (cd.CType) {
+ case GSM_CDV_VoiceCalls: fprintf(stdout, _("voice"));break;
+ case GSM_CDV_FaxCalls : fprintf(stdout, _("fax"));break;
+ case GSM_CDV_DataCalls : fprintf(stdout, _("data"));break;
+ case GSM_CDV_AllCalls : fprintf(stdout, _("voice, fax & data"));break;
+ default: fprintf(stdout, _("unknown %i"),cd.CType);break;
+ }
+ fprintf(stdout, _("\n"));
+
+ if (cd.Enabled) {
+ fprintf(stdout, _("Status : active\n"));
+ fprintf(stdout, _("Timeout : %i seconds\n"),cd.Timeout);
+ fprintf(stdout, _("Number : %s\n"),cd.Number);
+ } else {
+ fprintf(stdout, _("Status : deactivated\n"));
+ }
+
+ break;
+ default:
+ fprintf(stdout,_("Divert done\n"));
+ }
+ } else
+ fprintf(stderr,_("%s\n"),print_error(error));
+
+ GSM->Terminate();
+
+ return 0;
+}
+
+int savephonebookentry(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_PhonebookEntry entry;
+ GSM_Error error;
+ int w;
+
+ fbusinit(NULL);
+
+ /* Handle command line args that set type, start and end locations. */
+ if (!GetMemoryTypeID(argv[0], &entry.MemoryType))
+ {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]);
+ return (-1);
+ }
+
+ entry.Location=atoi(argv[1]);
+
+ fbusinit(NULL);
+
+ error=GSM->GetMemoryLocation(&entry);
+
+ switch (error) {
+ case GE_NONE:
+
+ /* Put entry into SMS structure */
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+ GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21);
+ } else {
+ GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10);
+ }
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,"Phonebook");
+
+ GSM_SaveMultiPartSMSOnConsole(&MultiSMS, 2,argc,argv,false,false,false,false);
+ break;
+
+ default:
+ fprintf(stdout,_("Error\n"));break;
+ }
+
+ return 0;
+}
+
+int sendphonebookentry(int argc, char *argv[])
+{
+ GSM_MultiSMSMessage MultiSMS;
+ GSM_PhonebookEntry entry;
+ GSM_Error error;
+ int w;
+
+ fbusinit(NULL);
+
+ /* Handle command line args that set type, start and end locations. */
+ if (!GetMemoryTypeID(argv[1], &entry.MemoryType))
+ {
+ fprintf(stderr, _("Unknown memory type %s!\n"), argv[1]);
+ return (-1);
+ }
+
+ entry.Location=atoi(argv[2]);
+
+ fbusinit(NULL);
+
+ error=GSM->GetMemoryLocation(&entry);
+
+ switch (error) {
+ case GE_NONE:
+
+ /* Put entry into SMS structure */
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+ GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21);
+ } else {
+ GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10);
+ }
+
+ for (w=0;w<MultiSMS.number;w++)
+ strcpy(MultiSMS.SMS[w].Destination,argv[0]);
+
+ GSM_SendMultiPartSMSOnConsole(&MultiSMS, 3,argc,argv,false,false,false);
+
+ break;
+
+ default:
+ fprintf(stdout,_("Error\n"));break;
+ }
+
+ return 0;
+}
--- /dev/null
+
+#
+# Makefile for the GNOKII tool suite.
+#
+# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
+# 2000 Karel Zak
+#
+
+TOPDIR=..
+include $(TOPDIR)/Makefile.global
+
+CFLAGS += $(PTHREAD_CFLAGS)
+LDFLAGS += $(PTHREAD_LIBS)
+
+OBJS = gnokiid.o
+
+all: gnokiid
+
+gnokiid: $(OBJS) $(TOPDIR)/common/COMMON.o $(TOPDIR)/common/DATA.o
+
+$(TOPDIR)/common/COMMON.o:
+ $(MAKE) -C $(TOPDIR)/common COMMON.o
+
+$(TOPDIR)/common/DATA.o:
+ $(MAKE) -C $(TOPDIR)/common DATA.o
+
+$(TOPDIR)/common/libmygnokii.so:
+ $(MAKE) -C $(TOPDIR)/common makelib
+
+makelib: $(OBJS) $(TOPDIR)/common/libmygnokii.so
+ $(CC) $(LDFLAGS) -L$(TOPDIR)/common -lmygnokii $(OBJS) -o gnokiidlib
+
+clean:
+ $(RM) $(OBJS) *~ depend gnokiid gnokiidlib *.exe core *.bak
+
+install: all
+ $(INSTALL) -d $(sbindir)
+ $(INSTALL) gnokiid $(sbindir)
+ $(INSTALL) gnokiidlib $(sbindir)/gnokiid
+
+install-strip: all
+ $(INSTALL) -d $(sbindir)
+ $(INSTALL) -s gnokiid $(sbindir)
+ $(INSTALL) -s gnokiidlib $(sbindir)/gnokiid
+ @echo "done"
+
+install-suid: all
+ @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+ /usr/sbin/groupadd gnokii; \
+ fi
+ $(INSTALL) -d $(sbindir)
+ $(INSTALL) -o root -g gnokii -m 4750 gnokiid $(sbindir)
+ $(INSTALL) -o root -g gnokii -m 4750 gnokiidlib $(sbindir)/gnokiid
+ @echo "done"
+
+install-ss: all
+ @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \
+ /usr/sbin/groupadd gnokii; \
+ fi
+ $(INSTALL) -d $(sbindir)
+ $(INSTALL) -o root -g gnokii -m 4750 -s gnokiid $(sbindir)
+ $(INSTALL) -o root -g gnokii -m 4750 -s gnokiidlib $(sbindir)/gnokiid
+ @echo "done"
+
+depend dep:
+ $(CC) $(CFLAGS) -MM *.c >depend
+
+ifeq (depend,$(wildcard depend))
+include depend
+endif
+
+.PHONY: all install clean dep depend
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Mainline code for gnokiid daemon. Handles command line parsing and
+ various daemon functions.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <string.h>
+
+#include "misc.h"
+#include "files/cfgreader.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "data/virtmodem.h"
+
+/* Global variables */
+bool DebugMode; /* When true, run in debug mode */
+char *Model; /* Model from .gnokiirc file. */
+char *Port; /* Port from .gnokiirc file */
+char *Initlength; /* Init length from .gnokiirc file */
+char *Connection; /* Connection type from .gnokiirc file */
+char *SynchronizeTime;
+char *BinDir; /* Directory of the mgnokiidev command */
+
+bool TerminateThread;
+
+void version(void)
+{
+
+ fprintf(stdout, _("gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, Model, Port);
+}
+
+/* The function usage is only informative - it prints this program's usage and
+ command-line options.*/
+
+void usage(void)
+{
+
+ fprintf(stdout, _(" usage: gnokiid {--help|--version}\n"
+" --help display usage information."
+" --version displays version and copyright information."
+" --debug uses stdin/stdout for virtual modem comms.\n"));
+}
+
+/* Main function - handles command line arguments, passes them to separate
+ functions accordingly. */
+
+int main(int argc, char *argv[])
+{
+
+ GSM_ConnectionType connection;
+
+ /* For GNU gettext */
+
+ #ifdef USE_NLS
+ textdomain("gnokii");
+ #endif
+
+#ifndef WIN32
+ if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+ fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of gnokiid (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+ if (CFG_ReadConfig(&Model, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,true) < 0) {
+ exit(-1);
+ }
+
+ /* Handle command line arguments. */
+
+ if (argc >= 2 && strcmp(argv[1], "--help") == 0) {
+ usage();
+ exit(0);
+ }
+
+ /* Display version, copyright and build information. */
+
+ if (argc >= 2 && strcmp(argv[1], "--version") == 0) {
+ version();
+ exit(0);
+ }
+
+ if (argc >= 2 && strcmp(argv[1], "--debug") == 0) {
+ DebugMode = true;
+ }
+ else {
+ DebugMode = false;
+ }
+
+ connection=GetConnectionTypeFromString(Connection);
+
+ /* MBUS wasn't tested */
+ if (connection!=GCT_FBUS && connection!=GCT_MBUS &&
+ connection!=GCT_Infrared && connection!=GCT_Tekram) {
+ fprintf(stdout,_("Incorrect connection type!\n"));
+ exit(0);
+ }
+
+ TerminateThread=false;
+
+ if (VM_Initialise(Model, Port, Initlength, connection, BinDir, DebugMode, true, SynchronizeTime) == false)
+ exit (-1);
+
+ while (1) {
+ if (TerminateThread==true) {
+ VM_Terminate();
+ exit(1);
+ }
+ sleep (1);
+ }
+ exit (0);
+}
--- /dev/null
+/*
+
+ $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__ */
--- /dev/null
+/*
+
+ $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 */
+
+
+
--- /dev/null
+/*
+
+ $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 */
--- /dev/null
+/*
+
+ $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 */
--- /dev/null
+/*
+
+ $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
--- /dev/null
+/*
+
+ 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 */
--- /dev/null
+/*
+ * $Id$
+ *
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __devices_tekram_h
+#define __devices_tekram_h
+
+#ifdef WIN32
+ #include <stddef.h>
+ /* FIXME: this should be solved in config.h in 0.4.0 */
+ #define __const const
+ typedef void * __ptr_t;
+#else
+ #include <unistd.h>
+#endif /* WIN32 */
+
+#include "misc.h"
+
+
+#define TEKRAM_B115200 0x00
+#define TEKRAM_B57600 0x01
+#define TEKRAM_B38400 0x02
+#define TEKRAM_B19200 0x03
+#define TEKRAM_B9600 0x04
+
+#define TEKRAM_PW 0x10 /* Pulse select bit */
+
+
+int tekram_open(__const char *__file);
+void tekram_close(int __fd);
+
+void tekram_setdtrrts(int __fd, int __dtr, int __rts);
+void tekram_changespeed(int __fd, int __speed);
+
+size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes);
+size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n);
+
+int tekram_select(int fd, struct timeval *timeout);
+
+#endif /* __devices_tekram_h */
+
+
+
+
--- /dev/null
+/*
+ * $Id$
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+
+#include "linuxirda.h"
+#include "misc.h"
+
+int irda_open(void);
+int irda_close(int fd);
+int irda_write(int __fd, __const __ptr_t __bytes, int __size);
+int irda_read(int __fd, __ptr_t __bytes, int __size);
+int irda_select(int fd, struct timeval *timeout);
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef __devices_unixserial_h
+#define __devices_unixserial_h
+
+#ifdef WIN32
+ #include <stddef.h>
+ /* FIXME: this should be solved in config.h in 0.4.0 */
+ #define __const const
+ typedef void * __ptr_t;
+#else
+ #include <unistd.h>
+#endif /* WIN32 */
+
+#include "misc.h"
+
+int serial_open(__const char *__file, int __oflag);
+int serial_close(int __fd);
+
+int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake);
+
+void serial_setdtrrts(int __fd, int __dtr, int __rts);
+void serial_changespeed(int __fd, int __speed);
+
+size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes);
+size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n);
+
+int serial_select(int fd, struct timeval *timeout);
+
+#endif /* __devices_unixserial_h */
+
+
+
+
--- /dev/null
+/*
+
+ 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 */
--- /dev/null
+/*
+
+ 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
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Header file for the definitions, enums etc. that are used by all models of
+ handset.
+
+*/
+
+#ifndef __gsm_common_h
+#define __gsm_common_h
+
+#include "misc.h"
+
+#define MYGNOKII
+
+/* Maximum length of SMS center name */
+#define GSM_MAX_SMS_CENTER_NAME_LENGTH (20)
+
+/* Limits of SMS messages. */
+#define GSM_MAX_SMS_CENTER_LENGTH (40)
+#define GSM_MAX_RECIPIENT_LENGTH (40)
+#define GSM_MAX_SENDER_LENGTH (40)
+#define GSM_MAX_DESTINATION_LENGTH (40)
+#define GSM_MAX_SMS_LENGTH (160)
+#define GSM_MAX_SMS_8_BIT_LENGTH (140)
+#define GSM_MAX_USER_DATA_HEADER_LENGTH (140)
+/* The maximum length of an uncompressed concatenated short message is
+ 255 * 153 = 39015 default alphabet characters */
+#define GSM_MAX_CONCATENATED_SMS_LENGTH (39015)
+
+#define GSM_MAX_CB_MESSAGE (160)
+
+/* Correct for phones in fbus-6110.c */
+/* For other translation could be required */
+#define PHONEKEY_1 0x01
+#define PHONEKEY_2 0x02
+#define PHONEKEY_3 0x03
+#define PHONEKEY_4 0x04
+#define PHONEKEY_5 0x05
+#define PHONEKEY_6 0x06
+#define PHONEKEY_7 0x07
+#define PHONEKEY_8 0x08
+#define PHONEKEY_9 0x09
+#define PHONEKEY_0 0x0a
+#define PHONEKEY_HASH 0x0b /* # */
+#define PHONEKEY_ASTERISK 0x0c /* * */
+#define PHONEKEY_POWER 0x0d
+#define PHONEKEY_INCREASEVOLUME 0x10 /* doesn't available in some phones as separate button: ie. N5110 */
+#define PHONEKEY_DECREASEVOLUME 0x11 /* doesn't available in some phones as separate button: ie. N5110 */
+#define PHONEKEY_UP 0x17
+#define PHONEKEY_DOWN 0x18
+#define PHONEKEY_MENU 0x19
+#define PHONEKEY_NAMES 0x1a /* doesn't available in some phone: ie. N5110 */
+#define PHONEKEY_GREEN 0x0e /* in some phone ie. N5110 sometimes works identical to POWER */
+#define PHONEKEY_RED 0x0f /* (c) key in some phone: ie. N5110 */
+
+/* Correct for phones in fbus-6110.c */
+/* For other translation could be required */
+#define PRESSPHONEKEY 0x01
+#define RELEASEPHONEKEY 0x02
+
+/* Limits for IMEI, Revision and Model string storage. */
+#define GSM_MAX_IMEI_LENGTH (20)
+#define GSM_MAX_REVISION_LENGTH (20)
+#define GSM_MAX_MODEL_LENGTH (10)
+
+/* In 6210 test 57 there seems to be 75 chars */\r
+#define NM_MAX_SCREEN_WIDTH 75\r
+
+/* Power source types */
+typedef enum {
+ GPS_ACDC=1, /* AC/DC powered (charging) */
+ GPS_BATTERY /* Internal battery */
+} GSM_PowerSource;
+
+/* Definition of security codes. */
+typedef enum {
+ GSCT_SecurityCode = 0x01, /* Security code. */
+ GSCT_Pin, /* PIN. */
+ GSCT_Pin2, /* PIN 2. */
+ GSCT_Puk, /* PUK. */
+ GSCT_Puk2, /* PUK 2. */
+ GSCT_None /* Code not needed. */
+} GSM_SecurityCodeType;
+
+/* Security code definition. */
+typedef struct {
+ GSM_SecurityCodeType Type; /* Type of the code. */
+ char Code[10]; /* Actual code. */
+} GSM_SecurityCode;
+
+/* Define an enum for specifying memory types for retrieving phonebook
+ entries, SMS messages etc. This type is not mobile specific - the model
+ code should take care of translation to mobile specific numbers - see 6110
+ code.
+ 01/07/99: Two letter codes follow GSM 07.07 release 6.2.0
+*/
+typedef enum {
+ GMT_ME, /* Internal memory of the mobile equipment */
+ GMT_SM, /* SIM card memory */
+ GMT_FD, /* Fixed dial numbers */
+ GMT_ON, /* Own numbers */
+ GMT_EN, /* Emergency numbers */
+ GMT_DC, /* Dialled numbers */
+ GMT_RC, /* Received numbers */
+ GMT_MC, /* Missed numbers */
+ GMT_LD, /* Last dialed */
+ GMT_MT, /* combined ME and SIM phonebook */
+ GMT_TA, /* for compatibility only: TA=computer memory */
+ GMT_CB, /* Currently selected memory */
+ GMT_CG, /* Caller groups */
+ GMT_XX = 0xff /* Error code for unknown memory type (returned by fbus-xxxx functions. */
+} GSM_MemoryType;
+
+/* This define speed dialing entries. */
+typedef struct {
+ int Number; /* Which number is used to dialing? */
+ GSM_MemoryType MemoryType; /* Memory type of the number. */
+ int Location; /* Location of the number in MemoryType. */
+} GSM_SpeedDial;
+
+/* Define enums for Battery units. */
+typedef enum {
+ GBU_Arbitrary,
+ GBU_Volts,
+ GBU_Minutes,
+ GBU_Percentage
+} GSM_BatteryUnits;
+
+/* This enum is used for display status. */
+
+typedef enum {
+ DS_Call_In_Progress, /* Call in progress. */
+ DS_Unknown, /* The meaning is unknown now :-( */
+ DS_Unread_SMS, /* There is Unread SMS. */
+ DS_Voice_Call, /* Voice call active. */
+ DS_Fax_Call, /* Fax call active. */
+ DS_Data_Call, /* Data call active. */
+ DS_Keyboard_Lock, /* Keyboard lock status. */
+ DS_SMS_Storage_Full /* Full SMS Memory. */
+} DisplayStatusEntity;
+
+/* Constants for Profiles. */
+
+#define PROFILE_MESSAGE_NOTONE 0x00
+#define PROFILE_MESSAGE_STANDARD 0x01
+#define PROFILE_MESSAGE_SPECIAL 0x02
+#define PROFILE_MESSAGE_BEEPONCE 0x03
+#define PROFILE_MESSAGE_ASCENDING 0x04
+
+#define PROFILE_WARNING_OFF 0xff
+#define PROFILE_WARNING_ON 0x04
+
+#define PROFILE_CALLALERT_RINGING 0x01
+#define PROFILE_CALLALERT_BEEPONCE 0x02
+#define PROFILE_CALLALERT_OFF 0x04
+#define PROFILE_CALLALERT_RINGONCE 0x05
+#define PROFILE_CALLALERT_ASCENDING 0x06
+#define PROFILE_CALLALERT_CALLERGROUPS 0x07
+
+#define PROFILE_KEYPAD_OFF 0xff
+#define PROFILE_KEYPAD_LEVEL1 0x00
+#define PROFILE_KEYPAD_LEVEL2 0x01
+#define PROFILE_KEYPAD_LEVEL3 0x02
+//in 5110 I had also once 0x03
+
+#define PROFILE_VOLUME_LEVEL1 0x06
+#define PROFILE_VOLUME_LEVEL2 0x07
+#define PROFILE_VOLUME_LEVEL3 0x08
+#define PROFILE_VOLUME_LEVEL4 0x09
+#define PROFILE_VOLUME_LEVEL5 0x0a
+
+#define PROFILE_CALLERGROUPS_ALL 0xff
+#define PROFILE_CALLERGROUPS_FAMILY 0x01
+#define PROFILE_CALLERGROUPS_VIP 0x02
+#define PROFILE_CALLERGROUPS_FRIENDS 0x04
+#define PROFILE_CALLERGROUPS_COLLEAGUES 0x08
+#define PROFILE_CALLERGROUPS_OTHERS 0x10
+
+#define PROFILE_VIBRATION_OFF 0x00
+#define PROFILE_VIBRATION_ON 0x01
+#define PROFILE_VIBRATION_FIRST 0x02
+
+/* Structure to hold profile entries. */
+
+typedef struct {
+ int Number; /* The number of the profile. */
+ char Name[40]; /* The name of the profile. */
+ int DefaultName; /* 0-6, when default name is used, -1, when not */
+ int KeypadTone; /* Volumen level for keypad tones. */
+ int Lights; /* Lights on/off. */
+ int CallAlert; /* Incoming call alert. */
+ int Ringtone; /* Ringtone for incoming call alert. */
+ int Volume; /* Volume of the ringing. */
+ int MessageTone; /* The tone for message indication. */
+ int WarningTone; /* The tone for warning messages. */
+ int Vibration; /* Vibration? */
+ int CallerGroups; /* CallerGroups. */
+ int ScreenSaver; /* ScreenSaver */
+ int AutomaticAnswer; /* Does the phone auto-answer incoming call? */
+} GSM_Profile;
+
+typedef enum {
+ PPS_ALS=0,
+ PPS_HRData,
+ PPS_14400Data,
+ PPS_LCDContrast,
+ PPS_EFR,
+ PPS_FR,
+ PPS_HR,
+ PPS_GamesMenu, /* N3210 5.26 and higher */
+ PPS_VibraMenu /* N3210 */
+} GSM_PPS_Settings;
+
+typedef struct {
+ GSM_PPS_Settings Name;
+ bool bool_value;
+ int int_value;
+} GSM_PPS;
+
+typedef struct {
+ char data[10+1];//detailed info about this simlock
+ bool enabled; //is enabled or not ?
+ int counter; //how many times user tried to disable simlock using keypad
+ bool factory; //is factory simlock ?
+} GSM_OneSimlock;
+
+typedef struct {
+ GSM_OneSimlock simlocks[4];
+} GSM_AllSimlocks;
+
+/* Data structures for the call divert */
+typedef enum {
+ GSM_CDV_Busy = 0x01, /* Divert when busy */
+ GSM_CDV_NoAnswer, /* Divert when not answered */
+ GSM_CDV_OutOfReach, /* Divert when phone off or no coverage */
+ GSM_CDV_AllTypes /* Divert all calls without ringing */
+} GSM_CDV_DivertTypes;
+
+typedef enum {
+ GSM_CDV_VoiceCalls = 0x01,
+ GSM_CDV_FaxCalls,
+ GSM_CDV_DataCalls,
+ GSM_CDV_AllCalls
+} GSM_CDV_CallTypes;
+
+/* See GSM 02.82 for diverts types */
+typedef enum {
+ GSM_CDV_Disable = 0x00,
+ GSM_CDV_Enable = 0x01,
+ GSM_CDV_Query = 0x02, /* Is concrete divert enabled ? */
+ GSM_CDV_Register = 0x03, /* Sets divert */
+ GSM_CDV_Erasure = 0x04 /* Erase concrete divert */
+} GSM_CDV_Opers;
+
+typedef struct {
+ GSM_CDV_DivertTypes DType;
+ GSM_CDV_CallTypes CType;
+ GSM_CDV_Opers Operation;
+ char Number[GSM_MAX_SENDER_LENGTH + 1];
+ unsigned int Timeout;
+ bool Enabled;
+} GSM_CallDivert;
+
+/* Define standard GSM error/return code values. These codes are also used for
+ some internal functions such as SIM read/write in the model specific code. */
+
+typedef enum {
+ GE_NONE = 0, /* No error. */
+ GE_DEVICEOPENFAILED, /* Couldn't open specified serial device. */
+ GE_UNKNOWNMODEL, /* Model specified isn't known/supported. */
+ GE_NOTSUPPORTED, /* We are sure, that function not supported by phone model */
+ GE_NOLINK, /* Couldn't establish link with phone. */
+ GE_TIMEOUT, /* Command timed out. */
+ GE_TRYAGAIN, /* Try again. */
+ GE_INVALIDSECURITYCODE, /* Invalid Security code. */
+ GE_NOTIMPLEMENTED, /* Command called isn't implemented in model. */
+ GE_INVALIDSMSLOCATION, /* Invalid SMS location. */
+ GE_INVALIDPHBOOKLOCATION, /* Invalid phonebook location. */ /*10*/
+ GE_INVALIDMEMORYTYPE, /* Invalid type of memory. */
+ GE_INVALIDSPEEDDIALLOCATION, /* Invalid speed dial location. */
+ GE_INVALIDCALNOTELOCATION,/* Invalid calendar note location. */
+ GE_INVALIDDATETIME, /* Invalid date, time or alarm specification. */
+ GE_EMPTYSMSLOCATION, /* SMS location is empty. */
+ GE_PHBOOKNAMETOOLONG, /* Phonebook name is too long. */
+ GE_PHBOOKNUMBERTOOLONG, /* Phonebook number is too long. */
+ GE_PHBOOKWRITEFAILED, /* Phonebook write failed. */
+ GE_SMSSENDOK, /* SMS was send correctly. */
+ GE_SMSSENDFAILED, /* SMS send fail. */ /*20*/
+ GE_SMSWAITING, /* Waiting for the next part of SMS. */
+ GE_SMSTOOLONG, /* SMS message too long. */
+ GE_NONEWCBRECEIVED, /* Attempt to read CB when no new CB received */
+ GE_INTERNALERROR, /* Problem occured internal to model specific code. */
+ GE_CANTOPENFILE, /* Can't open file with bitmap/ringtone */
+ GE_WRONGNUMBEROFCOLORS, /* Wrong number of colors in specified bitmap file */
+ GE_WRONGCOLORS, /* Wrong colors in bitmap file */
+ GE_INVALIDFILEFORMAT, /* Invalid format of file */
+ GE_SUBFORMATNOTSUPPORTED, /* Subformat of file not supported */
+ GE_TOOSHORT, /* Too short file, structure, etc. to read */
+ GE_TOOLONG, /* Too long file, structure, etc. to read */
+ GE_INVALIDIMAGESIZE, /* Invalid size of bitmap (in file, etc.) */
+ GE_BUSY, /* Command is still being executed. */
+ GE_UNKNOWN, /* Unknown error - well better than nothing!! */
+ GE_NOACCESS,
+ GE_USERCANCELED,
+ GE_MEMORYFULL,
+ GE_INVALIDRINGLOCATION,
+ GE_INSIDEBOOKMARKSMENU,
+ GE_INVALIDBOOKMARKLOCATION,
+ GE_INSIDESETTINGSMENU,
+ GE_INVALIDSETTINGSLOCATION,
+
+ /* The following are here in anticipation of data call requirements. */
+
+ GE_LINEBUSY, /* Outgoing call requested reported line busy */
+ GE_NOCARRIER, /* No Carrier error during data call setup ? */
+ GE_SMSSAVEFAILED, /* save sms failed */
+ GE_SMSISINMEM, /* sms is already in memory */
+ GE_BUSYSMSLOCATION /* there is a sms at the requested sms location */
+} GSM_Error;
+
+#endif /* __gsm_common_h */
--- /dev/null
+/*
+
+ 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 */
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This file provides definitions of macros from the Smart Messaging
+ Specification. It is mainly rewrite of the spec to C :-) Viva Nokia!
+
+*/
+
+#ifndef __gsm_ringtones_h
+#define __gsm_ringtones_h
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-sms.h"
+
+#define MAX_RINGTONE_NOTES 255
+
+/* Structure to hold note of ringtone. */
+/* NoteValue is encoded as octave(scale)*14 + note */
+/* where for note: c=0, d=2, e=4 .... */
+/* ie. c#=1 and 5 and 13 are invalid */
+/* note=255 means a pause */
+typedef struct {
+ u8 duration;
+ u8 note;
+ int tempo;
+ u8 style;
+} GSM_RingtoneNote;
+
+/* Structure to hold ringtones. */
+typedef struct {
+ char name[20];
+ unsigned char Loop;
+ u8 NrNotes;
+ GSM_RingtoneNote notes[256];
+ bool allnotesscale; /* Some Nokia phones doesn't receive correctly some
+ ringtones without it. N3310 4.02 */
+ int location;
+} GSM_Ringtone;
+
+/* Structure to hold binary ringtones. */
+
+typedef struct {
+ char name[20];
+ unsigned char frame[1000];
+ int length;
+ int location;
+} GSM_BinRingtone;
+
+#define GetBit(Stream,BitNr) Stream[(BitNr)/8] & 1<<(7-((BitNr)%8))
+#define SetBit(Stream,BitNr) Stream[(BitNr)/8] |= 1<<(7-((BitNr)%8))
+#define ClearBit(Stream,BitNr) Stream[(BitNr)/8] &= 255 - (1 << (7-((BitNr)%8)))
+
+/* These values are from Smart Messaging Specification Revision 2.0.0 pages
+ 3-23, ..., 3-29 */
+
+/* Command-Part Encoding */
+
+#define CancelCommand (0x05<<1) /* binary 0000 101 */
+#define RingingToneProgramming (0x25<<1) /* binary 0100 101 */
+#define Sound (0x1d<<1) /* binary 0011 101 */
+/* MW: I didn't find phone, which can unpack ringtone with Unicode
+ command. Tested 3310, 6150 */
+#define Unicode (0x22<<1) /* binary 0100 010 */
+
+/* Song-Type Encoding */
+
+#define BasicSongType (0x01<<5) /* binary 001 */
+#define TemporarySongType (0x02<<5) /* binary 010 */
+#define MidiSongType (0x03<<5) /* binary 011 */
+#define DigitizedSongType (0x04<<5) /* binary 100 */
+
+/* Instruction ID Encoding */
+
+#define PatternHeaderId (0x00<<5) /* binary 000 */
+#define NoteInstructionId (0x01<<5) /* binary 001 */
+#define ScaleInstructionId (0x02<<5) /* binary 010 */
+#define StyleInstructionId (0x03<<5) /* binary 011 */
+#define TempoInstructionId (0x04<<5) /* binary 100 */
+#define VolumeInstructionId (0x05<<5) /* binary 101 */
+
+/* Style-Value Encoding*/
+
+#define NaturalStyle (0x00<<6) /* binary 00 */
+#define ContinuousStyle (0x01<<6) /* binary 01 */
+#define StaccatoStyle (0x02<<6) /* binary 10 */
+
+/* Note-Scale Encoding */
+
+#define Scale1 (0x00<<6) /* binary 00 */
+#define Scale2 (0x01<<6) /* binary 01 */
+#define Scale3 (0x02<<6) /* binary 10 */
+#define Scale4 (0x03<<6) /* binary 11 */
+
+/* Note-Value Encoding */
+
+#define Note_Pause (0x00<<4) /* binary 0000 */
+#define Note_C (0x01<<4) /* binary 0001 */
+#define Note_Cis (0x02<<4) /* binary 0010 */
+#define Note_D (0x03<<4) /* binary 0011 */
+#define Note_Dis (0x04<<4) /* binary 0100 */
+#define Note_E (0x05<<4) /* binary 0101 */
+#define Note_F (0x06<<4) /* binary 0110 */
+#define Note_Fis (0x07<<4) /* binary 0111 */
+#define Note_G (0x08<<4) /* binary 1000 */
+#define Note_Gis (0x09<<4) /* binary 1001 */
+#define Note_A (0x0a<<4) /* binary 1010 */
+#define Note_Ais (0x0b<<4) /* binary 1011 */
+#define Note_H (0x0c<<4) /* binary 1100 */
+
+/* Note-Duration Encoding */
+
+#define Duration_Full (0x00<<5) /* binary 000 */
+#define Duration_1_2 (0x01<<5) /* binary 001 */
+#define Duration_1_4 (0x02<<5) /* binary 010 */
+#define Duration_1_8 (0x03<<5) /* binary 011 */
+#define Duration_1_16 (0x04<<5) /* binary 100 */
+#define Duration_1_32 (0x05<<5) /* binary 101 */
+
+/* Note-Duration-Specifier Encoding */
+
+#define NoSpecialDuration (0x00<<6) /* binary 00 */
+#define DottedNote (0x01<<6) /* binary 01 */
+#define DoubleDottedNote (0x02<<6) /* binary 10 */
+#define Length_2_3 (0x03<<6) /* binary 11 */
+
+/* Pattern ID Encoding */
+#define A_part (0x00<<6) /* binary 00 */
+#define B_part (0x01<<6) /* binary 01 */
+#define C_part (0x02<<6) /* binary 10 */
+#define D_part (0x03<<6) /* binary 11 */
+
+/* Command-End */
+#define CommandEnd (0x00) /* binary 00000000 */
+
+u8 GSM_PackRingtone(GSM_Ringtone *ringtone, unsigned char *package, int *maxlength);
+GSM_Error GSM_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength);
+
+int GSM_GetDuration(int number, unsigned char *spec);
+int GSM_GetNote(int number);
+int GSM_GetScale(int number);
+int GSM_GetTempo(int Beats);
+
+void GSM_PlayOneNote (GSM_RingtoneNote note);
+void GSM_PlayRingtone (GSM_Ringtone *ringtone);
+
+int GSM_GetFrequency(int number);
+
+GSM_Error GSM_ReadRingtone(GSM_SMSMessage *message, GSM_Ringtone *ringtone);
+
+int GSM_SaveRingtoneToSMS(GSM_MultiSMSMessage *SMS,
+ GSM_Ringtone *ringtone,bool profilestyle);
+
+/* FIXME: For each phone probaby different */
+#define FB61_MAX_RINGTONE_FRAME_LENGTH 200
+
+/* Smart Messaging 3.0 says: 16*9=144 bytes,
+ but on 3310 4.02 it was possible to save about 196 chars (without cutting) */
+#define SM30_MAX_RINGTONE_FRAME_LENGTH 196
+
+/* Like PC Composer help say */
+#define FB61_MAX_RINGTONE_NOTES 130
+
+/* Nokia ringtones codes. */
+
+struct OneRingtone {
+ char name[30];
+ int menu;
+ int code;
+};
+
+void PrepareRingingTones(char model[64], char rev[64]);
+
+/* returns names from code or number in menu */
+char *RingingToneName(int code, int menu);
+
+/* returns code from number in menu */
+int RingingToneCode(int menu);
+
+/* returns number in menu from code */
+int RingingToneMenu(int code);
+
+int NumberOfRingtones();
+
+#endif /* __gsm_ringtones_h */
--- /dev/null
+/*
+
+ 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 */
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Header file for miscellaneous defines, typedefs etc.
+
+*/
+
+#ifndef __misc_h
+#define __misc_h
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef VC6
+ #include "config.h"
+
+ /* Use gsprintf instead of sprintf and sprintf */
+ #ifdef HAVE_SNPRINTF
+ # define gsprintf(a, b, c...) snprintf(a, b, c)
+ #else
+ # define gsprintf(a, b, c...) sprintf(a, c)
+ #endif
+
+#endif
+
+/* Some general defines. */
+
+#ifndef false
+ #define false (0)
+#endif
+
+#ifndef true
+ #define true (!false)
+#endif
+
+#ifndef bool
+ #define bool int
+#endif
+
+/* This one is for NLS. */
+
+#ifdef USE_NLS
+
+ #ifndef VC6
+ #include <libintl.h>
+ #define _(x) gettext(x)
+ #else
+ #define _(x) (x)
+ #endif
+
+#else
+ #define _(x) (x)
+#endif /* USE_NLS */
+
+/* Definitions for u8, u16, u32 and u64, borrowed from
+ /usr/src/linux/include/asm-i38/types.h */
+
+#ifndef u8
+ typedef unsigned char u8;
+#endif
+
+#ifndef u16
+ typedef unsigned short u16;
+#endif
+
+#ifndef u32
+ typedef unsigned int u32;
+#endif
+
+#ifndef s32
+ typedef int s32;
+#endif
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+ #ifndef u64
+ typedef unsigned long long u64;
+ #endif
+
+ #ifndef s64
+ typedef signed long long s64;
+ #endif
+#endif
+
+/* This one is for FreeBSD and similar systems without __ptr_t_ */
+/* FIXME: autoconf should take care of this. */
+
+#ifndef __ptr_t
+ typedef void * __ptr_t;
+#endif /* __ptr_t */
+
+
+/* Add here any timer operations which are not supported by libc5 */
+
+#ifndef HAVE_TIMEOPS
+#include <sys/time.h>
+
+#ifndef timersub
+#define timersub(a, b, result) \
+ do { \
+ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
+ (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
+ if ((result)->tv_usec < 0) { \
+ --(result)->tv_sec; \
+ (result)->tv_usec += 1000000; \
+ } \
+ } while (0)
+#endif
+
+#endif /* HAVE_TIMEOPS */
+
+#include <stdio.h>
+
+extern int GetLine(FILE *File, char *Line, int count);
+
+int mem_to_int(const char str[], int len);
+
+void hexdump(u16 MessageLength, u8 *MessageBuffer);
+void txhexdump(u16 MessageLength, u8 *MessageBuffer);
+
+#endif /* __misc_h */
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
--- /dev/null
+Gnokii for DEBIAN
+-------------------
+
+This package was debianized by Karel Zak <zakkr@zf.jcu.cz>
+
+
--- /dev/null
+/etc/gnokiirc
--- /dev/null
+Source: gnokii
+Section: comm
+Priority: optional
+Maintainer: Karel Zak <zakkr@zf.jcu.cz>
+Standards-Version: 2.4.0.0
+
+Package: gnokii
+Architecture: any
+Depends: ${shlibs:Depends}
+Description: Gnokii is a Linux/Unix tool suite and (eventually)
+ modem/fax driver for Nokia mobile phones, released under the GPL.
\ No newline at end of file
--- /dev/null
+* 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.
+
--- /dev/null
+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
--- /dev/null
+?package(gnokii):needs=text section="Apps/Comm" title="XGnokii" command="/usr/bin/xgnokii"
--- /dev/null
+#!/bin/sh -e
+
+/usr/sbin/groupdel gnokii
--- /dev/null
+#!/bin/sh -e
+
+/usr/sbin/groupadd gnokii
+
--- /dev/null
+#!/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
+
--- /dev/null
+%define name @PACKAGE@
+%define version @VERSION@
+%define release 1
+
+Summary: Linux/Unix tool suite for Nokia mobile phones
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Copyright: GPL
+Packager: Pavel Janik ml. <Pavel.Janik@linux.cz>, Jan Derfinak <ja@mail.upjs.sk>
+Group: Applications/Communications
+Source: ftp://multivac.fatburen.org/pub/gnokii/%{name}-%{version}.tar.gz
+BuildRoot: /var/tmp/%{name}-%{version}-root
+
+%description
+Gnokii is a Linux/Unix tool suite and (eventually) modem/fax driver for
+Nokia's mobile phones, released under the GPL.
+
+%package xgnokii
+Summary: Graphical Linux/Unix tool suite for Nokia mobile phones.
+Group: X11/Applications
+%description xgnokii
+Xgnokii is graphical Linux/Unix tool suite for Nokia's mobile phones. It
+allows you to edit your contacts book, send/read SMS's from/in
+computer and more other features.
+
+%prep
+
+%setup -q
+
+%build
+./configure --prefix=/usr --with-x --enable-nls #--enable-debug --enable-rlpdebug
+make
+
+%install
+rm -rf ${RPM_BUILD_ROOT}
+
+make prefix=${RPM_BUILD_ROOT}/usr install
+
+mkdir -p ${RPM_BUILD_ROOT}/etc/
+
+sed 's#/usr/local/sbin/#/usr/sbin/#' <Docs/sample/gnokiirc >${RPM_BUILD_ROOT}/etc/gnokiirc
+
+%pre
+/usr/sbin/groupadd -r -f gnokii >/dev/null 2>&1
+
+%postun
+/usr/sbin/groupdel gnokii >/dev/null 2>&1
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files
+%defattr(-,root,root)
+%doc Docs/CREDITS Docs/DataCalls-QuickStart Docs/FAQ Docs/README
+%doc Docs/README-3810 Docs/README-6110 Docs/README-2110 Docs/README-WIN32
+%doc Docs/gettext-howto Docs/gnokii.nol Docs/gnokii-ir-howto Docs/packaging-howto
+%doc Docs/sample/gnokiirc Docs/sample/options Docs/sample/pap-secrets
+%doc Docs/sample/ppp-gnokii Docs/sample/ppp-on
+%attr(0750, root, gnokii) /usr/bin/gnokii
+%attr(0750, root, gnokii) /usr/sbin/gnokiid
+%attr(4750, root, gnokii) /usr/sbin/mgnokiidev
+%config /etc/gnokiirc
+
+%files xgnokii
+%defattr(-,root,root)
+/usr/bin/xgnokii
+/usr/bin/xlogos
+/usr/bin/todologo
+/usr/lib/xgnokii
+
+%changelog
+
+* Thu Jan 11 2001 Pawel Kot <pkot@linuxnews.pl>
+- misc updates
+
+* Fri Oct 27 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- todologo added to the package
+
+* Mon May 15 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- proper access rights for gnokiid, gnokii and mgnokiidev
+
+* Sat May 13 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- new doc files added
+
+* Tue Mar 21 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- permission on /usr/sbin fixed
+- correct /etc/gnokiirc file
+
+* Mon Mar 20 2000 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- mkdir of directories in install removed
+- xgnokii package should contain lib/xgnokii directory
+
+* Mon Mar 20 2000 Jan Derfinak <ja@mail.upjs.sk>
+- split package into gnokii and xgnokii
+- added configure
+- correct xgnokii installation
+- installation with make install
+- fixing paths
+
+* Thu Aug 5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- documentation files changed
+
+* Thu Aug 5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- xkeyb and xlogos added to RPM package
+
+* Sat Jul 24 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- stripping of binaries
+
+* Thu Jul 22 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- gnokii.nol added - nice example for logo uploading
+
+* Sun Jul 18 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- mgnokiidev added to RPM package
+- config file in /etc (it is not used now...)
+
+* Sat Jul 10 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- use of ~/.gnokiirc so not magic model stuff
+- new doc files
+
+* Mon Jun 28 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- Nokia auth. protocol is there now
+- xgnokii and gnokiid added to RPM
+
+* Sun May 9 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- included 6110-patch updated to my prepatches
+
+* Thu May 6 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- TODO-6110 file added to documentation files
+
+* Sun Mar 28 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- upgraded to gnokii-0.2.4
+- 6110 version of gnokii added
+
+* Fri Mar 5 1999 Pavel Janik ml. <Pavel.Janik@linux.cz>
+- the first SPEC file for gnokii
--- /dev/null
+#!/bin/sh
+
+#
+# Script for building GNOKII package
+# Written by Pawe³ Kot <pkot@linuxnews.pl>
+#
+
+ARCH=@ARCH@
+PN=@PACKAGE@
+PV=@VERSION@
+
+DOCS="COPYING ChangeLog VERSION Docs/CREDITS Docs/DataCalls-QuickStart Docs/README*"
+CONF="Docs/sample/gnokiirc"
+
+CWD=`pwd`
+
+# There will be the sources placed
+if [ "$TMP" = "" ]; then
+ TMP=/tmp
+fi
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+
+# The package will be built there
+PKG=$TMP/package-$PN-$PV
+if [ ! -d $PKG ]; then
+ mkdir -p $PKG
+fi
+
+# Untar the sources
+cd $TMP
+tar xzvf $CWD/$PN-$PV.tar.gz
+cd $PN-$PV
+
+# Configure and make package
+./configure --prefix=/usr --with-x --enable-nls $ARCH-slackware-linux || exit 1
+make || exit 1
+make prefix=$PKG/usr install || exit 1
+
+# Copy the docs
+mkdir -p $PKG/usr/doc/$PN-$PV
+cp -a $DOCS $PKG/usr/doc/$PN-$PV
+chmod 644 $PKG/usr/doc/$PN-$PV
+
+# and the configuration
+mkdir -p $PKG/etc
+sed "s|/usr/local/sbin|/usr/sbin|" < $CONF > $PKG/etc/gnokiirc
+
+# Now, add gnokii group, set the permissions
+GROUPADD=`which groupadd`
+cd $PKG
+mkdir install
+cat > install/doinst.sh <<EOF
+$GROUPADD gnokii >/dev/null 2>&1
+chown root.gnokii /usr/bin/gnokii
+chmod 750 /usr/bin/gnokii
+chown root.gnokii /usr/sbin/gnokiid
+chmod 750 /usr/sbin/gnokiid
+chown root.gnokii /usr/sbin/mgnokiidev
+chmod 4750 /usr/sbin/mgnokiidev
+EOF
+
+# and build the package answering "yes" twice
+echo "y
+y" | makepkg $TMP/$PN.tgz
+
+# Cleanup
+rm -rf $TMP/$PN-$PV
+rm -rf $PKG
--- /dev/null
+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:
--- /dev/null
+#!/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"
--- /dev/null
+#
+#
+# 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:
--- /dev/null
+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
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. SMS centrum má jméno %s\n"
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Varování: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid " Alarm is %s\n"
+msgstr " Budík je %s\n"
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Èas varování: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid " Alarm: %02d:%02d\n"
+msgstr " Budík: %02d:%02d\n"
+
+#: fbus-6110.c:2993
+msgid " Battery Level: %d\n"
+msgstr " Kapacita baterie: %d\n"
+
+#: gnokii.c:1585
+msgid " Calendar note deleted.\n"
+msgstr " Poznámka v kalendáøi byla smazána.\n"
+
+#: fbus-6110.c:3217
+msgid " CellID: %s\n"
+msgstr " CellID: %s\n"
+
+#: fbus-6110.c:3334
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Datum: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Datum: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid " Date: %s\n"
+msgstr " Datum: %s\n"
+
+#: fbus-6110.c:3714
+msgid " Date: %s GMT"
+msgstr " Datum: %s GMT"
+
+#: fbus-6110.c:4016
+msgid " Empty SMS location.\n"
+msgstr " Pamì»ové místo pro SMS je prázdné.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Pøesný význam doposud není znám :-(\n"
+
+#: fbus-6110.c:4142
+msgid " Firmware: %s\n"
+msgstr " Firmware: %s\n"
+
+#: fbus-6110.c:2764
+msgid " Free: %d\n"
+msgstr " Volné místo: %d\n"
+
+#: fbus-6110.c:4140
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: fbus-3810.c:2274
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: fbus-6110.c:4134
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: fbus-6110.c:4006
+msgid " Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid " Invalid memory type!\n"
+msgstr " ©patný typ pamìti!\n"
+
+#: fbus-6110.c:3583
+msgid " Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid " LAC: %s\n"
+msgstr " LAC: %s\n"
+
+#: fbus-6110.c:2875
+msgid " Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Magické bajty: %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2762
+msgid " Memory Type: %s\n"
+msgstr " Typ pamìti: %s\n"
+
+#: fbus-6110.c:2876
+msgid " MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid " Mode: "
+msgstr " Mód: "
+
+#: fbus-3810.c:2276
+msgid " Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: fbus-3810.c:2180
+msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr " Délka zprávy %d, Èíslo zprávy %d, Neznámé bajty: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid " Name: "
+msgstr " Jméno: "
+
+#: fbus-6110.c:3219
+msgid " Network code: %s\n"
+msgstr " Kód sítì: %s\n"
+
+#: fbus-6110.c:3220
+msgid " Network name: %s (%s)\n"
+msgstr " Jméno sítì: %s (%s)\n"
+
+#: fbus-6110.c:3235
+msgid " Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid " Number: "
+msgstr " Èíslo: "
+
+#: fbus-6110.c:2877
+msgid " Number: %d\n"
+msgstr " Èíslo: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid " Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid " Power source: "
+msgstr " Zdroj napájení: "
+
+#: fbus-6110.c:4138
+msgid " Production Code: %s\n"
+msgstr " Výrobní èíslo: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid " Remote number: %s\n"
+msgstr " Èíslo volajícího: %s\n"
+
+#: fbus-3810.c:2278
+msgid " Revision: %s\n"
+msgstr " Revize: %s\n"
+
+#: fbus-6110.c:2548
+msgid " SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid " SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid " SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid " SMS center number: %s\n"
+msgstr " Èíslo SMS centra: %s\n"
+
+#: fbus-6110.c:2513
+msgid " SMS: "
+msgstr " Text zprávy: "
+
+#: fbus-6110.c:3729
+msgid " SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Poøadové èíslo hovoru: %d\n"
+
+#: fbus-6110.c:2994
+msgid " Signal strength: %d\n"
+msgstr " Úroveò signálu: %d\n"
+
+#: fbus-6110.c:3223
+msgid " Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid " Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid " The number of messages: %d\n"
+msgstr " Poèet zpráv: %d\n"
+
+#: fbus-6110.c:2622
+msgid " The request for SMS Center failed.\n"
+msgstr " Po¾adavek na SMS centrum selhal.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Èas: %02d:%02d:%02d\n"
+
+#: gnokii.c:1476
+msgid " Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid " Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid " Unknown error!\n"
+msgstr " Neznámá chyba!\n"
+
+#: fbus-6110.c:4041
+msgid " Unread messages: %d\n"
+msgstr " Poèet nepøeètených zpráv: %d\n"
+
+#: fbus-6110.c:2763
+msgid " Used: %d\n"
+msgstr " Pou¾ito: %d\n"
+
+#: gnokii.c:86
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --sendoplogoviasms destionation logofile [network code]\n"
+" gnokii --setdatetime [YYYY MM DD HH MM]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+" gnokii --reset [soft|hard]\n"
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken from\n"
+" phone memory from address [message_center_index].\n"
+" If this argument is ommited SMSC number is taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --sendoplogoviasms send the logofile to destination as operator\n"
+" logo\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid " usage: gnokiid {--help|--version}"
+msgstr " pou¾ití: gnokiid {--help|--version}"
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "sí»ový adaptér"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "sí»ový adaptér\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr "Budík: %s\n"
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Kapacita baterie: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr "CAR je %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr ""
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr "CTS je %s.\n"
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr ""
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr ""
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr "DTR je %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr ""
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr ""
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Zapínám monitorovací re¾im...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr ""
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr ""
+
+#: gnokii.c:2150
+msgid "IMEI: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr ""
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr ""
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Inicializuji GSM rozhraní...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Opou¹tím monitorovací re¾im...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr ""
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr ""
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr ""
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr ""
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr ""
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr ""
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr ""
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr ""
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr ""
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr ""
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr ""
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr ""
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr ""
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: pou¾ito: %d, volné %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Zdroj napájení: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Úroveò signálu: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr "RTS je %s.\n"
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr "Revize: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: pou¾ito %d, volné %d\n"
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS zprávy: nepøeètené %d, celkem %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr ""
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr ""
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr "Stav sériového portu: \n"
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Navazuji FBUS komunikaci...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr ""
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr ""
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr ""
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Zápis selhal!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr "baterie"
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr "baterie\n"
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr "shozen"
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "znovu startuji.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr "nastaven"
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid "Enter your PIN: "
+# msgstr "Zadejte vá¹ PIN: "
+#
+# msgid " %d. SMS Center number is %s\n"
+# msgstr " %d SMS centrum má èíslo %s\n"
+#
+# msgid " Text: "
+# msgstr " Text: "
+#
+# msgid " usage: gnokii {--help|--monitor|--version}"
+# msgstr " pou¾ití: gnokii {--help|--monitor|--version}"
+#
+# msgid ""
+# " Code Error\n"
+# " You're not my big owner :-)\n"
+# msgstr ""
+# " PIN nebyl akceptován\n"
+# " Nejsi mùj vellký majitel :-)\n"
+#
+# msgid " Code Accepted\n"
+# msgstr " PIN byl akceptován\n"
+#
+# msgid " Keyboard is %s\n"
+# msgstr " Klávesnice je %s\n"
+#
--- /dev/null
+# This is the German locale definition for Gnokii.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Daniel Egger <Daniel.Egger@suse.de>, 1999, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-05-08 21:27+0200\n"
+"PO-Revision-Date: 2000-05-08 18:25:30+0100\n"
+"Last-Translator: Daniel Egger <Daniel.Egger@suse.de>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:525 common/fbus-6110.c:2037
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Sende SMS an %s via SMS-Center %s\n"
+
+#: common/fbus-3810.c:629
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "SMS Sendeversuch fehlgeschlagen, probiere es nochmal (%d von %d)\n"
+
+#: common/fbus-3810.c:1161
+msgid "Couldn't open FB38 device: "
+msgstr "Konnte FB38 Gerät nicht öffnen: "
+
+#: common/fbus-3810.c:1253
+msgid "restarting.\n"
+msgstr "starte neu.\n"
+
+#: common/fbus-3810.c:1309
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT fehlgeschlagen %02x"
+
+#: common/fbus-3810.c:1316 common/mbus-6160.c:689
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "Cs-Fehler %02x != %02x"
+
+#: common/fbus-3810.c:1430
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registrierungs-Antwort 0x%02x\n"
+
+#: common/fbus-3810.c:1446
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 Registrierungs-Antwort 0x%02x\n"
+
+#: common/fbus-3810.c:1447
+msgid "SIM access: %s.\n"
+msgstr "SIM Zugriff: %s\n"
+
+#: common/fbus-3810.c:1523
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS an 0x%02x gespeichert\n"
+
+#: common/fbus-3810.c:1533
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "SMS speichern fehlgeschlagen (Fehler=%d)\n"
+
+#: common/fbus-3810.c:1654
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN wurde (möglicherweise) eingegeben.\n"
+
+#: common/fbus-3810.c:1663
+msgid "Phone powering off..."
+msgstr "Mobilphone schaltet sich ab..."
+
+#: common/fbus-3810.c:1692
+msgid "Standard Ack write failed!"
+msgstr "Senden der Standardbestätigung schlug fehl!"
+
+#: common/fbus-3810.c:1718
+msgid "Unknown: "
+msgstr "Unbekannt: "
+
+#: common/fbus-3810.c:1720
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Nachrichtentyp: %02x"
+
+#: common/fbus-3810.c:1721
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Nachrichtenlänge: %02x"
+
+#: common/fbus-3810.c:1722
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Sequenznummer: %02x"
+
+#: common/fbus-3810.c:1723
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Prüfsumme: %02x \n"
+" "
+
+#: common/fbus-3810.c:1815 common/fbus-3810.c:1936
+msgid "Set Mem Loc Write failed!"
+msgstr "Schreiben der Speicherzelle schlug fehl!"
+
+#: common/fbus-3810.c:1860
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - schreiben:"
+
+#: common/fbus-3810.c:1875
+msgid "0x4a Write failed!"
+msgstr "0x4a Schreiben erfolglos!"
+
+#: common/fbus-3810.c:1890
+msgid "Explore Write failed!"
+msgstr "Schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:1900
+msgid "0x3f Write failed!"
+msgstr "0x3f Schreiben erfolglos!"
+
+#: common/fbus-3810.c:1960
+msgid "Request Mem Loc Write failed!"
+msgstr "Anforderung zum Schreiben einer Speicherzelle fehlgeschlagen!"
+
+#: common/fbus-3810.c:1973
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "Anforderung IMEI/Revision/Modell schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:2016
+msgid "Send SMS header failed!"
+msgstr "Senden des SMS-Headers erfolglos!"
+
+#: common/fbus-3810.c:2075
+msgid "Store SMS header failed!"
+msgstr "Speichern des SMS-Headers erfolglos!"
+
+#: common/fbus-3810.c:2100
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Senden des SMS-Blocks %d erfolglos!"
+
+#: common/fbus-3810.c:2123
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "Anforderung zum Schreiben einer SMS Speicherzelle fehlgeschlagen!"
+
+#: common/fbus-3810.c:2146
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Löschen von SMS fehlgeschlagen!"
+
+#: common/fbus-3810.c:2165
+msgid "0x15 Write failed!"
+msgstr "0x15 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2182 common/mbus-6160.c:759
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - Nachricht zu lang!\n"
+
+#: common/fbus-3810.c:2208 common/mbus-6160.c:788
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - schreiben:"
+
+#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368
+#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530
+#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688
+msgid "Write failed!"
+msgstr "Schreiben fehlgeschlagen!"
+
+#: common/fbus-3810.c:2235
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Ankommender Anruf - Art: %s. %02x, Nummer %s.\n"
+
+#: common/fbus-3810.c:2262
+msgid "0x27 Write failed!"
+msgstr "0x27 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2310
+msgid "0x4b Write failed!"
+msgstr "0x4b Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2329
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Status: %s. Batterie %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2340
+msgid "0x10 Write failed!"
+msgstr "0x10 Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2344
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Anruf von Telefon beendet (0x10 Nachricht).\n"
+
+#: common/fbus-3810.c:2358
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Anruf vom gegnerischen Teilnehmer (oder vom Netz) beendet.\n"
+
+#: common/fbus-3810.c:2372
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Anruf vom Telefon beendet (0x12 Nachricht).\n"
+
+#: common/fbus-3810.c:2386
+msgid "Incoming call answered from phone.\n"
+msgstr "Ankommender Anruf vom Telefon beantwortet.\n"
+
+#: common/fbus-3810.c:2400
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s Anruf aufgebaut Abgehender Statusbytes %02x %02x.\n"
+
+#: common/fbus-3810.c:2417
+msgid "0x2c Write failed!"
+msgstr "0x2c Schreiben erfolglos!"
+
+#: common/fbus-3810.c:2504
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Zeitzone:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2571
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Ankommende SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Absender: %s(Typ %02x) "
+"SMS-Center: %s\n"
+
+#: common/fbus-3810.c:2573
+msgid ""
+" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+" Nachrichtenlänge %d, Nachrichtenspeicher %d Nachrichtennummer %d, "
+"PID: %02x DCS: %02x Ünbekannt: %02x\n"
+
+#: common/fbus-3810.c:2666
+msgid "Mobile phone identification received:\n"
+msgstr "Identifikation des Telefons erhalten:\n"
+
+#: common/fbus-3810.c:2667
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-3810.c:2669
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-3810.c:2671
+#, c-format
+msgid " Revision: %s\n"
+msgstr " Revision: %s\n"
+
+#: common/fbus-3810.c:2739
+msgid "SMS Message Center Data:\n"
+msgstr "SMS-Center Daten:\n"
+
+#: common/fbus-3810.c:2740
+msgid "Selected memory: 0x%02x\n"
+msgstr "Ausgewählter Speicher 0x%02x\n"
+
+#: common/fbus-3810.c:2741
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Nachrichten im Telefon: 0x%02x Ungelesen: 0x%02x\n"
+
+#: common/fbus-3810.c:2743
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Nachrichten auf SIM: 0x%02x Ungelesen: 0x%02x\n"
+
+#: common/fbus-3810.c:2745
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Antwort über eigenes Center: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2747
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Transportnachrichten: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2749
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Nachrichten geschickt als: 0x%02x\n"
+
+#: common/fbus-3810.c:2750
+msgid "Message validity: 0x%02x\n"
+msgstr "Nachrichtengültigkeit: 0x%02x\n"
+
+#: common/fbus-3810.c:2751
+msgid "Unknown: 0x%02x\n"
+msgstr "Unbekannt: 0x%02x\n"
+
+#: common/fbus-3810.c:2754
+msgid "UnknownNumber field empty."
+msgstr "Unbekanntes leeres Nummernfeld."
+
+#: common/fbus-3810.c:2756
+msgid "UnknownNumber: "
+msgstr "Unbekannte Zahl: "
+
+#: common/fbus-3810.c:2763
+msgid "Number field empty."
+msgstr "Nummernfeld leer."
+
+#: common/fbus-3810.c:2766
+msgid "Number: "
+msgstr "Nummer: "
+
+#: common/fbus-6110-ringtones.c:242
+msgid "File can not be opened!\n"
+msgstr "Datei kann nicht geöffnet werden!\n"
+
+#: common/fbus-6110.c:770
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: common/fbus-6110.c:802
+msgid "Couldn't open FB61 infrared device"
+msgstr "Konnte FB61 Infrarotgerät nicht öffnen"
+
+#: common/fbus-6110.c:870
+msgid "Starting IR mode...!\n"
+msgstr "Starte Infratotmodus...!\n"
+
+#: common/fbus-6110.c:2325
+msgid "Serial flags dump:\n"
+msgstr "Ausgabe der seriellen Zustände:\n"
+
+#: common/fbus-6110.c:2326 common/mbus-640.c:893
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR ist %s.\n"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "up"
+msgstr "aktiv"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "down"
+msgstr "inaktiv"
+
+#: common/fbus-6110.c:2327 common/mbus-640.c:894
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS ist %s.\n"
+
+#: common/fbus-6110.c:2328
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR ist %s.\n"
+
+#: common/fbus-6110.c:2329
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS ist %s.\n"
+
+#: common/fbus-6110.c:2364
+msgid "Setting FBUS communication...\n"
+msgstr "Starte FBUS Verbindung...\n"
+
+#: common/fbus-6110.c:2395
+msgid "Couldn't open FB61 device"
+msgstr "Konnte FB61 Gerät nicht öffnen"
+
+#: common/fbus-6110.c:2521
+msgid "Message: Call message, type 0x03:"
+msgstr "Nachricht: Anrufnachricht, Typ 0x03:"
+
+#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554
+#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620
+#, c-format
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Reihenfolge des Anrufs: %d\n"
+
+#: common/fbus-6110.c:2523 common/fbus-6110.c:2621
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Exakte Bedeutung ist noch unklar :-(\n"
+
+#: common/fbus-6110.c:2536
+msgid "Message: Remote end hang up.\n"
+msgstr "Nachricht: Gegner hat aufgelegt.\n"
+
+#: common/fbus-6110.c:2549
+msgid "Message: Incoming call alert:\n"
+msgstr "Nachricht: Ankommender Anruf:\n"
+
+#: common/fbus-6110.c:2555 common/fbus-6110.c:2835
+msgid " Number: "
+msgstr " Nummer: "
+
+#: common/fbus-6110.c:2563 common/fbus-6110.c:2819
+msgid " Name: "
+msgstr " Name: "
+
+#: common/fbus-6110.c:2584
+msgid "Message: Call answered.\n"
+msgstr "Nachricht: Anruf angenommen.\n"
+
+#: common/fbus-6110.c:2595
+msgid "Message: Call ended by your phone.\n"
+msgstr "Nachricht: Anruf aufgelegt von Ihnen.\n"
+
+#: common/fbus-6110.c:2619
+msgid "Message: Call message, type 0x0a:"
+msgstr "Nachricht: Anrufnachricht, Typ 0x0a:"
+
+#: common/fbus-6110.c:2631
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x01\n"
+
+#: common/fbus-6110.c:2649
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Nachricht: SMS Nachricht korrekt versendet.\n"
+
+#: common/fbus-6110.c:2660
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Nachricht: SMS Nachricht senden fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:2669
+msgid "Message: SMS Message Received\n"
+msgstr "Nachricht: SMS Nachricht erhalten\n"
+
+#: common/fbus-6110.c:2670 common/fbus-6110.c:3997
+#, c-format
+msgid " SMS center number: %s\n"
+msgstr " SMS Zentralennummer: %s\n"
+
+#: common/fbus-6110.c:2674 common/fbus-6110.c:3998
+#, c-format
+msgid " Remote number: %s\n"
+msgstr " Gegnernummer: %s\n"
+
+#: common/fbus-6110.c:2675
+#, c-format
+msgid " Date: %s\n"
+msgstr " Datum: %s\n"
+
+#: common/fbus-6110.c:2676
+msgid " SMS: "
+msgstr " SMS: "
+
+#: common/fbus-6110.c:2691
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Nachricht: SMS Center richtig gesetzt.\n"
+
+#: common/fbus-6110.c:2707
+msgid "Message: SMS Center received:\n"
+msgstr "Nachricht: SMS Center erhalten:\n"
+
+#: common/fbus-6110.c:2708
+#, c-format
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. Die SMS Zentrale heißt %s\n"
+
+#: common/fbus-6110.c:2709
+#, c-format
+msgid " SMS Center number is %s\n"
+msgstr " SMS Center Nummer ist %s\n"
+
+#: common/fbus-6110.c:2711
+msgid " SMS Center message format is "
+msgstr " SMS Center Nachrichtenformat ist "
+
+#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604
+#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335
+msgid "Text"
+msgstr "Text"
+
+#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608
+#: xgnokii/xgnokii.c:1349
+msgid "Paging"
+msgstr "Pagerruf"
+
+#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612
+#: xgnokii/xgnokii.c:1342
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228
+#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: common/fbus-6110.c:2737
+msgid " SMS Center message validity is "
+msgstr " SMS Center Nachrichtengültigkeit ist "
+
+#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084
+msgid "1 hour"
+msgstr "1 Stunde"
+
+#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088
+msgid "6 hours"
+msgstr "6 Stunden"
+
+#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092
+msgid "24 hours"
+msgstr "24 Stunden"
+
+#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096
+msgid "72 hours"
+msgstr "72 Stunden"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656
+#: xgnokii/xgnokii.c:1414
+msgid "1 week"
+msgstr "1 Woche"
+
+#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104
+msgid "Maximum time"
+msgstr "Maximale Zeit"
+
+#: common/fbus-6110.c:2784
+msgid "Message: SMS Center error received:\n"
+msgstr "Nachricht: SMS Center fehler erhalten:\n"
+
+#: common/fbus-6110.c:2785
+msgid " The request for SMS Center failed.\n"
+msgstr " Anfrage nach SMS Zentrale fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:2796
+msgid "Unknown message!\n"
+msgstr "Unbekannte Nachricht!\n"
+
+#: common/fbus-6110.c:2818
+msgid "Message: Phonebook entry received:\n"
+msgstr "Nachricht: Telefonbuckeintrag erhalten:\n"
+
+#: common/fbus-6110.c:2855
+msgid " Date: "
+msgstr " Datum: "
+
+#: common/fbus-6110.c:2857
+msgid " Time: "
+msgstr " Zeit: "
+
+#: common/fbus-6110.c:2870
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Nachricht: Telefonbucheintrag lesen schlug fehl:\n"
+
+#: common/fbus-6110.c:2878
+msgid " Invalid memory type!\n"
+msgstr " Falscher Speicertyp!\n"
+
+#: common/fbus-6110.c:2888 common/fbus-6110.c:2926
+msgid " Unknown error!\n"
+msgstr " Unbekannter Fehler!\n"
+
+#: common/fbus-6110.c:2899
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Nachricht: Telefonbuch korrekt geschrieben.\n"
+
+#: common/fbus-6110.c:2916
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Nachricht: Telefonbuch nicht geschrieben - Name ist zu lang.\n"
+
+#: common/fbus-6110.c:2937
+msgid "Message: Memory status received:\n"
+msgstr "Nachricht: Speicherstatus erhalten:\n"
+
+#: common/fbus-6110.c:2939
+#, c-format
+msgid " Memory Type: %s\n"
+msgstr " Speicherart: %s\n"
+
+#: common/fbus-6110.c:2940
+#, c-format
+msgid " Used: %d\n"
+msgstr " Benutzt: %d\n"
+
+#: common/fbus-6110.c:2941
+#, c-format
+msgid " Free: %d\n"
+msgstr " Frei: %d\n"
+
+#: common/fbus-6110.c:2956
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+"Nachricht: Speicherstatusfehler, Telefon ist vermutlich ausgeschaltet.\n"
+
+#: common/fbus-6110.c:2963
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Nachricht: Speicherstatusfehler, Speicherart wird von Model nicht "
+"unterstützt.\n"
+
+#: common/fbus-6110.c:2970
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:2977
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Nachricht: Unbekannter Speicherstatusfehler, Untertyp (Messagebuffer[4] = "
+"%02x\n"
+
+#: common/fbus-6110.c:2994
+msgid "Message: Caller group logo etc.\n"
+msgstr "Nachricht: Gruppenlogo etc.\n"
+
+#: common/fbus-6110.c:2995
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Gruppenname: %s\n"
+
+#: common/fbus-6110.c:3015
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Nachricht: Gruppendaten erhalten aber nicht angefordert!\n"
+
+#: common/fbus-6110.c:3025
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Nachricht: Fehler beim Versuch Gruppendaten zu bekommen.\n"
+
+#: common/fbus-6110.c:3033
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Nachricht: Gruppendaten richtig gesetzt.\n"
+
+#: common/fbus-6110.c:3041
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Nachricht: Fehler beim Gruppendaten einstellen.\n"
+
+#: common/fbus-6110.c:3052
+msgid "Message: Speed dial entry received:\n"
+msgstr "Nachricht: Kurzwahl erhalten:\n"
+
+#: common/fbus-6110.c:3053
+#, c-format
+msgid " Location: %d\n"
+msgstr " Ort: %d\n"
+
+#: common/fbus-6110.c:3054
+#, c-format
+msgid " MemoryType: %s\n"
+msgstr " Speichertyp: %s\n"
+
+#: common/fbus-6110.c:3055
+#, c-format
+msgid " Number: %d\n"
+msgstr " Nummer: %d\n"
+
+#: common/fbus-6110.c:3065
+msgid "Message: Speed dial entry error\n"
+msgstr "Nachricht: Kurzwahleintrag Fehler\n"
+
+#: common/fbus-6110.c:3075
+msgid "Message: Speed dial entry set.\n"
+msgstr "Nachricht: Kurzwahleintrag gesetzt.\n"
+
+#: common/fbus-6110.c:3085
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Nachricht: Fehler beim Kurzwahleintrag setzen.\n"
+
+#: common/fbus-6110.c:3095
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x03\n"
+
+#: common/fbus-6110.c:3111
+msgid "Message: Phone status received:\n"
+msgstr "Nachricht: Telefonstatus erhalten:\n"
+
+#: common/fbus-6110.c:3112
+msgid " Mode: "
+msgstr " Modus: "
+
+#: common/fbus-6110.c:3118
+msgid "registered within the network\n"
+msgstr "am Netzwerk angemeldet\n"
+
+#: common/fbus-6110.c:3127
+msgid "call in progress\n"
+msgstr "Anruf in Bearbeitung\n"
+
+#: common/fbus-6110.c:3133
+msgid "waiting for security code\n"
+msgstr "warte auf Sicherheitscode\n"
+
+#: common/fbus-6110.c:3139
+msgid "powered off\n"
+msgstr "ausgeschaltet\n"
+
+#: common/fbus-6110.c:3145 common/fbus-6110.c:3167
+msgid "unknown\n"
+msgstr "unbekannt\n"
+
+#: common/fbus-6110.c:3149
+msgid " Power source: "
+msgstr " Stromquelle: "
+
+#: common/fbus-6110.c:3155
+msgid "AC/DC\n"
+msgstr "Gleichspannung\n"
+
+#: common/fbus-6110.c:3161
+msgid "battery\n"
+msgstr "Batterie\n"
+
+#: common/fbus-6110.c:3171
+#, c-format
+msgid " Battery Level: %d\n"
+msgstr " Batteriezustand: %d\n"
+
+#: common/fbus-6110.c:3172
+#, c-format
+msgid " Signal strength: %d\n"
+msgstr " Signalstärke: %d\n"
+
+#: common/fbus-6110.c:3184
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x04\n"
+
+#: common/fbus-6110.c:3257
+msgid "Message: Startup Logo received.\n"
+msgstr "Nachricht: Einschaltlogo erhalten.\n"
+
+#: common/fbus-6110.c:3274
+#, c-format
+msgid "Startup Text: %s\n"
+msgstr "Einschalttext: %s\n"
+
+#: common/fbus-6110.c:3286
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3295
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3329
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3338
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3348
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3365
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3374
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3392
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537
+msgid "Unknown!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3440
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3450
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: common/fbus-6110.c:3477
+msgid "Message: Network informations:\n"
+msgstr "Nachricht: Netzwerkinformationen\n"
+
+#: common/fbus-6110.c:3479
+#, c-format
+msgid " CellID: %s\n"
+msgstr " Zellnummer: %s\n"
+
+#: common/fbus-6110.c:3480
+#, c-format
+msgid " LAC: %s\n"
+msgstr " LAC: %s\n"
+
+#: common/fbus-6110.c:3481
+#, c-format
+msgid " Network code: %s\n"
+msgstr " Netzwerknummer: %s\n"
+
+#: common/fbus-6110.c:3482
+#, c-format
+msgid " Network name: %s (%s)\n"
+msgstr " Netzwerkname: %s (%s)\n"
+
+#: common/fbus-6110.c:3485
+msgid " Status: "
+msgstr " Status: "
+
+#: common/fbus-6110.c:3488
+msgid "home network selected"
+msgstr "Heimnetz ausgewählt:"
+
+#: common/fbus-6110.c:3489
+msgid "roaming network"
+msgstr ""
+
+#: common/fbus-6110.c:3490
+msgid "requesting network"
+msgstr ""
+
+#: common/fbus-6110.c:3491
+msgid "not registered in the network"
+msgstr ""
+
+#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199
+#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219
+msgid "unknown"
+msgstr "unbekannt"
+
+#: common/fbus-6110.c:3497
+#, c-format
+msgid " Network selection: %s\n"
+msgstr " Netzwerkauswahl: %s\n"
+
+#: common/fbus-6110.c:3497
+msgid "manual"
+msgstr "von Hand"
+
+#: common/fbus-6110.c:3497
+msgid "automatic"
+msgstr "automatisch"
+
+#: common/fbus-6110.c:3507
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: common/fbus-6110.c:3545
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3564
+msgid "Message: Date and time set correctly\n"
+msgstr "Nachricht: Datum und Zeit richtig gesetzt\n"
+
+#: common/fbus-6110.c:3574 common/fbus-6110.c:3620
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3594
+msgid "Message: Date and time\n"
+msgstr "Nachricht: Datum und Zeit\n"
+
+#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863
+#, c-format
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Zeit: %02d:x02d:x02d\n"
+
+#: common/fbus-6110.c:3596
+#, c-format
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Datum: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3610
+msgid "Message: Alarm set correctly\n"
+msgstr "Nachricht: Alarm erfolgreich gesetzt\n"
+
+#: common/fbus-6110.c:3632
+msgid "Message: Alarm\n"
+msgstr "Nachricht: Alarm\n"
+
+#: common/fbus-6110.c:3633
+#, c-format
+msgid " Alarm: %02d:%02d\n"
+msgstr " Alarm: %02d:%02d\n"
+
+#: common/fbus-6110.c:3634
+#, c-format
+msgid " Alarm is %s\n"
+msgstr " Der Alarm ist %s\n"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "on"
+msgstr "an"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "off"
+msgstr "out"
+
+#: common/fbus-6110.c:3650
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x11\n"
+
+#: common/fbus-6110.c:3673
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3683 common/fbus-6110.c:3693
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3702
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: common/fbus-6110.c:3742
+msgid "Message: Calendar note received.\n"
+msgstr "Nachricht: Kalendarbenachrichtingung erhalten.\n"
+
+#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859
+#, c-format
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Datum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868
+#, c-format
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Alarmdatum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872
+#, c-format
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Alarmzeit: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3764
+#, c-format
+msgid " Type: %d\n"
+msgstr " Typ: %d\n"
+
+#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877
+#, c-format
+msgid " Text: %s\n"
+msgstr " Text: %s\n"
+
+#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880
+#, c-format
+msgid " Phone: %s\n"
+msgstr " Telefon: %s\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: common/fbus-6110.c:3788
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3810
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: common/fbus-6110.c:3821
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: common/fbus-6110.c:3831
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: common/fbus-6110.c:3848
+#, c-format
+msgid " Item number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3856
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x13\n"
+
+#: common/fbus-6110.c:3919
+msgid "Concatenated message!!!\n"
+msgstr "Zusammengefügte Nachricht!!!\n"
+
+#: common/fbus-6110.c:3940
+#, c-format
+msgid "Number: %d\n"
+msgstr "Nummer: %d\n"
+
+#: common/fbus-6110.c:3945
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Nachtricht: Ausgehende Nachricht (zum Mobiltelefon)\n"
+
+#: common/fbus-6110.c:3948
+msgid "Sent\n"
+msgstr "Gesendet\n"
+
+#: common/fbus-6110.c:3950
+msgid "Not sent\n"
+msgstr "Nicht gesendet\n"
+
+#: common/fbus-6110.c:3954
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Nachricht: SMS erhalten\n"
+
+#: common/fbus-6110.c:3957
+msgid "Delivery Report\n"
+msgstr "Auslieferreport\n"
+
+#: common/fbus-6110.c:3959
+msgid "Unknown type\n"
+msgstr "Unbekannter Typ\n"
+
+#: common/fbus-6110.c:3962
+msgid "Read\n"
+msgstr "Gelesen\n"
+
+#: common/fbus-6110.c:3964
+msgid "Not read\n"
+msgstr "Nicht gelesen\n"
+
+#: common/fbus-6110.c:3966
+msgid " Date: %s "
+msgstr " Datum: %s "
+
+#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241
+#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:3981
+msgid " SMSC response date: %s "
+msgstr " SMSC Antwortdatum: %s "
+
+#: common/fbus-6110.c:4074
+msgid "Delivered"
+msgstr "Versandt"
+
+#: common/fbus-6110.c:4079
+msgid "SM received by the SME"
+msgstr "SM von SME erhalten"
+
+#: common/fbus-6110.c:4082
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4085
+msgid "SM replaced by the SC"
+msgstr "SM durch SC ersetzt"
+
+#: common/fbus-6110.c:4093
+msgid "Failed"
+msgstr "Fehlgeschlagen"
+
+#: common/fbus-6110.c:4100
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4105 common/fbus-6110.c:4198
+msgid "Congestion"
+msgstr "Stau"
+
+#: common/fbus-6110.c:4109 common/fbus-6110.c:4202
+msgid "SME busy"
+msgstr ""
+
+#: common/fbus-6110.c:4113 common/fbus-6110.c:4206
+msgid "No response from SME"
+msgstr ""
+
+#: common/fbus-6110.c:4117 common/fbus-6110.c:4210
+msgid "Service rejected"
+msgstr "Service abgelehnt"
+
+#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214
+msgid "Quality of service not aviable"
+msgstr "QoS nicht verfügbar"
+
+#: common/fbus-6110.c:4125 common/fbus-6110.c:4218
+msgid "Error in SME"
+msgstr "Fehler in SME"
+
+#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222
+#: common/fbus-6110.c:4232
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4136
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4141
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4145
+msgid "Incompatibile destination"
+msgstr "Inkompatibles Ziel"
+
+#: common/fbus-6110.c:4149
+msgid "Connection rejected by SME"
+msgstr "Verbindung durch SME abgelehnt"
+
+#: common/fbus-6110.c:4153
+msgid "Not obtainable"
+msgstr "Nicht verfügbar"
+
+#: common/fbus-6110.c:4161
+msgid "No internetworking available"
+msgstr "Keine Zwischenverbindung verfügbar"
+
+#: common/fbus-6110.c:4165
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4169
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4173
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4177
+msgid "SM does not exist"
+msgstr "SM existiert nicht"
+
+#: common/fbus-6110.c:4190
+msgid "Pending"
+msgstr "Warte"
+
+#: common/fbus-6110.c:4194
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: common/fbus-6110.c:4260
+msgid "Message: SMS reading failed.\n"
+msgstr "Nachricht: SMS lesen fehlgeschlagen.\n"
+
+#: common/fbus-6110.c:4268
+msgid " Invalid location!\n"
+msgstr " Ungültiger Ort!\n"
+
+#: common/fbus-6110.c:4278
+msgid " Empty SMS location.\n"
+msgstr " Leerer SMS Platz.\n"
+
+#: common/fbus-6110.c:4291
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Nachricht: SMS erfolgreich gelöscht.\n"
+
+#: common/fbus-6110.c:4301
+msgid "Message: SMS Status Received\n"
+msgstr "Nachricht: SMS Status erhalten\n"
+
+#: common/fbus-6110.c:4302
+#, c-format
+msgid " The number of messages: %d\n"
+msgstr " Anzahl der Nachrichten: %d\n"
+
+#: common/fbus-6110.c:4303
+#, c-format
+msgid " Unread messages: %d\n"
+msgstr " Ungelesene Nachrichten: %d\n"
+
+#: common/fbus-6110.c:4315
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+"Nachricht: SMS Status fehler, möglichweise nicht über PIN authorisiert\n"
+
+#: common/fbus-6110.c:4346
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Nachricht: Netzmonitor richtig gesetzt.\n"
+
+#: common/fbus-6110.c:4356
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Nachricht: Netzmonitor Menü %d erhalten:\n"
+
+#: common/fbus-6110.c:4372
+msgid "Unknown message of type 0x40.\n"
+msgstr "Unbekannte Nachricht vom Typ 0x40.\n"
+
+#: common/fbus-6110.c:4394
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Nachricht: Mobiltelefonidentifikation erhalten:\n"
+
+#: common/fbus-6110.c:4395
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-6110.c:4397
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid " Production Code: %s\n"
+msgstr " Produktionszahl: %s\n"
+
+#: common/fbus-6110.c:4401
+#, c-format
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: common/fbus-6110.c:4403
+#, c-format
+msgid " Firmware: %s\n"
+msgstr " Firmware: %s\n"
+
+#: common/fbus-6110.c:4409
+#, c-format
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Magische Zahlen: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4429
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Erhielt Bestätigung vom Typ %02x, Seq: %2x]\n"
+
+#: common/fbus-6110.c:4447
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 1.\n"
+
+#: common/fbus-6110.c:4471
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 2.\n"
+
+#: common/fbus-6110.c:4487
+msgid "Message: Unknown message.\n"
+msgstr "Nachricht: Unbekannte Nachricht.\n"
+
+#: common/fbus-6110.c:4564
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4565
+msgid "Please report it ...\n"
+msgstr "Bitte melden sie das ...\n"
+
+#: common/fbus-6110.c:4624
+msgid "Bad checksum!\n"
+msgstr "Falsche Prüfsumme!\n"
+
+#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:4684
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4702
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Nachricht Ziel: %s\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Nachrichtquelle: %s\n"
+
+#: common/fbus-6110.c:4705
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Nachrichtart: %02x\n"
+
+#: common/fbus-6110.c:4707
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Nachricht unbekannt: %02x\n"
+
+#: common/fbus-6110.c:4708
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Nachrichtlänge: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:4779
+msgid "PC: "
+msgstr "PC: "
+
+#: common/fbus-6110.c:4853
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Sende Bestätigung vom Typ %02x, Seq: %x]\n"
+
+#: common/mbus-6160.c:719
+msgid "Couldn't open MB61 device: "
+msgstr "Konnte MB61-Gerät nicht öffnen: "
+
+#: common/mbus-640.c:786
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:816 common/mbus-640.c:916
+msgid "PC : "
+msgstr "PC : "
+
+#: common/mbus-640.c:826 common/mbus-640.c:929
+msgid "Write error!\n"
+msgstr "Schreibfehler!\n"
+
+#: common/mbus-640.c:853
+msgid "Setting MBUS communication...\n"
+msgstr "Starte MBUS Verbindung...\n"
+
+#: common/rlp-common.c:706
+msgid "Unknown!!! "
+msgstr "Unbekannt!!! "
+
+#: common/rlp-common.c:771
+msgid "BAD"
+msgstr "FALSCH"
+
+#: common/rlp-common.c:893
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: common/rlp-common.c:1006
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1007
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1371
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1408
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1473
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1507
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1564
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1622
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1732
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1791
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1821
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1863
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:207
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii/gnokii.c:221
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+" gnokii --sendringtone destionation rtttlfile\n"
+" gnokii --reset [soft|hard]\n"
+msgstr ""
+
+#: gnokii/gnokii.c:255
+msgid ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+msgstr ""
+
+#: gnokii/gnokii.c:260
+msgid ""
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output "
+"of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken "
+"from\n"
+" phone memory from address "
+"[message_center_index].\n"
+" If this argument is ommited SMSC number is "
+"taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+" [--long n] - send no more then n characters,\n"
+" default is 160\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number index from calendar.\n"
+" [-v] - output in vCalendar 1.0 format\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --sendlogo send the logofile to destination as operator\n"
+" or CLI logo\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --sendringtone send the rtttlfile to destination as ringtone\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:344
+msgid ""
+" --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+" --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282
+#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS Init fehlgeschlagen (Unbekanntes Model?). Beende.\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende.\n"
+
+#: gnokii/gnokii.c:636
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:815
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:825
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: gnokii/gnokii.c:897 gnokii/gnokii.c:955
+msgid "Input too long!\n"
+msgstr "Eingabe zu lang!\n"
+
+#: gnokii/gnokii.c:950
+msgid "Couldn't read from stdin!\n"
+msgstr "Konnte nicht von stdin lesen!\n"
+
+#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692
+msgid "Send succeeded!\n"
+msgstr "Senden erfolgreich!\n"
+
+#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "SMS senden fehlgeschlagen (Fehler=%d)\n"
+
+#: gnokii/gnokii.c:1042
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1044
+msgid "Messages sent as "
+msgstr "Nachricht gesendet als "
+
+#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1079
+msgid "Message validity is "
+msgstr "Nachrichtgültigkeit ist "
+
+#: gnokii/gnokii.c:1115
+msgid "SMS center can not be found :-(\n"
+msgstr "SMS Center konnte nicht gefunden werden :-(\n"
+
+#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225
+#: gnokii/gnokii.c:2392
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Unbekannter Speichertyp %s!\n"
+
+#: gnokii/gnokii.c:1214
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Ausgehende Nachricht "
+
+#: gnokii/gnokii.c:1217
+msgid "(sent)\n"
+msgstr "(geschickt)\n"
+
+#: gnokii/gnokii.c:1219
+msgid "(not sent)\n"
+msgstr "(nicht geschickt)\n"
+
+#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1227
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Auslieferreport "
+
+#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269
+msgid "(read)\n"
+msgstr "(gelesen)\n"
+
+#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271
+msgid "(not read)\n"
+msgstr "(nicht gelesen)\n"
+
+#: gnokii/gnokii.c:1233
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Sendedatum/-zeit: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1246
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr ""
+
+#: gnokii/gnokii.c:1259
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Eingehende Nachricht "
+
+#: gnokii/gnokii.c:1273
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Datum/Zeit: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1285
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Absender: %s SMS Center: %s\n"
+
+#: gnokii/gnokii.c:1291
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Verbunden (%d/%d):\n"
+
+#: gnokii/gnokii.c:1297
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483
+#: gnokii/gnokii.c:2252
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funktion nicht implementiert für Modell %s!\n"
+
+#: gnokii/gnokii.c:1312
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1318
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS Ort %s %d leer.\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d fehlgeschlagen!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1414
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d gelöscht\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"SMS löschen %s %d fehlgeschlagen!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1472
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii/gnokii.c:1479
+msgid "Error: invalid code.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1481
+msgid "Code ok.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1485
+msgid "Other error.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1501
+msgid "Security code status: "
+msgstr ""
+
+#: gnokii/gnokii.c:1603
+msgid "Sending operator logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1607
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1609
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1628
+msgid "Operator code: %s\n"
+msgstr "Netzwerkcode: %s\n"
+
+#: gnokii/gnokii.c:1706
+msgid "Getting Logo.\n"
+msgstr "Hole Logo.\n"
+
+#: gnokii/gnokii.c:1752
+msgid "Logo file error.\n"
+msgstr "Logodatei Fehler.\n"
+
+#: gnokii/gnokii.c:1758
+msgid "Sending Logo.\n"
+msgstr "Schicke Logo.\n"
+
+#: gnokii/gnokii.c:1800
+msgid "BEGIN:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1801
+msgid "VERSION:1.0\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1802
+msgid "BEGIN:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1803
+msgid "CATEGORIES:"
+msgstr ""
+
+#: gnokii/gnokii.c:1806
+msgid "MISCELLANEOUS\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1809
+msgid "PHONE CALL\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1812
+msgid "MEETING\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1815
+msgid "SPECIAL OCCASION\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1818
+msgid "UNKNOWN\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1821
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1822
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1826
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1830
+msgid "END:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1831
+msgid "END:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1834
+msgid " Type of the note: "
+msgstr " Art der Notiz: "
+
+#: gnokii/gnokii.c:1839
+msgid "Reminder\n"
+msgstr "Erinnerung\n"
+
+#: gnokii/gnokii.c:1843
+msgid "Call\n"
+msgstr "Anruf\n"
+
+#: gnokii/gnokii.c:1847
+msgid "Meeting\n"
+msgstr "Treffen\n"
+
+#: gnokii/gnokii.c:1851
+msgid "Birthday\n"
+msgstr "Geburtstag\n"
+
+#: gnokii/gnokii.c:1855
+msgid "Unknown\n"
+msgstr "Unbekannt\n"
+
+#: gnokii/gnokii.c:1884
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403
+msgid "Succesfully written!\n"
+msgstr "Erfolgreich geschrieben!\n"
+
+#: gnokii/gnokii.c:1943
+msgid " Calendar note deleted.\n"
+msgstr " Kalendereintrag gelöscht.\n"
+
+#: gnokii/gnokii.c:1946
+msgid "The calendar note can not be deleted\n"
+msgstr "Der Kalendereintrag kann nicht gelöscht werden\n"
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Datum: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2016
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Zeit: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2052
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Alarm: %s\n"
+
+#: gnokii/gnokii.c:2053
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Zeit: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2094
+msgid "Entering monitor mode...\n"
+msgstr "Betrete Monitormodus...\n"
+
+#: gnokii/gnokii.c:2095
+msgid "Initialising GSM interface...\n"
+msgstr "Initialisiere GSM-Schnittstelle...\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Empfangsstärke: %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batterie: %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Stromquelle: %s\n"
+
+#: gnokii/gnokii.c:2112
+msgid "AC/DC"
+msgstr "Gleichspannung"
+
+#: gnokii/gnokii.c:2112
+msgid "battery"
+msgstr "Batterie"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2127
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2130
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2133
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2136
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2139
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Benutzt %d, Frei %d\n"
+
+#: gnokii/gnokii.c:2142
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS Nachrichten: Ungelesen %d, Anzahl %d\n"
+
+#: gnokii/gnokii.c:2145
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Ankommender Anruf: %s\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Netzwerk: %s (%s), LAC: %s, Zellnummer: %s\n"
+
+#: gnokii/gnokii.c:2153
+msgid "Leaving monitor mode...\n"
+msgstr "Verlasse Monitormodus...\n"
+
+#: gnokii/gnokii.c:2257
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Speichertyp %s nicht unterstützt!\n"
+
+#: gnokii/gnokii.c:2262
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Falscher Ort oder anderer Fehler!(%d)\n"
+
+#: gnokii/gnokii.c:2329
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Formatproblem in Zeile %d [%s]\n"
+
+#: gnokii/gnokii.c:2343
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Schreiben erfolgreich: Speicherart: %s, Ort: %d, Name: %s, Nummer: %s\n"
+
+#: gnokii/gnokii.c:2345
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Schreiben fehlgeschlagen(%d): Speichertyp: %s, Ort: %d, Name: %s, Nummer: "
+"%s\n"
+
+#: gnokii/gnokii.c:2365
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "Fehler beim Öffnen von %s, benutze Standardkonfiguration\n"
+
+#: gnokii/gnokii.c:2466
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Anruf in Arbeit: %s\n"
+
+#: gnokii/gnokii.c:2467
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Unbekannt: %s\n"
+
+#: gnokii/gnokii.c:2468
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Ungelesene SMS: %s\n"
+
+#: gnokii/gnokii.c:2469
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Sprachanruf: %s\n"
+
+#: gnokii/gnokii.c:2470
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Aktiver Faxanruf: %s\n"
+
+#: gnokii/gnokii.c:2471
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Aktiver Datenanruf: %s\n"
+
+#: gnokii/gnokii.c:2472
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Tastatursperre: %s\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "SMS Speicher voll: %s\n"
+
+#: gnokii/gnokii.c:2525
+#, c-format
+msgid "IMEI: %s\n"
+msgstr "IMEI: %s\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "Model: %s\n"
+msgstr "Model: %s\n"
+
+#: gnokii/gnokii.c:2527
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revision: %s\n"
+
+#: gnokii/gnokii.c:2559
+msgid "What kind of reset do you want??\n"
+msgstr "Welche Art Reset wünschen sie??\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid Version %s"
+
+#: gnokiid/gnokiid.c:70
+msgid " usage: gnokiid {--help|--version}"
+msgstr " Benutzung: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:85
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:93
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:212
+msgid "Couldn't open pty!\n"
+msgstr "Konnte pty nicht öffnen!\n"
+
+#: gnokiid/virtmodem.c:220
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid sollte als setuid root installiert werden!\n"
+
+#: gnokiid/virtmodem.c:224
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Unter-pty ist %s, benutzte %s um /dev/gnokii zu erstellen.\n"
+
+#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende. \n"
+
+#: xgnokii/xgnokii.c:175
+msgid "/help/index.html"
+msgstr "/help/index.html"
+
+#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973
+msgid "Familly"
+msgstr "Familie"
+
+#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991
+msgid "Friends"
+msgstr "Freunde"
+
+#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000
+msgid "Colleagues"
+msgstr "Kollegen"
+
+#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009
+msgid "Other"
+msgstr "Andere"
+
+#: xgnokii/xgnokii.c:244
+msgid "No group"
+msgstr "Keine Gruppe"
+
+#: xgnokii/xgnokii.c:383
+msgid "Short Message received"
+msgstr "Kurznachricht erhalten"
+
+#: xgnokii/xgnokii.c:398
+msgid "Call in progress"
+msgstr "Anruf in Bearbeitung"
+
+#: xgnokii/xgnokii.c:411
+msgid "Hide"
+msgstr "Verstecken"
+
+#: xgnokii/xgnokii.c:539
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr "Ankommender Anruf von: %s\n"
+"Zeit: %s"
+
+#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Setze %d"
+
+#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:629
+msgid "Voice"
+msgstr "Sprache"
+
+#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386
+msgid "1 h"
+msgstr "1 Stunde"
+
+#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393
+msgid "6 h"
+msgstr "6 Stunden"
+
+#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400
+msgid "24 h"
+msgstr "24 Stunden"
+
+#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407
+msgid "72 h"
+msgstr "72 Stunden"
+
+#: xgnokii/xgnokii.c:660
+msgid "Max. time"
+msgstr "Maximale Zeit"
+
+#: xgnokii/xgnokii.c:962
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1020
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572
+msgid "Contacts"
+msgstr "Kontakte"
+
+#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1044
+msgid "DTMF"
+msgstr "Tonwahl"
+
+#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487
+msgid "Speed Dial"
+msgstr "Kurzwahl"
+
+#: xgnokii/xgnokii.c:1057
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr "Netzmonitor"
+
+#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518
+msgid "Options"
+msgstr "Optionen"
+
+#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042
+msgid "Help"
+msgstr "Hilfe"
+
+#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103
+msgid "About"
+msgstr "Über"
+
+#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280
+#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914
+#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428
+#: xgnokii/xgnokii_sms.c:470
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1120
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1274
+msgid "Edit SMS Setting"
+msgstr "Bearbeite SMS Einstellungen"
+
+#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148
+#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788
+#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145
+#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270
+#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435
+#: xgnokii/xgnokii_sms.c:478
+msgid "Cancel"
+msgstr "Abrechen"
+
+#: xgnokii/xgnokii.c:1301
+msgid "Set name:"
+msgstr "Schreibe Namen:"
+
+#: xgnokii/xgnokii.c:1314
+msgid "Center:"
+msgstr "Center:"
+
+#: xgnokii/xgnokii.c:1327
+msgid "Sending Format:"
+msgstr "Sendeformat:"
+
+#: xgnokii/xgnokii.c:1371
+msgid "Validity Period:"
+msgstr "Gültigkeitsperiode:"
+
+#: xgnokii/xgnokii.c:1379
+msgid "Max. Time"
+msgstr "Maximale Zeit"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Set name"
+msgstr "Schreibe Namen:"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Center number"
+msgstr "Centernummer"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Format"
+msgstr "Format"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Validity"
+msgstr "Gültigkeit"
+
+#: xgnokii/xgnokii.c:1523
+msgid "Apply"
+msgstr "Anwenden"
+
+#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510
+#: xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr "Sichern"
+
+#: xgnokii/xgnokii.c:1539
+msgid "Close"
+msgstr "Schließen"
+
+#: xgnokii/xgnokii.c:1554
+msgid "Phone and connection type"
+msgstr "Telefon und Verbindungsart"
+
+#: xgnokii/xgnokii.c:1561
+msgid "Connection"
+msgstr "Verbindung"
+
+#: xgnokii/xgnokii.c:1568
+msgid "Port:"
+msgstr "Anschluß:"
+
+#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1598
+msgid "Init length:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1613
+msgid "Bindir:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1628
+msgid "Connection:"
+msgstr "Verbindung:"
+
+#: xgnokii/xgnokii.c:1632
+msgid "infrared"
+msgstr "infrarot"
+
+#: xgnokii/xgnokii.c:1636
+msgid "serial"
+msgstr "seriell"
+
+#: xgnokii/xgnokii.c:1641
+msgid "Phone information"
+msgstr "Telefoninformationen"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Version:"
+msgstr "Version:"
+
+#: xgnokii/xgnokii.c:1685
+msgid "Revision:"
+msgstr "Revision:"
+
+#: xgnokii/xgnokii.c:1700
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1715
+msgid "Alarm setting"
+msgstr "Alarmeinstellung"
+
+#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729
+msgid "Alarm"
+msgstr "Alarm"
+
+#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318
+msgid "Short Message Service"
+msgstr "Kurznachrichtendienst"
+
+#: xgnokii/xgnokii.c:1789
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: xgnokii/xgnokii.c:1803
+msgid "Business Card"
+msgstr "Visitenkarte"
+
+#: xgnokii/xgnokii.c:1810
+msgid "User"
+msgstr "Benutzer"
+
+#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801
+msgid "Name:"
+msgstr "Name:"
+
+#: xgnokii/xgnokii.c:1854
+msgid "Title:"
+msgstr "Titel:"
+
+#: xgnokii/xgnokii.c:1880
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1906
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1931
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1956
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:1982
+msgid "Address:"
+msgstr "Adresse:"
+
+#: xgnokii/xgnokii.c:2006
+msgid "Caller groups names"
+msgstr "Gruppenname"
+
+#: xgnokii/xgnokii.c:2013
+msgid "Groups"
+msgstr "Gruppen"
+
+#: xgnokii/xgnokii.c:2022
+#, c-format
+msgid "Group %d:"
+msgstr "Gruppe %d:"
+
+#: xgnokii/xgnokii.c:2035
+msgid "Help viewer"
+msgstr "Hilfeanzeiger"
+
+#: xgnokii/xgnokii.c:2049
+msgid "Viewer:"
+msgstr "Anzeiger:"
+
+#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:154
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:166
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:184
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:141
+msgid "Error"
+msgstr "Fehler"
+
+#: xgnokii/xgnokii_common.c:187
+msgid "Yes"
+msgstr "Ja"
+
+#: xgnokii/xgnokii_common.c:196
+msgid "No"
+msgstr "Nein"
+
+#: xgnokii/xgnokii_common.c:281
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Kann %s nicht ausführen\n"
+
+#: xgnokii/xgnokii_contacts.c:88
+msgid "/help/contacts.html"
+msgstr "/help/contacts.html"
+
+#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243
+#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429
+#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584
+msgid "Can't change memory type!"
+msgstr "Kann Speichertyp nicht ändern!"
+
+#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:674
+msgid "Can't find pattern!"
+msgstr "Kann Muster nicht finden!"
+
+#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279
+msgid "Number:"
+msgstr "Nummer:"
+
+#: xgnokii/xgnokii_contacts.c:827
+msgid "Memory:"
+msgstr "Speicher:"
+
+#: xgnokii/xgnokii_contacts.c:831
+msgid "phone"
+msgstr "Telefon"
+
+#: xgnokii/xgnokii_contacts.c:846
+msgid "Caller group:"
+msgstr "Gruppe:"
+
+#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633
+#: xgnokii/xgnokii_speed.c:540
+msgid "Edit entry"
+msgstr "Eintrag bearbeiten"
+
+#: xgnokii/xgnokii_contacts.c:907
+msgid "Delete entries"
+msgstr "Einträge löschen"
+
+#: xgnokii/xgnokii_contacts.c:939
+msgid "Do you want delete selected entries?"
+msgstr "Wollen sie die gewählten Einträge löschen?"
+
+#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625
+msgid "New entry"
+msgstr "Neuer Eintrag"
+
+#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629
+msgid "Duplicate entry"
+msgstr "Eintrag duplizieren"
+
+#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062
+#: xgnokii/xgnokii_contacts.c:1087
+msgid "Can't find free memory."
+msgstr "Kann keinen freien Speicher finden."
+
+#: xgnokii/xgnokii_contacts.c:1128
+msgid "Changing memory type"
+msgstr "Wechlse Speicherart"
+
+#: xgnokii/xgnokii_contacts.c:1136
+msgid "Continue"
+msgstr "Fortfahren"
+
+#: xgnokii/xgnokii_contacts.c:1156
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181
+msgid "Find"
+msgstr "Suchen"
+
+#: xgnokii/xgnokii_contacts.c:1203
+msgid "Pattern:"
+msgstr "Muster:"
+
+#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Name"
+msgstr "Name"
+
+#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Number"
+msgstr "Nummer"
+
+#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644
+msgid "Dial voice"
+msgstr "Sprachanruf"
+
+#: xgnokii/xgnokii_contacts.c:1385
+msgid "Phone memory..."
+msgstr "Telefonspeicher..."
+
+#: xgnokii/xgnokii_contacts.c:1396
+msgid "SIM memory..."
+msgstr "Kartenspeicher..."
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Saving entries"
+msgstr "Sichere Einträge"
+
+#: xgnokii/xgnokii_contacts.c:1448
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1481
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid "Save changes?"
+msgstr "Sichere Änderungen"
+
+#: xgnokii/xgnokii_contacts.c:1519
+msgid "Don't save"
+msgstr "Nicht sichern"
+
+#: xgnokii/xgnokii_contacts.c:1543
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1641
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1665
+msgid "Getting entries"
+msgstr "Hole Einträge"
+
+#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719
+#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691
+#, c-format
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736
+#, c-format
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110
+#: xgnokii/xgnokii_speed.c:378
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142
+#: xgnokii/xgnokii_speed.c:418
+msgid "Overwrite file?"
+msgstr "Datei überschreiben?"
+
+#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143
+#: xgnokii/xgnokii_speed.c:419
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436
+msgid "Export"
+msgstr "Exportieren"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74
+#: xgnokii/xgnokii_speed.c:280
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2130
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357
+msgid "Import"
+msgstr "Importieren"
+
+#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036
+msgid "Select contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673
+#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Memory"
+msgstr "Speicher"
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Group"
+msgstr "Gruppe"
+
+#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518
+msgid "Read from phone"
+msgstr "Aus Telefon auslesen"
+
+#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522
+msgid "Save to phone"
+msgstr "In Telefon schreiben"
+
+#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529
+msgid "Import from file"
+msgstr "Aus Datei importieren"
+
+#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533
+msgid "Export to file"
+msgstr "In Datei exportieren"
+
+#: xgnokii/xgnokii_contacts.c:2637
+msgid "Delete entry"
+msgstr "Eintrag löscehn"
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr "/help/dtmf.html"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr "Öffnen"
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr "Wählton"
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr "/help/netmon.html"
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr "Aktive Zelle"
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:83
+msgid "/help/sms.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:88
+msgid "/help/sms_send.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "report"
+msgstr "Report"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "read"
+msgstr "gelesen"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "unread"
+msgstr "ungelesen"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "gesendet"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "nicht gesendet"
+
+#: xgnokii/xgnokii_sms.c:380
+msgid "From: "
+msgstr "Von: "
+
+#: xgnokii/xgnokii_sms.c:388
+msgid "Date: "
+msgstr "Datum: "
+
+#: xgnokii/xgnokii_sms.c:438
+msgid "Function not implemented!"
+msgstr "Funktion nicht implementiert!"
+
+#: xgnokii/xgnokii_sms.c:443
+msgid "Delete SMS failed!"
+msgstr "SMS löschen fehlgeschlagen!"
+
+#: xgnokii/xgnokii_sms.c:463
+msgid "Delete SMS"
+msgstr "SMS löschen"
+
+#: xgnokii/xgnokii_sms.c:495
+msgid "Do you want delete selected SMS?"
+msgstr "Wollen sie die ausgewählte SMS löschen?"
+
+#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817
+msgid "Address line contains illegal address!"
+msgstr "Addresszeile enthält eine falsche Adresse!"
+
+#: xgnokii/xgnokii_sms.c:791
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr "SMS senden zu %s fehlgeschlagen\n"
+"(Fehler=%d)"
+
+#: xgnokii/xgnokii_sms.c:988
+msgid "Send message"
+msgstr "Schicke Nachricht"
+
+#: xgnokii/xgnokii_sms.c:992
+msgid "Save message to outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:999
+msgid "Check names"
+msgstr "Überprüfe Namen"
+
+#: xgnokii/xgnokii_sms.c:1012
+msgid "To:"
+msgstr "An:"
+
+#: xgnokii/xgnokii_sms.c:1084
+msgid "Delivery report"
+msgstr "Auslieferreport"
+
+#: xgnokii/xgnokii_sms.c:1088
+msgid "Send as Long SMS"
+msgstr "Schicke als lange SMS"
+
+#: xgnokii/xgnokii_sms.c:1092
+msgid "SMS Center:"
+msgstr "SMS Center:"
+
+#: xgnokii/xgnokii_sms.c:1110
+msgid "New Message"
+msgstr "Neue Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352
+msgid "Forward Message"
+msgstr "Nachricht weiterleiten"
+
+#: xgnokii/xgnokii_sms.c:1177
+msgid "Reply Message"
+msgstr "Nachricht beantworten"
+
+#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361
+msgid "Bussiness Card"
+msgstr "Visitenkarte"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Status"
+msgstr "Status"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Date / Time"
+msgstr "Datum / Zeit"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Sender"
+msgstr "Sender"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Message"
+msgstr "Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1348
+msgid "New message"
+msgstr "Neue Nachricht"
+
+#: xgnokii/xgnokii_sms.c:1356
+msgid "Reply message"
+msgstr "Nachricht beantworten"
+
+#: xgnokii/xgnokii_sms.c:1368
+msgid "Delete message"
+msgstr "Nachricht löschen"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "SMS's"
+msgstr "SMS's"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1408
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:42
+msgid "/help/speeddial.html"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Cannot allocate memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:226
+#, c-format
+msgid ""
+"Error writing speed\n"
+"dial for key %d!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:298
+msgid "Cannot allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338
+msgid "Error reading file!"
+msgstr "Fehler beim Datei lesen!"
+
+#: xgnokii/xgnokii_speed.c:484
+msgid "Key"
+msgstr "Schöüssel"
+
+#: xgnokii/xgnokii_xkeyb.c:90
+msgid "/help/xkeyb.html"
+msgstr "/help/xkeyb.html"
+
+#: xgnokii/xgnokii_xkeyb.c:149
+msgid "Cannot load background pixmap!"
+msgstr "Kann Hintergrundbild nicht öffnen!"
+
+#: xgnokii/xgnokii_xkeyb.c:201
+msgid "/_File"
+msgstr "/_Datei"
+
+#: xgnokii/xgnokii_xkeyb.c:202
+msgid "/File/_Close"
+msgstr "/Datei/_Schließen"
+
+#: xgnokii/xgnokii_xkeyb.c:203
+msgid "/_Help"
+msgstr "/_Hilfe"
+
+#: xgnokii/xgnokii_xkeyb.c:204
+msgid "/Help/_Help"
+msgstr "/Hilfe/_Hilfe"
+
+#: xgnokii/xgnokii_xkeyb.c:205
+msgid "/Help/_About"
+msgstr "/Hilfe/_Über"
+
+#: xgnokii/xgnokii_xkeyb.c:218
+msgid "XGnokii Keyboard"
+msgstr "XGnokii Tastatur"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-09-09 23:32+0200\n"
+"PO-Revision-Date: 2000-09-11 06:20:00+0200\n"
+"Last-Translator: Hans Mõtshärg <hans.motsharg@mail.ee>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:521 common/fbus-6110.c:2186
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Saadan SMS'i %s kasutades saatekeskust %s\n"
+
+#: common/fbus-3810.c:625
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "SMS saatmine ebaõnnestus, proovin veel (katse %d %d-st)\n"
+
+#: common/fbus-3810.c:1196
+msgid "Couldn't open FB38 device: "
+msgstr "Ei suuda avada FB38 seadet: "
+
+#: common/fbus-3810.c:1288
+msgid "restarting.\n"
+msgstr "käivitun uuesti.\n"
+
+#: common/fbus-3810.c:1344
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT Viga %02x"
+
+#: common/fbus-3810.c:1351 common/mbus-6160.c:1202
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS Viga %02x != %02x"
+
+#: common/fbus-3810.c:1465
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registreerimise vastus 0x%02x\n"
+
+#: common/fbus-3810.c:1481
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x15 Registreerimise vastus 0x%02x\n"
+
+#: common/fbus-3810.c:1482
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr ""
+
+#: common/fbus-3810.c:1558
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS salvestatud 0x%02x\n"
+
+#: common/fbus-3810.c:1568
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "SMS salvestamine 0x%02x ebaõnnestus\n"
+
+#: common/fbus-3810.c:1689
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [tõenäoliselt] sisestatud.\n"
+
+#: common/fbus-3810.c:1698
+msgid "Phone powering off..."
+msgstr "Telefon lülitub välja"
+
+#: common/fbus-3810.c:1727 common/mbus-6160.c:809
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1753
+msgid "Unknown: "
+msgstr "Tundmatu: "
+
+#: common/fbus-3810.c:1755
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Msg Tüüp: %02x "
+
+#: common/fbus-3810.c:1756
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Msg pikkus: %02x"
+
+#: common/fbus-3810.c:1757
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Järjenumber: %02x "
+
+#: common/fbus-3810.c:1758
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Kontrollsumma: %02x \n"
+" "
+
+#: common/fbus-3810.c:1850 common/fbus-3810.c:1980
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1895
+msgid "TX_SendRLPFrame - write:"
+msgstr ""
+
+#: common/fbus-3810.c:1907
+msgid "Request HangupMessage Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1919
+msgid "0x4a Write failed!"
+msgstr "0x4a Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:1934
+msgid "Explore Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1944
+msgid "0x3f Write failed!"
+msgstr "0x3f Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2004
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2017
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2060
+msgid "Send SMS header failed!"
+msgstr "SMS päise saatmine ebaõnnestus!"
+
+#: common/fbus-3810.c:2119
+msgid "Store SMS header failed!"
+msgstr "SMS päise salvestamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2144
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2167
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2190
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "SMS kustutamine mälupesast ebaõnnestus!"
+
+#: common/fbus-3810.c:2209
+msgid "0x15 Write failed!"
+msgstr "0x15 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2226 common/mbus-6160.c:1280
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - sõnum on liiga pikk!\n"
+
+#: common/fbus-3810.c:2252 common/mbus-6160.c:1083 common/mbus-6160.c:1312
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - kirjuta:"
+
+#: common/fbus-3810.c:2265 common/fbus-3810.c:2398 common/fbus-3810.c:2412
+#: common/fbus-3810.c:2426 common/fbus-3810.c:2440 common/fbus-3810.c:2574
+#: common/fbus-3810.c:2635 common/fbus-3810.c:2694 common/fbus-3810.c:2732
+msgid "Write failed!"
+msgstr "Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2279
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Saabuv kõne - Tüüp: %s. %02x, Number %s.\n"
+
+#: common/fbus-3810.c:2306
+msgid "0x27 Write failed!"
+msgstr "0x27 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2354
+msgid "0x4b Write failed!"
+msgstr "0x4b Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2373
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Olek: %s Batt %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2384
+msgid "0x10 Write failed!"
+msgstr "0x10 Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2388
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Kõne telefonilt katkestatud (0x10 teade).\n"
+
+#: common/fbus-3810.c:2402
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Kõne katkestatud vastuvõtja või võrgu poolt.\n"
+
+#: common/fbus-3810.c:2416
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Väljuv kõne katkestatud (0x12 teade).\n"
+
+#: common/fbus-3810.c:2430
+msgid "Incoming call answered from phone.\n"
+msgstr "Saabuv kõne vastatud.\n"
+
+#: common/fbus-3810.c:2444
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s kõne moodustatud - staatuse bitid %02x %02x.\n"
+
+#: common/fbus-3810.c:2461
+msgid "0x2c Write failed!"
+msgstr "0x2c Kirjutamine ebaõnnestus!"
+
+#: common/fbus-3810.c:2548
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Ajavöönd:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2615
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Saabuv SMS sõnum %d/%d/%d %d:%02d:%02d AV:0x%02x Saatja: %s(%02x tüüpi) Msg "
+"Keskus: %s\n"
+
+#: common/fbus-3810.c:2617
+#, c-format
+msgid ""
+" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+" Msg pikkus %d, Msg mälukoht %d Msg number %d, PID: %02x DCS: %02x "
+"Tundmatud baidid: %02x\n"
+
+#: common/fbus-3810.c:2710
+msgid "Mobile phone identification received:\n"
+msgstr "Mobiiltelefeni identifikaator saabus:\n"
+
+#: common/fbus-3810.c:2711
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-3810.c:2713
+#, c-format
+msgid " Model: %s\n"
+msgstr " Mudel: %s\n"
+
+#: common/fbus-3810.c:2715
+#, c-format
+msgid " Revision: %s\n"
+msgstr " Versioon: %s\n"
+
+#: common/fbus-3810.c:2783
+msgid "SMS Message Center Data:\n"
+msgstr "SMS Keskuse info: \n"
+
+#: common/fbus-3810.c:2784
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Valitud mälu: 0x%02x\n"
+
+#: common/fbus-3810.c:2785
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Lühisõnumeid Telefonis: 0x%02x Lugemata: 0x%02x\n"
+
+#: common/fbus-3810.c:2787
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Lühisõnumeid SIM kaardil: 0x%02x Lugemata: 0x%02x\n"
+
+#: common/fbus-3810.c:2789
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr ""
+
+#: common/fbus-3810.c:2791
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Saateraport: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2793
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Sõnum saadetud nagu 0x%02x\n"
+
+#: common/fbus-3810.c:2794
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Sõnumi kehtivus on 0x%02x\n"
+
+#: common/fbus-3810.c:2795
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Tundmatu: 0x%02x\n"
+
+#: common/fbus-3810.c:2798
+msgid "UnknownNumber field empty."
+msgstr "TundmatuNumber väli on tühi."
+
+#: common/fbus-3810.c:2800
+msgid "UnknownNumber: "
+msgstr "TundmatuNumber: "
+
+#: common/fbus-3810.c:2807
+msgid "Number field empty."
+msgstr "Numbriväli on tühi."
+
+#: common/fbus-3810.c:2810
+msgid "Number: "
+msgstr "Number: "
+
+#: common/fbus-6110.c:891
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: common/fbus-6110.c:923
+msgid "Couldn't open FB61 infrared device"
+msgstr "Ei suuda avada FB61 IR-seadet"
+
+#: common/fbus-6110.c:991
+msgid "Starting IR mode...!\n"
+msgstr "Alustan IR ühendust...!\n"
+
+#: common/fbus-6110.c:2570 gnokii/gnokii.c:1056 gnokii/gnokii.c:1850
+#: gnokii/gnokii.c:3291 gnokii/gnokii.c:3318
+msgid "Send succeeded!\n"
+msgstr "Saatmine õnnestus!\n"
+
+#: common/fbus-6110.c:2572 gnokii/gnokii.c:1058 gnokii/gnokii.c:1852
+#: gnokii/gnokii.c:3293
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "SMS saatmine ebaõnnestus (viga=%d)\n"
+
+#: common/fbus-6110.c:2603
+msgid "Serial flags dump:\n"
+msgstr "Serialpordi lippude olek:\n"
+
+#: common/fbus-6110.c:2604 common/mbus-640.c:928
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR on %s.\n"
+
+#: common/fbus-6110.c:2604 common/fbus-6110.c:2605 common/fbus-6110.c:2606
+#: common/fbus-6110.c:2607 common/mbus-640.c:928 common/mbus-640.c:929
+msgid "up"
+msgstr "toimib"
+
+#: common/fbus-6110.c:2604 common/fbus-6110.c:2605 common/fbus-6110.c:2606
+#: common/fbus-6110.c:2607 common/mbus-640.c:928 common/mbus-640.c:929
+msgid "down"
+msgstr "maas"
+
+#: common/fbus-6110.c:2605 common/mbus-640.c:929
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS on %s.\n"
+
+#: common/fbus-6110.c:2606
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR on %s.\n"
+
+#: common/fbus-6110.c:2607
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS on %s.\n"
+
+#: common/fbus-6110.c:2642
+msgid "Setting FBUS communication...\n"
+msgstr "Tekitan FBUS ühendust...\n"
+
+#: common/fbus-6110.c:2673
+msgid "Couldn't open FB61 device"
+msgstr "Ei suuda avada FB61 seadet"
+
+#: common/fbus-6110.c:2800
+msgid "Message: Call message, type 0x02:"
+msgstr "Teade: Kõneteade, tüüp 0x02:"
+
+#: common/fbus-6110.c:2801 common/fbus-6110.c:2813 common/fbus-6110.c:2915
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Täpne tagamõte hetkel tundmatu ... :-(\n"
+
+#: common/fbus-6110.c:2811
+msgid "Message: Call message, type 0x03:"
+msgstr "Teade: Kõneteade, tüüp 0x03:"
+
+#: common/fbus-6110.c:2812 common/fbus-6110.c:2828 common/fbus-6110.c:2846
+#: common/fbus-6110.c:2877 common/fbus-6110.c:2888 common/fbus-6110.c:2914
+#, c-format
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Kõne järjenumber: %d\n"
+
+#: common/fbus-6110.c:2827
+msgid "Message: Remote end hang up.\n"
+msgstr "Teade: Teine pool katkestas kõne.\n"
+
+#: common/fbus-6110.c:2841
+msgid "Message: Incoming call alert:\n"
+msgstr "Teade: Saabuva kõne hoiatus:\n"
+
+#: common/fbus-6110.c:2847 common/fbus-6110.c:3130
+msgid " Number: "
+msgstr " Number: "
+
+#: common/fbus-6110.c:2855 common/fbus-6110.c:3114
+msgid " Name: "
+msgstr " Nimi: "
+
+#: common/fbus-6110.c:2876
+msgid "Message: Call answered.\n"
+msgstr "Sõnum: Kõne vastatud.\n"
+
+#: common/fbus-6110.c:2887
+msgid "Message: Call ended by your phone.\n"
+msgstr "Teade: Kõne lõpetatud oma telefoni poolt.\n"
+
+#: common/fbus-6110.c:2913
+msgid "Message: Call message, type 0x0a:"
+msgstr "Teade: Kõneteade, tüüp 0x0a:"
+
+#: common/fbus-6110.c:2926
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Teade: Tundmatu 0x01 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:2944
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Teade: SMS sõnum korrektselt saadetud.\n"
+
+#: common/fbus-6110.c:2955
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Teade: SMS sõnumi saatmine ebaõnnestus.\n"
+
+#: common/fbus-6110.c:2964
+msgid "Message: SMS Message Received\n"
+msgstr "Teade: SMS sõnum saabus\n"
+
+#: common/fbus-6110.c:2965 common/fbus-6110.c:4407
+#, c-format
+msgid " SMS center number: %s\n"
+msgstr " SMS keskuse number: %s\n"
+
+#: common/fbus-6110.c:2969 common/fbus-6110.c:4408
+#, c-format
+msgid " Remote number: %s\n"
+msgstr " Teise poole number: %s\n"
+
+#: common/fbus-6110.c:2970
+#, c-format
+msgid " Date: %s\n"
+msgstr " Kuupäev: %s\n"
+
+#: common/fbus-6110.c:2971
+msgid " SMS: "
+msgstr " SMS: "
+
+#: common/fbus-6110.c:2986
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Teade: SMS keskus korrektselt paigas.\n"
+
+#: common/fbus-6110.c:3002
+msgid "Message: SMS Center received:\n"
+msgstr "Teade: SMS keskus saabus:\n"
+
+#: common/fbus-6110.c:3003
+#, c-format
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. SMS Keskuse nimi on %s\n"
+
+#: common/fbus-6110.c:3004
+#, c-format
+msgid " SMS Center number is %s\n"
+msgstr " SMS keskuse number on %s\n"
+
+#: common/fbus-6110.c:3006
+msgid " SMS Center message format is "
+msgstr " SMS keskuse teate formaat on "
+
+#: common/fbus-6110.c:3011 gnokii/gnokii.c:1149 xgnokii/xgnokii.c:528
+#: xgnokii/xgnokii.c:557 xgnokii/xgnokii.c:1384
+msgid "Text"
+msgstr "Tekst"
+
+#: common/fbus-6110.c:3015 gnokii/gnokii.c:1153 xgnokii/xgnokii.c:532
+#: xgnokii/xgnokii.c:1398
+msgid "Paging"
+msgstr ""
+
+#: common/fbus-6110.c:3019 gnokii/gnokii.c:1157 xgnokii/xgnokii.c:536
+#: xgnokii/xgnokii.c:1391
+msgid "Fax"
+msgstr "Faks"
+
+#: common/fbus-6110.c:3023 gnokii/gnokii.c:1162
+msgid "Email"
+msgstr ""
+
+#: common/fbus-6110.c:3027 common/fbus-6110.c:3061 common/fbus-6110.c:4629
+#: common/fbus-6110.c:5167 gnokii/gnokii.c:1174 gnokii/gnokii.c:1208
+msgid "Unknown"
+msgstr "Tundmatu"
+
+#: common/fbus-6110.c:3032
+msgid " SMS Center message validity is "
+msgstr " SMS keskuse teate kehtivusaeg on "
+
+#: common/fbus-6110.c:3037 gnokii/gnokii.c:1184
+msgid "1 hour"
+msgstr "1 tund"
+
+#: common/fbus-6110.c:3041 gnokii/gnokii.c:1188
+msgid "6 hours"
+msgstr "6 tundi"
+
+#: common/fbus-6110.c:3045 gnokii/gnokii.c:1192
+msgid "24 hours"
+msgstr "24 tundi"
+
+#: common/fbus-6110.c:3049 gnokii/gnokii.c:1196
+msgid "72 hours"
+msgstr "72 tundi"
+
+#: common/fbus-6110.c:3053 gnokii/gnokii.c:1200 xgnokii/xgnokii.c:580
+#: xgnokii/xgnokii.c:1463
+msgid "1 week"
+msgstr "1 nädal"
+
+#: common/fbus-6110.c:3057 gnokii/gnokii.c:1204
+msgid "Maximum time"
+msgstr "Maksimaalne aeg"
+
+#: common/fbus-6110.c:3079
+msgid "Message: SMS Center error received:\n"
+msgstr "Teade: SMS keskuse viga saabus:\n"
+
+#: common/fbus-6110.c:3080
+msgid " The request for SMS Center failed.\n"
+msgstr " Sõnumikeskuse päring ebaõnnestus.\n"
+
+#: common/fbus-6110.c:3091
+msgid "Unknown message!\n"
+msgstr "Tundmatu sõnum!\n"
+
+#: common/fbus-6110.c:3113
+msgid "Message: Phonebook entry received:\n"
+msgstr "Teade: Telefoniraamatu kirje saabus:\n"
+
+#: common/fbus-6110.c:3150
+msgid " Date: "
+msgstr " Kuupäev: "
+
+#: common/fbus-6110.c:3152
+msgid " Time: "
+msgstr " Kellaaeg: "
+
+#: common/fbus-6110.c:3165
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Teade: Telefoniraamatu lugemise viga saabus:\n"
+
+#: common/fbus-6110.c:3173
+msgid " Invalid memory type!\n"
+msgstr " Vale mälu tüüp!\n"
+
+#: common/fbus-6110.c:3183 common/fbus-6110.c:3221
+msgid " Unknown error!\n"
+msgstr " Tundmatu viga!\n"
+
+#: common/fbus-6110.c:3194
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Teade: Telefoniraamat korrektselt kirjutatud.\n"
+
+#: common/fbus-6110.c:3211
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Teade: Telefoniraamatusse ei kirjutatud - nimi on liiga pikk.\n"
+
+#: common/fbus-6110.c:3232
+msgid "Message: Memory status received:\n"
+msgstr "Teade: Mälu olek saabus:\n"
+
+#: common/fbus-6110.c:3234
+#, c-format
+msgid " Memory Type: %s\n"
+msgstr " Mälu tüüp: %s\n"
+
+#: common/fbus-6110.c:3235
+#, c-format
+msgid " Used: %d\n"
+msgstr " Kasutatud: %d\n"
+
+#: common/fbus-6110.c:3236
+#, c-format
+msgid " Free: %d\n"
+msgstr " Vaba: %d\n"
+
+#: common/fbus-6110.c:3251
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Teade: Mälu oleku viga, telefon on tõenäoliselt väljalülitatud.\n"
+
+#: common/fbus-6110.c:3258
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Teade: Mälu oleku viga, mälu tüüp pole telefoni poolt toetatud.\n"
+
+#: common/fbus-6110.c:3265
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Teade: Mälu oleku viga, ootan turvakoodi.\n"
+
+#: common/fbus-6110.c:3272
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:3289
+msgid "Message: Caller group logo etc.\n"
+msgstr "Teade: Helistaja grupi Logo jms.\n"
+
+#: common/fbus-6110.c:3290
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Helistaja grupi nimi: %s\n"
+
+#: common/fbus-6110.c:3310
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Teade: Helistaja grupi andmed saabusid kuid polnud küsitud!\n"
+
+#: common/fbus-6110.c:3320
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Teade: Helistajagrupi andmete saamise viga.\n"
+
+#: common/fbus-6110.c:3328
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Teade: Helistaja grupi andmed korrektselt seatud.\n"
+
+#: common/fbus-6110.c:3336
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Teade: Helistajagrupi andmete seadmise viga.\n"
+
+#: common/fbus-6110.c:3347
+msgid "Message: Speed dial entry received:\n"
+msgstr "Teade: kiirvalimise kirje saabus:\n"
+
+#: common/fbus-6110.c:3348
+#, c-format
+msgid " Location: %d\n"
+msgstr " Asukoht: %d\n"
+
+#: common/fbus-6110.c:3349
+#, c-format
+msgid " MemoryType: %s\n"
+msgstr " Mälu tüüp: %s\n"
+
+#: common/fbus-6110.c:3350
+#, c-format
+msgid " Number: %d\n"
+msgstr " Number: %d\n"
+
+#: common/fbus-6110.c:3360
+msgid "Message: Speed dial entry error\n"
+msgstr "Teade: kiirvalimise sisestuse viga\n"
+
+#: common/fbus-6110.c:3370
+msgid "Message: Speed dial entry set.\n"
+msgstr "Teade: kiirvalimise kirje seatud.\n"
+
+#: common/fbus-6110.c:3380
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Teade: kiirvalimise kirje seade viga.\n"
+
+#: common/fbus-6110.c:3390
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Teade: Tundmatu 0x03 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3406
+msgid "Message: Phone status received:\n"
+msgstr "Teade: Telefoni olek saabunud:\n"
+
+#: common/fbus-6110.c:3407
+msgid " Mode: "
+msgstr " Olek: "
+
+#: common/fbus-6110.c:3413
+msgid "registered within the network\n"
+msgstr "registreeritud võrkku\n"
+
+#: common/fbus-6110.c:3422
+msgid "call in progress\n"
+msgstr "kõne käimas\n"
+
+#: common/fbus-6110.c:3428
+msgid "waiting for security code\n"
+msgstr "ootan turvakoodi.\n"
+
+#: common/fbus-6110.c:3434
+msgid "powered off\n"
+msgstr "toide välja\n"
+
+#: common/fbus-6110.c:3440 common/fbus-6110.c:3462
+msgid "unknown\n"
+msgstr "tundmatu\n"
+
+#: common/fbus-6110.c:3444
+msgid " Power source: "
+msgstr " Toiteallikas: "
+
+#: common/fbus-6110.c:3450
+msgid "AC/DC\n"
+msgstr "Vahelduvvool/Alalisvool\n"
+
+#: common/fbus-6110.c:3456
+msgid "battery\n"
+msgstr "aku\n"
+
+#: common/fbus-6110.c:3466
+#, c-format
+msgid " Battery Level: %d\n"
+msgstr " Aku laadumus: %d\n"
+
+#: common/fbus-6110.c:3467
+#, c-format
+msgid " Signal strength: %d\n"
+msgstr " Signaali väljatugevus: %d\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Teade: Tundmatu 0x04 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3495
+msgid "Message: Profile feature change result.\n"
+msgstr "Teade: Profiili omadus muutis tulemust.\n"
+
+#: common/fbus-6110.c:3553
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr "Teade: Saabusid Startup Logo, Teretere teade ja diileri tervitustede.\n"
+
+#: common/fbus-6110.c:3577
+msgid "Startup logo supported - "
+msgstr "Startup Logo on toetatud - "
+
+#: common/fbus-6110.c:3580
+msgid "currently set\n"
+msgstr "hetkel seatud\n"
+
+#: common/fbus-6110.c:3582 common/fbus-6110.c:3601 common/fbus-6110.c:3621
+#: gnokii/gnokii.c:2017
+msgid "currently empty\n"
+msgstr "hetkel tühi\n"
+
+#: common/fbus-6110.c:3594
+msgid "Startup Text supported - "
+msgstr "Startup Tekst on toetatud - "
+
+#: common/fbus-6110.c:3597 common/fbus-6110.c:3617
+msgid "currently set to \""
+msgstr "hetkel seatud \""
+
+#: common/fbus-6110.c:3598 common/fbus-6110.c:3618 common/fbus-6110.c:4755
+#: common/fbus-6110.c:4759
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: common/fbus-6110.c:3599 common/fbus-6110.c:3619
+msgid "\"\n"
+msgstr ""
+
+#: common/fbus-6110.c:3614
+msgid "Dealer Welcome supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3634
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Teade: Startup logo saabus, kuid pole küsitud!\n"
+
+#: common/fbus-6110.c:3643
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3669
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Teade: Operaatori Logo korrektselt paigas.\n"
+
+#: common/fbus-6110.c:3678
+msgid "Message: Error setting operator logo!\n"
+msgstr "Teade: Viga operaatori logo kehtestamisel!\n"
+
+#: common/fbus-6110.c:3701
+#, c-format
+msgid "Message: Operator Logo for %s (%s) network received.\n"
+msgstr "Teade: Saabus Operaatori Logo võrgule %s (%s).\n"
+
+#: common/fbus-6110.c:3719
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Teade: Operaatori Logo saabunud, kuid mitte küsitud!\n"
+
+#: common/fbus-6110.c:3728
+msgid "Message: Error getting operator logo!\n"
+msgstr "Teade: Viga operaatori logo võtmisel!\n"
+
+#: common/fbus-6110.c:3746
+msgid "Message: Security Code status received: "
+msgstr "Teade: Security koodi olek saabus: "
+
+#: common/fbus-6110.c:3752 gnokii/gnokii.c:1604
+msgid "waiting for Security Code.\n"
+msgstr "ootan Security koodi.\n"
+
+#: common/fbus-6110.c:3757 gnokii/gnokii.c:1609
+msgid "waiting for PIN.\n"
+msgstr "ootan PIN koodi.\n"
+
+#: common/fbus-6110.c:3762 gnokii/gnokii.c:1614
+msgid "waiting for PIN2.\n"
+msgstr "ootan PIN2 koodi.\n"
+
+#: common/fbus-6110.c:3767 gnokii/gnokii.c:1619
+msgid "waiting for PUK.\n"
+msgstr "ootan PUK koodi.\n"
+
+#: common/fbus-6110.c:3772 gnokii/gnokii.c:1624
+msgid "waiting for PUK2.\n"
+msgstr "ootan PUK2 koodi.\n"
+
+#: common/fbus-6110.c:3777 gnokii/gnokii.c:1629
+msgid "nothing to enter.\n"
+msgstr "pole midagi sisestada.\n"
+
+#: common/fbus-6110.c:3782 gnokii/gnokii.c:1634
+msgid "Unknown!\n"
+msgstr "Tundmatu!\n"
+
+#: common/fbus-6110.c:3794
+msgid "Message: Security code accepted.\n"
+msgstr "Teade: Security kood aksepteeritud.\n"
+
+#: common/fbus-6110.c:3804
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Teade: Security kood on vale. Sa pole telefoni õige omanik :-)\n"
+
+#: common/fbus-6110.c:3831
+msgid "Message: Network informations:\n"
+msgstr "Teade: Võrgu informatsioon:\n"
+
+#: common/fbus-6110.c:3833
+#, c-format
+msgid " CellID: %s\n"
+msgstr " KärjeID: %s\n"
+
+#: common/fbus-6110.c:3834
+#, c-format
+msgid " LAC: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3835
+#, c-format
+msgid " Network code: %s\n"
+msgstr " Võrgu kood: %s\n"
+
+#: common/fbus-6110.c:3836
+#, c-format
+msgid " Network name: %s (%s)\n"
+msgstr " Võrgu nimi: %s (%s)\n"
+
+#: common/fbus-6110.c:3839
+msgid " Status: "
+msgstr " Olek: "
+
+#: common/fbus-6110.c:3842
+msgid "home network selected"
+msgstr "koduvõrk valitud"
+
+#: common/fbus-6110.c:3843
+msgid "roaming network"
+msgstr "roaming võrk"
+
+#: common/fbus-6110.c:3844
+msgid "requesting network"
+msgstr "võrgupäring"
+
+#: common/fbus-6110.c:3845
+msgid "not registered in the network"
+msgstr "pole võrkku registreerunud"
+
+#: common/fbus-6110.c:3846
+msgid "unknown"
+msgstr "tundmatu"
+
+#: common/fbus-6110.c:3851
+#, c-format
+msgid " Network selection: %s\n"
+msgstr " Võrgu valik: %s\n"
+
+#: common/fbus-6110.c:3851
+msgid "manual"
+msgstr "käsiraamat"
+
+#: common/fbus-6110.c:3851
+msgid "automatic"
+msgstr "automaatne"
+
+#: common/fbus-6110.c:3861
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Teade: Tundmatu 0x0a tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3878
+msgid "Message: Result of key "
+msgstr " "
+
+#: common/fbus-6110.c:3881
+msgid "press\n"
+msgstr "vajuta\n"
+
+#: common/fbus-6110.c:3882
+msgid "release\n"
+msgstr "vabasta\n"
+
+#: common/fbus-6110.c:3883
+msgid "press or release - error\n"
+msgstr "vajuta või vabasta - viga\n"
+
+#: common/fbus-6110.c:3890
+msgid "Message: Unknown message of type 0x0c\n"
+msgstr "Teade: Tundmatu 0x0c tüüpi sõnum\n"
+
+#: common/fbus-6110.c:3925 gnokii/gnokii.c:3119
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Kõne on käimas: %s\n"
+
+#: common/fbus-6110.c:3926 gnokii/gnokii.c:3120
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Tundmatu: %s\n"
+
+#: common/fbus-6110.c:3927 gnokii/gnokii.c:3121
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Lugemata SMS: %s\n"
+
+#: common/fbus-6110.c:3928 gnokii/gnokii.c:3122
+#, c-format
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3929 gnokii/gnokii.c:3123
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Faxi kõne aktiivne: %s\n"
+
+#: common/fbus-6110.c:3930 gnokii/gnokii.c:3124
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Andmekõne aktiivne: %\n"
+
+#: common/fbus-6110.c:3931 gnokii/gnokii.c:3125
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Klaviatuuri lukk: %s\n"
+
+#: common/fbus-6110.c:3932 gnokii/gnokii.c:3126
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "SMS varamu on täis: %s\n"
+
+#: common/fbus-6110.c:3945
+msgid "Display output successfully disabled/enabled.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3955
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Tundmatu 0x0d tüüpi sõnum.\n"
+
+#: common/fbus-6110.c:3974
+msgid "Message: Date and time set correctly\n"
+msgstr "Teade: Kuupäev ja kellaaeg seatud korrektselt\n"
+
+#: common/fbus-6110.c:3984 common/fbus-6110.c:4030
+msgid "Message: Date and time set error\n"
+msgstr "Teade: Kuupäeva ja kellaaja seade viga\n"
+
+#: common/fbus-6110.c:4004
+msgid "Message: Date and time\n"
+msgstr "Teade: Kuupäev ja kellaaeg\n"
+
+#: common/fbus-6110.c:4005 common/fbus-6110.c:4158 gnokii/gnokii.c:2321
+#, c-format
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Kellaaeg: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4006
+#, c-format
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Kuupäev: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:4020
+msgid "Message: Alarm set correctly\n"
+msgstr "Teade: Äratus seatud õieti\n"
+
+#: common/fbus-6110.c:4042
+msgid "Message: Alarm\n"
+msgstr "Teade: Äratus\n"
+
+#: common/fbus-6110.c:4043
+#, c-format
+msgid " Alarm: %02d:%02d\n"
+msgstr " Äratus: %02d:%02d\n"
+
+#: common/fbus-6110.c:4044
+#, c-format
+msgid " Alarm is %s\n"
+msgstr " Äratus on %s\n"
+
+#: common/fbus-6110.c:4044 gnokii/gnokii.c:3119 gnokii/gnokii.c:3120
+#: gnokii/gnokii.c:3121 gnokii/gnokii.c:3122 gnokii/gnokii.c:3123
+#: gnokii/gnokii.c:3124 gnokii/gnokii.c:3125 gnokii/gnokii.c:3126
+msgid "on"
+msgstr "sisse"
+
+#: common/fbus-6110.c:4044 gnokii/gnokii.c:3119 gnokii/gnokii.c:3120
+#: gnokii/gnokii.c:3121 gnokii/gnokii.c:3122 gnokii/gnokii.c:3123
+#: gnokii/gnokii.c:3124 gnokii/gnokii.c:3125 gnokii/gnokii.c:3126
+msgid "off"
+msgstr "välja"
+
+#: common/fbus-6110.c:4060
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Teade: Tundmatu 0x11 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:4083
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Teade: Kalendri teate kirjutamine õnnestus!\n"
+
+#: common/fbus-6110.c:4093 common/fbus-6110.c:4103
+msgid "Message: Calendar note write failed!\n"
+msgstr "Teade: Kalendri teate kirjutamine ebaõnnestus!\n"
+
+#: common/fbus-6110.c:4112
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Tundmatu 0x13 tüüpi ja 0x65 alamtüüpi sõnum.\n"
+
+#: common/fbus-6110.c:4152
+msgid "Message: Calendar note received.\n"
+msgstr "Teade: Kalendri teade saabus\n"
+
+#: common/fbus-6110.c:4154 gnokii/gnokii.c:2317
+#, c-format
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Kuupäev: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4165 gnokii/gnokii.c:2326
+#, c-format
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Äratuse kuupäev: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4169 gnokii/gnokii.c:2330
+#, c-format
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Äratusaeg: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4174
+#, c-format
+msgid " Type: %d\n"
+msgstr " Tüüp: %d\n"
+
+#: common/fbus-6110.c:4175 gnokii/gnokii.c:2335
+#, c-format
+msgid " Text: %s\n"
+msgstr " Tekst: %s\n"
+
+#: common/fbus-6110.c:4178 gnokii/gnokii.c:2338
+#, c-format
+msgid " Phone: %s\n"
+msgstr " Telefon: %s\n"
+
+#: common/fbus-6110.c:4188
+msgid "Message: Calendar note not available\n"
+msgstr "Teade: Kalendri teade pole võimalik\n"
+
+#: common/fbus-6110.c:4198
+msgid "Message: Calendar note error\n"
+msgstr "Teade: Kalendri teate viga\n"
+
+#: common/fbus-6110.c:4220
+msgid "Message: Calendar note deleted\n"
+msgstr "Teade: Kalendri teade kustutatud\n"
+
+#: common/fbus-6110.c:4231
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Teade: Kalendri teadet ei saa kustutada\n"
+
+#: common/fbus-6110.c:4241
+msgid "Message: Calendar note deleting error\n"
+msgstr "Teade: Kalendri teate kustutamise viga\n"
+
+#: common/fbus-6110.c:4257
+msgid "Message: Calendar Alarm active\n"
+msgstr "Teade: Kalendri alarm aktiivne\n"
+
+#: common/fbus-6110.c:4258
+#, c-format
+msgid " Item number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4266
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Teade: Tundmatu 0x13 tüüpi sõnum\n"
+
+#: common/fbus-6110.c:4329
+msgid "Concatenated message!!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4350
+#, c-format
+msgid "Number: %d\n"
+msgstr "Number: %d\n"
+
+#: common/fbus-6110.c:4355
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4358
+msgid "Sent\n"
+msgstr "Saadetud\n"
+
+#: common/fbus-6110.c:4360
+msgid "Not sent\n"
+msgstr "Saatmata\n"
+
+#: common/fbus-6110.c:4364
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Teade: SMS sõnum saabus (telefon katkestas)\n"
+
+#: common/fbus-6110.c:4367
+msgid "Delivery Report\n"
+msgstr "Saateraport\n"
+
+#: common/fbus-6110.c:4369
+msgid "Unknown type\n"
+msgstr "Tundmatu tüüp\n"
+
+#: common/fbus-6110.c:4372
+msgid "Read\n"
+msgstr "Loe\n"
+
+#: common/fbus-6110.c:4374
+msgid "Not read\n"
+msgstr "Lugemata\n"
+
+#: common/fbus-6110.c:4376
+#, c-format
+msgid " Date: %s "
+msgstr " Kuupäev: %s "
+
+#: common/fbus-6110.c:4384 common/fbus-6110.c:4400 gnokii/gnokii.c:1338
+#: gnokii/gnokii.c:1351 gnokii/gnokii.c:1378
+#, c-format
+msgid "%02d00"
+msgstr ""
+
+#: common/fbus-6110.c:4391
+#, c-format
+msgid " SMSC response date: %s "
+msgstr " SMSC vastuse kuupäev: %s "
+
+#: common/fbus-6110.c:4475
+msgid "Delivered"
+msgstr "Saadetud"
+
+#: common/fbus-6110.c:4480
+msgid "SM received by the SME"
+msgstr ""
+
+#: common/fbus-6110.c:4483
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4486
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: common/fbus-6110.c:4494
+msgid "Failed"
+msgstr "Ebaõnnestus"
+
+#: common/fbus-6110.c:4501
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "Ajutine viga, SC ei proovi enam uuesti saata\n"
+
+#: common/fbus-6110.c:4506 common/fbus-6110.c:4599
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4510 common/fbus-6110.c:4603
+msgid "SME busy"
+msgstr "SME on hõivatud"
+
+#: common/fbus-6110.c:4514 common/fbus-6110.c:4607
+msgid "No response from SME"
+msgstr "SME ei vasta..."
+
+#: common/fbus-6110.c:4518 common/fbus-6110.c:4611
+msgid "Service rejected"
+msgstr "Teenus tagasilykatud"
+
+#: common/fbus-6110.c:4522 common/fbus-6110.c:4558 common/fbus-6110.c:4615
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: common/fbus-6110.c:4526 common/fbus-6110.c:4619
+msgid "Error in SME"
+msgstr "Viga SME-s"
+
+#: common/fbus-6110.c:4530 common/fbus-6110.c:4582 common/fbus-6110.c:4623
+#: common/fbus-6110.c:4633
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4537
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "Püsiv viga, SC ei proovi enam saatmist korrata\n"
+
+#: common/fbus-6110.c:4542
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4546
+msgid "Incompatibile destination"
+msgstr "Kokkusobimatu sihtpunkt"
+
+#: common/fbus-6110.c:4550
+msgid "Connection rejected by SME"
+msgstr "Ühendusest keelduti SME poolt"
+
+#: common/fbus-6110.c:4554
+msgid "Not obtainable"
+msgstr "Ei saa kätte"
+
+#: common/fbus-6110.c:4562
+msgid "No internetworking available"
+msgstr ""
+
+#: common/fbus-6110.c:4566
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4570
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4574
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4578
+msgid "SM does not exist"
+msgstr ""
+
+#: common/fbus-6110.c:4591
+msgid "Pending"
+msgstr "Ootel"
+
+#: common/fbus-6110.c:4595
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "Ajutine viga, SC püüab ikkagi saata SM'i\n"
+
+#: common/fbus-6110.c:4661
+msgid "Message: SMS reading failed.\n"
+msgstr "Teade: SMS lugemine ebaõnnestus.\n"
+
+#: common/fbus-6110.c:4669
+msgid " Invalid location!\n"
+msgstr " Vale asukoht!\n"
+
+#: common/fbus-6110.c:4679
+msgid " Empty SMS location.\n"
+msgstr " Tühi SMS mälupesa.\n"
+
+#: common/fbus-6110.c:4692
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Teade: SMS kustutamine õnnestus.\n"
+
+#: common/fbus-6110.c:4702
+msgid "Message: SMS Status Received\n"
+msgstr "Teade: SMS olek saabus\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid " The number of messages: %d\n"
+msgstr " Sõnumite arv: %d\n"
+
+#: common/fbus-6110.c:4704
+#, c-format
+msgid " Unread messages: %d\n"
+msgstr " Lugemata sõnumeid: %d\n"
+
+#: common/fbus-6110.c:4716
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Teade: SMS oleku viga, tõenäoliselt PIN koodiga autoriseerimata\n"
+
+#: common/fbus-6110.c:4743
+msgid "Message: Security code received: "
+msgstr "Teade: Turvakood saabus: "
+
+#: common/fbus-6110.c:4745 gnokii/gnokii.c:1683
+msgid "Security code"
+msgstr "Turvakood"
+
+#: common/fbus-6110.c:4746 gnokii/gnokii.c:1673 gnokii/gnokii.c:1684
+msgid "PIN"
+msgstr ""
+
+#: common/fbus-6110.c:4747 gnokii/gnokii.c:1674 gnokii/gnokii.c:1685
+msgid "PIN2"
+msgstr ""
+
+#: common/fbus-6110.c:4748 gnokii/gnokii.c:1675 gnokii/gnokii.c:1686
+msgid "PUK"
+msgstr ""
+
+#: common/fbus-6110.c:4749 gnokii/gnokii.c:1676 gnokii/gnokii.c:1687
+msgid "PUK2"
+msgstr ""
+
+#: common/fbus-6110.c:4750
+msgid "unknown !"
+msgstr "tundmatu !"
+
+#: common/fbus-6110.c:4753
+msgid " allowed, value \""
+msgstr ""
+
+#: common/fbus-6110.c:4761
+msgid "\""
+msgstr ""
+
+#: common/fbus-6110.c:4763
+msgid " not allowed"
+msgstr ""
+
+#: common/fbus-6110.c:4765
+msgid "\n"
+msgstr ""
+
+#: common/fbus-6110.c:4792
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Teade: Võrgumonitor korrektselt paigas.\n"
+
+#: common/fbus-6110.c:4802
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Teade: Võrgumonitori menüü %d saabunud:\n"
+
+#: common/fbus-6110.c:4818
+msgid "Unknown message of type 0x40.\n"
+msgstr "Tundmatu 0x40 tüüpi sõnum.\n"
+
+#: common/fbus-6110.c:4840
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Teade: Mobiiltelefoni identiteet saabunud:\n"
+
+#: common/fbus-6110.c:4841
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-6110.c:4843
+#, c-format
+msgid " Model: %s\n"
+msgstr " Mudel: %s\n"
+
+#: common/fbus-6110.c:4845
+#, c-format
+msgid " Production Code: %s\n"
+msgstr " Valmistuskood: %s\n"
+
+#: common/fbus-6110.c:4847
+#, c-format
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: common/fbus-6110.c:4849
+#, c-format
+msgid " Firmware: %s\n"
+msgstr " Riistvara: %s\n"
+
+#: common/fbus-6110.c:4855
+#, c-format
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Maagilised baidid: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4875
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: common/fbus-6110.c:4893
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4917
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4933
+msgid "Message: Unknown message.\n"
+msgstr "Teade: Tundmatu sõnum.\n"
+
+#: common/fbus-6110.c:5031
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5032
+msgid "Please report it ...\n"
+msgstr "Palun teata sellest ... \n"
+
+#: common/fbus-6110.c:5099
+msgid "Bad checksum!\n"
+msgstr "Vale kontrollsumma!\n"
+
+#: common/fbus-6110.c:5161 xgnokii/xgnokii.c:1698
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:5164
+msgid "PC"
+msgstr ""
+
+#: common/fbus-6110.c:5182
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Msg sihtpunkt: %s\n"
+
+#: common/fbus-6110.c:5183
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Msg allikas: %s\n"
+
+#: common/fbus-6110.c:5185
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Msg tüüp: %02x\n"
+
+#: common/fbus-6110.c:5187
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Msg tundmatu: %02x\n"
+
+#: common/fbus-6110.c:5188
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Msg pikkus: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:5259
+msgid "PC: "
+msgstr ""
+
+#: common/fbus-6110.c:5333
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: common/mbus-6160.c:761
+msgid "Standard Ack write (0x40) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:787
+msgid "Standard Ack write (0xd2) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:1232
+msgid "Couldn't open MB61 device: "
+msgstr "Ei suuda avada MB61 seadet: "
+
+#: common/mbus-640.c:821
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:851 common/mbus-640.c:951
+msgid "PC : "
+msgstr "PC : "
+
+#: common/mbus-640.c:861 common/mbus-640.c:964
+msgid "Write error!\n"
+msgstr "Kirjutamine ebaõnnestus!\n"
+
+#: common/mbus-640.c:888
+msgid "Setting MBUS communication...\n"
+msgstr "Tekitan MBUS ühendust...\n"
+
+#: common/rlp-common.c:701
+msgid "Unknown!!! "
+msgstr "Tundmatu!!!"
+
+#: common/rlp-common.c:766
+msgid "BAD"
+msgstr ""
+
+#: common/rlp-common.c:888
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "FCS blokk on vigane. Ignoreerin ...\n"
+
+#: common/rlp-common.c:1003
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1004
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1375
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1412
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1477
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1511
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1568
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1626
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1764
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1823
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1853
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1894
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:168
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versioon %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Eestikeelne tõlge Hans Mõtshärg <hans.motsharg@mail.ee>, 2000\n"
+"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n"
+
+#: gnokii/gnokii.c:182
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} destination logofile [network code]\n"
+" gnokii --setlogo op [logofile] [network code]\n"
+" gnokii --setlogo startup [logofile]\n"
+" gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+" gnokii --setlogo {dealer|text} [text]\n"
+" gnokii --getlogo op [logofile] [network code]\n"
+" gnokii --getlogo startup [logofile] [network code]\n"
+" gnokii --getlogo caller [logofile] [caller group number] [network "
+"code]\n"
+" gnokii --getlogo {dealer|text}\n"
+" gnokii --fileconvert source destination\n"
+" gnokii --fileconvert source destination op [network code]\n"
+" gnokii --fileconvert source destination caller [caller group "
+"number]\n"
+" gnokii --fileconvert source destination startup\n"
+" gnokii --sendringtone destination rtttlfile\n"
+" gnokii --setringtone rtttlfile\n"
+" gnokii --presskeysequence sequence\n"
+" gnokii --reset [soft|hard]\n"
+" gnokii --getprofile [number]\n"
+" gnokii --displayoutput\n"
+msgstr ""
+
+#: gnokii/gnokii.c:228
+msgid ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+" gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode\n"
+msgstr ""
+
+#: gnokii/gnokii.c:234
+msgid ""
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output "
+"of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken "
+"from\n"
+" phone memory from address "
+"[message_center_index].\n"
+" If this argument is ommited SMSC number is "
+"taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+" [--long n] - send no more then n characters,\n"
+" default is 160\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number index from calendar.\n"
+" [-v] - output in vCalendar 1.0 format\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --sendlogo send the logofile to destination as operator\n"
+" or CLI logo\n"
+"\n"
+" --setlogo set caller, startup, operator logo\n"
+" or (dealer) welcome note\n"
+" If you will not give logofile|text, it will be\n"
+" removed from phone\n"
+" If you will not give network code, it will be\n"
+" set to current\n"
+" If you will not give caller group number, it "
+"will be\n"
+" set to 0\n"
+"\n"
+" --getlogo get caller, startup, operator logo\n"
+"\n"
+" or (dealer) welcome note\n"
+" If you will give network code and write logo in "
+"NOL\n"
+" format, it will be written there\n"
+" If you will not specify logofile, gnokii will "
+"show\n"
+" info about logo only\n"
+"\n"
+" --fileconvert Converts logo files\n"
+"\n"
+" --sendringtone send the rtttlfile to destination as ringtone\n"
+"\n"
+" --setringtone set the rtttlfile as ringtone (on 6110)\n"
+"\n"
+" --presskeysequence presses some keys in phone keyboard\n"
+" available keys: 0..9, #, *, m (Menu), n "
+"(Names),\n"
+" p (Power), g (Green), r (Red), +, - (Volume "
+"+-),\n"
+" u (Up), d (Down)\n"
+" w means 2 sec. pause (useful, when you "
+"simulate\n"
+" writing SMS)\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+" --getprofile [number] show settings for selected(all) profile(s)\n"
+"\n"
+" --displayoutput show texts displayed in phone's screen\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:343
+msgid ""
+" --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+" --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+" --getsecuritycode gets specified code from phone\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:3263 gnokiid/virtmodem.c:262
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS initsialiseerimine ebaõnnestus! (Tundmatu mudel?). Lõpetan....)\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan.\n"
+
+#: gnokii/gnokii.c:653
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Kasuta '%s --help' kasutusinfo saamiseks.\n"
+
+#: gnokii/gnokii.c:856
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Tundmatu valik: %d\n"
+
+#: gnokii/gnokii.c:866
+msgid "Wrong number of arguments\n"
+msgstr "Vale argumentide kogus\n"
+
+#: gnokii/gnokii.c:937 gnokii/gnokii.c:995
+msgid "Input too long!\n"
+msgstr "Sisend on liiga pikk!\n"
+
+#: gnokii/gnokii.c:990
+msgid "Couldn't read from stdin!\n"
+msgstr "Ei suuda lugeda standard sisendist!\n"
+
+#: gnokii/gnokii.c:1101
+#, c-format
+msgid "Unknown key: %c !\n"
+msgstr "Tundmatu võti: %c !\n"
+
+#: gnokii/gnokii.c:1108
+msgid "Can't press key !\n"
+msgstr "Nuppu ei saa vajutada?! \n"
+
+#: gnokii/gnokii.c:1114
+msgid "Can't release key !\n"
+msgstr "Nuppu ei saa vabastada?! \n"
+
+#: gnokii/gnokii.c:1142
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d. SMS keskuse (%s) number on %s\n"
+
+#: gnokii/gnokii.c:1144
+msgid "Messages sent as "
+msgstr "Sõnum saadetud nagu "
+
+#: gnokii/gnokii.c:1166 xgnokii/xgnokii.c:545
+msgid "ERMES"
+msgstr ""
+
+#: gnokii/gnokii.c:1170 xgnokii/xgnokii.c:549
+msgid "X.400"
+msgstr ""
+
+#: gnokii/gnokii.c:1179
+msgid "Message validity is "
+msgstr "Sõnumi kehtivus on"
+
+#: gnokii/gnokii.c:1215
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1284 gnokii/gnokii.c:1491 gnokii/gnokii.c:2855
+#: gnokii/gnokii.c:3040
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Tundmatu mälu tüüp %s!\n"
+
+#: gnokii/gnokii.c:1311
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Saadetud Sõnumid "
+
+#: gnokii/gnokii.c:1314
+msgid "(sent)\n"
+msgstr "(saadetud)\n"
+
+#: gnokii/gnokii.c:1316
+msgid "(not sent)\n"
+msgstr "(ei saadetud)\n"
+
+#: gnokii/gnokii.c:1318 gnokii/gnokii.c:1357
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Tekst: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Saateraport "
+
+#: gnokii/gnokii.c:1326 gnokii/gnokii.c:1366
+msgid "(read)\n"
+msgstr "(loetud)\n"
+
+#: gnokii/gnokii.c:1328 gnokii/gnokii.c:1368
+msgid "(not read)\n"
+msgstr "(ei loetud)\n"
+
+#: gnokii/gnokii.c:1330
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Saatmise kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1336 gnokii/gnokii.c:1349 gnokii/gnokii.c:1376
+#, c-format
+msgid "+%02d00"
+msgstr ""
+
+#: gnokii/gnokii.c:1343
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Vastuse kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1356
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Saaja: %s Msg keskus: %s\n"
+
+#: gnokii/gnokii.c:1363
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Saabunud Sõnumid "
+
+#: gnokii/gnokii.c:1370
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Kuupäv/kellaeg: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1382
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Saatja: %s Msg kekus: %s\n"
+
+#: gnokii/gnokii.c:1388
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Seotud (%d/%d):\n"
+
+#: gnokii/gnokii.c:1394
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Tekst:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1403 gnokii/gnokii.c:1514 gnokii/gnokii.c:1580
+#: gnokii/gnokii.c:1693 gnokii/gnokii.c:2773 gnokii/gnokii.c:2882
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "%s mudelis pole see funktsioon rakendatud!\n"
+
+#: gnokii/gnokii.c:1409
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Sobimatu asukoht: %s %d\n"
+
+#: gnokii/gnokii.c:1415
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS asukoht %s %d on tühi.\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"LaeSMS %s %d ebõnnestus!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1511
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "Kustutatud SMS %s %d\n"
+
+#: gnokii/gnokii.c:1518
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"KustutaSMS %s %d ei õnnestunud!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1561 gnokii/gnokii.c:1660
+msgid ""
+"Wrong code in second parameter (allowed: PIN,PUK,PIN2,PUK2,SecurityCode)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1569
+msgid "Enter your code: "
+msgstr "Sisesta oma kood: "
+
+#: gnokii/gnokii.c:1576
+msgid "Error: invalid code.\n"
+msgstr "VIGA: Vale kood.\n"
+
+#: gnokii/gnokii.c:1578
+msgid "Code ok.\n"
+msgstr "Kood OK.\n"
+
+#: gnokii/gnokii.c:1582 gnokii/gnokii.c:1696
+msgid "Other error.\n"
+msgstr "Muu viga.\n"
+
+#: gnokii/gnokii.c:1598
+msgid "Security code status: "
+msgstr "Turvakoodi olek:"
+
+#: gnokii/gnokii.c:1670
+msgid "Error: getting "
+msgstr "Viga: võtmisel n"
+
+#: gnokii/gnokii.c:1672
+msgid "security code"
+msgstr "Turvakood"
+
+#: gnokii/gnokii.c:1679
+msgid " not allowed\n"
+msgstr " pole lubatud\n"
+
+#: gnokii/gnokii.c:1690
+#, c-format
+msgid " is %s\n"
+msgstr " on %s\n"
+
+#: gnokii/gnokii.c:1762
+msgid "Sending operator logo.\n"
+msgstr "Saadan operaatori logo.\n"
+
+#: gnokii/gnokii.c:1766
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1768
+msgid "It isn't possible to send startup logo!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1771
+msgid "Sending picture image is not implemented !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1774
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1785 gnokii/gnokii.c:1876 gnokii/gnokii.c:1950
+#: gnokii/gnokii.c:2067 gnokii/gnokii.c:2125
+#, c-format
+msgid "Can't open logofile %s !\n"
+msgstr "Ei suuda logofaili %s avada!\n"
+
+#: gnokii/gnokii.c:1787 gnokii/gnokii.c:1878 gnokii/gnokii.c:2127
+#, c-format
+msgid "Wrong number of colors in %s logofile (accepted only 2-colors files) !\n"
+msgstr "Vale värvide kogus %s logofailis (toetatud on ainult 2 värvi)!\n"
+
+#: gnokii/gnokii.c:1789 gnokii/gnokii.c:1880 gnokii/gnokii.c:2129
+#, c-format
+msgid "Wrong colors in %s logofile !\n"
+msgstr "%s logofailis on valed värvid !\n"
+
+#: gnokii/gnokii.c:1791 gnokii/gnokii.c:1882 gnokii/gnokii.c:2131
+#, c-format
+msgid "Invalid format of %s logofile !\n"
+msgstr "Sobimatu formaat %s logofailile !\n"
+
+#: gnokii/gnokii.c:1793 gnokii/gnokii.c:1884 gnokii/gnokii.c:2133
+#, c-format
+msgid "%s logofile is too short !\n"
+msgstr "% logofail on liiga lühike !\n"
+
+#: gnokii/gnokii.c:1795
+msgid "Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 and 72x28 !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1814
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Operaatori kood: %s\n"
+
+#: gnokii/gnokii.c:1869
+msgid "Files can't have the same names !\n"
+msgstr "Failidel ei saa olla sama nimi !!\n"
+
+#: gnokii/gnokii.c:1886 gnokii/gnokii.c:2135
+msgid "Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 and 72x28!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2000
+msgid "Getting Logo\n"
+msgstr "Võtan logo\n"
+
+#: gnokii/gnokii.c:2009
+msgid "Dealer welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:2010
+msgid "Welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr "hetkel seatud \"%s\"\n"
+
+#: gnokii/gnokii.c:2079
+msgid "Function not implemented !\n"
+msgstr "See funktsioon pole rakendatud!\n"
+
+#: gnokii/gnokii.c:2082
+msgid "This kind of logo is not supported !\n"
+msgstr "Sellist tüüpi logo toetus pole rakendatud !\n"
+
+#: gnokii/gnokii.c:2085
+msgid "Error getting logo !\n"
+msgstr "Viga logo võtmisel !\n"
+
+#: gnokii/gnokii.c:2091
+msgid "What kind of logo do you want to get ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2182
+msgid "Setting Logo.\n"
+msgstr "Määran logo.\n"
+
+#: gnokii/gnokii.c:2196
+msgid "Removing Logo.\n"
+msgstr "Eemaldan logo.\n"
+
+#: gnokii/gnokii.c:2200
+msgid "What kind of logo do you want to set ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2210
+msgid "Done.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2212
+msgid "Function not implemented.\n"
+msgstr "See funktsioon pole rakendatud.\n"
+
+#: gnokii/gnokii.c:2214
+msgid "This kind of logo is not supported.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2216
+msgid "Error !\n"
+msgstr "Viga !\n"
+
+#: gnokii/gnokii.c:2292
+msgid " Type of the note: "
+msgstr " Märke tüüp :"
+
+#: gnokii/gnokii.c:2297
+msgid "Reminder\n"
+msgstr "Meeldetuletus\n"
+
+#: gnokii/gnokii.c:2301
+msgid "Call\n"
+msgstr "Kõne\n"
+
+#: gnokii/gnokii.c:2305
+msgid "Meeting\n"
+msgstr "Koosolek\n"
+
+#: gnokii/gnokii.c:2309
+msgid "Birthday\n"
+msgstr "Sünnipäev\n"
+
+#: gnokii/gnokii.c:2313
+msgid "Unknown\n"
+msgstr "Tundmatu\n"
+
+#: gnokii/gnokii.c:2342
+msgid "The calendar note can not be read\n"
+msgstr "Kalendri kirjet ei saa lugeda\n"
+
+#: gnokii/gnokii.c:2381 gnokii/gnokii.c:3051
+msgid "Succesfully written!\n"
+msgstr "Edukalt kirjutatud!\n"
+
+#: gnokii/gnokii.c:2401
+msgid " Calendar note deleted.\n"
+msgstr " Kalendri kirje kustutatud.\n"
+
+#: gnokii/gnokii.c:2404
+msgid "The calendar note can not be deleted\n"
+msgstr "Kalendri kirjet ei saa kustutada\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Kuupäev: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2474
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Kellaaeg: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2510
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Äratus: %s\n"
+
+#: gnokii/gnokii.c:2511
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Kellaaeg: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2552
+msgid "Entering monitor mode...\n"
+msgstr "Siirdun monitooringu olekusse...\n"
+
+#: gnokii/gnokii.c:2553
+msgid "Initialising GSM interface...\n"
+msgstr "Initsialiseerin GSM liidest...\n"
+
+#: gnokii/gnokii.c:2564
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Väljatugevus: %d\n"
+
+#: gnokii/gnokii.c:2567
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Aku: %d\n"
+
+#: gnokii/gnokii.c:2570
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Toiteallikas: %s\n"
+
+#: gnokii/gnokii.c:2570
+msgid "AC/DC"
+msgstr "Vahelduvvool/Alalisvool"
+
+#: gnokii/gnokii.c:2570
+msgid "battery"
+msgstr "aku"
+
+#: gnokii/gnokii.c:2573
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2576
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2579
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2582
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2585
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2588
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2591
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2594
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2597
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Kasutusel %d, Vaba %d\n"
+
+#: gnokii/gnokii.c:2600
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Tekstisõnumeid: lugemata %d, number %d\n"
+
+#: gnokii/gnokii.c:2603
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Saabuv kõne: %s\n"
+
+#: gnokii/gnokii.c:2606
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Võrk: %s (%s), LAC: %s, KärjeID: %s\n"
+
+#: gnokii/gnokii.c:2611
+msgid "Leaving monitor mode...\n"
+msgstr "Lahkun monitooringu olekust...\n"
+
+#: gnokii/gnokii.c:2636
+msgid "Entering display monitoring mode...\n"
+msgstr "Siirdun monitooringu olekusse...\n"
+
+#: gnokii/gnokii.c:2644
+msgid "Leaving display monitor mode...\n"
+msgstr "Lahkun monitooringu olekust...\n"
+
+#: gnokii/gnokii.c:2648 gnokii/gnokii.c:2650
+msgid "Error!\n"
+msgstr "Viga!\n"
+
+#: gnokii/gnokii.c:2699
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2706
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "See telefon toetab ainult %d profiile!\n"
+
+#: gnokii/gnokii.c:2778
+msgid "Unspecified error\n"
+msgstr "Dokumenteerimata viga\n"
+
+#: gnokii/gnokii.c:2887
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Mälu tüüp %s pole toetatud!\n"
+
+#: gnokii/gnokii.c:2892
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Vale asukoht või muu viga!(%d)\n"
+
+#: gnokii/gnokii.c:2969
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Formaadi probleem real %d [%s]\n"
+
+#: gnokii/gnokii.c:2991
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Salvestamine õnnestus: mälu tüüp: %s, asukoht: %d, nimi: %s, number: %s\n"
+
+#: gnokii/gnokii.c:2993
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Salvestamine(%d) EBAÕNNESTUS: mälu tüüp: %s, asukoht: %d, nimi: %s, number: %s\n"
+
+#: gnokii/gnokii.c:3013
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr "Kiirvalik nr. %d: %d:%d\n"
+
+#: gnokii/gnokii.c:3085 gnokiid/gnokiid.c:148
+#, c-format
+msgid "Couldn't open %s or /etc/gnokiirc, using default config\n"
+msgstr "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni vaikeväärtusi!\n"
+
+#: gnokii/gnokii.c:3178
+#, c-format
+msgid "IMEI: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3179
+#, c-format
+msgid "Model: %s\n"
+msgstr "Mudel: %s\n"
+
+#: gnokii/gnokii.c:3180
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Versioon: %s\n"
+
+#: gnokii/gnokii.c:3213
+msgid ""
+"What kind of reset do you want (second parameter can be \"soft\" or "
+"\"hard\") ?\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3281 gnokii/gnokii.c:3307
+msgid "Failed to load ringtone.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3320
+msgid "Send failed\n"
+msgstr "Saatmine ebaõnnestus!\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid ""
+"gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versioon %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Eestikeelne tõlge Hans Mõtshärg <hans.motsharg@mail.ee>, 2000\n"
+"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n"
+
+#: gnokiid/gnokiid.c:70
+msgid ""
+" usage: gnokiid {--help|--version}\n"
+" --help display usage information. --version "
+" displays version and copyright information. --debug "
+"uses stdin/stdout for virtual modem comms.\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:87
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:94
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:198
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:206
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid ei tohiks root õigustes installerida!\n"
+
+#: gnokiid/virtmodem.c:210
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:274
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan. \n"
+
+#: xgnokii/xgnokii.c:196
+msgid "Reading caller groups names ..."
+msgstr "Loen helistaja grupide nimesid...."
+
+#: xgnokii/xgnokii.c:200 xgnokii/xgnokii.c:993
+msgid "Familly"
+msgstr "Perekond"
+
+#: xgnokii/xgnokii.c:201 xgnokii/xgnokii.c:1005
+msgid "VIP"
+msgstr ""
+
+#: xgnokii/xgnokii.c:202 xgnokii/xgnokii.c:1017
+msgid "Friends"
+msgstr "Sõbrad"
+
+#: xgnokii/xgnokii.c:203 xgnokii/xgnokii.c:1029
+msgid "Colleagues"
+msgstr "Kolleegid"
+
+#: xgnokii/xgnokii.c:204 xgnokii/xgnokii.c:1041
+msgid "Other"
+msgstr "Muud"
+
+#: xgnokii/xgnokii.c:205
+msgid "No group"
+msgstr "Grupita"
+
+#: xgnokii/xgnokii.c:324
+msgid "Short Message received"
+msgstr "Saabus Lühisõnum"
+
+#: xgnokii/xgnokii.c:336
+msgid "Working ..."
+msgstr "Toimetan..."
+
+#: xgnokii/xgnokii.c:353
+msgid "Call in progress"
+msgstr "kõne käimas"
+
+#: xgnokii/xgnokii.c:366
+msgid "Hide"
+msgstr "Peida"
+
+#: xgnokii/xgnokii.c:463
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Kõne on käimas:\n"
+"Aeg: %s"
+
+#: xgnokii/xgnokii.c:466
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Saabuv kõne: %s\n"
+"Kellaaeg: %s"
+
+#: xgnokii/xgnokii.c:519 xgnokii/xgnokii_sms.c:580
+#, c-format
+msgid "Set %d"
+msgstr "Sea %d"
+
+#: xgnokii/xgnokii.c:541 xgnokii/xgnokii.c:1405
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:553
+msgid "Voice"
+msgstr "Kõne"
+
+#: xgnokii/xgnokii.c:564 xgnokii/xgnokii.c:1435
+msgid "1 h"
+msgstr "1 t"
+
+#: xgnokii/xgnokii.c:568 xgnokii/xgnokii.c:1442
+msgid "6 h"
+msgstr "6 t"
+
+#: xgnokii/xgnokii.c:572 xgnokii/xgnokii.c:588 xgnokii/xgnokii.c:1449
+msgid "24 h"
+msgstr "24 t"
+
+#: xgnokii/xgnokii.c:576 xgnokii/xgnokii.c:1456
+msgid "72 h"
+msgstr "72 t"
+
+#: xgnokii/xgnokii.c:584
+msgid "Max. time"
+msgstr "Max. aeg"
+
+#: xgnokii/xgnokii.c:631
+msgid "Reading SMS centers ..."
+msgstr "Laadin SMS keskusi ..."
+
+#: xgnokii/xgnokii.c:984
+msgid "Error saving SMS centers!"
+msgstr "Viga SMS keskuste salvestamisel!"
+
+#: xgnokii/xgnokii.c:1054
+msgid "Error writing configuration file!"
+msgstr "Viga konfiguratsioonifaili salvestamisel!"
+
+#: xgnokii/xgnokii.c:1066 xgnokii/xgnokii_contacts.c:2740
+msgid "Contacts"
+msgstr "Kontaktid"
+
+#: xgnokii/xgnokii.c:1072 xgnokii/xgnokii.c:1808
+msgid "SMS"
+msgstr "Lühisõnumid"
+
+#: xgnokii/xgnokii.c:1077
+msgid "Calendar"
+msgstr "Kalender"
+
+#: xgnokii/xgnokii.c:1082 xgnokii/xgnokii_logos.c:1190
+msgid "Logos"
+msgstr "Logod"
+
+#: xgnokii/xgnokii.c:1088
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1093 xgnokii/xgnokii_speed.c:560
+msgid "Speed Dial"
+msgstr "Kiirvalik"
+
+#: xgnokii/xgnokii.c:1098
+msgid "Keyboard"
+msgstr "Klaviatuur"
+
+#: xgnokii/xgnokii.c:1103 xgnokii/xgnokii_netmon.c:318
+msgid "Net Monitor"
+msgstr "Võrgu Monitor"
+
+#: xgnokii/xgnokii.c:1112 xgnokii/xgnokii.c:1568
+msgid "Options"
+msgstr "Valikud"
+
+#: xgnokii/xgnokii.c:1122 xgnokii/xgnokii.c:2088
+msgid "Help"
+msgstr "Abi"
+
+#: xgnokii/xgnokii.c:1128 xgnokii/xgnokii.c:1145
+msgid "About"
+msgstr "Üldist"
+
+#: xgnokii/xgnokii.c:1149 xgnokii/xgnokii.c:1329
+#: xgnokii/xgnokii_contacts.c:808 xgnokii/xgnokii_contacts.c:938
+#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:2567
+#: xgnokii/xgnokii_sms.c:477
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1162
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+"xgnokii versioon: %s\n"
+"gnokii versioon: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+
+#: xgnokii/xgnokii.c:1323
+msgid "Edit SMS Setting"
+msgstr "Muuda SMS seadeid"
+
+#: xgnokii/xgnokii.c:1337 xgnokii/xgnokii_common.c:247
+#: xgnokii/xgnokii_common.c:333 xgnokii/xgnokii_contacts.c:816
+#: xgnokii/xgnokii_contacts.c:946 xgnokii/xgnokii_contacts.c:1175
+#: xgnokii/xgnokii_contacts.c:1221 xgnokii/xgnokii_contacts.c:1312
+#: xgnokii/xgnokii_contacts.c:1585 xgnokii/xgnokii_contacts.c:2574
+#: xgnokii/xgnokii_sms.c:485
+msgid "Cancel"
+msgstr "Tühista"
+
+#: xgnokii/xgnokii.c:1350
+msgid "Set's name:"
+msgstr "Seade nimi:"
+
+#: xgnokii/xgnokii.c:1363
+msgid "Center:"
+msgstr "Keskus:"
+
+#: xgnokii/xgnokii.c:1376
+msgid "Sending Format:"
+msgstr "Saate Formaat:"
+
+#: xgnokii/xgnokii.c:1420
+msgid "Validity Period:"
+msgstr "Kehtivus periood:"
+
+#: xgnokii/xgnokii.c:1428
+msgid "Max. Time"
+msgstr "Max. Aeg"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Set's name"
+msgstr "Seade nimi"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Center number"
+msgstr "Keskuse number"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Format"
+msgstr "Formaat"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Validity"
+msgstr "Kehtivus"
+
+#: xgnokii/xgnokii.c:1573
+msgid "Apply"
+msgstr "Kehtesta"
+
+#: xgnokii/xgnokii.c:1582 xgnokii/xgnokii_contacts.c:1569
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Salvesta"
+
+#: xgnokii/xgnokii.c:1589
+msgid "Close"
+msgstr "Sulge"
+
+#: xgnokii/xgnokii.c:1604
+msgid "Phone and connection type"
+msgstr "Telefon ja ühenduse tüüp"
+
+#: xgnokii/xgnokii.c:1611
+msgid "Connection"
+msgstr "Ühendus"
+
+#: xgnokii/xgnokii.c:1618
+msgid "Port:"
+msgstr "Pordis:"
+
+#: xgnokii/xgnokii.c:1633 xgnokii/xgnokii.c:1705
+msgid "Model:"
+msgstr "Mudel:"
+
+#: xgnokii/xgnokii.c:1648
+msgid "Init length:"
+msgstr "Init pikkus:"
+
+#: xgnokii/xgnokii.c:1663
+msgid "Bindir:"
+msgstr "BIN kataloog:"
+
+#: xgnokii/xgnokii.c:1678
+msgid "Connection:"
+msgstr "Ühendus:"
+
+#: xgnokii/xgnokii.c:1682
+msgid "infrared"
+msgstr "infrapunane"
+
+#: xgnokii/xgnokii.c:1686
+msgid "serial"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1691
+msgid "Phone information"
+msgstr "Telefoni info"
+
+#: xgnokii/xgnokii.c:1720
+msgid "Version:"
+msgstr "Versioon:"
+
+#: xgnokii/xgnokii.c:1735
+msgid "Revision:"
+msgstr "Revision:"
+
+#: xgnokii/xgnokii.c:1750
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1764
+msgid "Alarm setting"
+msgstr "Äratuse seaded"
+
+#: xgnokii/xgnokii.c:1771 xgnokii/xgnokii.c:1778
+msgid "Alarm"
+msgstr "Äratus"
+
+#: xgnokii/xgnokii.c:1802 xgnokii/xgnokii_sms.c:1433
+msgid "Short Message Service"
+msgstr "Lühisõnumi teenus"
+
+#: xgnokii/xgnokii.c:1836
+msgid "Edit"
+msgstr "Redigeeri"
+
+#: xgnokii/xgnokii.c:1850
+msgid "Business Card"
+msgstr "Visiitkaart"
+
+#: xgnokii/xgnokii.c:1856
+msgid "User"
+msgstr "Kasutaja"
+
+#: xgnokii/xgnokii.c:1874 xgnokii/xgnokii_contacts.c:829
+msgid "Name:"
+msgstr "Nimi:"
+
+#: xgnokii/xgnokii.c:1900
+msgid "Title:"
+msgstr "Amet:"
+
+#: xgnokii/xgnokii.c:1926
+msgid "Company:"
+msgstr "Ettevõte:"
+
+#: xgnokii/xgnokii.c:1952
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1977
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:2002
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2028
+msgid "Address:"
+msgstr "Aadress:"
+
+#: xgnokii/xgnokii.c:2052
+msgid "Caller groups names"
+msgstr "Helistaja grupi nimi"
+
+#: xgnokii/xgnokii.c:2059
+msgid "Groups"
+msgstr "Grupid"
+
+#: xgnokii/xgnokii.c:2068
+#, c-format
+msgid "Group %d:"
+msgstr "Grupp %d:"
+
+#: xgnokii/xgnokii.c:2081
+msgid "Help viewer"
+msgstr "Abi lehitseja"
+
+#: xgnokii/xgnokii.c:2095
+msgid "Viewer:"
+msgstr "Lehitseja:"
+
+#: xgnokii/xgnokii.c:2256 xgnokii/xgnokii_cfg.c:71
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "HOIATUS: Ei leia HOME keskkonnamuutujat!\n"
+
+#: xgnokii/xgnokii.c:2261 xgnokii/xgnokii_cfg.c:77 xgnokii/xgnokii_cfg.c:92
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr "HOIATUS: Ei suuda eraldada mälu konfiguratsiooni lugemiseks!\n"
+
+#: xgnokii/xgnokii.c:2276
+#, c-format
+msgid "Couldn't open %s or /etc/gnokiirc, using default config!\n"
+msgstr "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni vaikeväärtusi!\n"
+
+#: xgnokii/xgnokii_cfg.c:156
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr "VIGA: Ei leia HOME keskkonnamuutujat!\n"
+
+#: xgnokii/xgnokii_cfg.c:162 xgnokii/xgnokii_cfg.c:180
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr "VIGA: Ei suuda eraldada konfiguratsiooni kirjutamiseks mälu!\n"
+
+#: xgnokii/xgnokii_cfg.c:168
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "VIGA: Ei suuda faili %s lugemiseks avada!\n"
+
+#: xgnokii/xgnokii_cfg.c:186
+msgid "ERROR: Can't write config file!\n"
+msgstr "VIGA: Ei saa kirjutada konfiguratsiooni faili!\n"
+
+#: xgnokii/xgnokii_common.c:240
+msgid "Error"
+msgstr "Viga"
+
+#: xgnokii/xgnokii_common.c:279
+msgid "Info"
+msgstr "Hangin Infot ...."
+
+#: xgnokii/xgnokii_common.c:317
+msgid "Yes"
+msgstr "Jah"
+
+#: xgnokii/xgnokii_common.c:326
+msgid "No"
+msgstr "Ei"
+
+#: xgnokii/xgnokii_common.c:413
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Ei saa käivitada %s\n"
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:265
+#: xgnokii/xgnokii_contacts.c:428 xgnokii/xgnokii_contacts.c:453
+#: xgnokii/xgnokii_contacts.c:587 xgnokii/xgnokii_contacts.c:609
+msgid "Can't change memory type!"
+msgstr "Ei saa muuta mälu tüüpi!"
+
+#: xgnokii/xgnokii_contacts.c:276 xgnokii/xgnokii_contacts.c:323
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"SIM kaardile ei mahu nii pikk nimi, \n"
+"lühendan nime, nii et mahuks kaardile!"
+
+#: xgnokii/xgnokii_contacts.c:464 xgnokii/xgnokii_contacts.c:503
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"SIM kaardile ei mahu nii pikk nimi, \n"
+"lühendan nime, nii et mahuks kaardile!"
+
+#: xgnokii/xgnokii_contacts.c:698
+msgid "Can't find pattern!"
+msgstr "Ei leia sobivust!"
+
+#: xgnokii/xgnokii_contacts.c:842 xgnokii/xgnokii_contacts.c:1321
+msgid "Number:"
+msgstr "Number:"
+
+#: xgnokii/xgnokii_contacts.c:854
+msgid "Memory:"
+msgstr "Mälu:"
+
+#: xgnokii/xgnokii_contacts.c:858
+msgid "phone"
+msgstr "telefon"
+
+#: xgnokii/xgnokii_contacts.c:871
+msgid "Caller group:"
+msgstr "Helistajagrupp:"
+
+#: xgnokii/xgnokii_contacts.c:885 xgnokii/xgnokii_contacts.c:2801
+#: xgnokii/xgnokii_speed.c:613
+msgid "Edit entry"
+msgstr "Muuda kirjet"
+
+#: xgnokii/xgnokii_contacts.c:931
+msgid "Delete entries"
+msgstr "Kustuta kirjed"
+
+#: xgnokii/xgnokii_contacts.c:963
+msgid "Do you want to delete selected entries?"
+msgstr "Kas soovid valitud kirje kustutada?"
+
+#: xgnokii/xgnokii_contacts.c:975 xgnokii/xgnokii_contacts.c:2793
+msgid "New entry"
+msgstr "Uus kirje"
+
+#: xgnokii/xgnokii_contacts.c:1014 xgnokii/xgnokii_contacts.c:2797
+msgid "Duplicate entry"
+msgstr "Kopeeri kirjet"
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1090
+#: xgnokii/xgnokii_contacts.c:1115
+msgid "Can't find free memory."
+msgstr "Ei leia vaba mälu."
+
+#: xgnokii/xgnokii_contacts.c:1159
+msgid "Changing memory type"
+msgstr "Muudan mälu tüüpi"
+
+#: xgnokii/xgnokii_contacts.c:1166
+msgid "Continue"
+msgstr "Jätka"
+
+#: xgnokii/xgnokii_contacts.c:1186
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"Kirje muutmisel telefonimälust SIM kaardile\n"
+"võivad mõned kirjed muutuda lühemaks."
+
+#: xgnokii/xgnokii_contacts.c:1206 xgnokii/xgnokii_contacts.c:1212
+msgid "Find"
+msgstr "Otsi"
+
+#: xgnokii/xgnokii_contacts.c:1234
+msgid "Pattern:"
+msgstr "Mask:"
+
+#: xgnokii/xgnokii_contacts.c:1247 xgnokii/xgnokii_contacts.c:2735
+#: xgnokii/xgnokii_speed.c:555
+msgid "Name"
+msgstr "Nimi"
+
+#: xgnokii/xgnokii_contacts.c:1253 xgnokii/xgnokii_contacts.c:2735
+#: xgnokii/xgnokii_speed.c:555
+msgid "Number"
+msgstr "Number"
+
+#: xgnokii/xgnokii_contacts.c:1297 xgnokii/xgnokii_contacts.c:2812
+msgid "Dial voice"
+msgstr "Helista"
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Phone memory..."
+msgstr "Telefoni mälu..."
+
+#: xgnokii/xgnokii_contacts.c:1434
+msgid "SIM memory..."
+msgstr "SIM (kaardi) mälu..."
+
+#: xgnokii/xgnokii_contacts.c:1463
+msgid "Saving entries"
+msgstr "Salvestan kirjeid"
+
+#: xgnokii/xgnokii_contacts.c:1497
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr "%s: rida %d:Ei suuda kirjutada ME mälupessa %d! Viga: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1539
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr "%s: rida %d:Ei suuda kirjutada SM mälupessa %d! Viga: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1562
+msgid "Save changes?"
+msgstr "Salvesta muudatused?"
+
+#: xgnokii/xgnokii_contacts.c:1578
+msgid "Don't save"
+msgstr "Ära salvesta"
+
+#: xgnokii/xgnokii_contacts.c:1602
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Tegid muudatusi\n"
+"kontaktide kataloogis.\n"
+"\n"
+"\n"
+"Kas soovid muudatused telefoni salvestada?\n"
+
+#: xgnokii/xgnokii_contacts.c:1668 xgnokii/xgnokii_contacts.c:1695
+#: xgnokii/xgnokii_contacts.c:2279 xgnokii/xgnokii_contacts.c:2302
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: rida %d: Ei suuda mälu eraldada!\n"
+
+#: xgnokii/xgnokii_contacts.c:1790
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Ei suuda tuvastada SM mälu olekut!\n"
+"\n"
+"oletan max SIM kirjete arvuks 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:1815
+msgid "Getting entries"
+msgstr "Loen kirjeid ...."
+
+#: xgnokii/xgnokii_contacts.c:1948 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:427
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Ei suuda faili %s kirjutamiseks avada!"
+
+#: xgnokii/xgnokii_contacts.c:2020 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_speed.c:469
+msgid "Overwrite file?"
+msgstr "Kas kirjutan faili üle?"
+
+#: xgnokii/xgnokii_contacts.c:2021 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_speed.c:470
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Fail %s on olemas.\n"
+"Kas kirjutan üle?"
+
+#: xgnokii/xgnokii_contacts.c:2039 xgnokii/xgnokii_speed.c:488
+msgid "Export"
+msgstr "Ekspordi"
+
+#: xgnokii/xgnokii_contacts.c:2200 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:327
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Ei suuda faili %s lugemiseks avada!"
+
+#: xgnokii/xgnokii_contacts.c:2254
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Ei suuda tuvastada SM mälu olekut!\n"
+"\n"
+"max SIM kirjete arv on 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2367 xgnokii/xgnokii_speed.c:405
+msgid "Import"
+msgstr "Impordi"
+
+#: xgnokii/xgnokii_contacts.c:2564 xgnokii/xgnokii_sms.c:1126
+msgid "Select contacts"
+msgstr "Vali kontaktid"
+
+#: xgnokii/xgnokii_contacts.c:2597 xgnokii/xgnokii_contacts.c:2841
+#: xgnokii/xgnokii_sms.c:1575 xgnokii/xgnokii_speed.c:638
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "VIGA: %s: rida %d: Ei suuda eraldada mälu!\n"
+
+#: xgnokii/xgnokii_contacts.c:2695 xgnokii/xgnokii_dtmf.c:217
+#: xgnokii/xgnokii_logos.c:1143 xgnokii/xgnokii_netmon.c:260
+#: xgnokii/xgnokii_sms.c:1014 xgnokii/xgnokii_sms.c:1397
+#: xgnokii/xgnokii_speed.c:528 xgnokii/xgnokii_xkeyb.c:242
+msgid "/_File"
+msgstr "/_Fail"
+
+#: xgnokii/xgnokii_contacts.c:2696 xgnokii/xgnokii_speed.c:529
+msgid "/File/_Read from phone"
+msgstr "/Fail/Loe telefonist"
+
+#: xgnokii/xgnokii_contacts.c:2697 xgnokii/xgnokii_speed.c:530
+msgid "/File/_Save to phone"
+msgstr "/Fail/_Salvesta telefoni"
+
+#: xgnokii/xgnokii_contacts.c:2698 xgnokii/xgnokii_dtmf.c:220
+#: xgnokii/xgnokii_logos.c:1147 xgnokii/xgnokii_sms.c:1017
+#: xgnokii/xgnokii_sms.c:1399 xgnokii/xgnokii_speed.c:531
+msgid "/File/Sep1"
+msgstr "/Fail/Sep1"
+
+#: xgnokii/xgnokii_contacts.c:2699 xgnokii/xgnokii_speed.c:532
+msgid "/File/_Import from file"
+msgstr "/Fail/Ava fail"
+
+#: xgnokii/xgnokii_contacts.c:2700 xgnokii/xgnokii_speed.c:533
+msgid "/File/_Export to file"
+msgstr "/Fail/Salvesta faili"
+
+#: xgnokii/xgnokii_contacts.c:2701 xgnokii/xgnokii_logos.c:1151
+#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_speed.c:534
+msgid "/File/Sep2"
+msgstr "/Fail/Sep2"
+
+#: xgnokii/xgnokii_contacts.c:2702 xgnokii/xgnokii_dtmf.c:221
+#: xgnokii/xgnokii_logos.c:1152 xgnokii/xgnokii_netmon.c:261
+#: xgnokii/xgnokii_sms.c:1021 xgnokii/xgnokii_sms.c:1400
+#: xgnokii/xgnokii_speed.c:535 xgnokii/xgnokii_xkeyb.c:243
+msgid "/File/_Close"
+msgstr "/Fail/Sulge"
+
+#: xgnokii/xgnokii_contacts.c:2703 xgnokii/xgnokii_logos.c:1153
+#: xgnokii/xgnokii_speed.c:536
+msgid "/_Edit"
+msgstr "/R_edigeeri"
+
+#: xgnokii/xgnokii_contacts.c:2704
+msgid "/Edit/_New"
+msgstr "/Redigeeri/Uus"
+
+#: xgnokii/xgnokii_contacts.c:2705
+msgid "/Edit/D_uplicate"
+msgstr "/Redigeeri/Palj_unda"
+
+#: xgnokii/xgnokii_contacts.c:2706 xgnokii/xgnokii_speed.c:537
+msgid "/Edit/_Edit"
+msgstr "/Redigeeri/Paranda"
+
+#: xgnokii/xgnokii_contacts.c:2707
+msgid "/Edit/_Delete"
+msgstr "/Redigeeri/Kustuta"
+
+#: xgnokii/xgnokii_contacts.c:2708 xgnokii/xgnokii_logos.c:1156
+msgid "/Edit/Sep3"
+msgstr "/Redigeeri/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2709
+msgid "/Edit/_Change memory type"
+msgstr "/Redigeeri/Muuda mälu tüüp"
+
+#: xgnokii/xgnokii_contacts.c:2710 xgnokii/xgnokii_logos.c:1161
+msgid "/Edit/Sep4"
+msgstr "/Redigeeri/Sep4"
+
+#: xgnokii/xgnokii_contacts.c:2711
+msgid "/Edit/_Find"
+msgstr "/Redigeeri/Leia"
+
+#: xgnokii/xgnokii_contacts.c:2712
+msgid "/Edit/Find ne_xt"
+msgstr "/Redigeeri/Leia järgmine"
+
+#: xgnokii/xgnokii_contacts.c:2713
+msgid "/Edit/Sep5"
+msgstr "/Redigeeri/Sep5"
+
+#: xgnokii/xgnokii_contacts.c:2714
+msgid "/Edit/Select _all"
+msgstr "/Redigeeri/V_ali kõik"
+
+#: xgnokii/xgnokii_contacts.c:2715
+msgid "/_Dial"
+msgstr "/Vali numbri_d"
+
+#: xgnokii/xgnokii_contacts.c:2716
+msgid "/Dial/Dial _voice"
+msgstr "/Vali numbrid/_Vali kõne"
+
+#: xgnokii/xgnokii_contacts.c:2717 xgnokii/xgnokii_dtmf.c:222
+#: xgnokii/xgnokii_netmon.c:265 xgnokii/xgnokii_sms.c:1022
+#: xgnokii/xgnokii_sms.c:1408 xgnokii/xgnokii_speed.c:538
+#: xgnokii/xgnokii_xkeyb.c:244
+msgid "/_Help"
+msgstr "/Abi"
+
+#: xgnokii/xgnokii_contacts.c:2718 xgnokii/xgnokii_dtmf.c:223
+#: xgnokii/xgnokii_netmon.c:266 xgnokii/xgnokii_sms.c:1023
+#: xgnokii/xgnokii_sms.c:1409 xgnokii/xgnokii_speed.c:539
+#: xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_Help"
+msgstr "/Abi/Abi"
+
+#: xgnokii/xgnokii_contacts.c:2719 xgnokii/xgnokii_dtmf.c:224
+#: xgnokii/xgnokii_netmon.c:267 xgnokii/xgnokii_sms.c:1024
+#: xgnokii/xgnokii_sms.c:1410 xgnokii/xgnokii_speed.c:540
+#: xgnokii/xgnokii_xkeyb.c:246
+msgid "/Help/_About"
+msgstr "/Abi/Üldine"
+
+#: xgnokii/xgnokii_contacts.c:2735
+msgid "Memory"
+msgstr "Mälu"
+
+#: xgnokii/xgnokii_contacts.c:2735
+msgid "Group"
+msgstr "Grupp"
+
+#: xgnokii/xgnokii_contacts.c:2771 xgnokii/xgnokii_speed.c:591
+msgid "Read from phone"
+msgstr "Loe telefonist"
+
+#: xgnokii/xgnokii_contacts.c:2775 xgnokii/xgnokii_speed.c:595
+msgid "Save to phone"
+msgstr "Salvesta telefoni"
+
+#: xgnokii/xgnokii_contacts.c:2782 xgnokii/xgnokii_speed.c:602
+msgid "Import from file"
+msgstr "Ava fail"
+
+#: xgnokii/xgnokii_contacts.c:2786 xgnokii/xgnokii_speed.c:606
+msgid "Export to file"
+msgstr "Salvesta fail"
+
+#: xgnokii/xgnokii_contacts.c:2805
+msgid "Delete entry"
+msgstr "Kustuta kirje"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Laadi"
+
+#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1144
+msgid "/File/_Open"
+msgstr "/Fail/Ava"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1145
+#: xgnokii/xgnokii_sms.c:1016 xgnokii/xgnokii_sms.c:1398
+msgid "/File/_Save"
+msgstr "/Fail/_Salvesta"
+
+#: xgnokii/xgnokii_dtmf.c:245
+msgid "Dial Tone"
+msgstr "Vali toon"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/_Tools"
+msgstr "/_Tööriistad"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_n"
+msgstr "/Tööriistad/Võrgu mo_nitor peale"
+
+#: xgnokii/xgnokii_netmon.c:264
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Tööriistad/Võrgu monitor maha"
+
+#: xgnokii/xgnokii_netmon.c:381 xgnokii/xgnokii_netmon.c:384
+msgid "Active cell"
+msgstr "Aktiivne kärg"
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Prefered/Denied networks"
+msgstr "Eelistatud/keelatud v6rgud"
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "System information bits"
+msgstr "Süsteemi informatsiooni bitid"
+
+#: xgnokii/xgnokii_netmon.c:402
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:405
+msgid "Cells info"
+msgstr "Kärje info"
+
+#: xgnokii/xgnokii_netmon.c:408
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:427
+msgid "Accumulator, Charge status"
+msgstr "Aku, laadimise staatus"
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "?Battery full detection"
+msgstr "?Aku laadumuse proov"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Accumulator"
+msgstr "Aku"
+
+#: xgnokii/xgnokii_netmon.c:439
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:442
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:445
+msgid "Cause codes for last connection abortion"
+msgstr "Viimase ühenduse katkestamise põhjuskoodid"
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:476
+msgid "Memory status before reset"
+msgstr "Mälu olek enne resetti"
+
+#: xgnokii/xgnokii_netmon.c:479
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:482
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Neighbourhood measurement"
+msgstr "Keskkonnaparameetrite mõõtmine"
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "Calls"
+msgstr "Kõnesid"
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "Temporary counters of DSP"
+msgstr "DSP ajutised loendurid"
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:504
+msgid "Information about task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:507
+msgid "Information about task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:510
+msgid "Information about task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:513
+msgid "Information about OS_SYSTEM_STACK"
+msgstr "OS_SYSTEM_STACK informatsioon"
+
+#: xgnokii/xgnokii_netmon.c:516
+msgid "Information about current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:519
+msgid "Hardware version"
+msgstr "Riistvara versioon"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:548
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:579
+msgid "Page:"
+msgstr "Leht:"
+
+#: xgnokii/xgnokii_sms.c:233
+msgid "report"
+msgstr "raport"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "read"
+msgstr "loe"
+
+#: xgnokii/xgnokii_sms.c:243
+msgid "unread"
+msgstr "lugemata"
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "sent"
+msgstr "saadetud"
+
+#: xgnokii/xgnokii_sms.c:305
+msgid "unsent"
+msgstr "saatmata"
+
+#: xgnokii/xgnokii_sms.c:373
+msgid "From: "
+msgstr "Saatja: "
+
+#: xgnokii/xgnokii_sms.c:381
+msgid "Date: "
+msgstr "Kuupäev: "
+
+#: xgnokii/xgnokii_sms.c:470
+msgid "Delete SMS"
+msgstr "Kustuta SMS"
+
+#: xgnokii/xgnokii_sms.c:502
+msgid "Do you want to delete selected SMS?"
+msgstr "Kas soovid valitud SMS kustutada?"
+
+#: xgnokii/xgnokii_sms.c:720 xgnokii/xgnokii_sms.c:851
+msgid "Address line contains illegal address!"
+msgstr "Aadressi real on sobimatu aadress!"
+
+#: xgnokii/xgnokii_sms.c:823
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"SMS saatmine %s ebõnnestus!\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_sms.c:913 xgnokii/xgnokii_sms.c:950
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Saadan SMS'i %s (%d/%d) ...\n"
+
+#: xgnokii/xgnokii_sms.c:977
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Saadan SMS'i %s ...\n"
+
+#: xgnokii/xgnokii_sms.c:1015
+msgid "/File/Sen_d"
+msgstr "/Fail/Saa_da"
+
+#: xgnokii/xgnokii_sms.c:1018
+msgid "/File/Check _Names"
+msgstr "/Fail/_Nime kontroll"
+
+#: xgnokii/xgnokii_sms.c:1019
+msgid "/File/C_ontacts"
+msgstr "/Fail/K_ontaktid"
+
+#: xgnokii/xgnokii_sms.c:1078
+msgid "Send message"
+msgstr "Saada sõnum"
+
+#: xgnokii/xgnokii_sms.c:1082
+msgid "Save message to outbox"
+msgstr "Salvesta sõnum outbox'i"
+
+#: xgnokii/xgnokii_sms.c:1089
+msgid "Check names"
+msgstr "Kontrolli nimesid"
+
+#: xgnokii/xgnokii_sms.c:1102
+msgid "To:"
+msgstr "Saaja:"
+
+#: xgnokii/xgnokii_sms.c:1174
+msgid "Delivery report"
+msgstr "Saateraport"
+
+#: xgnokii/xgnokii_sms.c:1178
+msgid "Send as Long SMS"
+msgstr "Saada pika SMS'na"
+
+#: xgnokii/xgnokii_sms.c:1182
+msgid "SMS Center:"
+msgstr "SMS Keskus:"
+
+#: xgnokii/xgnokii_sms.c:1201
+msgid "New Message"
+msgstr "Uus sõnum"
+
+#: xgnokii/xgnokii_sms.c:1228
+msgid "Forward Message"
+msgstr "Edasta sõnum"
+
+#: xgnokii/xgnokii_sms.c:1272
+msgid "Reply Message"
+msgstr "Vasta sõnumile"
+
+#: xgnokii/xgnokii_sms.c:1308 xgnokii/xgnokii_sms.c:1475
+msgid "Bussiness Card"
+msgstr "Visiitkaart"
+
+#: xgnokii/xgnokii_sms.c:1401
+msgid "/_Messages"
+msgstr "/Sõnu_mid"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "/_Messages/_New"
+msgstr "/Sõnu_mid/Uued"
+
+#: xgnokii/xgnokii_sms.c:1403
+msgid "/_Messages/_Forward"
+msgstr "/Sõnu_mid/Edasta _F"
+
+#: xgnokii/xgnokii_sms.c:1404
+msgid "/_Messages/_Reply"
+msgstr "/Sõnu_mid/Vasta _R"
+
+#: xgnokii/xgnokii_sms.c:1405
+msgid "/_Messages/_Delete"
+msgstr "/Sõnu_mid/Kustuta"
+
+#: xgnokii/xgnokii_sms.c:1406
+msgid "/Messages/Sep3"
+msgstr "/Sõnu_mid/Sep3"
+
+#: xgnokii/xgnokii_sms.c:1407
+msgid "/_Messages/_Bussiness card"
+msgstr "/Sõnu_mid/Visiitkaart"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Status"
+msgstr "Olek"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Date / Time"
+msgstr "Kuupäev/Kellaaeg"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Sender"
+msgstr "Saatja"
+
+#: xgnokii/xgnokii_sms.c:1428
+msgid "Message"
+msgstr "Sõnum"
+
+#: xgnokii/xgnokii_sms.c:1462
+msgid "New message"
+msgstr "Uus sõnum"
+
+#: xgnokii/xgnokii_sms.c:1466
+msgid "Forward message"
+msgstr "Saada sõnum edasi"
+
+#: xgnokii/xgnokii_sms.c:1470
+msgid "Reply message"
+msgstr "Vasta sõnumile"
+
+#: xgnokii/xgnokii_sms.c:1482
+msgid "Delete message"
+msgstr "Kustuta sõnum"
+
+#: xgnokii/xgnokii_sms.c:1507
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1516
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1522
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1608
+msgid "couldn't allocate colour"
+msgstr "ei suuda värvi määratleda"
+
+#: xgnokii/xgnokii_speed.c:181
+msgid "Reading data ..."
+msgstr "Loen andmeid ..."
+
+#: xgnokii/xgnokii_speed.c:192 xgnokii/xgnokii_speed.c:198
+#: xgnokii/xgnokii_speed.c:257
+msgid "Cannot allocate memory!"
+msgstr "Ei suuda mälu eraldada!"
+
+#: xgnokii/xgnokii_speed.c:345
+msgid "Cannot allocate memory!\n"
+msgstr "Ei suuda mälu eraldada!\n"
+
+#: xgnokii/xgnokii_speed.c:357 xgnokii/xgnokii_speed.c:385
+msgid "Error reading file!"
+msgstr "Viga faili lugemisel!"
+
+#: xgnokii/xgnokii_speed.c:555
+msgid "Key"
+msgstr "Klahv"
+
+#: xgnokii/xgnokii_xkeyb.c:183
+msgid "Cannot load background pixmap!"
+msgstr "Ei suuda laadida taustapilti!"
+
+#: xgnokii/xgnokii_xkeyb.c:260
+msgid "XGnokii Keyboard"
+msgstr "XGnokii Klaviatuur"
+
+#: xgnokii/xgnokii_logos.c:834
+#, c-format
+msgid ""
+"Error getting network info\n"
+"(error=%d)"
+msgstr ""
+"Viga võrguinfo saamisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:867
+#, c-format
+msgid ""
+"Error getting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Viga bitmap saamisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:912
+#, c-format
+msgid ""
+"Error setting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Viga bitmap seadmisel\n"
+"(viga=%d)"
+
+#: xgnokii/xgnokii_logos.c:1146
+msgid "/File/Save _as ..."
+msgstr "/Fail/Salvest_a nagu ..."
+
+#: xgnokii/xgnokii_logos.c:1148
+msgid "/File/_Get operator"
+msgstr "/Fail/Tuvasta operaator"
+
+#: xgnokii/xgnokii_logos.c:1149
+msgid "/File/Get _logo"
+msgstr "/Fail/Võta _logo"
+
+#: xgnokii/xgnokii_logos.c:1150
+msgid "/File/Se_t logo"
+msgstr "/Fail/Sea logo"
+
+#: xgnokii/xgnokii_logos.c:1154
+msgid "/Edit/_Clear"
+msgstr "/Redigeeri/Tühjenda"
+
+#: xgnokii/xgnokii_logos.c:1155
+msgid "/Edit/_Invert"
+msgstr "/Redigeeri/_Invert"
+
+#: xgnokii/xgnokii_logos.c:1157
+msgid "/Edit/_Up logo"
+msgstr "/Redigeeri/Logo üles"
+
+#: xgnokii/xgnokii_logos.c:1158
+msgid "/Edit/_Down logo"
+msgstr "/Redigeeri/Logo alla"
+
+#: xgnokii/xgnokii_logos.c:1159
+msgid "/Edit/_Left logo"
+msgstr "/Redigeeri/_Logo vasakule"
+
+#: xgnokii/xgnokii_logos.c:1160
+msgid "/Edit/_Right logo"
+msgstr "/Redigeeri/Logo paremale"
+
+#: xgnokii/xgnokii_logos.c:1162
+msgid "/Edit/Flip _horizontal"
+msgstr "/Redigeeri/Pööra _horisontaalis"
+
+#: xgnokii/xgnokii_logos.c:1163
+msgid "/Edit/Flip _vertical"
+msgstr "/Redigeeri/Pööra _vertikaalis"
+
+#: xgnokii/xgnokii_logos.c:1442
+msgid "Load preview pixmap error, feature disabled."
+msgstr ""
+
+#~ msgid "Logo file error.\n"
+#~ msgstr "Logo faili viga.\n"
+
+#~ msgid "Sending Logo.\n"
+#~ msgstr "Saadan Logo.\n"
+
+#~ msgid " Date: %s GMT"
+#~ msgstr " Kuupäev: %s GMT"
+
+#~ msgid " usage: gnokiid {--help|--version}"
+#~ msgstr " kasutus: gnokiid {--help|--version}"
+
+#~ msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+#~ msgstr "%s: rida %d: Ei saa kätte ME mälu asukoha numbrit %d! %d\n"
+
+#~ msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+#~ msgstr "%s: rida %d: Ei saa kätte SM mälu asukoha numbrit %d! %d\n"
+
+#~ msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+#~ msgstr "0x16 Registreerimise vastus 0x%02x 0x%02x\n"
+
+#~ msgid "Date"
+#~ msgstr "Kuupäev"
+
+#~ msgid "Groups names"
+#~ msgstr "Gruppide nimed"
+
+#~ msgid "Incoming call terminated.\n"
+#~ msgstr "Saabuv kõne katkestatud. \n"
+
+#~ msgid "Message: Startup Logo received.\n"
+#~ msgstr "Teade: Startup Logo saabus.\n"
+
+#~ msgid "Message: the rest of the SMS message received.\n"
+#~ msgstr "Teade: ülejäänud SMS sõnum saabus.\n"
+
+#~ msgid "gnokiid Version %s"
+#~ msgstr "gnokiid Versioon %s"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n""Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid " %d. SMS Center name is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Herätyspäivämäärä: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid " Alarm is %s\n"
+msgstr " Herätys on %s\n"
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Herätysaika: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid " Alarm: %02d:%02d\n"
+msgstr " Herätys: %02d:%02d\n"
+
+#: fbus-6110.c:2993
+msgid " Battery Level: %d\n"
+msgstr " Akun varaus: %d\n"
+
+#: gnokii.c:1585
+msgid " Calendar note deleted.\n"
+msgstr ""
+
+#: fbus-6110.c:3217
+msgid " CellID: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3334
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Päivämäärä: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Päivämäärä: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid " Date: %s\n"
+msgstr " Päivämäärä: %s\n"
+
+#: fbus-6110.c:3714
+msgid " Date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:4016
+msgid " Empty SMS location.\n"
+msgstr " Tyhjä tekstiviestimuistipaikka.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Tarkoitus toistaiseksi tuntematon :-(\n"
+
+#: fbus-6110.c:4142
+msgid " Firmware: %s\n"
+msgstr " Laitteistoversio: %s\n"
+
+#: fbus-6110.c:2764
+msgid " Free: %d\n"
+msgstr " Vapaana: %d\n"
+
+#: fbus-6110.c:4140
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: fbus-3810.c:2274
+msgid " IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4134
+msgid " IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4006
+msgid " Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid " Invalid memory type!\n"
+msgstr " Virheellinen muistityyppi!\n"
+
+#: fbus-6110.c:3583
+msgid " Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid " LAC: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2875
+msgid " Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Maagiset tavut: %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2762
+msgid " Memory Type: %s\n"
+msgstr " Muistityyppi: %s\n"
+
+#: fbus-6110.c:2876
+msgid " MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid " Mode: "
+msgstr " Tila: "
+
+#: fbus-3810.c:2276
+msgid " Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid " Model: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2180
+msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr " Viestin pituus %d, Viestin numero %d, Tuntemattomat tavut: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid " Name: "
+msgstr " Nimi: "
+
+#: fbus-6110.c:3219
+msgid " Network code: %s\n"
+msgstr " Verkon koodi: %s\n"
+
+#: fbus-6110.c:3220
+msgid " Network name: %s (%s)\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid " Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid " Number: "
+msgstr " Numero: "
+
+#: fbus-6110.c:2877
+msgid " Number: %d\n"
+msgstr " Numero: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid " Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid " Power source: "
+msgstr " Virtalähde: "
+
+#: fbus-6110.c:4138
+msgid " Production Code: %s\n"
+msgstr " Valmistekoodi: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid " Remote number: %s\n"
+msgstr " Vastapuolen numero: %s\n"
+
+#: fbus-3810.c:2278
+msgid " Revision: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2548
+msgid " SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid " SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid " SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid " SMS center number: %s\n"
+msgstr " Viestikeskuksen numero: %s\n"
+
+#: fbus-6110.c:2513
+msgid " SMS: "
+msgstr " Tekstiviesti: "
+
+#: fbus-6110.c:3729
+msgid " SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Puhelun järjestysnumero: %d\n"
+
+#: fbus-6110.c:2994
+msgid " Signal strength: %d\n"
+msgstr " Kenttävoimakkuus: %d\n"
+
+#: fbus-6110.c:3223
+msgid " Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid " Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid " The number of messages: %d\n"
+msgstr " Viestien lukumäärä: %d\n"
+
+#: fbus-6110.c:2622
+msgid " The request for SMS Center failed.\n"
+msgstr " Tekstiviestikeskuskutsu epäonnistui.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid " Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1476
+msgid " Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid " Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid " Unknown error!\n"
+msgstr " Tuntematon virhe!\n"
+
+#: fbus-6110.c:4041
+msgid " Unread messages: %d\n"
+msgstr " Lukemattomia viestejä: %d\n"
+
+#: fbus-6110.c:2763
+msgid " Used: %d\n"
+msgstr ""
+
+#: gnokii.c:86
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --sendoplogoviasms destionation logofile [network code]\n"
+" gnokii --setdatetime [YYYY MM DD HH MM]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+" gnokii --reset [soft|hard]\n"
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken from\n"
+" phone memory from address [message_center_index].\n"
+" If this argument is ommited SMSC number is taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --sendoplogoviasms send the logofile to destination as operator\n"
+" logo\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid " usage: gnokiid {--help|--version}"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr ""
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "Virtalähde"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "Virtalähde\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Akun varaus: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr "CAR on %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr ""
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr "CTS on %s.\n"
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr ""
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr ""
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr "DTR on %s.\n"
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr ""
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr ""
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Siirrytään tarkkailutilaan...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr ""
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr ""
+
+#: gnokii.c:2150
+msgid "IMEI: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr ""
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr ""
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Alustetaan GSM-liitäntää...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Lopetetaan tarkkailutila...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr ""
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr ""
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr ""
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr ""
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr ""
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr ""
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr ""
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr ""
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr ""
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr ""
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr ""
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr ""
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr ""
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr ""
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Puhelin: käytöss: %d, vapaana %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Virtalähde: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Kenttävoimakkuus: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr "RTS on %s.\n"
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: käytössä %d, vapaaana %d\n"
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Tekstiviesejä: lukematon %d, numero %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr ""
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr ""
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr ""
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr "Sarjaliitännän lippujen tila: \n"
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Asetetaan FBUS-yhteyttä...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr ""
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr ""
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr ""
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr ""
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Kirjoittaminen epäonnistui!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr "akku"
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr "akku\n"
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr "poissa"
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "käynnistyy uudelleen.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr "päällä"
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid ""
+# " Code Error\n"
+# " You're not my big owner :-)\n"
+# msgstr ""
+# " PIN-koodi virheellinen\n"
+# " Et ole oikea omistajani :-)\n"
+#
+# msgid " Code Accepted\n"
+# msgstr " PIN-koodi hyväksytty\n"
+#
+# msgid "Enter your PIN: "
+# msgstr "Anna PIN-koodi: "
+#
+# msgid " Text: "
+# msgstr " Teksti: "
+#
+# msgid " Keyboard is %s\n"
+# msgstr " Näppäimistö on %s\n"
+#
+# msgid " LAC: %02x%02x\n"
+# msgstr " LAC: %02x%02x\n"
+#
+# msgid " CellID: %02x%2x\n"
+# msgstr " Solun tunniste: %02x%2x\n"
+#
+# msgid " Network name: %s\n"
+# msgstr " Verkon nimi: %s\n"
+#
+# msgid " Serial No. %s\n"
+# msgstr " Sarjanumero: %s\n"
+#
--- /dev/null
+# This is the Italian locale definition for Gnokii.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Gabriele Stella <gstella@libero.it>, 2000.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2001-01-30 12:18+0100\n"
+"PO-Revision-Date: 2001-01-29 22:23+0100\n"
+"Last-Translator: Gabriele Stella <gstella@libero.it>\n"
+"Language-Team: gnokii <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:582 common/fbus-6110.c:2219
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Invia un SMS a %s con il centro messaggi %s\n"
+
+#: common/fbus-3810.c:686
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Invio SMS fallito, nuovo tentativo (%d di %d)\n"
+
+#: common/fbus-3810.c:1304
+msgid "Couldn't open FB38 device"
+msgstr "Impossibile aprire il dispositivo FB38"
+
+#: common/fbus-3810.c:1397
+msgid "restarting.\n"
+msgstr "riavvio.\n"
+
+#: common/fbus-3810.c:1453
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT Fallito %02x"
+
+#: common/fbus-3810.c:1460 common/mbus-6160.c:992
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS Fallito %02x != %02x"
+
+#: common/fbus-3810.c:1572
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:1588
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:1589
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr "Accesso alla SIM: %s.\n"
+
+#: common/fbus-3810.c:1665
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS Memorizzato nella locazione 0x%02x\n"
+
+#: common/fbus-3810.c:1675
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Memorizzazione SMS fallita: 0x%02x\n"
+
+#: common/fbus-3810.c:1796
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [forse] digitato.\n"
+
+#: common/fbus-3810.c:1805
+msgid "Phone powering off..."
+msgstr "Spegnimento telefono..."
+
+#: common/fbus-3810.c:1834 common/mbus-6160.c:599
+msgid "Standard Ack write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:1860
+msgid "Unknown: "
+msgstr "Sconosciuto: "
+
+#: common/fbus-3810.c:1862
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Msg Tipo: %02x "
+
+#: common/fbus-3810.c:1863
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Msg Lung.: %02x "
+
+#: common/fbus-3810.c:1864
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr ""
+
+#: common/fbus-3810.c:1865
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Checksum: %02x \n"
+" "
+
+#: common/fbus-3810.c:1957 common/fbus-3810.c:2087
+msgid "Set Mem Loc Write failed!"
+msgstr "Scrittura Set Mem Loc fallita!"
+
+#: common/fbus-3810.c:2002
+msgid "TX_SendRLPFrame - write:"
+msgstr ""
+
+#: common/fbus-3810.c:2014
+msgid "Request HangupMessage Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2026
+msgid "0x4a Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2041
+msgid "Explore Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2051
+msgid "0x3f Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2111
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2124
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2167
+msgid "Send SMS header failed!"
+msgstr "Invio intestazione SMS fallita!"
+
+#: common/fbus-3810.c:2226
+msgid "Store SMS header failed!"
+msgstr "Memorizzazione intestazione SMS fallita!"
+
+#: common/fbus-3810.c:2251
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Invio blocco SMS %d fallita!"
+
+#: common/fbus-3810.c:2274
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2297
+msgid "Delete SMS Mem Loc write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2316
+msgid "0x15 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2333 common/mbus-6160.c:1070
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - messaggio troppo lungo!\n"
+
+#: common/fbus-3810.c:2359 common/mbus-6160.c:873 common/mbus-6160.c:1102
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - scrittura:"
+
+#: common/fbus-3810.c:2372 common/fbus-3810.c:2508 common/fbus-3810.c:2526
+#: common/fbus-3810.c:2544 common/fbus-3810.c:2558 common/fbus-3810.c:2692
+#: common/fbus-3810.c:2753 common/fbus-3810.c:2812 common/fbus-3810.c:2852
+msgid "Write failed!"
+msgstr "Scrittura fallita!"
+
+#: common/fbus-3810.c:2386
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Chiamata in arrivo - Tipo: %s. %02x, Numero %s.\n"
+
+#: common/fbus-3810.c:2413
+msgid "0x27 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2461
+msgid "0x4b Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2480
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Stato: %s. Batt %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2491
+msgid "0x10 Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2495
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Chiamata terminata dal telefono (avviso 0x10).\n"
+
+#: common/fbus-3810.c:2512
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Telefonata terminata dal chiamante (o dalla rete).\n"
+
+#: common/fbus-3810.c:2530
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Chiamata terminata dal telefono (avviso 0x12).\n"
+
+#: common/fbus-3810.c:2548
+msgid "Incoming call answered from phone.\n"
+msgstr "Risposta del telefono ad una chiamata in arrivo.\n"
+
+#: common/fbus-3810.c:2562
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s ha stabilito un collegamento - stato dei byte %02x %02x.\n"
+
+#: common/fbus-3810.c:2579
+msgid "0x2c Write failed!"
+msgstr ""
+
+#: common/fbus-3810.c:2666
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2733
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"SMS in arrivo %d/%d/%d %d:%02d:%02d tz:0x%02x Mittente: %s(Tipo %02x) Centro "
+"Msg: %s\n"
+
+#: common/fbus-3810.c:2735
+#, c-format
+msgid ""
+" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+
+#: common/fbus-3810.c:2828
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: common/fbus-3810.c:2829
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-3810.c:2831
+#, c-format
+msgid " Model: %s\n"
+msgstr " Modello: %s\n"
+
+#: common/fbus-3810.c:2833
+#, c-format
+msgid " Revision: %s\n"
+msgstr " Versione : %s\n"
+
+#: common/fbus-3810.c:2907
+msgid "SMS Message Center Data:\n"
+msgstr "Centro Messaggi SMS:\n"
+
+#: common/fbus-3810.c:2908
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Memoria in uso: 0x%02x\n"
+
+#: common/fbus-3810.c:2909
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Messaggi nel Telefono: 0x%02x Da leggere: 0x%02x\n"
+
+#: common/fbus-3810.c:2911
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Messaggi nella SIM: 0x%02x Da leggere: 0x%02x\n"
+
+#: common/fbus-3810.c:2913
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Risposta stesso centro: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2915
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Conferma invio: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2917
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Messaggio inviato come: 0x%02x\n"
+
+#: common/fbus-3810.c:2918
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Validità messaggio: 0x%02x\n"
+
+#: common/fbus-3810.c:2919
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Anonimo: 0x%02x\n"
+
+#: common/fbus-3810.c:2922
+msgid "UnknownNumber field empty."
+msgstr ""
+
+#: common/fbus-3810.c:2924
+msgid "UnknownNumber: "
+msgstr ""
+
+#: common/fbus-3810.c:2931
+msgid "Number field empty."
+msgstr ""
+
+#: common/fbus-3810.c:2934 xgnokii/xgnokii_calendar.c:229
+msgid "Number: "
+msgstr "Numero: "
+
+#: common/fbus-6110-ringtones.c:352
+#, c-format
+msgid "Error in PackRingtone - StartBit different to HowLong %d - %d)\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:411
+msgid "Not header\n"
+msgstr "Non intestato\n"
+
+#: common/fbus-6110-ringtones.c:418
+msgid "Not RingingToneProgramming\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:429
+msgid "Not Sound\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:436
+msgid "Not BasicSongType\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:454
+msgid "Not PatternHeaderId\n"
+msgstr ""
+
+#: common/fbus-6110-ringtones.c:556
+msgid "Unsupported block\n"
+msgstr ""
+
+#: common/fbus-6110.c:937
+msgid "Timeout in IR-mode\n"
+msgstr "Timeout in modalità IR\n"
+
+#: common/fbus-6110.c:974
+msgid "Couldn't open FB61 infrared device"
+msgstr "Impossibile aprire il dispositivo ad infrarossi FB61"
+
+#: common/fbus-6110.c:1049
+msgid "Starting IR mode...!\n"
+msgstr "Avvio modalità IR...!\n"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:978 gnokii/gnokii.c:1808
+#: gnokii/gnokii.c:3215 gnokii/gnokii.c:3242
+msgid "Send succeeded!\n"
+msgstr "Invio effettuato!\n"
+
+#: common/fbus-6110.c:2760 gnokii/gnokii.c:980 gnokii/gnokii.c:1810
+#: gnokii/gnokii.c:3217
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Invio SMS non riuscito (errore=%d)\n"
+
+#: common/fbus-6110.c:2791
+msgid "Serial flags dump:\n"
+msgstr "Stato dei Serial flags:\n"
+
+#: common/fbus-6110.c:2792 common/mbus-640.c:774
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "Il DTR è %s.\n"
+
+#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794
+#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775
+msgid "up"
+msgstr "attivo"
+
+#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794
+#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775
+msgid "down"
+msgstr "disattivo"
+
+#: common/fbus-6110.c:2793 common/mbus-640.c:775
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS è %s.\n"
+
+#: common/fbus-6110.c:2794
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR è %s.\n"
+
+#: common/fbus-6110.c:2795
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS è %s.\n"
+
+#: common/fbus-6110.c:2830
+msgid "Setting FBUS communication...\n"
+msgstr "Attivazione comunicazione FBUS...\n"
+
+#: common/fbus-6110.c:2865
+msgid "Couldn't open FB61 device"
+msgstr "Impossibile aprire il dispositivo FB61"
+
+#: common/fbus-6110.c:2999
+msgid "Message: Call message, type 0x02:"
+msgstr "Messaggio: Call message, tipo 0x02:"
+
+#: common/fbus-6110.c:3000 common/fbus-6110.c:3012 common/fbus-6110.c:3114
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr ""
+
+#: common/fbus-6110.c:3010
+msgid "Message: Call message, type 0x03:"
+msgstr "Messaggio: Call message, tipo 0x03:"
+
+#: common/fbus-6110.c:3011 common/fbus-6110.c:3027 common/fbus-6110.c:3045
+#: common/fbus-6110.c:3076 common/fbus-6110.c:3087 common/fbus-6110.c:3113
+#, c-format
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Nr. sequenziale della chiamata: %d\n"
+
+#: common/fbus-6110.c:3026
+msgid "Message: Remote end hang up.\n"
+msgstr "Avviso: Il chiamato ha chiuso la comunicazione.\n"
+
+#: common/fbus-6110.c:3040
+msgid "Message: Incoming call alert:\n"
+msgstr "Avviso: Chiamata in arrivo:\n"
+
+#: common/fbus-6110.c:3046 common/fbus-6110.c:3358
+msgid " Number: "
+msgstr " Numero: "
+
+#: common/fbus-6110.c:3054 common/fbus-6110.c:3342
+msgid " Name: "
+msgstr " Nome: "
+
+#: common/fbus-6110.c:3075
+msgid "Message: Call answered.\n"
+msgstr "Avviso: Chiamata risposta.\n"
+
+#: common/fbus-6110.c:3086
+msgid "Message: Call ended by your phone.\n"
+msgstr "Avviso: Chiamata terminata dal vostro telefono.\n"
+
+#: common/fbus-6110.c:3112
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: common/fbus-6110.c:3125
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: common/fbus-6110.c:3143
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Avviso: messaggio SMS inviato regolarmente.\n"
+
+#: common/fbus-6110.c:3154
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Avviso: Invio SMS fallito.\n"
+
+#: common/fbus-6110.c:3163
+msgid "Message: SMS Message Received\n"
+msgstr "Avviso: Ricevuto SMS\n"
+
+#: common/fbus-6110.c:3164 common/fbus-6110.c:4617
+#, c-format
+msgid " SMS center number: %s\n"
+msgstr " Numero centro messaggi SMS: %s\n"
+
+#: common/fbus-6110.c:3168 common/fbus-6110.c:4618
+#, c-format
+msgid " Remote number: %s\n"
+msgstr " Numero chiamato: %s\n"
+
+#: common/fbus-6110.c:3169
+#, c-format
+msgid " Date: %s\n"
+msgstr " Data: %s\n"
+
+#: common/fbus-6110.c:3170
+msgid " SMS: "
+msgstr " SMS: "
+
+#: common/fbus-6110.c:3184
+msgid "Message: Cell Broadcast enabled/disabled successfully.\n"
+msgstr ""
+"Avviso: Informazioni Microcella abilitato/disabilitato correttamente.\n"
+
+#: common/fbus-6110.c:3196
+msgid "Message: CB received.\n"
+msgstr "Avviso: ricevuto CB.\n"
+
+#: common/fbus-6110.c:3198
+#, c-format
+msgid "Message: channel number %i\n"
+msgstr "Avviso: numero di canale %i\n"
+
+#: common/fbus-6110.c:3214
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Messaggio: Centro messaggi SMS impostato.\n"
+
+#: common/fbus-6110.c:3230
+msgid "Message: SMS Center received:\n"
+msgstr "Avviso: ricevuto Centro SMS:\n"
+
+#: common/fbus-6110.c:3231
+#, c-format
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. Il nome del Centro SMS è %s\n"
+
+#: common/fbus-6110.c:3232
+#, c-format
+msgid " SMS Center number is %s\n"
+msgstr " Il numero del centro SMS è %s\n"
+
+#: common/fbus-6110.c:3234
+msgid " SMS Center message format is "
+msgstr " Il formato dei messaggi SMS è "
+
+#: common/fbus-6110.c:3239 gnokii/gnokii.c:1117 xgnokii/xgnokii.c:546
+#: xgnokii/xgnokii.c:575 xgnokii/xgnokii.c:1445 xgnokii/xgnokii_calendar.c:862
+msgid "Text"
+msgstr "Testo"
+
+#: common/fbus-6110.c:3243 gnokii/gnokii.c:1121 xgnokii/xgnokii.c:550
+#: xgnokii/xgnokii.c:1459
+msgid "Paging"
+msgstr "Paging"
+
+#: common/fbus-6110.c:3247 gnokii/gnokii.c:1125 xgnokii/xgnokii.c:554
+#: xgnokii/xgnokii.c:1452 xgnokii/xgnokii_contacts.c:1784
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:3251 gnokii/gnokii.c:1130
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:3255 common/fbus-6110.c:3289 common/fbus-6110.c:4840
+#: common/fbus-6110.c:5388 gnokii/gnokii.c:1142 gnokii/gnokii.c:1176
+#: xgnokii/xgnokii_calendar.c:153
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: common/fbus-6110.c:3260
+msgid " SMS Center message validity is "
+msgstr " La permanenza dei messaggi nel centro SMS è "
+
+#: common/fbus-6110.c:3265 gnokii/gnokii.c:1152
+msgid "1 hour"
+msgstr "1 ora"
+
+#: common/fbus-6110.c:3269 gnokii/gnokii.c:1156
+msgid "6 hours"
+msgstr "6 ore"
+
+#: common/fbus-6110.c:3273 gnokii/gnokii.c:1160
+msgid "24 hours"
+msgstr "24 ore"
+
+#: common/fbus-6110.c:3277 gnokii/gnokii.c:1164
+msgid "72 hours"
+msgstr "72 ore"
+
+#: common/fbus-6110.c:3281 gnokii/gnokii.c:1168 xgnokii/xgnokii.c:598
+#: xgnokii/xgnokii.c:1524
+msgid "1 week"
+msgstr "1 settimana"
+
+#: common/fbus-6110.c:3285 gnokii/gnokii.c:1172
+msgid "Maximum time"
+msgstr "Tempo massimo"
+
+#: common/fbus-6110.c:3307
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3308
+msgid " The request for SMS Center failed.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3319
+msgid "Unknown message!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3341
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3378
+msgid " Date: "
+msgstr " Data: "
+
+#: common/fbus-6110.c:3380
+msgid " Time: "
+msgstr " Ora: "
+
+#: common/fbus-6110.c:3393
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Avviso: voce in Rubrica errata:\n"
+
+#: common/fbus-6110.c:3401
+msgid " Invalid memory type!\n"
+msgstr " Tipo memoria errata!\n"
+
+#: common/fbus-6110.c:3411 common/fbus-6110.c:3449
+msgid " Unknown error!\n"
+msgstr " Errore indeterminato!\n"
+
+#: common/fbus-6110.c:3422
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Avviso: Scrittura Rubrica effettuata correttamente.\n"
+
+#: common/fbus-6110.c:3439
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+"Avviso: Scrittura in Rubrica non effettuata - il nome è troppo lungo.\n"
+
+#: common/fbus-6110.c:3460
+msgid "Message: Memory status received:\n"
+msgstr "Avviso: Ricezione condizioni memoria:\n"
+
+#: common/fbus-6110.c:3462
+#, c-format
+msgid " Memory Type: %s\n"
+msgstr " Tipo di memoria: %s\n"
+
+#: common/fbus-6110.c:3463
+#, c-format
+msgid " Used: %d\n"
+msgstr " In uso: %d\n"
+
+#: common/fbus-6110.c:3464
+#, c-format
+msgid " Free: %d\n"
+msgstr " Libera: %d\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+"Avviso: Errore analizzando la memoria, il telefono potrebbe essere spento.\n"
+
+#: common/fbus-6110.c:3486
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Avviso: Errore di memoria, il tipo non è supportato dal modello di "
+"telefono.\n"
+
+#: common/fbus-6110.c:3493
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3500
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:3517
+msgid "Message: Caller group logo etc.\n"
+msgstr "Avvisssso: Logo gruppo chiamante etc.\n"
+
+#: common/fbus-6110.c:3518
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Nome Gruppo chiamante: %s\n"
+
+#: common/fbus-6110.c:3538
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3548
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3556
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3564
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: common/fbus-6110.c:3575
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3576
+#, c-format
+msgid " Location: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3577
+#, c-format
+msgid " MemoryType: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:3578
+#, c-format
+msgid " Number: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:3588
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: common/fbus-6110.c:3598
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3608
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3618
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: common/fbus-6110.c:3634
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:3635
+msgid " Mode: "
+msgstr ""
+
+#: common/fbus-6110.c:3641
+msgid "registered within the network\n"
+msgstr ""
+
+#: common/fbus-6110.c:3650
+msgid "call in progress\n"
+msgstr "chiamata in corso\n"
+
+#: common/fbus-6110.c:3656
+msgid "waiting for security code\n"
+msgstr "fornire codice di sicurezza\n"
+
+#: common/fbus-6110.c:3662
+msgid "powered off\n"
+msgstr "spegnimento\n"
+
+#: common/fbus-6110.c:3668 common/fbus-6110.c:3690
+msgid "unknown\n"
+msgstr "sconosciuto\n"
+
+#: common/fbus-6110.c:3672
+msgid " Power source: "
+msgstr " Alimentazione: "
+
+#: common/fbus-6110.c:3678
+msgid "AC/DC\n"
+msgstr "CA/CC\n"
+
+#: common/fbus-6110.c:3684
+msgid "battery\n"
+msgstr "batteria\n"
+
+#: common/fbus-6110.c:3694
+#, c-format
+msgid " Battery Level: %d\n"
+msgstr " Livello batteria: %d\n"
+
+#: common/fbus-6110.c:3695
+#, c-format
+msgid " Signal strength: %d\n"
+msgstr " Ampiezza segnale: %d\n"
+
+#: common/fbus-6110.c:3707
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Avviso: Messaggio sconosciuto del tipo 0x04\n"
+
+#: common/fbus-6110.c:3723
+msgid "Message: Profile feature change result.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3781
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3805
+msgid "Startup logo supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3808
+msgid "currently set\n"
+msgstr ""
+
+#: common/fbus-6110.c:3810 common/fbus-6110.c:3829 common/fbus-6110.c:3849
+#: gnokii/gnokii.c:1913
+msgid "currently empty\n"
+msgstr ""
+
+#: common/fbus-6110.c:3822
+msgid "Startup Text supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3825 common/fbus-6110.c:3845
+msgid "currently set to \""
+msgstr ""
+
+#: common/fbus-6110.c:3826 common/fbus-6110.c:3846
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: common/fbus-6110.c:3827 common/fbus-6110.c:3847
+msgid "\"\n"
+msgstr ""
+
+#: common/fbus-6110.c:3842
+msgid "Dealer Welcome supported - "
+msgstr ""
+
+#: common/fbus-6110.c:3862
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3872
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3898
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3907
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3930
+#, c-format
+msgid "Message: Operator Logo for %s (%s) network received.\n"
+msgstr ""
+
+#: common/fbus-6110.c:3948
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3957
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: common/fbus-6110.c:3975
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: common/fbus-6110.c:3981 gnokii/gnokii.c:1659
+msgid "waiting for Security Code.\n"
+msgstr "fornire il Codice di Sicurezza.\n"
+
+#: common/fbus-6110.c:3986 gnokii/gnokii.c:1664
+msgid "waiting for PIN.\n"
+msgstr "fornire il PIN.\n"
+
+#: common/fbus-6110.c:3991 gnokii/gnokii.c:1669
+msgid "waiting for PIN2.\n"
+msgstr "fornire il PIN2.\n"
+
+#: common/fbus-6110.c:3996 gnokii/gnokii.c:1674
+msgid "waiting for PUK.\n"
+msgstr "fornire il PUK.\n"
+
+#: common/fbus-6110.c:4001 gnokii/gnokii.c:1679
+msgid "waiting for PUK2.\n"
+msgstr "fornire il PUK2.\n"
+
+#: common/fbus-6110.c:4006 gnokii/gnokii.c:1684
+msgid "nothing to enter.\n"
+msgstr "nothing to enter.\n"
+
+#: common/fbus-6110.c:4011 gnokii/gnokii.c:1689
+msgid "Unknown!\n"
+msgstr "Sconosciuto!\n"
+
+#: common/fbus-6110.c:4023
+msgid "Message: Security code accepted.\n"
+msgstr "Messaggio: Codice di Sicurezza valido.\n"
+
+#: common/fbus-6110.c:4033
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+"Messaggio: Codice di Sicurezza errato. Non sei il mio proprietario :-)\n"
+
+#: common/fbus-6110.c:4060
+msgid "Message: Network informations:\n"
+msgstr "Messaggio: Informazioni sulla rete:\n"
+
+#: common/fbus-6110.c:4062
+#, c-format
+msgid " CellID: %s\n"
+msgstr " CellID: %s\n"
+
+#: common/fbus-6110.c:4063
+#, c-format
+msgid " LAC: %s\n"
+msgstr " LAC: %s\n"
+
+#: common/fbus-6110.c:4064
+#, c-format
+msgid " Network code: %s\n"
+msgstr " Codice della rete : %s\n"
+
+#: common/fbus-6110.c:4065
+#, c-format
+msgid " Network name: %s (%s)\n"
+msgstr " Nome della rete : %s (%s)\n"
+
+#: common/fbus-6110.c:4068
+msgid " Status: "
+msgstr " Stato : "
+
+#: common/fbus-6110.c:4071
+msgid "home network selected"
+msgstr "selezionata rete locale"
+
+#: common/fbus-6110.c:4072
+msgid "roaming network"
+msgstr "rete in roaming"
+
+#: common/fbus-6110.c:4073
+msgid "requesting network"
+msgstr "richiesta rete"
+
+#: common/fbus-6110.c:4074
+msgid "not registered in the network"
+msgstr "non registrato nella rete"
+
+#: common/fbus-6110.c:4075 xgnokii/xgnokii_lowlevel.c:116
+#: xgnokii/xgnokii_lowlevel.c:191 xgnokii/xgnokii_lowlevel.c:193
+#: xgnokii/xgnokii_lowlevel.c:194
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: common/fbus-6110.c:4080
+#, c-format
+msgid " Network selection: %s\n"
+msgstr " Selezione rete : %s\n"
+
+#: common/fbus-6110.c:4080
+msgid "manual"
+msgstr "manuale"
+
+#: common/fbus-6110.c:4080
+msgid "automatic"
+msgstr "automatica"
+
+#: common/fbus-6110.c:4090
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: common/fbus-6110.c:4125 gnokii/gnokii.c:3048
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Chiamata in corso: %s\n"
+
+#: common/fbus-6110.c:4126 gnokii/gnokii.c:3049
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Sconosciuto: %s\n"
+
+#: common/fbus-6110.c:4127 gnokii/gnokii.c:3050
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "SMS Non letti: %s\n"
+
+#: common/fbus-6110.c:4128 gnokii/gnokii.c:3051
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Chiamata vocale: %s\n"
+
+#: common/fbus-6110.c:4129 gnokii/gnokii.c:3052
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Chiamata fax attiva: %s\n"
+
+#: common/fbus-6110.c:4130 gnokii/gnokii.c:3053
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Chiamata dati in corso: %s\n"
+
+#: common/fbus-6110.c:4131 gnokii/gnokii.c:3054
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Tastiera bloccata: %s\n"
+
+#: common/fbus-6110.c:4132 gnokii/gnokii.c:3055
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Memoria SMS piena: %s\n"
+
+#: common/fbus-6110.c:4145
+msgid "Display output successfully disabled/enabled.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4155
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4174
+msgid "Message: Date and time set correctly\n"
+msgstr "Avviso: Date eed ora impostate correttamente\n"
+
+#: common/fbus-6110.c:4184 common/fbus-6110.c:4230
+msgid "Message: Date and time set error\n"
+msgstr "Avviso: Errore nell'impostazione di data e ora\n"
+
+#: common/fbus-6110.c:4204
+msgid "Message: Date and time\n"
+msgstr "Avviso: Data ed ora\n"
+
+#: common/fbus-6110.c:4205 common/fbus-6110.c:4358 gnokii/gnokii.c:2276
+#, c-format
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Ora: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4206
+#, c-format
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Data: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:4220
+msgid "Message: Alarm set correctly\n"
+msgstr "Avviso: Sveglia impostata regolarmente\n"
+
+#: common/fbus-6110.c:4242
+msgid "Message: Alarm\n"
+msgstr "Avviso: Allarme\n"
+
+#: common/fbus-6110.c:4243
+#, c-format
+msgid " Alarm: %02d:%02d\n"
+msgstr " Sveglia: %02d:%02d\n"
+
+#: common/fbus-6110.c:4244
+#, c-format
+msgid " Alarm is %s\n"
+msgstr " La sveglia è %s\n"
+
+#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049
+#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052
+#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055
+msgid "on"
+msgstr "on"
+
+#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049
+#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052
+#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055
+msgid "off"
+msgstr "off"
+
+#: common/fbus-6110.c:4260
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Avviso: Informazione sconosciuta tipo 0x11\n"
+
+#: common/fbus-6110.c:4283
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Avviso: Nota in agenda salvata correttamente!\n"
+
+#: common/fbus-6110.c:4293 common/fbus-6110.c:4303
+msgid "Message: Calendar note write failed!\n"
+msgstr "Avviso: Impossibile salvare la nota nell'agenda!\n"
+
+#: common/fbus-6110.c:4312
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: common/fbus-6110.c:4352
+msgid "Message: Calendar note received.\n"
+msgstr "Avviso: Ricevuta nota in agenda.\n"
+
+#: common/fbus-6110.c:4354 gnokii/gnokii.c:2272
+#, c-format
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Data: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4365 gnokii/gnokii.c:2281
+#, c-format
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Data allarme: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:4369 gnokii/gnokii.c:2285
+#, c-format
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Ora allarme: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:4374
+#, c-format
+msgid " Type: %d\n"
+msgstr " Tipo: %d\n"
+
+#: common/fbus-6110.c:4375 gnokii/gnokii.c:2290
+#, c-format
+msgid " Text: %s\n"
+msgstr " Testo: %s\n"
+
+#: common/fbus-6110.c:4378 gnokii/gnokii.c:2293
+#, c-format
+msgid " Phone: %s\n"
+msgstr " Telefono: %s\n"
+
+#: common/fbus-6110.c:4388
+msgid "Message: Calendar note not available\n"
+msgstr "Avviso: Nessuna nota diponibile nell'agenda\n"
+
+#: common/fbus-6110.c:4398
+msgid "Message: Calendar note error\n"
+msgstr "Avviso: Errore nell' agenda\n"
+
+#: common/fbus-6110.c:4420
+msgid "Message: Calendar note deleted\n"
+msgstr "Avviso: Nota in agenda eliminata\n"
+
+#: common/fbus-6110.c:4431
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Avviso: Non è possibile eliminare ;a nota in agenda\n"
+
+#: common/fbus-6110.c:4441
+msgid "Message: Calendar note deleting error\n"
+msgstr "Avviso: Errore eliminando la nota in agenda\n"
+
+#: common/fbus-6110.c:4457
+msgid "Message: Calendar Alarm active\n"
+msgstr "Avviso: Allarme in agenda attivo\n"
+
+#: common/fbus-6110.c:4458
+#, c-format
+msgid " Item number: %d\n"
+msgstr " Numero elemento: %d\n"
+
+#: common/fbus-6110.c:4466
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: common/fbus-6110.c:4529
+msgid "Concatenated message!!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:4560
+#, c-format
+msgid "Number: %d\n"
+msgstr "Numero: %d\n"
+
+#: common/fbus-6110.c:4565
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4568
+msgid "Sent\n"
+msgstr ""
+
+#: common/fbus-6110.c:4570
+msgid "Not sent\n"
+msgstr ""
+
+#: common/fbus-6110.c:4574
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: common/fbus-6110.c:4577
+msgid "Delivery Report\n"
+msgstr ""
+
+#: common/fbus-6110.c:4579
+msgid "Unknown type\n"
+msgstr ""
+
+#: common/fbus-6110.c:4582
+msgid "Read\n"
+msgstr ""
+
+#: common/fbus-6110.c:4584
+msgid "Not read\n"
+msgstr ""
+
+#: common/fbus-6110.c:4586
+#, c-format
+msgid " Date: %s "
+msgstr ""
+
+#: common/fbus-6110.c:4594 common/fbus-6110.c:4610 gnokii/gnokii.c:1352
+#: gnokii/gnokii.c:1365 gnokii/gnokii.c:1392
+#, c-format
+msgid "%02d00"
+msgstr ""
+
+#: common/fbus-6110.c:4601
+#, c-format
+msgid " SMSC response date: %s "
+msgstr ""
+
+#: common/fbus-6110.c:4686
+msgid "Delivered"
+msgstr ""
+
+#: common/fbus-6110.c:4691
+msgid "SM received by the SME"
+msgstr ""
+
+#: common/fbus-6110.c:4694
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: common/fbus-6110.c:4697
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: common/fbus-6110.c:4705
+msgid "Failed"
+msgstr ""
+
+#: common/fbus-6110.c:4712
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4717 common/fbus-6110.c:4810
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4721 common/fbus-6110.c:4814
+msgid "SME busy"
+msgstr ""
+
+#: common/fbus-6110.c:4725 common/fbus-6110.c:4818
+msgid "No response from SME"
+msgstr ""
+
+#: common/fbus-6110.c:4729 common/fbus-6110.c:4822
+msgid "Service rejected"
+msgstr ""
+
+#: common/fbus-6110.c:4733 common/fbus-6110.c:4769 common/fbus-6110.c:4826
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: common/fbus-6110.c:4737 common/fbus-6110.c:4830
+msgid "Error in SME"
+msgstr ""
+
+#: common/fbus-6110.c:4741 common/fbus-6110.c:4793 common/fbus-6110.c:4834
+#: common/fbus-6110.c:4844
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: common/fbus-6110.c:4748
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: common/fbus-6110.c:4753
+msgid "Remote procedure error"
+msgstr ""
+
+#: common/fbus-6110.c:4757
+msgid "Incompatibile destination"
+msgstr ""
+
+#: common/fbus-6110.c:4761
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: common/fbus-6110.c:4765
+msgid "Not obtainable"
+msgstr ""
+
+#: common/fbus-6110.c:4773
+msgid "No internetworking available"
+msgstr ""
+
+#: common/fbus-6110.c:4777
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: common/fbus-6110.c:4781
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: common/fbus-6110.c:4785
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: common/fbus-6110.c:4789
+msgid "SM does not exist"
+msgstr ""
+
+#: common/fbus-6110.c:4802
+msgid "Pending"
+msgstr ""
+
+#: common/fbus-6110.c:4806
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: common/fbus-6110.c:4868
+#, c-format
+msgid "Message stored at %d\n"
+msgstr "Messaggio memorizzato in %d\n"
+
+#: common/fbus-6110.c:4873
+msgid "SMS saving failed\n"
+msgstr "Salvataggio SMS fallito\n"
+
+#: common/fbus-6110.c:4876
+msgid " All locations busy.\n"
+msgstr " Tutte le memorie sono occupate.\n"
+
+#: common/fbus-6110.c:4880 common/fbus-6110.c:4903
+msgid " Invalid location!\n"
+msgstr " Indirizzo memoria non corretto!\n"
+
+#: common/fbus-6110.c:4884
+msgid " Unknown error.\n"
+msgstr " Errore indeterminato.\n"
+
+#: common/fbus-6110.c:4895
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4913
+msgid " Empty SMS location.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4926
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4936
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: common/fbus-6110.c:4937
+#, c-format
+msgid " The number of messages: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4938
+#, c-format
+msgid " Unread messages: %d\n"
+msgstr ""
+
+#: common/fbus-6110.c:4950
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: common/fbus-6110.c:4981
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: common/fbus-6110.c:4991
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:5007
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5029
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: common/fbus-6110.c:5030
+#, c-format
+msgid " IMEI: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5032
+#, c-format
+msgid " Model: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5034
+#, c-format
+msgid " Production Code: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5036
+#, c-format
+msgid " HW: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5038
+#, c-format
+msgid " Firmware: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5044
+#, c-format
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5064
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: common/fbus-6110.c:5082
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5106
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5122
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: common/fbus-6110.c:5242
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5243
+msgid "Please report it ...\n"
+msgstr ""
+
+#: common/fbus-6110.c:5310
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: common/fbus-6110.c:5382 xgnokii/xgnokii.c:1759
+msgid "Phone"
+msgstr "Telefono"
+
+#: common/fbus-6110.c:5385
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:5403
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Msg Dest: %s\n"
+
+#: common/fbus-6110.c:5404
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: common/fbus-6110.c:5406
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5408
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr ""
+
+#: common/fbus-6110.c:5409
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: common/fbus-6110.c:5480
+msgid "PC: "
+msgstr ""
+
+#: common/fbus-6110.c:5554
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: common/mbus-6160.c:551
+msgid "Standard Ack write (0x40) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:577
+msgid "Standard Ack write (0xd2) failed!"
+msgstr ""
+
+#: common/mbus-6160.c:1022
+msgid "Couldn't open MB61 device: "
+msgstr "Impossibile aprire il dispositivo MB61: "
+
+#: common/mbus-640.c:667
+msgid "Phone: "
+msgstr "Telefono: "
+
+#: common/mbus-640.c:697 common/mbus-640.c:797
+msgid "PC : "
+msgstr "PC : "
+
+#: common/mbus-640.c:707 common/mbus-640.c:810
+msgid "Write error!\n"
+msgstr "Errore in scrittura!\n"
+
+#: common/mbus-640.c:734
+msgid "Setting MBUS communication...\n"
+msgstr ""
+
+#: common/rlp-common.c:705
+msgid "Unknown!!! "
+msgstr "Sconosciuto!!! "
+
+#: common/rlp-common.c:770
+msgid "BAD"
+msgstr ""
+
+#: common/rlp-common.c:892
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: common/rlp-common.c:1007
+msgid "Send_TXU()\n"
+msgstr ""
+
+#: common/rlp-common.c:1008
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr ""
+
+#: common/rlp-common.c:1380
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: common/rlp-common.c:1417
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: common/rlp-common.c:1465
+msgid "RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1499
+msgid "UA received in RLP state 2.\n"
+msgstr ""
+
+#: common/rlp-common.c:1556
+msgid "RLP state 3.\n"
+msgstr ""
+
+#: common/rlp-common.c:1614
+msgid "RLP state 4.\n"
+msgstr ""
+
+#: common/rlp-common.c:1753
+msgid "RLP state 5.\n"
+msgstr ""
+
+#: common/rlp-common.c:1812
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr ""
+
+#: common/rlp-common.c:1843
+msgid "RLP state 7.\n"
+msgstr ""
+
+#: common/rlp-common.c:1885
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:206
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"gnokii is free software, covered by the GNU General Public License, and you "
+"are\n"
+"welcome to change it and/or distribute copies of it under certain "
+"conditions.\n"
+"There is absolutely no warranty for gnokii. See GPL for details.\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII Versione %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"gnokii è free software, rilasciato sotto la GNU General Public License, e "
+"potete\n"
+"apportare modifiche e/o distribuire le copie rispettandone le condizioni.\n"
+"Non esiste nessuna garanzia per gnokii. Vedere la GPL per i dettagli.\n"
+"Compilato %s %s per %s su %s \n"
+
+#: gnokii/gnokii.c:223
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start [end]\n"
+" gnokii --writephonebook [-i]\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start [end] [-f file] [-d]\n"
+" gnokii --deletesms memory_type start [end]\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --savesms [-m] [-l n] [-i]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote vcardfile number\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} destination logofile [network code]\n"
+" gnokii --sendringtone destination rtttlfile\n"
+" gnokii --setlogo op [logofile] [network code]\n"
+" gnokii --setlogo startup [logofile]\n"
+" gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+" gnokii --setlogo {dealer|text} [text]\n"
+" gnokii --getlogo op [logofile] [network code]\n"
+" gnokii --getlogo startup [logofile] [network code]\n"
+" gnokii --getlogo caller [logofile][caller group number][network "
+"code]\n"
+" gnokii --getlogo {dealer|text}\n"
+" gnokii --setringtone rtttlfile\n"
+" gnokii --reset [soft|hard]\n"
+" gnokii --getprofile [number]\n"
+" gnokii --displayoutput\n"
+" gnokii --keysequence\n"
+msgstr ""
+" utilizzo: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory tipo_memoria inizio [fine]\n"
+" gnokii --writephonebook [-i]\n"
+" gnokii --getspeeddial numero\n"
+" gnokii --setspeeddial numero tipo_memoria locazione\n"
+" gnokii --getsms tipo_memoria inizio [fine] [-f file] -d\n"
+" gnokii --deletesms tipo_memoria inizio [fine]\n"
+" gnokii --sendsms destinazione [--smsc numero_centro_messaggi |\n"
+" --smscno indice_centro_messaggi] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --savesms [-m] [-l n] [-i]\n"
+" gnokii --getsmsc numero_centro_messaggi\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice numero\n"
+" gnokii --getcalendarnote indice [-v]\n"
+" gnokii --writecalendarnote vcardfile numero\n"
+" gnokii --deletecalendarnote indice\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf stringa\n"
+" gnokii --sendlogo {caller|op} destinazione logofile [network "
+"code]\n"
+" gnokii --sendringtone destinazione rtttlfile\n"
+" gnokii --setlogo op [logofile] [network code]\n"
+" gnokii --setlogo startup [logofile]\n"
+" gnokii --setlogo caller [logofile] [caller group number] [group "
+"name]\n"
+" gnokii --setlogo {dealer|text} [text]\n"
+" gnokii --getlogo op [logofile] [network code]\n"
+" gnokii --getlogo startup [logofile] [network code]\n"
+" gnokii --getlogo caller [logofile][caller group number][network "
+"code]\n"
+" gnokii --getlogo {dealer|text}\n"
+" gnokii --setringtone rtttlfile\n"
+" gnokii --reset [soft|hard]\n"
+" gnokii --getprofile [number]\n"
+" gnokii --displayoutput\n"
+" gnokii --keysequence\n"
+
+#: gnokii/gnokii.c:266
+msgid ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+msgstr ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+
+#: common/virtmodem.c:292 gnokii/gnokii.c:293 gnokii/gnokii.c:3187
+#: xgnokii/xgnokii_lowlevel.c:171
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr ""
+"Inizializzazione GSM/FBUS fallita! (Modello non supportato ?). Uscita.\n"
+
+#: gnokii/gnokii.c:304
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n"
+
+#: gnokii/gnokii.c:580
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Usare '%s --help' per informazioni .\n"
+
+#: gnokii/gnokii.c:778
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Opzione sconosciuta: %d\n"
+
+#: gnokii/gnokii.c:788
+msgid "Wrong number of arguments\n"
+msgstr "Numero di argomenti non valido\n"
+
+#: gnokii/gnokii.c:859 gnokii/gnokii.c:917 gnokii/gnokii.c:1076
+msgid "Input too long!\n"
+msgstr "Input too long!\n"
+
+#: gnokii/gnokii.c:912 gnokii/gnokii.c:1071
+msgid "Couldn't read from stdin!\n"
+msgstr "Impossibile leggere da stdin!\n"
+
+#: gnokii/gnokii.c:1046
+msgid "Message at specified location exists. "
+msgstr ""
+
+#: gnokii/gnokii.c:1048 gnokii/gnokii.c:1421 gnokii/gnokii.c:2948
+msgid "Overwrite? (yes/no) "
+msgstr "Sovrascrivo (si/no) "
+
+#: gnokii/gnokii.c:1056
+msgid "Invalid location\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1062
+#, c-format
+msgid "Location %d empty. Saving\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1087
+msgid "Saved!\n"
+msgstr "Salvato!\n"
+
+#: gnokii/gnokii.c:1089
+#, c-format
+msgid "Saving failed (error=%d)\n"
+msgstr "Salvataggio non riuscito (errore=%d)\n"
+
+#: gnokii/gnokii.c:1110
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d centro SMS (%s) ha numero %s\n"
+
+#: gnokii/gnokii.c:1112
+msgid "Messages sent as "
+msgstr "Invia messaggi come "
+
+#: gnokii/gnokii.c:1134 xgnokii/xgnokii.c:563
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1138 xgnokii/xgnokii.c:567
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1147
+msgid "Message validity is "
+msgstr "La validità del messaggio è "
+
+#: gnokii/gnokii.c:1183
+msgid "SMS center can not be found :-(\n"
+msgstr "Centro SMS non trovato :-(\n"
+
+#: gnokii/gnokii.c:1256 gnokii/gnokii.c:2805 gnokii/gnokii.c:3016
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Tipo di memoria %s sconosciuta!\n"
+
+#: gnokii/gnokii.c:1283
+#, c-format
+msgid "Saving into %s\n"
+msgstr "Salva in %s\n"
+
+#: gnokii/gnokii.c:1287
+msgid "Filename too long - will be truncated to 63 charactera.\n"
+msgstr "Nome del file troppo lungo - sarà troncato a 63 caratteri.\n"
+
+#: gnokii/gnokii.c:1325
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Messaggi in Uscita "
+
+#: gnokii/gnokii.c:1328
+msgid "(sent)\n"
+msgstr "(inviato)\n"
+
+#: gnokii/gnokii.c:1330
+msgid "(not sent)\n"
+msgstr "(non inviato)\n"
+
+#: gnokii/gnokii.c:1332 gnokii/gnokii.c:1371
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Testo: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1338
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Rapporto di Invio "
+
+#: gnokii/gnokii.c:1340 gnokii/gnokii.c:1380
+msgid "(read)\n"
+msgstr "(letto)\n"
+
+#: gnokii/gnokii.c:1342 gnokii/gnokii.c:1382
+msgid "(not read)\n"
+msgstr "(non letto)\n"
+
+#: gnokii/gnokii.c:1344
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Invio data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1350 gnokii/gnokii.c:1363 gnokii/gnokii.c:1390
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1357
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Risposta data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1370
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Ricevente: %s Centro Msg: %s\n"
+
+#: gnokii/gnokii.c:1377
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Messaggi Ricevuti "
+
+#: gnokii/gnokii.c:1384
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data/ora: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1396
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1402
+#, c-format
+msgid "GSM operator logo for %s (%s) network.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1404
+msgid "Saved by Logo Express\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1405
+msgid "Saved by Operator Logo Uploader by Thomas Kessler\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1420
+#, c-format
+msgid "File %s exists.\n"
+msgstr "Il file %s esiste.\n"
+
+#: gnokii/gnokii.c:1427
+#, c-format
+msgid "Couldn't save logofile %s!\n"
+msgstr "Impossibile salvare il file dei loghi %s!\n"
+
+#: gnokii/gnokii.c:1435
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Collegato (%d/%d):\n"
+
+#: gnokii/gnokii.c:1437
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1442 gnokii/gnokii.c:2268
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1449
+msgid "(delete failed)\n"
+msgstr "(eliminazione fallita\n"
+
+#: gnokii/gnokii.c:1451
+msgid "(message deleted)\n"
+msgstr "(messaggio eliminato)\n"
+
+#: gnokii/gnokii.c:1457 gnokii/gnokii.c:1569 gnokii/gnokii.c:1635
+#: gnokii/gnokii.c:2723 gnokii/gnokii.c:2833
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funzione non implementata per il modello %s!\n"
+
+#: gnokii/gnokii.c:1463
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Locazione non valida: %s %d\n"
+
+#: gnokii/gnokii.c:1469
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "La memoria SMS %s %d è vuota.\n"
+
+#: gnokii/gnokii.c:1475
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d fallita!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1545
+#, c-format
+msgid "Unknown memory type %s (use ME,SM,....)!\n"
+msgstr "Tipo di memoria %s sconosciuta (usare ME,SM,...)!\n"
+
+#: gnokii/gnokii.c:1566
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d eliminato\n"
+
+#: gnokii/gnokii.c:1573
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"DeleteSMS %s %d fallito!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1624
+msgid "Enter your code: "
+msgstr "Digitate il vostro codice: "
+
+#: gnokii/gnokii.c:1631
+msgid "Error: invalid code.\n"
+msgstr "Errore: codice errato.\n"
+
+#: gnokii/gnokii.c:1633
+msgid "Code ok.\n"
+msgstr "Codice ok.\n"
+
+#: gnokii/gnokii.c:1637
+msgid "Other error.\n"
+msgstr "Altro errore.\n"
+
+#: gnokii/gnokii.c:1653
+msgid "Security code status: "
+msgstr "Stato del codice di sicurezza: "
+
+#: gnokii/gnokii.c:1755
+msgid "Sending operator logo.\n"
+msgstr "Invio logo operatore.\n"
+
+#: gnokii/gnokii.c:1759
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1761
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1780
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Codice operatore: %s\n"
+
+#: gnokii/gnokii.c:1829
+#, c-format
+msgid "Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "
+msgstr ""
+
+#: gnokii/gnokii.c:1837
+msgid "Enter name of new file: "
+msgstr ""
+
+#: gnokii/gnokii.c:1847
+#, c-format
+msgid "Failed to write file \"%s\"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1898
+msgid "Getting Logo\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1905
+msgid "Dealer welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:1906
+msgid "Welcome note "
+msgstr ""
+
+#: gnokii/gnokii.c:1911
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1969
+msgid "Function not implemented !\n"
+msgstr "Funzione non implementata ! \n"
+
+#: gnokii/gnokii.c:1972
+msgid "This kind of logo is not supported !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1975
+msgid "Error getting logo !\n"
+msgstr "Errore ricevendo il logo !\n"
+
+#: gnokii/gnokii.c:1981
+msgid "What kind of logo do you want to get ?\n"
+msgstr "Quale tipo di logo wolete avere ?\n"
+
+#: gnokii/gnokii.c:1998
+#, c-format
+msgid "Failed to read file \"%s\"\n"
+msgstr "Impossibile leggere il file \"%s\"\n"
+
+#: gnokii/gnokii.c:2000
+#, c-format
+msgid ""
+"Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2002
+#, c-format
+msgid "Wrong colors in \"%s\" logofile !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2004
+#, c-format
+msgid "Invalid format of \"%s\" logofile !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2006
+#, c-format
+msgid "Sorry, gnokii doesn't support used subformat in file \"%s\" !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2008
+#, c-format
+msgid "\"%s\" logofile is too short !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2010
+msgid ""
+"Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 "
+"and 72x28 !\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2090
+msgid "Setting Logo.\n"
+msgstr "Impostazione Logo.\n"
+
+#: gnokii/gnokii.c:2104
+msgid "Removing Logo.\n"
+msgstr "Rimozione logo.\n"
+
+#: gnokii/gnokii.c:2108
+msgid "What kind of logo do you want to set ?\n"
+msgstr "Quale tipo di logo volete impostare ?\n"
+
+#: gnokii/gnokii.c:2124
+msgid "Error setting"
+msgstr "Errore di settaggio"
+
+#: gnokii/gnokii.c:2125
+msgid " dealer"
+msgstr ""
+
+#: gnokii/gnokii.c:2126
+msgid " welcome note - "
+msgstr ""
+
+#: gnokii/gnokii.c:2144
+msgid "SIM card and PIN is required\n"
+msgstr "Necessari la SIM card ed il PIN\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "too long, truncated to \"%s\" (length %i)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2156
+msgid "Error setting startup logo - SIM card and PIN is required\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2164
+msgid "Done.\n"
+msgstr "Eseguito.\n"
+
+#: gnokii/gnokii.c:2166
+msgid "Function not implemented.\n"
+msgstr "Funzione non implementata.\n"
+
+#: gnokii/gnokii.c:2168
+msgid "This kind of logo is not supported.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2170
+msgid "Error !\n"
+msgstr "Errore !\n"
+
+#: gnokii/gnokii.c:2247
+msgid " Type of the note: "
+msgstr " Tipo di annotazione: "
+
+#: gnokii/gnokii.c:2252
+msgid "Reminder\n"
+msgstr "Promemoria\n"
+
+#: gnokii/gnokii.c:2256
+msgid "Call\n"
+msgstr "Chiamata\n"
+
+#: gnokii/gnokii.c:2260
+msgid "Meeting\n"
+msgstr "Riunione\n"
+
+#: gnokii/gnokii.c:2264
+msgid "Birthday\n"
+msgstr "Compleanno\n"
+
+#: gnokii/gnokii.c:2297
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2315
+msgid "Failed to load vCalendar file.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2323 gnokii/gnokii.c:3027
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2325
+msgid "Failed to write calendar note!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2344
+msgid " Calendar note deleted.\n"
+msgstr " Nota eliminata dal calendario.\n"
+
+#: gnokii/gnokii.c:2347
+msgid "The calendar note can not be deleted\n"
+msgstr "La nota non può essere eliminata dal calendrio\n"
+
+#: gnokii/gnokii.c:2416
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Data: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2417
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Ora: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2453
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Sveglia: %s\n"
+
+#: gnokii/gnokii.c:2454
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Ora: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2496
+msgid "Entering monitor mode...\n"
+msgstr "Avvio della modalità monitor...\n"
+
+#: gnokii/gnokii.c:2497
+msgid "Initialising GSM interface...\n"
+msgstr "Inizializzazione interfaccia GSM...\n"
+
+#: gnokii/gnokii.c:2511
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Livello RF : %d\n"
+
+#: gnokii/gnokii.c:2514
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batteria: %d\n"
+
+#: gnokii/gnokii.c:2517
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Alimentazione: %s\n"
+
+#: gnokii/gnokii.c:2517
+msgid "AC/DC"
+msgstr "AC/DC"
+
+#: gnokii/gnokii.c:2517
+msgid "battery"
+msgstr "batteria"
+
+#: gnokii/gnokii.c:2520
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "Carta SIM: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2523
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefono: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2529
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2532
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2535
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2538
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2541
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2544
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: In uso %d, Libera %d\n"
+
+#: gnokii/gnokii.c:2547
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Messaggi SMS: Non letti %d, Numero %d\n"
+
+#: gnokii/gnokii.c:2550
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Chiamata in arrivo: %s\n"
+
+#: gnokii/gnokii.c:2553
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Rete : %s (%s), LAC: %s, CellID: %s\n"
+
+#: gnokii/gnokii.c:2556
+#, c-format
+msgid "Cell broadcast received on channel %d: %s\n"
+msgstr "Informazioni microcella ricevute sul canale %d: %s\n"
+
+#: gnokii/gnokii.c:2561
+msgid "Leaving monitor mode...\n"
+msgstr "Chiusura modalità monitor...\n"
+
+#: gnokii/gnokii.c:2586
+msgid "Entering display monitoring mode...\n"
+msgstr "Avvio della modalità monitor...\n"
+
+#: gnokii/gnokii.c:2594
+msgid "Leaving display monitor mode...\n"
+msgstr "Chiusura modalità monitor...\n"
+
+#: gnokii/gnokii.c:2598 gnokii/gnokii.c:2600
+msgid "Error!\n"
+msgstr "Errore!\n"
+
+#: gnokii/gnokii.c:2649
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr "Il valore del profilo è compreso fra 1 e %d!\n"
+
+#: gnokii/gnokii.c:2656
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "Questo telefono consente solo %d profili!\n"
+
+#: gnokii/gnokii.c:2728
+msgid "Unspecified error\n"
+msgstr "Errore sconosciuto\n"
+
+#: gnokii/gnokii.c:2838
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "La memoria tipo %s non è supportata!\n"
+
+#: gnokii/gnokii.c:2843
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2902 gnokii/gnokii.c:2917 gnokii/gnokii.c:2935
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Problema di formato nella linea %d [%s]\n"
+
+#: gnokii/gnokii.c:2946
+msgid "Location busy. "
+msgstr "Locazione impegnata. "
+
+#: gnokii/gnokii.c:2956
+#, c-format
+msgid "Unknown error (%d)\n"
+msgstr "Errore indeterminato (%d)\n"
+
+#: gnokii/gnokii.c:2967
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2969
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2989
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3108
+#, c-format
+msgid "IMEI: %s\n"
+msgstr "IMEI: %s\n"
+
+#: gnokii/gnokii.c:3109
+#, c-format
+msgid "Model: %s\n"
+msgstr "Modello: %s\n"
+
+#: gnokii/gnokii.c:3110
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Versione: %s\n"
+
+#: gnokii/gnokii.c:3142
+msgid "What kind of reset do you want??\n"
+msgstr "Quale tipo di reset volete??\n"
+
+#: gnokii/gnokii.c:3205 gnokii/gnokii.c:3231
+msgid "Failed to load ringtone.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:3244
+msgid "Send failed\n"
+msgstr "Invio fallito\n"
+
+#: gnokii/gnokii.c:3271
+msgid "Key press simulation failed.\n"
+msgstr ""
+
+#: gnokiid/gnokiid.c:56
+#, c-format
+msgid ""
+"gnokiid Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"gnokiid Versione %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999\n"
+"Compilato %s %s per %s su %s \n"
+
+#: gnokiid/gnokiid.c:68
+msgid ""
+" usage: gnokiid {--help|--version}\n"
+" --help display usage information. --version "
+" displays version and copyright information. --debug "
+"uses stdin/stdout for virtual modem comms.\n"
+msgstr ""
+" uso: gnokiid {--help|--version}\n"
+" --help mostra le informazioni per l'uso. --version "
+" mostra il copyright e la versione. --debug "
+"utilizza stdin/stdout per comunicare con il modem virtuale.\n"
+
+#: common/virtmodem.c:119
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:126
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:131
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:136
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: common/virtmodem.c:229
+msgid "Couldn't open pty!\n"
+msgstr "Impossibile aprire pty!\n"
+
+#: common/virtmodem.c:237
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: common/virtmodem.c:242
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: common/virtmodem.c:304
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n"
+
+#: xgnokii/xgnokii.c:214
+msgid "Reading caller groups names ..."
+msgstr "Lettura nomi dei gruppi ..."
+
+#: xgnokii/xgnokii.c:218 xgnokii/xgnokii.c:1045
+msgid "Familly"
+msgstr "Famiglia"
+
+#: xgnokii/xgnokii.c:219 xgnokii/xgnokii.c:1057
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:220 xgnokii/xgnokii.c:1069
+msgid "Friends"
+msgstr "Amici"
+
+#: xgnokii/xgnokii.c:221 xgnokii/xgnokii.c:1081
+msgid "Colleagues"
+msgstr "Colleghi"
+
+#: xgnokii/xgnokii.c:222 xgnokii/xgnokii.c:1093
+msgid "Other"
+msgstr "Altro"
+
+#: xgnokii/xgnokii.c:223
+msgid "No group"
+msgstr "Nessuno"
+
+#: xgnokii/xgnokii.c:348
+msgid "Short Message received"
+msgstr "Breve Messaggio ricevuto"
+
+#: xgnokii/xgnokii.c:354
+msgid "Working ..."
+msgstr "In funzione..."
+
+#: xgnokii/xgnokii.c:371
+msgid "Call in progress"
+msgstr "Chiamata in corso"
+
+#: xgnokii/xgnokii.c:384
+msgid "Hide"
+msgstr "Nascondi"
+
+#: xgnokii/xgnokii.c:481
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Chiamata in corso:\n"
+"Durata: %s"
+
+#: xgnokii/xgnokii.c:484
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Chiamata provenente da: %s\n"
+"Durata: %s"
+
+#: xgnokii/xgnokii.c:537 xgnokii/xgnokii_sms.c:687
+#, c-format
+msgid "Set %d"
+msgstr "Set %d"
+
+#: xgnokii/xgnokii.c:559 xgnokii/xgnokii.c:1466
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:571
+msgid "Voice"
+msgstr "Voce"
+
+#: xgnokii/xgnokii.c:582 xgnokii/xgnokii.c:1496
+msgid "1 h"
+msgstr "1 h"
+
+#: xgnokii/xgnokii.c:586 xgnokii/xgnokii.c:1503
+msgid "6 h"
+msgstr "6 h"
+
+#: xgnokii/xgnokii.c:590 xgnokii/xgnokii.c:606 xgnokii/xgnokii.c:1510
+msgid "24 h"
+msgstr "24 h"
+
+#: xgnokii/xgnokii.c:594 xgnokii/xgnokii.c:1517
+msgid "72 h"
+msgstr "72 h"
+
+#: xgnokii/xgnokii.c:602
+msgid "Max. time"
+msgstr "Tempo massimo"
+
+#: xgnokii/xgnokii.c:649
+msgid "Reading SMS centers ..."
+msgstr "Lettura del centro SMS ..."
+
+#: xgnokii/xgnokii.c:910
+#,
+msgid "SMS not supported!"
+msgstr "SMS non supportato!"
+
+#: xgnokii/xgnokii.c:918
+msgid "Calendar not supported!"
+msgstr "Calendario non supportato!"
+
+#: xgnokii/xgnokii.c:1106
+msgid "Error writing configuration file!"
+msgstr "Errore scrivendo il file di configurazione!"
+
+#: xgnokii/xgnokii.c:1118 xgnokii/xgnokii_contacts.c:3025
+msgid "Contacts"
+msgstr "Rubrica"
+
+#: xgnokii/xgnokii.c:1124 xgnokii/xgnokii.c:1902
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1129 xgnokii/xgnokii_calendar.c:867
+msgid "Calendar"
+msgstr "Agenda"
+
+#: xgnokii/xgnokii.c:1134 xgnokii/xgnokii_logos.c:1339
+msgid "Logos"
+msgstr "Loghi"
+
+#: xgnokii/xgnokii.c:1140
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1145 xgnokii/xgnokii_speed.c:559
+msgid "Speed Dial"
+msgstr "Chiamata rapida"
+
+#: xgnokii/xgnokii.c:1150
+msgid "Keyboard"
+msgstr "Tastiera"
+
+#: xgnokii/xgnokii.c:1155 xgnokii/xgnokii_netmon.c:317
+msgid "Net Monitor"
+msgstr "Net Monitor"
+
+#: xgnokii/xgnokii.c:1160
+msgid "Data calls"
+msgstr "Chiamata dati"
+
+#: xgnokii/xgnokii.c:1169 xgnokii/xgnokii.c:1629
+msgid "Options"
+msgstr "Opzioni"
+
+#: xgnokii/xgnokii.c:1179 xgnokii/xgnokii.c:2207
+msgid "Help"
+msgstr "Aiuto"
+
+#: xgnokii/xgnokii.c:1185 xgnokii/xgnokii.c:1202
+msgid "About"
+msgstr "Informazioni su"
+
+#: xgnokii/xgnokii.c:1206 xgnokii/xgnokii.c:1390
+#: xgnokii/xgnokii_calendar.c:495 xgnokii/xgnokii_calendar.c:541
+#: xgnokii/xgnokii_calendar.c:616 xgnokii/xgnokii_calendar.c:766
+#: xgnokii/xgnokii_contacts.c:839 xgnokii/xgnokii_contacts.c:1035
+#: xgnokii/xgnokii_contacts.c:1400 xgnokii/xgnokii_contacts.c:2846
+#: xgnokii/xgnokii_sms.c:480
+msgid "Ok"
+msgstr "Ok"
+
+#: xgnokii/xgnokii.c:1219
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999,2000 Pavel Janík ml.,\n"
+"Hugh Blemings, Jan Derfinak and others\n"
+"xgnokii is free software, covered by the GNU General Public License, and you "
+"are\n"
+"welcome to change it and/or distribute copies of it under certain "
+"conditions.\n"
+"There is absolutely no waranty for xgnokii. See GPL for details.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1384
+msgid "Edit SMS Setting"
+msgstr "Modifica Impostazioni SMS"
+
+#: xgnokii/xgnokii.c:1398 xgnokii/xgnokii_calendar.c:504
+#: xgnokii/xgnokii_calendar.c:550 xgnokii/xgnokii_calendar.c:624
+#: xgnokii/xgnokii_calendar.c:774 xgnokii/xgnokii_common.c:64
+#: xgnokii/xgnokii_common.c:150 xgnokii/xgnokii_contacts.c:847
+#: xgnokii/xgnokii_contacts.c:1043 xgnokii/xgnokii_contacts.c:1272
+#: xgnokii/xgnokii_contacts.c:1318 xgnokii/xgnokii_contacts.c:1409
+#: xgnokii/xgnokii_contacts.c:1682 xgnokii/xgnokii_contacts.c:1797
+#: xgnokii/xgnokii_contacts.c:2853 xgnokii/xgnokii_sms.c:488
+msgid "Cancel"
+msgstr "Annulla"
+
+#: xgnokii/xgnokii.c:1411
+msgid "Set's name:"
+msgstr "Nome Set:"
+
+#: xgnokii/xgnokii.c:1424
+msgid "Center:"
+msgstr "Centro:"
+
+#: xgnokii/xgnokii.c:1437
+msgid "Sending Format:"
+msgstr "Formato di Invio:"
+
+#: xgnokii/xgnokii.c:1481
+msgid "Validity Period:"
+msgstr "Periodo di Validità:"
+
+#: xgnokii/xgnokii.c:1489
+msgid "Max. Time"
+msgstr "Tempo Massimo"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Set's name"
+msgstr "Nome Set"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Center number"
+msgstr "Numero Centro Messaggi"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Format"
+msgstr "Formato"
+
+#: xgnokii/xgnokii.c:1626
+msgid "Validity"
+msgstr "Validità"
+
+#: xgnokii/xgnokii.c:1634
+msgid "Apply"
+msgstr "Applica"
+
+#: xgnokii/xgnokii.c:1643 xgnokii/xgnokii_contacts.c:1666
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Salva"
+
+#: xgnokii/xgnokii.c:1650
+msgid "Close"
+msgstr "Chiudi"
+
+#: xgnokii/xgnokii.c:1665
+msgid "Phone and connection type"
+msgstr "Telefono e tipo collegamento"
+
+#: xgnokii/xgnokii.c:1672
+msgid "Connection"
+msgstr "Collegamento"
+
+#: xgnokii/xgnokii.c:1679
+msgid "Port:"
+msgstr "Porta:"
+
+#: xgnokii/xgnokii.c:1694 xgnokii/xgnokii.c:1766
+msgid "Model:"
+msgstr "Modello:"
+
+#: xgnokii/xgnokii.c:1709
+msgid "Init length:"
+msgstr "Stringa di inizializzaaione:"
+
+#: xgnokii/xgnokii.c:1724
+msgid "Bindir:"
+msgstr "Directory eseguibili:"
+
+#: xgnokii/xgnokii.c:1739
+msgid "Connection:"
+msgstr "Collegamento:"
+
+#: xgnokii/xgnokii.c:1743
+msgid "infrared"
+msgstr "infrarossi"
+
+#: xgnokii/xgnokii.c:1747
+msgid "serial"
+msgstr "seriale"
+
+#: xgnokii/xgnokii.c:1752
+msgid "Phone information"
+msgstr "Informazioni sul telefono"
+
+#: xgnokii/xgnokii.c:1781
+msgid "Version:"
+msgstr "Modello:"
+
+#: xgnokii/xgnokii.c:1796
+msgid "Revision:"
+msgstr "Versione:"
+
+#: xgnokii/xgnokii.c:1811
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1826
+msgid "Names length:"
+msgstr "Lungezza nomi:"
+
+#: xgnokii/xgnokii.c:1834
+msgid "SIM:"
+msgstr "SIM:"
+
+#: xgnokii/xgnokii.c:1852
+msgid "Phone:"
+msgstr "Telefono:"
+
+#: xgnokii/xgnokii.c:1859
+msgid "Alarm setting"
+msgstr "Impostazione allarme"
+
+#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii.c:1873
+#: xgnokii/xgnokii_calendar.c:688 xgnokii/xgnokii_calendar.c:863
+msgid "Alarm"
+msgstr "Allarme"
+
+#: xgnokii/xgnokii.c:1896 xgnokii/xgnokii_sms.c:1544
+msgid "Short Message Service"
+msgstr "Short Message Service"
+
+#: xgnokii/xgnokii.c:1930
+msgid "Edit"
+msgstr "Modifica"
+
+#: xgnokii/xgnokii.c:1944
+msgid "Business Card"
+msgstr "Biglietto da Visita"
+
+#: xgnokii/xgnokii.c:1950
+msgid "User"
+msgstr "Utente"
+
+#: xgnokii/xgnokii.c:1968 xgnokii/xgnokii_contacts.c:860
+msgid "Name:"
+msgstr "Nome:"
+
+#: xgnokii/xgnokii.c:1994
+msgid "Title:"
+msgstr "Titolo:"
+
+#: xgnokii/xgnokii.c:2020
+msgid "Company:"
+msgstr "Società:"
+
+#: xgnokii/xgnokii.c:2046
+msgid "Telephone:"
+msgstr "Telefono:"
+
+#: xgnokii/xgnokii.c:2071
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:2096
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2122
+msgid "Address:"
+msgstr "Indirizzo:"
+
+#: xgnokii/xgnokii.c:2146
+msgid "Caller groups names"
+msgstr "Nome gruppo chiamante"
+
+#: xgnokii/xgnokii.c:2153
+msgid "Groups"
+msgstr "Gruppi"
+
+#: xgnokii/xgnokii.c:2162
+#, c-format
+msgid "Group %d:"
+msgstr "Gruppo %d:"
+
+#: xgnokii/xgnokii.c:2175
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: xgnokii/xgnokii.c:2182
+msgid "Mail"
+msgstr "Mail"
+
+#: xgnokii/xgnokii.c:2189
+msgid "Path to mailbox:"
+msgstr "Percorso della mailbox:"
+
+#: xgnokii/xgnokii.c:2200
+msgid "Help viewer"
+msgstr "Visualizzatore help"
+
+#: xgnokii/xgnokii.c:2214
+msgid "Viewer:"
+msgstr "Visualizzatore:"
+
+#: xgnokii/xgnokii_calendar.c:123
+msgid "Reminder"
+msgstr "Promemoria"
+
+#: xgnokii/xgnokii_calendar.c:130
+msgid "Call"
+msgstr "Chiamata"
+
+#: xgnokii/xgnokii_calendar.c:138
+msgid "Meeting"
+msgstr "Riunione"
+
+#: xgnokii/xgnokii_calendar.c:146
+msgid "Birthday"
+msgstr "Compleanno"
+
+#: xgnokii/xgnokii_calendar.c:194
+msgid "Type: "
+msgstr "Tipo: "
+
+#: xgnokii/xgnokii_calendar.c:202 xgnokii/xgnokii_sms.c:384
+msgid "Date: "
+msgstr "Data: "
+
+#: xgnokii/xgnokii_calendar.c:217
+msgid "Alarm: "
+msgstr "Allarme: "
+
+#: xgnokii/xgnokii_calendar.c:238
+msgid "Text: "
+msgstr "Testo: "
+
+#: xgnokii/xgnokii_calendar.c:488 xgnokii/xgnokii_calendar.c:534
+msgid "Choose date"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:571
+msgid "Alarm time:"
+msgstr "Ora allarme:"
+
+#: xgnokii/xgnokii_calendar.c:609 xgnokii/xgnokii_calendar.c:929
+msgid "Add reminder"
+msgstr "Aggiunta promemoria"
+
+#: xgnokii/xgnokii_calendar.c:641
+msgid "Date:"
+msgstr "Data:"
+
+#: xgnokii/xgnokii_calendar.c:676
+msgid "Subject:"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:759
+msgid "Delete calendar note"
+msgstr "Elimina nota in calendario"
+
+#: xgnokii/xgnokii_calendar.c:791
+msgid "Do you want to delete selected note(s)?"
+msgstr "Volete eliminare le/la nota/e selezionate?"
+
+#: xgnokii/xgnokii_calendar.c:826 xgnokii/xgnokii_contacts.c:2980
+#: xgnokii/xgnokii_dtmf.c:217 xgnokii/xgnokii_logos.c:1292
+#: xgnokii/xgnokii_netmon.c:259 xgnokii/xgnokii_sms.c:1121
+#: xgnokii/xgnokii_sms.c:1507 xgnokii/xgnokii_speed.c:527
+#: xgnokii/xgnokii_xkeyb.c:242
+msgid "/_File"
+msgstr "/_File"
+
+#: xgnokii/xgnokii_calendar.c:827 xgnokii/xgnokii_contacts.c:2981
+#: xgnokii/xgnokii_speed.c:528
+msgid "/File/_Read from phone"
+msgstr "/File/_Leggi dal telefono"
+
+#: xgnokii/xgnokii_calendar.c:828 xgnokii/xgnokii_contacts.c:2982
+#: xgnokii/xgnokii_speed.c:529
+msgid "/File/_Save to phone"
+msgstr "/File/_Salva sul telefono"
+
+#: xgnokii/xgnokii_calendar.c:829 xgnokii/xgnokii_contacts.c:2983
+#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_logos.c:1296
+#: xgnokii/xgnokii_sms.c:1124 xgnokii/xgnokii_sms.c:1510
+#: xgnokii/xgnokii_speed.c:530
+msgid "/File/Sep1"
+msgstr "/File/Sep1"
+
+#: xgnokii/xgnokii_calendar.c:830
+msgid "/File/Send via S_MS"
+msgstr "/File/Invi_a con S_MS"
+
+#: xgnokii/xgnokii_calendar.c:831 xgnokii/xgnokii_contacts.c:2986
+#: xgnokii/xgnokii_logos.c:1300 xgnokii/xgnokii_sms.c:1127
+#: xgnokii/xgnokii_speed.c:533
+msgid "/File/Sep2"
+msgstr "/File/Sep2"
+
+#: xgnokii/xgnokii_calendar.c:832 xgnokii/xgnokii_contacts.c:2984
+#: xgnokii/xgnokii_speed.c:531
+msgid "/File/_Import from file"
+msgstr "/File/_Importa da file"
+
+#: xgnokii/xgnokii_calendar.c:833 xgnokii/xgnokii_contacts.c:2985
+#: xgnokii/xgnokii_speed.c:532
+msgid "/File/_Export to file"
+msgstr "/File/_Esporta su file"
+
+#: xgnokii/xgnokii_calendar.c:834
+msgid "/File/Sep3"
+msgstr "/File/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:835 xgnokii/xgnokii_contacts.c:2987
+#: xgnokii/xgnokii_dtmf.c:221 xgnokii/xgnokii_logos.c:1301
+#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1128
+#: xgnokii/xgnokii_sms.c:1511 xgnokii/xgnokii_speed.c:534
+#: xgnokii/xgnokii_xkeyb.c:243
+msgid "/File/_Close"
+msgstr "/File/_Chiudi"
+
+#: xgnokii/xgnokii_calendar.c:836 xgnokii/xgnokii_contacts.c:2988
+#: xgnokii/xgnokii_logos.c:1302 xgnokii/xgnokii_speed.c:535
+msgid "/_Edit"
+msgstr "/_Modifica"
+
+#: xgnokii/xgnokii_calendar.c:837
+msgid "/Edit/Add _reminder"
+msgstr "/Modifica/Aggiungi p_romemoria"
+
+#: xgnokii/xgnokii_calendar.c:838
+msgid "/Edit/Add _call"
+msgstr "/Modifica/Aggiungi _chiamata"
+
+#: xgnokii/xgnokii_calendar.c:839
+msgid "/Edit/Add _meeting"
+msgstr "/Modifica/Aggiungi _meeting"
+
+#: xgnokii/xgnokii_calendar.c:840
+msgid "/Edit/Add _birthday"
+msgstr "/Modifica/Aggiungi c_ompleanno"
+
+#: xgnokii/xgnokii_calendar.c:841 xgnokii/xgnokii_contacts.c:2991
+#: xgnokii/xgnokii_speed.c:536
+msgid "/Edit/_Edit"
+msgstr "/Modifica/_Modifica"
+
+#: xgnokii/xgnokii_calendar.c:842 xgnokii/xgnokii_contacts.c:2992
+msgid "/Edit/_Delete"
+msgstr "/Modifica/_Cancella"
+
+#: xgnokii/xgnokii_calendar.c:843 xgnokii/xgnokii_contacts.c:2995
+#: xgnokii/xgnokii_logos.c:1310
+msgid "/Edit/Sep4"
+msgstr "/Modifica/Sep4"
+
+#: xgnokii/xgnokii_calendar.c:844 xgnokii/xgnokii_contacts.c:2999
+msgid "/Edit/Select _all"
+msgstr "/Modifica/Selezion_a tutti"
+
+#: xgnokii/xgnokii_calendar.c:845 xgnokii/xgnokii_contacts.c:3002
+#: xgnokii/xgnokii_dtmf.c:222 xgnokii/xgnokii_netmon.c:264
+#: xgnokii/xgnokii_sms.c:1129 xgnokii/xgnokii_sms.c:1519
+#: xgnokii/xgnokii_speed.c:537 xgnokii/xgnokii_xkeyb.c:244
+msgid "/_Help"
+msgstr "/_Aiuto"
+
+#: xgnokii/xgnokii_calendar.c:846 xgnokii/xgnokii_contacts.c:3003
+#: xgnokii/xgnokii_dtmf.c:223 xgnokii/xgnokii_netmon.c:265
+#: xgnokii/xgnokii_sms.c:1130 xgnokii/xgnokii_sms.c:1520
+#: xgnokii/xgnokii_speed.c:538 xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_Help"
+msgstr "/Aiuto/_Aiuto"
+
+#: xgnokii/xgnokii_calendar.c:847 xgnokii/xgnokii_contacts.c:3004
+#: xgnokii/xgnokii_dtmf.c:224 xgnokii/xgnokii_netmon.c:266
+#: xgnokii/xgnokii_sms.c:1131 xgnokii/xgnokii_sms.c:1521
+#: xgnokii/xgnokii_speed.c:539 xgnokii/xgnokii_xkeyb.c:246
+msgid "/Help/_About"
+msgstr "/Aiuto/_Informazioni"
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "#"
+msgstr ""
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "Type"
+msgstr "Tipo"
+
+#: xgnokii/xgnokii_calendar.c:862
+msgid "Date"
+msgstr "Data"
+
+#: xgnokii/xgnokii_calendar.c:863 xgnokii/xgnokii_contacts.c:1350
+#: xgnokii/xgnokii_contacts.c:3020 xgnokii/xgnokii_speed.c:554
+msgid "Number"
+msgstr "Numero"
+
+#: xgnokii/xgnokii_calendar.c:896 xgnokii/xgnokii_contacts.c:3056
+#: xgnokii/xgnokii_speed.c:590
+msgid "Read from phone"
+msgstr "Leggi dal telefono"
+
+#: xgnokii/xgnokii_calendar.c:900 xgnokii/xgnokii_contacts.c:3060
+#: xgnokii/xgnokii_speed.c:594
+msgid "Save to phone"
+msgstr "Salva sul telefono"
+
+#: xgnokii/xgnokii_calendar.c:907
+msgid "Send via SMS"
+msgstr "Invia come SMS"
+
+#: xgnokii/xgnokii_calendar.c:914 xgnokii/xgnokii_contacts.c:3067
+#: xgnokii/xgnokii_logos.c:1386 xgnokii/xgnokii_speed.c:601
+msgid "Import from file"
+msgstr "Importa da file"
+
+#: xgnokii/xgnokii_calendar.c:918 xgnokii/xgnokii_contacts.c:3071
+#: xgnokii/xgnokii_logos.c:1390 xgnokii/xgnokii_speed.c:605
+msgid "Export to file"
+msgstr "Esporta su file"
+
+#: xgnokii/xgnokii_calendar.c:925
+msgid "Edit note"
+msgstr "Modifica nota"
+
+#: xgnokii/xgnokii_calendar.c:933
+msgid "Add call"
+msgstr "Aggiungi chiamata"
+
+#: xgnokii/xgnokii_calendar.c:937
+msgid "Add meeting"
+msgstr "Aggiungi riunione"
+
+#: xgnokii/xgnokii_calendar.c:941
+msgid "Add birthday"
+msgstr "Aggiungi compleanno"
+
+#: xgnokii/xgnokii_calendar.c:945
+msgid "Delete note"
+msgstr "Elimina voci"
+
+#: xgnokii/xgnokii_calendar.c:1005 xgnokii/xgnokii_contacts.c:2876
+#: xgnokii/xgnokii_contacts.c:3126 xgnokii/xgnokii_sms.c:1686
+#: xgnokii/xgnokii_speed.c:637
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "Errore: %s: linea %d: Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_calendar.c:1034 xgnokii/xgnokii_sms.c:1719
+msgid "couldn't allocate colour"
+msgstr "impossibile utilizzare il colore"
+
+#: xgnokii/xgnokii_cfg.c:80
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "ATTENZIONE: non trovo la variabile di ambiente HOME !\n"
+
+#: xgnokii/xgnokii_cfg.c:86 xgnokii/xgnokii_cfg.c:101
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:185
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:191 xgnokii/xgnokii_cfg.c:209
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:197
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "ERRORE: impossibile scrivere sul file %s !\n"
+
+#: xgnokii/xgnokii_cfg.c:215
+msgid "ERROR: Can't write config file!\n"
+msgstr "ERRORE: Impossibile scrivere il file di configurazione!\n"
+
+#: xgnokii/xgnokii_common.c:57
+msgid "Error"
+msgstr "Errore"
+
+#: xgnokii/xgnokii_common.c:96
+msgid "Info"
+msgstr "Info"
+
+#: xgnokii/xgnokii_common.c:134
+msgid "Yes"
+msgstr "Si"
+
+#: xgnokii/xgnokii_common.c:143
+msgid "No"
+msgstr "No"
+
+#: xgnokii/xgnokii_common.c:230
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Impossibile eseguire %s\n"
+
+#: xgnokii/xgnokii_contacts.c:246 xgnokii/xgnokii_contacts.c:279
+#: xgnokii/xgnokii_contacts.c:448 xgnokii/xgnokii_contacts.c:473
+#: xgnokii/xgnokii_contacts.c:613 xgnokii/xgnokii_contacts.c:635
+msgid "Can't change memory type!"
+msgstr "Impossibile cambiare il tipo di memoria!"
+
+#: xgnokii/xgnokii_contacts.c:290 xgnokii/xgnokii_contacts.c:337
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Spiacente, ma il nome della rubrica sarà troncato,\n"
+"poichè è stato salvato nella memoria SIM!"
+
+#: xgnokii/xgnokii_contacts.c:484 xgnokii/xgnokii_contacts.c:523
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Spiacente, ma il nominativo sarà troncato,\n"
+"poichè è stato salvato nella memoria SIM!"
+
+#: xgnokii/xgnokii_contacts.c:729
+msgid "Can't find pattern!"
+msgstr "Elemento non trovato!"
+
+#: xgnokii/xgnokii_contacts.c:873 xgnokii/xgnokii_contacts.c:1418
+msgid "Number:"
+msgstr "Numero:"
+
+#: xgnokii/xgnokii_contacts.c:888
+msgid "Extended:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:905
+msgid "Memory:"
+msgstr "Memoria:"
+
+#: xgnokii/xgnokii_contacts.c:909
+msgid "phone"
+msgstr "telefono"
+
+#: xgnokii/xgnokii_contacts.c:922
+msgid "Caller group:"
+msgstr "Gruppo chiamante:"
+
+#: xgnokii/xgnokii_contacts.c:939 xgnokii/xgnokii_contacts.c:3086
+#: xgnokii/xgnokii_speed.c:612
+msgid "Edit entry"
+msgstr "Modifica voce"
+
+#: xgnokii/xgnokii_contacts.c:1028
+msgid "Delete entries"
+msgstr "Elimina voci"
+
+#: xgnokii/xgnokii_contacts.c:1060
+msgid "Do you want to delete selected entries?"
+msgstr "Volete eliminare le voci selezionate?"
+
+#: xgnokii/xgnokii_contacts.c:1072 xgnokii/xgnokii_contacts.c:3078
+msgid "New entry"
+msgstr "Nuova voce"
+
+#: xgnokii/xgnokii_contacts.c:1111 xgnokii/xgnokii_contacts.c:3082
+msgid "Duplicate entry"
+msgstr "Duplica la voce"
+
+#: xgnokii/xgnokii_contacts.c:1177 xgnokii/xgnokii_contacts.c:1187
+#: xgnokii/xgnokii_contacts.c:1212
+msgid "Can't find free memory."
+msgstr "Memoria esaurita."
+
+#: xgnokii/xgnokii_contacts.c:1256
+msgid "Changing memory type"
+msgstr "Cambiare il tipo di memoria"
+
+#: xgnokii/xgnokii_contacts.c:1263
+msgid "Continue"
+msgstr "Continua"
+
+#: xgnokii/xgnokii_contacts.c:1283
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+
+#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:1309
+msgid "Find"
+msgstr "Cerca"
+
+#: xgnokii/xgnokii_contacts.c:1331
+msgid "Pattern:"
+msgstr "Stringa:"
+
+#: xgnokii/xgnokii_contacts.c:1344 xgnokii/xgnokii_contacts.c:3020
+#: xgnokii/xgnokii_speed.c:554
+msgid "Name"
+msgstr "Nome"
+
+#: xgnokii/xgnokii_contacts.c:1394 xgnokii/xgnokii_contacts.c:3097
+msgid "Dial voice"
+msgstr "Chiamata vocale"
+
+#: xgnokii/xgnokii_contacts.c:1520
+msgid "Phone memory..."
+msgstr "Memoria telefono..."
+
+#: xgnokii/xgnokii_contacts.c:1531
+msgid "SIM memory..."
+msgstr "Memoria SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1560
+msgid "Saving entries"
+msgstr "Salva elementi"
+
+#: xgnokii/xgnokii_contacts.c:1594
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile scrivere nella memoria ME numero %d! Errore: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1636
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile scrivere nella memoria SM numero %d! Errore: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1659
+msgid "Save changes?"
+msgstr "Salvare i cambiamenti?"
+
+#: xgnokii/xgnokii_contacts.c:1675
+msgid "Don't save"
+msgstr "Non salvare"
+
+#: xgnokii/xgnokii_contacts.c:1699
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Sono state effettuate modifiche\n"
+"nella rubrica.\n"
+"\n"
+"\n"
+"Le si vuole inviare al telefono?\n"
+
+#: xgnokii/xgnokii_contacts.c:1760
+msgid "Which Extended Phonebook Entry?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1766
+msgid "General"
+msgstr "Generale"
+
+#: xgnokii/xgnokii_contacts.c:1772
+msgid "Mobile"
+msgstr "Cellulare"
+
+#: xgnokii/xgnokii_contacts.c:1778
+msgid "Work"
+msgstr "Lavoro"
+
+#: xgnokii/xgnokii_contacts.c:1790
+msgid "Home"
+msgstr "Casa"
+
+#: xgnokii/xgnokii_contacts.c:1883 xgnokii/xgnokii_contacts.c:1910
+#: xgnokii/xgnokii_contacts.c:2555 xgnokii/xgnokii_contacts.c:2579
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: linea %d: Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_contacts.c:2005
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Non è possibile rilevare lo stato della memoria SM !\n"
+"\n"
+"Impostare il massimo delle voci nella SIM a 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2030
+msgid "Getting entries"
+msgstr "Caricamento dati"
+
+#: xgnokii/xgnokii_contacts.c:2163 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:426
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Impossibile aprire il file %s in scrittura!"
+
+#: xgnokii/xgnokii_contacts.c:2257 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_logos.c:1169 xgnokii/xgnokii_speed.c:468
+msgid "Overwrite file?"
+msgstr "Sovrascrivo il file?"
+
+#: xgnokii/xgnokii_contacts.c:2258 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_logos.c:1170 xgnokii/xgnokii_speed.c:469
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Il file %s esiste.\n"
+"Sovrascrivo?"
+
+#: xgnokii/xgnokii_contacts.c:2276 xgnokii/xgnokii_speed.c:487
+msgid "Export"
+msgstr "Esporta"
+
+#: xgnokii/xgnokii_contacts.c:2476 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:326
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Impossibile aprire il file %s in lettura!"
+
+#: xgnokii/xgnokii_contacts.c:2530
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Non è possibile rilevare lo stato della memoria SM !\n"
+"\n"
+"Impostare il massimo delle voci nella SIM a 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2645 xgnokii/xgnokii_speed.c:404
+msgid "Import"
+msgstr "Importa"
+
+#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_sms.c:1233
+msgid "Select contacts"
+msgstr "Seleziona nominativi"
+
+#: xgnokii/xgnokii_contacts.c:2989
+msgid "/Edit/_New"
+msgstr "/Modifica/_Nuovo"
+
+#: xgnokii/xgnokii_contacts.c:2990
+msgid "/Edit/D_uplicate"
+msgstr "/Modifica/_Duplica"
+
+#: xgnokii/xgnokii_contacts.c:2993 xgnokii/xgnokii_logos.c:1305
+msgid "/Edit/Sep3"
+msgstr "/Modifica/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2994
+msgid "/Edit/_Change memory type"
+msgstr "/Modifica/_Cambia il tipo di memoria"
+
+#: xgnokii/xgnokii_contacts.c:2996
+msgid "/Edit/_Find"
+msgstr "/Modifica/_Trova"
+
+#: xgnokii/xgnokii_contacts.c:2997
+msgid "/Edit/Find ne_xt"
+msgstr "/Modifica/Trova se_guente"
+
+#: xgnokii/xgnokii_contacts.c:2998
+msgid "/Edit/Sep5"
+msgstr "/Modifica/Sep5"
+
+#: xgnokii/xgnokii_contacts.c:3000
+msgid "/_Dial"
+msgstr "/_Chiamata"
+
+#: xgnokii/xgnokii_contacts.c:3001
+msgid "/Dial/Dial _voice"
+msgstr "/Chiamata/Chiamata _vocale"
+
+#: xgnokii/xgnokii_contacts.c:3020
+msgid "Memory"
+msgstr "Memoria"
+
+#: xgnokii/xgnokii_contacts.c:3020
+msgid "Group"
+msgstr "Gruppo"
+
+#: xgnokii/xgnokii_contacts.c:3090
+msgid "Delete entry"
+msgstr "Elimina elemento"
+
+#: xgnokii/xgnokii_data.c:42
+msgid ""
+"Data calls are currently\n"
+"Disabled\n"
+" "
+msgstr ""
+"Le chimate dati sono ora\n"
+"Disabilitate\n"
+" "
+
+#: xgnokii/xgnokii_data.c:44
+msgid ""
+"Data calls are currently\n"
+"Enabled\n"
+" "
+msgstr ""
+"Le chimate dati sono ora\n"
+"Abilitate\n"
+" "
+
+#: xgnokii/xgnokii_data.c:101
+msgid "Virtual Modem"
+msgstr "Modem Virtuale"
+
+#: xgnokii/xgnokii_data.c:119
+msgid "Enable"
+msgstr "Abilita"
+
+#: xgnokii/xgnokii_data.c:125
+msgid "Disable"
+msgstr "Disabilita"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Carica"
+
+#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1293
+msgid "/File/_Open"
+msgstr "/File/_Apri"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1294
+#: xgnokii/xgnokii_sms.c:1123 xgnokii/xgnokii_sms.c:1508
+msgid "/File/_Save"
+msgstr "/File/_Salva"
+
+#: xgnokii/xgnokii_dtmf.c:245
+msgid "Dial Tone"
+msgstr "Tono di chiamata"
+
+#: xgnokii/xgnokii_logos.c:823
+#, c-format
+msgid ""
+"Error getting network info\n"
+"(error=%d)"
+msgstr ""
+"Errore ricercando informazioni sulla rete\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:862
+#, c-format
+msgid ""
+"Error getting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Errore caricando l'immagine bitmap\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:907
+#, c-format
+msgid ""
+"Error setting bitmap\n"
+"(error=%d)"
+msgstr ""
+"Errore impostando l'immagine bitmap\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1141
+#, c-format
+msgid ""
+"Error saving file\n"
+"(error=%d)"
+msgstr ""
+"Errore salvando il file\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1191
+#, c-format
+msgid "Can't open file %s for reading !"
+msgstr "Impossibile aprire il file %s in lettura !"
+
+#: xgnokii/xgnokii_logos.c:1200
+#, c-format
+msgid ""
+"Error reading file\n"
+"(error=%d)"
+msgstr ""
+"Errore leggendo il file\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_logos.c:1295
+msgid "/File/Save _as ..."
+msgstr "/File/Salv_a come ..."
+
+#: xgnokii/xgnokii_logos.c:1297
+msgid "/File/_Get operator"
+msgstr "/File/_Seleziona operatore"
+
+#: xgnokii/xgnokii_logos.c:1298
+msgid "/File/Get _logo"
+msgstr "/File/Seleziona _logo"
+
+#: xgnokii/xgnokii_logos.c:1299
+msgid "/File/Se_t logo"
+msgstr "/File/Impos_ta logo"
+
+#: xgnokii/xgnokii_logos.c:1303
+msgid "/Edit/_Clear"
+msgstr "/Edit/_Cancella tutto"
+
+#: xgnokii/xgnokii_logos.c:1304
+msgid "/Edit/_Invert"
+msgstr "/Edit/_Inverti"
+
+#: xgnokii/xgnokii_logos.c:1306
+msgid "/Edit/_Up logo"
+msgstr "/Edit/Logo s_u"
+
+#: xgnokii/xgnokii_logos.c:1307
+msgid "/Edit/_Down logo"
+msgstr "/Edit/Logo _giù"
+
+#: xgnokii/xgnokii_logos.c:1308
+msgid "/Edit/_Left logo"
+msgstr "/Edit/Logo _sinistra"
+
+#: xgnokii/xgnokii_logos.c:1309
+msgid "/Edit/_Right logo"
+msgstr "/Edit/Logo dest_ra"
+
+#: xgnokii/xgnokii_logos.c:1311
+msgid "/Edit/Flip _horizontal"
+msgstr ""
+
+#: xgnokii/xgnokii_logos.c:1312
+msgid "/Edit/Flip _vertical"
+msgstr ""
+
+#: xgnokii/xgnokii_logos.c:1604
+msgid "Load preview pixmap error, feature disabled."
+msgstr ""
+
+#: xgnokii/xgnokii_lowlevel.c:353
+#, c-format
+msgid "%s: line %d: Can't get memory entry number %d from memory %d! %d\n"
+msgstr ""
+"%s: linea: %d:Impossibile leggere la locazione %d dalla memoria %d! %d\n"
+
+#: xgnokii/xgnokii_lowlevel.c:874
+msgid "Connecting..."
+msgstr "Connessione..."
+
+#: xgnokii/xgnokii_lowlevel.c:907
+msgid "Refreshing SMSes..."
+msgstr "Rilettura SMS..."
+
+#: xgnokii/xgnokii_lowlevel.c:965
+msgid "Working..."
+msgstr "Attendere..."
+
+#: xgnokii/xgnokii_lowlevel.c:968
+#, c-format
+msgid "Event %d failed with return code %d!\n"
+msgstr "Fallito evento %d con codice %d!\n"
+
+#: xgnokii/xgnokii_netmon.c:261
+msgid "/_Tools"
+msgstr "/S_trumenti"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/Tools/Net monitor o_n"
+msgstr "/Strumenti/_Net monitor attivo"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Strumenti/Net monitor disattiv_o"
+
+#: xgnokii/xgnokii_netmon.c:380 xgnokii/xgnokii_netmon.c:383
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:386
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:389
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:392
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:395
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:398
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:401
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:404
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:407
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:417
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:420
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:423
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:426
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:429
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:432
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:435
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:438
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:441
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:444
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:454
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:457
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:460
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:463
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:466
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:469
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:475
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:478
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:481
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:491
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:503
+msgid "Information about task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:506
+msgid "Information about task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:509
+msgid "Information about task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:512
+msgid "Information about OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:515
+msgid "Information about current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:518
+msgid "Hardware version"
+msgstr "Versione hardware"
+
+#: xgnokii/xgnokii_netmon.c:537
+msgid "Chan"
+msgstr "Chan"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "RxLv"
+msgstr "RxLv"
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "C1"
+msgstr "C1"
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C2"
+msgstr "C2"
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "ACT"
+msgstr "ACT"
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:578
+msgid "Page:"
+msgstr "Pagina:"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "report"
+msgstr "report"
+
+#: xgnokii/xgnokii_sms.c:241
+msgid "read"
+msgstr "letto"
+
+#: xgnokii/xgnokii_sms.c:246
+msgid "unread"
+msgstr "non letto"
+
+#: xgnokii/xgnokii_sms.c:306
+msgid "sent"
+msgstr "inviato"
+
+#: xgnokii/xgnokii_sms.c:308
+msgid "unsent"
+msgstr "non inviato"
+
+#: xgnokii/xgnokii_sms.c:376
+msgid "From: "
+msgstr "Da :"
+
+#: xgnokii/xgnokii_sms.c:473
+msgid "Delete SMS"
+msgstr "Elimina SMS"
+
+#: xgnokii/xgnokii_sms.c:505
+msgid "Do you want to delete selected SMS?"
+msgstr "Volete veramente eliminare gli SMS selezionati?"
+
+#: xgnokii/xgnokii_sms.c:529
+#, c-format
+msgid "Cannot open mailbox %s for appending!"
+msgstr "Impossibile aprire la mailbox %s per aggiungere!"
+
+#: xgnokii/xgnokii_sms.c:543
+#, c-format
+msgid ""
+"Cannot save to mailbox %s.\n"
+"%s is locked for process %d!"
+msgstr ""
+"Impossibile salvare nella mailbox %s.\n"
+"%s is è bloccato dal processo %d!"
+
+#: xgnokii/xgnokii_sms.c:558
+#, c-format
+msgid "Cannot lock mailbox %s!"
+msgstr "Impossibile bloccare la mailbox %s!"
+
+#: xgnokii/xgnokii_sms.c:609
+#, c-format
+msgid "Cannot unlock mailbox %s!"
+msgstr "Impossibile sbloccare la mailbox %s!"
+
+#: xgnokii/xgnokii_sms.c:827 xgnokii/xgnokii_sms.c:958
+msgid "Address line contains illegal address!"
+msgstr "L'indirizzo specificato non è valido!"
+
+#: xgnokii/xgnokii_sms.c:930
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"Invio SMS a %s fallito\n"
+"(errore=%d)"
+
+#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_sms.c:1057
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Invio SMS a %s (%d/%d) in corso ...\n"
+
+#: xgnokii/xgnokii_sms.c:1084
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Invio SMS a %s in corso ...\n"
+
+#: xgnokii/xgnokii_sms.c:1122
+msgid "/File/Sen_d"
+msgstr "/File/Invi_a"
+
+#: xgnokii/xgnokii_sms.c:1125
+msgid "/File/Check _Names"
+msgstr "/File/Verifica _Nomi"
+
+#: xgnokii/xgnokii_sms.c:1126
+msgid "/File/C_ontacts"
+msgstr "/File/C_ontatti"
+
+#: xgnokii/xgnokii_sms.c:1185
+msgid "Send message"
+msgstr "Invia il messaggio"
+
+#: xgnokii/xgnokii_sms.c:1189
+msgid "Save message to outbox"
+msgstr "Salva il messaggio su messaggi in uscita"
+
+#: xgnokii/xgnokii_sms.c:1196
+msgid "Check names"
+msgstr "Controlla i nominativi"
+
+#: xgnokii/xgnokii_sms.c:1209
+msgid "To:"
+msgstr "A:"
+
+#: xgnokii/xgnokii_sms.c:1281
+msgid "Delivery report"
+msgstr "Rapporto di invio"
+
+#: xgnokii/xgnokii_sms.c:1285
+msgid "Send as Long SMS"
+msgstr "Invia come Long SMS"
+
+#: xgnokii/xgnokii_sms.c:1289
+msgid "SMS Center:"
+msgstr "Centro SMS:"
+
+#: xgnokii/xgnokii_sms.c:1308
+msgid "New Message"
+msgstr "Nuovo Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1335
+msgid "Forward Message"
+msgstr "Reinvia il Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1379
+msgid "Reply Message"
+msgstr "Rispondi al Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1415 xgnokii/xgnokii_sms.c:1586
+msgid "Bussiness Card"
+msgstr "Biglietto da visita"
+
+#: xgnokii/xgnokii_sms.c:1509
+msgid "/File/Save to mailbo_x"
+msgstr "/File/Salva su mailbo_x"
+
+#: xgnokii/xgnokii_sms.c:1512
+msgid "/_Messages"
+msgstr "/_Messaggi"
+
+#: xgnokii/xgnokii_sms.c:1513
+msgid "/_Messages/_New"
+msgstr "/_Messaggi/_Nuovo"
+
+#: xgnokii/xgnokii_sms.c:1514
+msgid "/_Messages/_Forward"
+msgstr "/_Messaggi/_Rispedisci"
+
+#: xgnokii/xgnokii_sms.c:1515
+msgid "/_Messages/_Reply"
+msgstr "/_Messaggi/_Rispondi"
+
+#: xgnokii/xgnokii_sms.c:1516
+msgid "/_Messages/_Delete"
+msgstr "/_Messaggi/_Elimina"
+
+#: xgnokii/xgnokii_sms.c:1517
+msgid "/Messages/Sep3"
+msgstr "/Messaggi/Sep3"
+
+#: xgnokii/xgnokii_sms.c:1518
+msgid "/_Messages/_Bussiness card"
+msgstr "/_Messaggi/_Biglietti da visita"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Status"
+msgstr "Stato"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Date / Time"
+msgstr "Data / Ora"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Sender"
+msgstr "Mittente"
+
+#: xgnokii/xgnokii_sms.c:1539
+msgid "Message"
+msgstr "Messaggio"
+
+#: xgnokii/xgnokii_sms.c:1573
+msgid "New message"
+msgstr "Nuovo messaggio"
+
+#: xgnokii/xgnokii_sms.c:1577
+msgid "Forward message"
+msgstr "Reinvia il messaggio"
+
+#: xgnokii/xgnokii_sms.c:1581
+msgid "Reply message"
+msgstr "Rispondi al messaggio"
+
+#: xgnokii/xgnokii_sms.c:1593
+msgid "Delete message"
+msgstr "Cancella messaggio"
+
+#: xgnokii/xgnokii_sms.c:1618
+msgid "SMS's"
+msgstr "SMS "
+
+#: xgnokii/xgnokii_sms.c:1627
+msgid "Inbox"
+msgstr "In arrivo"
+
+#: xgnokii/xgnokii_sms.c:1633
+msgid "Outbox"
+msgstr "In uscita"
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Reading data ..."
+msgstr "Lettura dati..."
+
+#: xgnokii/xgnokii_speed.c:191 xgnokii/xgnokii_speed.c:197
+#: xgnokii/xgnokii_speed.c:256
+msgid "Cannot allocate memory!"
+msgstr "Memoria esaurita!"
+
+#: xgnokii/xgnokii_speed.c:344
+msgid "Cannot allocate memory!\n"
+msgstr "Memoria esaurita!\n"
+
+#: xgnokii/xgnokii_speed.c:356 xgnokii/xgnokii_speed.c:384
+msgid "Error reading file!"
+msgstr "Errore di lettura del file!"
+
+#: xgnokii/xgnokii_speed.c:554
+msgid "Key"
+msgstr "Tasto"
+
+#: xgnokii/xgnokii_xkeyb.c:183
+msgid "Cannot load background pixmap!"
+msgstr "Impossibile caricare l'immagine di sfondo!"
+
+#: xgnokii/xgnokii_xkeyb.c:260
+msgid "XGnokii Keyboard"
+msgstr "Tastiera di XGnokii"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 1999-03-13 18:25:30+0100\n"
+"PO-Revision-Date: 1999-03-13 18:25:30+0100\n"
+"Last-Translator: Pavel Janik ml. <Pavel.Janik@inet.cz>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: fbus-6110.c:2545
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. Naam SMS dienst is %s\n"
+
+#: fbus-6110.c:3490 gnokii.c:1510
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Alarm datum ingesteld op: %d-%02d-%02d\n"
+
+#: fbus-6110.c:3372
+msgid " Alarm is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3494 gnokii.c:1514
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Alarm tijd ingesteld op: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:3371
+msgid " Alarm: %02d:%02d\n"
+msgstr ""
+
+#: fbus-6110.c:2993
+msgid " Battery Level: %d\n"
+msgstr " Batterij niveau: %d\n"
+
+#: gnokii.c:1585
+msgid " Calendar note deleted.\n"
+msgstr ""
+
+#: fbus-6110.c:3217
+msgid " CellID: %s\n"
+msgstr ""
+
+#: fbus-6110.c:3334
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Datum: %4d/%02d/%02d\n"
+
+#: fbus-6110.c:3479 gnokii.c:1501
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Datum: %d-%02d-%02d\n"
+
+#: fbus-6110.c:2512
+msgid " Date: %s\n"
+msgstr " Datum: %s\n"
+
+#: fbus-6110.c:3714
+msgid " Date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:4016
+msgid " Empty SMS location.\n"
+msgstr " Geen SMS bericht.\n"
+
+#: fbus-6110.c:2363 fbus-6110.c:2458
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Betekenis onbekend, sorry :(\n"
+
+#: fbus-6110.c:4142
+msgid " Firmware: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2764
+msgid " Free: %d\n"
+msgstr " Beschikbaar: %d\n"
+
+#: fbus-6110.c:4140
+msgid " HW: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2274
+msgid " IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4134
+msgid " IMEI: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4006
+msgid " Invalid location!\n"
+msgstr ""
+
+#: fbus-6110.c:2701
+msgid " Invalid memory type!\n"
+msgstr " Geheugentype fout!\n"
+
+#: fbus-6110.c:3583
+msgid " Item number: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3218
+msgid " LAC: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2875
+msgid " Location: %d\n"
+msgstr ""
+
+#: fbus-6110.c:4147
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2762
+msgid " Memory Type: %s\n"
+msgstr " Geheugentype: %s\n"
+
+#: fbus-6110.c:2876
+msgid " MemoryType: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2934
+msgid " Mode: "
+msgstr ""
+
+#: fbus-3810.c:2276
+msgid " Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4136
+msgid " Model: %s\n"
+msgstr ""
+
+#: fbus-3810.c:2180
+msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n"
+msgstr " Lengte bericht %d, Nummer bericht %d, Onbekende Bytes: %02x %02x %02x %02x %02x %02x\n"
+
+#: fbus-6110.c:2401 fbus-6110.c:2656
+msgid " Name: "
+msgstr " Naam: "
+
+#: fbus-6110.c:3219
+msgid " Network code: %s\n"
+msgstr " Netwerk Code: %s\n"
+
+#: fbus-6110.c:3220
+msgid " Network name: %s (%s)\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid " Network selection: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2393 fbus-6110.c:2672
+msgid " Number: "
+msgstr " Nummer: "
+
+#: fbus-6110.c:2877
+msgid " Number: %d\n"
+msgstr " Nummer: %d\n"
+
+#: fbus-6110.c:3503 gnokii.c:1522
+msgid " Phone: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2971
+msgid " Power source: "
+msgstr " Voeding type: "
+
+#: fbus-6110.c:4138
+msgid " Production Code: %s\n"
+msgstr " Productie Code: %s\n"
+
+#: fbus-6110.c:2511 fbus-6110.c:3746
+msgid " Remote number: %s\n"
+msgstr " Nummer inkomend gesprek: %s\n"
+
+#: fbus-3810.c:2278
+msgid " Revision: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2548
+msgid " SMS Center message format is "
+msgstr ""
+
+#: fbus-6110.c:2574
+msgid " SMS Center message validity is "
+msgstr ""
+
+#: fbus-6110.c:2546
+msgid " SMS Center number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:2507 fbus-6110.c:3745
+msgid " SMS center number: %s\n"
+msgstr " Nummer SMS dienst: %s\n"
+
+#: fbus-6110.c:2513
+msgid " SMS: "
+msgstr ""
+
+#: fbus-6110.c:3729
+msgid " SMSC response date: %s GMT"
+msgstr ""
+
+#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Rijnummmer van oproep: %d\n"
+
+#: fbus-6110.c:2994
+msgid " Signal strength: %d\n"
+msgstr " Signaal sterkte: %d\n"
+
+#: fbus-6110.c:3223
+msgid " Status: "
+msgstr ""
+
+#: fbus-6110.c:3500 gnokii.c:1519
+msgid " Text: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4040
+msgid " The number of messages: %d\n"
+msgstr " Aantal berichten: %d\n"
+
+#: fbus-6110.c:2622
+msgid " The request for SMS Center failed.\n"
+msgstr " Oproep naar SMS dienst mislukt.\n"
+
+#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Tijd: %02d:%02d:%02d\n"
+
+#: gnokii.c:1476
+msgid " Type of the note: "
+msgstr ""
+
+#: fbus-6110.c:3499
+msgid " Type: %d\n"
+msgstr ""
+
+#: fbus-6110.c:2711 fbus-6110.c:2749
+msgid " Unknown error!\n"
+msgstr " Onbekende fout!\n"
+
+#: fbus-6110.c:4041
+msgid " Unread messages: %d\n"
+msgstr " Ongelezen berichten: %d\n"
+
+#: fbus-6110.c:2763
+msgid " Used: %d\n"
+msgstr " Gebruikt: %d\n"
+
+#: gnokii.c:86
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --sendoplogoviasms destionation logofile [network code]\n"
+" gnokii --setdatetime [YYYY MM DD HH MM]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n"
+" gnokii --reset [soft|hard]\n"
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken from\n"
+" phone memory from address [message_center_index].\n"
+" If this argument is ommited SMSC number is taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --sendoplogoviasms send the logofile to destination as operator\n"
+" logo\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number [index] from calendar.\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+
+#: gnokiid.c:63
+msgid " usage: gnokiid {--help|--version}"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:81
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:76
+msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh"
+msgstr ""
+
+#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032
+msgid "%d"
+msgstr ""
+
+#: gnokii.c:978
+msgid "%d. Delivery Report "
+msgstr ""
+
+#: gnokii.c:1017
+msgid "%d. Inbox Message "
+msgstr ""
+
+#: gnokii.c:965
+msgid "%d. Outbox Message "
+msgstr ""
+
+#: gnokii.c:802
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr ""
+
+#: fbus-6110.c:3722 fbus-6110.c:3738
+msgid "%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1343
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1310
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: gnokii.c:1893
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Foute locatie of andere fout!(%d)\n"
+
+#: gnokii.c:982 gnokii.c:1022
+msgid "(not read)\n"
+msgstr ""
+
+#: gnokii.c:970
+msgid "(not sent)\n"
+msgstr ""
+
+#: gnokii.c:980 gnokii.c:1020
+msgid "(read)\n"
+msgstr ""
+
+#: gnokii.c:968
+msgid "(sent)\n"
+msgstr ""
+
+#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030
+msgid "+%dh"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:78
+msgid "/help/contacts.html"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr ""
+
+#: xgnokii/xgnokii.c:153
+msgid "/help/index.html"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:38
+msgid "/help/sms.html"
+msgstr ""
+
+#: fbus-3810.c:1946
+msgid "0x10 Write failed!"
+msgstr "0x10 Opslaan mislukt!"
+
+#: fbus-3810.c:1222
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Registratie Respons 0x%02x\n"
+
+#: fbus-3810.c:1783
+msgid "0x15 Write failed!"
+msgstr "0x15 Opslaan mislukt!"
+
+#: fbus-3810.c:1236
+msgid "0x16 Registration Response 0x%02x 0x%02x\n"
+msgstr "0x16 Registratie Response 0x%02x 0x%02x\n"
+
+#: fbus-3810.c:1879
+msgid "0x27 Write failed!"
+msgstr "0x27 Opslaan mislukt!"
+
+#: fbus-3810.c:2022
+msgid "0x2c Write failed!"
+msgstr "0x2c Opslaan mislukt!"
+
+#: fbus-3810.c:1574
+msgid "0x3f Write failed!"
+msgstr "0x3f Opslaan mislukt!"
+
+#: fbus-3810.c:1549
+msgid "0x4a Write failed!"
+msgstr "0x4a Opslaan mislukt!"
+
+#: fbus-3810.c:1917
+msgid "0x4b Write failed!"
+msgstr "0x4b Opslaan mislukt!"
+
+#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090
+msgid "1 h"
+msgstr ""
+
+#: fbus-6110.c:2579 gnokii.c:835
+msgid "1 hour"
+msgstr ""
+
+#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118
+msgid "1 week"
+msgstr ""
+
+#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104
+msgid "24 h"
+msgstr ""
+
+#: fbus-6110.c:2587 gnokii.c:843
+msgid "24 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097
+msgid "6 h"
+msgstr ""
+
+#: fbus-6110.c:2583 gnokii.c:839
+msgid "6 hours"
+msgstr ""
+
+#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111
+msgid "72 h"
+msgstr ""
+
+#: fbus-6110.c:2591 gnokii.c:847
+msgid "72 hours"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "AC/DC"
+msgstr "Lader"
+
+#: fbus-6110.c:2977
+msgid "AC/DC\n"
+msgstr "Lader\n"
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807
+msgid "About"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1725
+msgid "Address:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351
+msgid "Alarm"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1337
+msgid "Alarm setting"
+msgstr ""
+
+#: gnokii.c:1687
+msgid "Alarm: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1227
+msgid "Apply"
+msgstr ""
+
+#: rlp-common.c:509
+msgid "BAD"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: fbus-6110.c:4341
+msgid "Bad checksum!\n"
+msgstr ""
+
+#: gnokii.c:1744
+msgid "Battery: %d\n"
+msgstr "Batterij: %d\n"
+
+#: xgnokii/xgnokii.c:1309
+msgid "Bindir:"
+msgstr ""
+
+#: gnokii.c:1493
+msgid "Birthday\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1812
+msgid "Busines Cards"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1552
+msgid "Business Card"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: fbus-6110.c:2136
+msgid "CAR is %s.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: fbus-3810.c:1115
+msgid "CS Fail %02x != %02x"
+msgstr "Cs-Fout %02x != %02x"
+
+#: fbus-6110.c:2137
+msgid "CTS is %s.\n"
+msgstr ""
+
+#: gnokii.c:1485
+msgid "Call\n"
+msgstr ""
+
+#: gnokii.c:2096
+msgid "Call in progress: %s\n"
+msgstr ""
+
+#: fbus-6110.c:2818
+msgid "Caller group name: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:752
+msgid "Caller group:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562
+msgid "Can't change memory type!"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:182
+msgid "Can't exec %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993
+msgid "Can't find free memory."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:652
+msgid "Can't find pattern!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1988
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303
+msgid "Cancel"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Center number"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1018
+msgid "Center:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1034
+msgid "Changing memory type"
+msgstr ""
+
+#: fbus-3810.c:1446
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Prüfsumme: %02x \n"
+" "
+
+#: xgnokii/xgnokii.c:1243
+msgid "Close"
+msgstr ""
+
+#: gnokii.c:1221
+msgid "Code ok.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2007
+msgid "Colleagues"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1627
+msgid "Company:"
+msgstr ""
+
+#: fbus-6110.c:3840 fbus-6110.c:3933
+msgid "Congestion"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1265
+msgid "Connection"
+msgstr ""
+
+#: fbus-6110.c:3884
+msgid "Connection rejected by SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1321
+msgid "Connection:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437
+msgid "Contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1041
+msgid "Continue"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: fbus-3810.c:977
+msgid "Couldn't open FB38 device: "
+msgstr "Openen FB38-Device mislukt: "
+
+#: fbus-6110.c:2206
+msgid "Couldn't open FB61 device: "
+msgstr "Openen FB61-Device mislukt: "
+
+#: fbus-6110.c:658
+msgid "Couldn't open FB61 infrared device: "
+msgstr ""
+
+#: virtmodem.c:179
+msgid "Couldn't open pty!\n"
+msgstr ""
+
+#: gnokii.c:679
+msgid "Couldn't read from stdin!\n"
+msgstr "Lezen van stdin mislukt!\n"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: gnokii.c:1756
+msgid "DC: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:765
+msgid "DTMF"
+msgstr ""
+
+#: fbus-6110.c:2134
+msgid "DTR is %s.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: gnokii.c:2101
+msgid "Data call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Date"
+msgstr ""
+
+#: gnokii.c:1024
+msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:206
+msgid "Date: "
+msgstr ""
+
+#: gnokii.c:1650
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Datum: %4d/%02d/%02d\n"
+
+#: fbus-3810.c:1764
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Verwijderen SMS van geheugenlocatie mislukt!"
+
+#: xgnokii/xgnokii_contacts.c:842
+msgid "Delete entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2502
+msgid "Delete entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:303
+msgid "Delete message"
+msgstr ""
+
+#: gnokii.c:1162
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr "Verwijderen SMS %s %d mislukt!(%d)\n\n"
+
+#: gnokii.c:1155
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d verwijderd.\n"
+
+#: fbus-6110.c:3809
+msgid "Delivered"
+msgstr ""
+
+#: fbus-6110.c:3705
+msgid "Delivery Report\n"
+msgstr ""
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2509
+msgid "Dial voice"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:873
+msgid "Do you want delete selected entries?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1380
+msgid "Don't save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494
+msgid "Duplicate entry"
+msgstr ""
+
+#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060
+msgid "E-Mail"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1700
+msgid "E-Mail:"
+msgstr ""
+
+#: gnokii.c:1759
+msgid "EN: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:152
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:164
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:182
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1411
+msgid "Edit"
+msgstr ""
+
+#: xgnokii/xgnokii.c:978
+msgid "Edit SMS Setting"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498
+msgid "Edit entry"
+msgstr ""
+
+#: fbus-6110.c:2565 gnokii.c:821
+msgid "Email"
+msgstr ""
+
+#: gnokii.c:1213
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii.c:1729
+msgid "Entering monitor mode...\n"
+msgstr "Monitor modus wordt gestart...\n"
+
+#: xgnokii/xgnokii_common.c:45
+msgid "Error"
+msgstr ""
+
+#: fbus-6110.c:3860 fbus-6110.c:3953
+msgid "Error in SME"
+msgstr ""
+
+#: xgnokii/xgnokii.c:722
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:728
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: gnokii.c:1219
+msgid "Error: invalid code\n"
+msgstr ""
+
+#: fbus-3810.c:1564
+msgid "Explore Write failed!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1791
+msgid "Export"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2483
+msgid "Export to file"
+msgstr ""
+
+#: gnokii.c:1762
+msgid "FD: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3828
+msgid "Failed"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2004
+msgid "Familly"
+msgstr ""
+
+#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046
+msgid "Fax"
+msgstr ""
+
+#: gnokii.c:2100
+msgid "Fax call active: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1676
+msgid "Fax:"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086
+msgid "Find"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Format"
+msgstr ""
+
+#: gnokii.c:1960
+msgid "Format problem on line %d [%s]\n"
+msgstr "Opmaakprobleem op regel %d [%s]\n"
+
+#: xgnokii/xgnokii_sms.c:292
+msgid "Forward Message"
+msgstr ""
+
+#: rlp-common.c:621
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2006
+msgid "Friends"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:198
+msgid "From: "
+msgstr ""
+
+#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883
+msgid "Function not implemented in %s model!\n"
+msgstr "Funktie is (nog) niet beschikbaar op model %s!\n"
+
+#: gnokii.c:72
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Jan\355k ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+
+#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS int mislukt! (Model niet ondersteund?). Stop.\n"
+
+#: gnokii.c:1065
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr "GetSMS %s %d mislukt!(%d)\n"
+
+#: gnokii.c:1403
+msgid "Getting Logo.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1527
+msgid "Getting entries"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Group"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1766
+msgid "Group %d:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1757
+msgid "Groups"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1750
+msgid "Groups names"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786
+msgid "Help"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1779
+msgid "Help viewer"
+msgstr ""
+
+#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM Link niet geinitialiseerd. Stop. \n"
+
+#: gnokii.c:2150
+msgid "IMEI: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1061
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2099
+msgid "Import"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2479
+msgid "Import from file"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:337
+msgid "Inbox"
+msgstr ""
+
+#: fbus-3810.c:2178
+msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+msgstr "Inkomend SMS-bericht %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n"
+
+#: fbus-3810.c:1853
+msgid "Incoming call - status %02x %02x %02x, Number %s.\n"
+msgstr ""
+
+#: fbus-3810.c:1992
+msgid "Incoming call answered.\n"
+msgstr "Inkomende oproep beantwoord.\n"
+
+#: fbus-3810.c:1964
+msgid "Incoming call terminated.\n"
+msgstr "Inkomende oproep beeindigd.\n"
+
+#: gnokii.c:1780
+msgid "Incoming call: %s\n"
+msgstr "Inkomende oproep: %s\n"
+
+#: fbus-6110.c:3880
+msgid "Incompatibile destination"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1297
+msgid "Init length:"
+msgstr ""
+
+#: gnokii.c:1730
+msgid "Initialising GSM interface...\n"
+msgstr "Bezig met initialiseren GSM interface...\n"
+
+#: fbus-6110.c:4281
+msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n"
+msgstr ""
+
+#: gnokii.c:1053
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii.c:2102
+msgid "Keyboard lock: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: gnokii.c:1765
+msgid "LD: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1788
+msgid "Leaving monitor mode...\n"
+msgstr "Monitor modus wordt beeindigd...\n"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr ""
+
+#: gnokii.c:1448
+msgid "Logo file error.\n"
+msgstr ""
+
+#: gnokii.c:1768
+msgid "MC: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-3810.c:1108
+msgid "MT Fail %02x"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1083
+msgid "Max. Time"
+msgstr ""
+
+#: xgnokii/xgnokii.c:452
+msgid "Max. time"
+msgstr ""
+
+#: fbus-6110.c:2599 gnokii.c:855
+msgid "Maximum time"
+msgstr ""
+
+#: gnokii.c:1489
+msgid "Meeting\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2433
+msgid "Memory"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: gnokii.c:1888
+msgid "Memory type %s not supported!\n"
+msgstr "Geheugentype %s wordt niet ondersteund!\n"
+
+#: xgnokii/xgnokii_contacts.c:733
+msgid "Memory:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Message"
+msgstr ""
+
+#: gnokii.c:830
+msgid "Message validity is "
+msgstr ""
+
+#: fbus-6110.c:3370
+msgid "Message: Alarm\n"
+msgstr "Bericht: Alarm\n"
+
+#: fbus-6110.c:3348
+msgid "Message: Alarm set correctly\n"
+msgstr "Bericht: Alarm correct ingesteld\n"
+
+#: fbus-6110.c:3582
+msgid "Message: Calendar Alarm active\n"
+msgstr ""
+
+#: fbus-6110.c:3556
+msgid "Message: Calendar note can't be deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3545
+msgid "Message: Calendar note deleted\n"
+msgstr ""
+
+#: fbus-6110.c:3566
+msgid "Message: Calendar note deleting error\n"
+msgstr ""
+
+#: fbus-6110.c:3523
+msgid "Message: Calendar note error\n"
+msgstr ""
+
+#: fbus-6110.c:3513
+msgid "Message: Calendar note not available\n"
+msgstr ""
+
+#: fbus-6110.c:3477
+msgid "Message: Calendar note received.\n"
+msgstr "Bericht: Kalender niet ontvangen.\n"
+
+#: fbus-6110.c:3421 fbus-6110.c:3431
+msgid "Message: Calendar note write failed!\n"
+msgstr ""
+
+#: fbus-6110.c:3411
+msgid "Message: Calendar note write succesfull!\n"
+msgstr ""
+
+#: fbus-6110.c:2421
+msgid "Message: Call answered.\n"
+msgstr "Bericht: Oproep beantwoord.\n"
+
+#: fbus-6110.c:2432
+msgid "Message: Call ended by your phone.\n"
+msgstr "Bericht: Oproep verbroken door toestel.\n"
+
+#: fbus-6110.c:2361
+msgid "Message: Call message, type 0x03:"
+msgstr ""
+
+#: fbus-6110.c:2456
+msgid "Message: Call message, type 0x0a:"
+msgstr ""
+
+#: fbus-6110.c:2837
+msgid "Message: Caller group data received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:2855
+msgid "Message: Caller group data set correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:2817
+msgid "Message: Caller group logo etc.\n"
+msgstr ""
+
+#: fbus-6110.c:3332
+msgid "Message: Date and time\n"
+msgstr "Bericht: Datum en tijd\n"
+
+#: fbus-6110.c:3302
+msgid "Message: Date and time set correctly\n"
+msgstr "Bericht: Datum en tijd correct ingesteld\n"
+
+#: fbus-6110.c:3312 fbus-6110.c:3358
+msgid "Message: Date and time set error\n"
+msgstr ""
+
+#: fbus-6110.c:2847
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr ""
+
+#: fbus-6110.c:2863
+msgid "Message: Error attempting to set caller group data\n"
+msgstr ""
+
+#: fbus-6110.c:3113
+msgid "Message: Error getting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:3078
+msgid "Message: Error setting operator logo!\n"
+msgstr ""
+
+#: fbus-6110.c:2387
+msgid "Message: Incoming call alert:\n"
+msgstr "Bericht: Inkomende oproep:\n"
+
+#: fbus-6110.c:2786
+msgid "Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+
+#: fbus-6110.c:2779
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr ""
+
+#: fbus-6110.c:2793
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr ""
+
+#: fbus-6110.c:2760
+msgid "Message: Memory status received:\n"
+msgstr "Bericht: Geheugenstatus ontvangen:\n"
+
+#: fbus-6110.c:4133
+msgid "Message: Mobile phone identification received:\n"
+msgstr ""
+
+#: fbus-6110.c:4084
+msgid "Message: Netmonitor correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:4094
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr ""
+
+#: fbus-6110.c:3215
+msgid "Message: Network informations:\n"
+msgstr ""
+
+#: fbus-6110.c:3088
+msgid "Message: Operator Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3069
+msgid "Message: Operator logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3104
+msgid "Message: Operator logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:3693
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr ""
+
+#: fbus-6110.c:2933
+msgid "Message: Phone status received:\n"
+msgstr ""
+
+#: fbus-6110.c:2655
+msgid "Message: Phonebook entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2739
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr ""
+
+#: fbus-6110.c:2693
+msgid "Message: Phonebook read entry error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2722
+msgid "Message: Phonebook written correctly.\n"
+msgstr ""
+
+#: fbus-6110.c:3702
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr ""
+
+#: fbus-6110.c:2374
+msgid "Message: Remote end hang up.\n"
+msgstr ""
+
+#: fbus-6110.c:2528
+msgid "Message: SMS Center correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:2621
+msgid "Message: SMS Center error received:\n"
+msgstr ""
+
+#: fbus-6110.c:2544
+msgid "Message: SMS Center received:\n"
+msgstr ""
+
+#: fbus-6110.c:2506
+msgid "Message: SMS Message Received\n"
+msgstr ""
+
+#: fbus-6110.c:2486
+msgid "Message: SMS Message correctly sent.\n"
+msgstr ""
+
+#: fbus-6110.c:4039
+msgid "Message: SMS Status Received\n"
+msgstr ""
+
+#: fbus-6110.c:4053
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr ""
+
+#: fbus-6110.c:4029
+msgid "Message: SMS deleted successfully.\n"
+msgstr ""
+
+#: fbus-6110.c:3998
+msgid "Message: SMS reading failed.\n"
+msgstr ""
+
+#: fbus-6110.c:3131
+msgid "Message: Security Code status received: "
+msgstr ""
+
+#: fbus-6110.c:3179
+msgid "Message: Security code accepted.\n"
+msgstr ""
+
+#: fbus-6110.c:3189
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr ""
+
+#: fbus-6110.c:2497
+msgid "Message: Sending SMS Message failed.\n"
+msgstr ""
+
+#: fbus-6110.c:2887
+msgid "Message: Speed dial entry error\n"
+msgstr ""
+
+#: fbus-6110.c:2874
+msgid "Message: Speed dial entry received:\n"
+msgstr ""
+
+#: fbus-6110.c:2897
+msgid "Message: Speed dial entry set.\n"
+msgstr ""
+
+#: fbus-6110.c:2907
+msgid "Message: Speed dial entry setting error.\n"
+msgstr ""
+
+#: fbus-6110.c:3024
+msgid "Message: Startup Logo received.\n"
+msgstr ""
+
+#: fbus-6110.c:3062
+msgid "Message: Startup logo correctly set.\n"
+msgstr ""
+
+#: fbus-6110.c:3053
+msgid "Message: Startup logo received but not requested!\n"
+msgstr ""
+
+#: fbus-6110.c:4177
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr ""
+
+#: fbus-6110.c:4195
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr ""
+
+#: fbus-6110.c:2800
+msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+
+#: fbus-6110.c:2468
+msgid "Message: Unknown message of type 0x01\n"
+msgstr ""
+
+#: fbus-6110.c:2917
+msgid "Message: Unknown message of type 0x03\n"
+msgstr ""
+
+#: fbus-6110.c:3006
+msgid "Message: Unknown message of type 0x04\n"
+msgstr ""
+
+#: fbus-6110.c:3245
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr ""
+
+#: fbus-6110.c:3388
+msgid "Message: Unknown message of type 0x11\n"
+msgstr ""
+
+#: fbus-6110.c:3591
+msgid "Message: Unknown message of type 0x13\n"
+msgstr ""
+
+#: fbus-6110.c:4206
+msgid "Message: Unknown message.\n"
+msgstr ""
+
+#: fbus-6110.c:3606
+msgid "Message: the rest of the SMS message received.\n"
+msgstr ""
+
+#: gnokii.c:804
+msgid "Messages sent as "
+msgstr ""
+
+#: fbus-3810.c:2273
+msgid "Mobile phone identification received:\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1285
+msgid "Model:"
+msgstr ""
+
+#: gnokii.c:2151
+msgid "Model: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4419
+msgid "Msg Dest: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4425
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+
+#: fbus-3810.c:1444
+msgid "Msg Len: %02x "
+msgstr "Lengte bericht: %02x"
+
+#: fbus-6110.c:4420
+msgid "Msg Source: %s\n"
+msgstr ""
+
+#: fbus-6110.c:4422
+msgid "Msg Type: %02x\n"
+msgstr "Bericht type: %02x\n"
+
+#: fbus-3810.c:1443
+msgid "Msg Type: %02x "
+msgstr "Type bericht: %02x"
+
+#: fbus-6110.c:4424
+msgid "Msg Unknown: %02x\n"
+msgstr "Bericht onbekend: %02x\n"
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433
+msgid "Name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708
+msgid "Name:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr ""
+
+#: gnokii.c:1783
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490
+msgid "New entry"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:288
+msgid "New message"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:98
+msgid "No"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2009
+msgid "No group"
+msgstr ""
+
+#: fbus-6110.c:3896
+msgid "No internetworking available"
+msgstr ""
+
+#: fbus-6110.c:3848 fbus-6110.c:3941
+msgid "No response from SME"
+msgstr ""
+
+#: fbus-6110.c:3888
+msgid "Not obtainable"
+msgstr ""
+
+#: fbus-6110.c:3712
+msgid "Not read\n"
+msgstr ""
+
+#: fbus-6110.c:3698
+msgid "Not sent\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433
+msgid "Number"
+msgstr ""
+
+#: fbus-3810.c:2338
+msgid "Number field empty."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:721
+msgid "Number:"
+msgstr ""
+
+#: fbus-3810.c:2341
+msgid "Number: "
+msgstr "Nummer: "
+
+#: fbus-6110.c:3688
+msgid "Number: %d\n"
+msgstr ""
+
+#: gnokii.c:1771
+msgid "ON: Used %d, Free %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296
+msgid "Ok"
+msgstr ""
+
+#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222
+msgid "Options"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2008
+msgid "Other"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:343
+msgid "Outbox"
+msgstr ""
+
+#: fbus-3810.c:2006
+msgid "Outgoing call answered - status bytes %02x %02x %02x.\n"
+msgstr "Abgehender Anruf beantwortet - Statusbytes %02x %02x %02x.\n"
+
+#: fbus-3810.c:1950
+msgid "Outgoing call terminated (0x10 message).\n"
+msgstr "Abgehender Anruf beendet (0x10 Nachricht).\n"
+
+#: fbus-3810.c:1978
+msgid "Outgoing call terminated (0x12 message).\n"
+msgstr "Abgehender Anruf beendet (0x12 Nachricht).\n"
+
+#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142
+msgid "Overwrite file?"
+msgstr ""
+
+#: fbus-6110.c:4401
+msgid "PC"
+msgstr ""
+
+#: fbus-6110.c:4496
+msgid "PC: "
+msgstr ""
+
+#: fbus-3810.c:1377
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN-Code is (wellicht) ingegeven.\n"
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053
+msgid "Paging"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1108
+msgid "Pattern:"
+msgstr ""
+
+#: fbus-6110.c:3925
+msgid "Pending"
+msgstr ""
+
+#: fbus-6110.c:3871
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:4398
+msgid "Phone"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1258
+msgid "Phone and connection type"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1247
+msgid "Phone memory..."
+msgstr ""
+
+#: fbus-3810.c:1386
+msgid "Phone powering off..."
+msgstr "Toestel schakelt uit..."
+
+#: gnokii.c:1753
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Toestel: Gebruikt %d, beschikbaar %d\n"
+
+#: fbus-6110.c:4282
+msgid "Please report it ...\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1272
+msgid "Port:"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "Power Source: %s\n"
+msgstr "Voedingstype: %s\n"
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949
+msgid "Quality of service not aviable"
+msgstr ""
+
+#: gnokii.c:1774
+msgid "RC: Used %d, Free %d\n"
+msgstr ""
+
+#: gnokii.c:1741
+msgid "RFLevel: %d\n"
+msgstr "Signaalniveau: %d\n"
+
+#: rlp-common.c:643
+msgid "RLP state 0.\n"
+msgstr ""
+
+#: rlp-common.c:660
+msgid "RLP state 1.\n"
+msgstr ""
+
+#: fbus-6110.c:2135
+msgid "RTS is %s.\n"
+msgstr ""
+
+#: fbus-6110.c:3710
+msgid "Read\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2468
+msgid "Read from phone"
+msgstr ""
+
+#: gnokii.c:1010
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii.c:1481
+msgid "Reminder\n"
+msgstr ""
+
+#: fbus-6110.c:3876
+msgid "Remote procedure error"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "Reply message"
+msgstr ""
+
+#: fbus-3810.c:1647
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1634
+msgid "Request Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-3810.c:1741
+msgid "Request SMS Mem Loc Write failed!"
+msgstr ""
+
+#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967
+msgid "Reserved/Specific to SC: %x"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: gnokii.c:997
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: gnokii.c:2152
+msgid "Revision: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1258
+msgid "SIM memory..."
+msgstr ""
+
+#: gnokii.c:1750
+msgid "SIM: Used %d, Free %d\n"
+msgstr ""
+
+#: fbus-6110.c:3908
+msgid "SM Deleted by SC Administration"
+msgstr ""
+
+#: fbus-6110.c:3900
+msgid "SM Validity Period Expired"
+msgstr ""
+
+#: fbus-6110.c:3904
+msgid "SM deleted by originating SME"
+msgstr ""
+
+#: fbus-6110.c:3912
+msgid "SM does not exist"
+msgstr ""
+
+#: fbus-6110.c:3817
+msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+
+#: fbus-6110.c:3814
+msgid "SM received by the SME"
+msgstr ""
+
+#: fbus-6110.c:3820
+msgid "SM replaced by the SC"
+msgstr ""
+
+#: fbus-6110.c:3844 fbus-6110.c:3937
+msgid "SME busy"
+msgstr ""
+
+#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382
+msgid "SMS"
+msgstr ""
+
+#: fbus-3810.c:2332
+msgid "SMS Message Center Data status bytes ="
+msgstr ""
+
+#: gnokii.c:1777
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS Berichten: Ongelezen %d, Aantal %d\n"
+
+#: fbus-3810.c:559
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr ""
+
+#: gnokii.c:782 gnokii.c:1360
+msgid "SMS Send failed (error=%d)\n"
+msgstr ""
+
+#: gnokii.c:866
+msgid "SMS center can not be found :-(\n"
+msgstr ""
+
+#: gnokii.c:1059
+msgid "SMS location %s %d empty.\n"
+msgstr ""
+
+#: gnokii.c:2103
+msgid "SMS storage full: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:328
+msgid "SMS's"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1365
+msgid "Save changes?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2472
+msgid "Save to phone"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1285
+msgid "Saving entries"
+msgstr ""
+
+#: gnokii.c:1237
+msgid "Security code status: "
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2293
+msgid "Select contacts"
+msgstr ""
+
+#: fbus-3810.c:1718
+msgid "Send SMS block %d failed!"
+msgstr "Verzenden SMS-Block %d mislukt!"
+
+#: fbus-3810.c:1691
+msgid "Send SMS header failed!"
+msgstr "Verzenden SMS-Header mislukt!"
+
+#: gnokii.c:780 gnokii.c:1358
+msgid "Send succeeded!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Sender"
+msgstr ""
+
+#: gnokii.c:1037
+msgid "Sender: %s Msg Center: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1031
+msgid "Sending Format:"
+msgstr ""
+
+#: gnokii.c:1454
+msgid "Sending Logo.\n"
+msgstr ""
+
+#: fbus-3810.c:456 fbus-6110.c:1870
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Verzend SMS naar %s via SMS-Dienst %s\n"
+
+#: gnokii.c:984
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT"
+msgstr ""
+
+#: fbus-6110.c:3696
+msgid "Sent\n"
+msgstr ""
+
+#: fbus-3810.c:1445
+msgid "Sequence Number: %02x "
+msgstr "Volgnummer: %02x"
+
+#: fbus-3810.c:1008
+msgid "Serial TIOCMGET failed: "
+msgstr ""
+
+#: fbus-3810.c:1015
+msgid "Serial TIOCMSET failed: "
+msgstr ""
+
+#: fbus-6110.c:2133
+msgid "Serial flags dump:\n"
+msgstr ""
+
+#: fbus-6110.c:3852 fbus-6110.c:3945
+msgid "Service rejected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:399
+msgid "Set %d"
+msgstr ""
+
+#: fbus-3810.c:1535 fbus-3810.c:1610
+msgid "Set Mem Loc Write failed!"
+msgstr "Opslaan geheugenlocatie mislukt!"
+
+#: xgnokii/xgnokii.c:1219
+msgid "Set name"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1005
+msgid "Set name:"
+msgstr ""
+
+
+#: fbus-6110.c:2175
+msgid "Setting FBUS communication...\n"
+msgstr "Bezig met FBUS Communicatie initialiseren...\n"
+
+#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258
+msgid "Short Message Service"
+msgstr ""
+
+#: xgnokii/xgnokii.c:272
+msgid "Short Message received"
+msgstr ""
+
+#: virtmodem.c:191
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: gnokii.c:1996
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: fbus-3810.c:1415
+msgid "Standard Ack write failed!"
+msgstr "Standaard bevestiging (ACK) sturen mislukt!"
+
+#: fbus-6110.c:764
+msgid "Starting IR mode...!\n"
+msgstr ""
+
+#: fbus-6110.c:3041
+msgid "Startup Text: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:254
+msgid "Status"
+msgstr ""
+
+#: fbus-3810.c:1936
+msgid "Status: Connection Status %02x Batt %02x RF %02x.\n"
+msgstr ""
+
+#: gnokii.c:1565 gnokii.c:2034
+msgid "Succesfully written!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: fbus-3810.c:1800
+msgid "TX_SendMessage - message too long!\n"
+msgstr ""
+
+#: fbus-3810.c:1826
+msgid "TX_SendMessage - write:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1652
+msgid "Telephone:"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: fbus-6110.c:3835
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr ""
+
+#: fbus-6110.c:3929
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr ""
+
+#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039
+msgid "Text"
+msgstr ""
+
+#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr "Text: %s\n"
+
+#: gnokii.c:1588
+msgid "The calendar note can not be deleted\n"
+msgstr ""
+
+#: gnokii.c:1526
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii.c:1688
+msgid "Time: %02d:%02d\n"
+msgstr "Tijd: %02d:%02d\n"
+
+#: gnokii.c:1651
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Tijd: %02d:%02d:%02d\n"
+
+#: fbus-6110.c:633
+msgid "Timeout in IR-mode\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1602
+msgid "Title:"
+msgstr ""
+
+#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: gnokii.c:1497
+msgid "Unknown\n"
+msgstr ""
+
+#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023
+msgid "Unknown memory type %s!\n"
+msgstr "Onbekend geheugentype %2!\n"
+
+#: fbus-6110.c:3283
+msgid "Unknown message of type 0x0d.\n"
+msgstr ""
+
+#: fbus-6110.c:3440
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr ""
+
+#: fbus-6110.c:4110
+msgid "Unknown message of type 0x40.\n"
+msgstr ""
+
+#: fbus-6110.c:2633
+msgid "Unknown message!\n"
+msgstr ""
+
+#: gnokii.c:641
+msgid "Unknown option: %d\n"
+msgstr ""
+
+#: fbus-6110.c:3707
+msgid "Unknown type\n"
+msgstr ""
+
+#: fbus-6110.c:3167 gnokii.c:1273
+msgid "Unknown!\n"
+msgstr ""
+
+#: rlp-common.c:448
+msgid "Unknown!!! "
+msgstr ""
+
+#: fbus-3810.c:1441
+msgid "Unknown: "
+msgstr "Onbekend: "
+
+#: gnokii.c:2097
+msgid "Unknown: %s\n"
+msgstr ""
+
+#: gnokii.c:2098
+msgid "Unread SMS: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: gnokii.c:467
+msgid "Use '%s --help' for usage informations.\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1559
+msgid "User"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2005
+msgid "VIP"
+msgstr ""
+
+#: virtmodem.c:87
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:77
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: virtmodem.c:82
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1219
+msgid "Validity"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1075
+msgid "Validity Period:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1793
+msgid "Viewer:"
+msgstr ""
+
+#: gnokii.c:2099
+msgid "Voice call: %s\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: gnokii.c:2184
+msgid "What kind of reset do you want??\n"
+msgstr ""
+
+#: gnokii.c:1976
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: gnokii.c:1974
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+
+#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298
+msgid "Write failed!"
+msgstr "Opslaan mislukt!"
+
+#: gnokii.c:651
+msgid "Wrong number of arguments\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:89
+msgid "Yes"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1404
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: fbus-6110.c:4164
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr ""
+
+#: fbus-6110.c:4570
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "automatic"
+msgstr ""
+
+#: gnokii.c:1747
+msgid "battery"
+msgstr ""
+
+#: fbus-6110.c:2983
+msgid "battery\n"
+msgstr ""
+
+#: fbus-6110.c:2949
+msgid "call in progress\n"
+msgstr "Oproep gaande\n"
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "down"
+msgstr ""
+
+#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94
+msgid "error opening %s, using default config\n"
+msgstr ""
+
+#: gnokiid.c:51
+msgid "gnokiid Version %s"
+msgstr ""
+
+#: virtmodem.c:187
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr ""
+
+#: fbus-6110.c:3226
+msgid "home network selected"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1325
+msgid "infrared"
+msgstr ""
+
+#: fbus-6110.c:3235
+msgid "manual"
+msgstr ""
+
+#: fbus-6110.c:3229
+msgid "not registered in the network"
+msgstr ""
+
+#: fbus-6110.c:3162 gnokii.c:1268
+msgid "nothing to enter.\n"
+msgstr ""
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "off"
+msgstr "uit"
+
+#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103
+msgid "on"
+msgstr "on-line"
+
+#: xgnokii/xgnokii_contacts.c:737
+msgid "phone"
+msgstr ""
+
+#: fbus-6110.c:2961
+msgid "powered off\n"
+msgstr "off-line\n"
+
+#: xgnokii/xgnokii_sms.c:71
+msgid "read"
+msgstr ""
+
+#: fbus-6110.c:2940
+msgid "registered within the network\n"
+msgstr "geregistreerd op het netwerk\n"
+
+#: xgnokii/xgnokii_sms.c:69
+msgid "report"
+msgstr ""
+
+#: fbus-6110.c:3228
+msgid "requesting network"
+msgstr ""
+
+#: fbus-3810.c:1052
+msgid "restarting.\n"
+msgstr "Herstart.\n"
+
+#: fbus-6110.c:3227
+msgid "roaming network"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:119
+msgid "sent"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1329
+msgid "serial"
+msgstr ""
+
+#: fbus-6110.c:3230
+msgid "unknown"
+msgstr ""
+
+#: fbus-6110.c:2967 fbus-6110.c:2989
+msgid "unknown\n"
+msgstr "onbekend\n"
+
+#: xgnokii/xgnokii_sms.c:73
+msgid "unread"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:121
+msgid "unsent"
+msgstr ""
+
+#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137
+msgid "up"
+msgstr ""
+
+#: fbus-6110.c:3142 gnokii.c:1248
+msgid "waiting for PIN.\n"
+msgstr ""
+
+#: fbus-6110.c:3147 gnokii.c:1253
+msgid "waiting for PIN2.\n"
+msgstr ""
+
+#: fbus-6110.c:3152 gnokii.c:1258
+msgid "waiting for PUK.\n"
+msgstr ""
+
+#: fbus-6110.c:3157 gnokii.c:1263
+msgid "waiting for PUK2.\n"
+msgstr ""
+
+#: fbus-6110.c:3137 gnokii.c:1243
+msgid "waiting for Security Code.\n"
+msgstr ""
+
+#: fbus-6110.c:2955
+msgid "waiting for security code\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:824
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Jan\355k ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+# msgid "Number field emtpy."
+# msgstr "Nummer veld leeg."
+#
+# msgid "locked"
+# msgstr "uit"
+#
+# msgid "unlocked"
+# msgstr "aan"
+#
+# msgid "GNOKII Version %s"
+# msgstr "GNOKII Versie %s"
+#
+# msgid "Enter your PIN: "
+# msgstr "Geef uw PIN-Code:"
+#
+# msgid " %d. SMS Center number is %s\n"
+# msgstr " %d. Nummer SMS dienst is %s\n"
+#
+# msgid "Date/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n"
+# msgstr "Datum/tijd %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n"
+#
+# msgid "Error: invalid PIN\n"
+# msgstr "Fout: Ongedige PIN-Code\n"
+#
+# msgid " Text: "
+# msgstr " Tekst: "
+#
+# msgid " usage: gnokii {--help|--monitor|--version}"
+# msgstr " gebruik: gnokii {--help|--monitor|--version}"
+#
+# msgid "waiting for pin\n"
+# msgstr "bezig met wachten op PIN"
+#
+# msgid ""
+# " Code Error\n"
+# " You're not my big owner :-)\n"
+# msgstr " Code fout!\n"
+#
+# msgid " Code Accepted\n"
+# msgstr " Code Ok\n"
+#
+# msgid "Message: Keyboard lock\n"
+# msgstr "Bericht: Toetsenbord uit\n"
+#
+# msgid " Keyboard is %s\n"
+# msgstr " Toetsen zijn %s\n"
+#
+# msgid " Network name: %s\n"
+# msgstr " Netwerk Naam: %s\n"
+#
+# msgid "Status: RF %02x, Batt %02x, Connection Status %02x.\n"
+# msgstr "Status: Signaal %02x, Batt %02x, Verbindingsstatus %02x.\n"
+#
+# msgid "Empty location: %s %d!\n"
+# msgstr "Geen SMS bericht op Locatie: %s %d!\n"
+#
+# msgid "Message: Memory status error, probably not authorized by PIN\n"
+# msgstr "Bericht: Geheugenstatus fout, waarschijnlijk niet geauthoriserd door PIN\n"
+#
+# msgid "SMS Send attempt failed, trying again (%d)\n"
+# msgstr "SMS verzenden mislukt, automatische herhaling (%d)\n"
+#
+# msgid "Incomming call - status %02x %02x %02x, Number %s.\n"
+# msgstr "Inkomende oproep - Status %02x %02x %02x, Nummer %s.\n"
+#
+# This was the dutch version
+#
+# ARE THESE NECESSARY? If so, somebody should do 'em some day :)
+#
+# goran (@8hz.com)
+#
+#
+# msgid "GSM/fbus init failed! (Unknown model ?). Quitting. \n"
+# msgstr "Initialisierung des GSM/fbus fehlgeschlagen! (Unbekanntes Modell?). Beenden. \n"
+#
+# msgid "SMS %s %d Unknown bytes: %02x %02x %02x %02x %02x %02x Length: %d\n"
+# msgstr "SMS %s %d unbekannte Bytes: %02x %02x %02x %02x %02x %02x Länge: %d\n"
+#
+# msgid "SMS Send OK. Result code 0x%02x\n"
+# msgstr "SMS-Versand erfolgreich. Ergebnis-Code 0x%02x\n"
+#
+# msgid "0x65 0x15 means SMS sending not enabled by network (probably...)\n"
+# msgstr "0x65 0x15: Verschicken von SMS-Nachrichten nicht vom Provider freigeschaltet (wahrscheinlich...)\n"
+#
+# msgid "Write Succeeded: memory type:%s, loc:%d, name: %s, number: %s\n"
+# msgstr "Speichern erfolgreich: Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n"
+#
+# msgid "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. <hugh@linuxcare.com>\n"
+# msgstr "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. <hugh@linuxcare.com>\n"
+#
+# msgid "SMS Send failed, gnokii error code was %d, network returned 0x%02x 0x%02x\n"
+# msgstr "Senden der SMS-Nachricht fehlgeschlagen, gnokii Fehler-Nummer war %d, Netz antwortete mit 0x%02x 0x%02x\n"
+#
+# msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+# msgstr "Hmmm... GSM_LinkOK nie erhalten. Beenden. \n"
+#
+# msgid "Interrupted\n"
+# msgstr "Unterbrochen\n"
+#
+# msgid "Monitor mode...\n"
+# msgstr "Monitor Modus...\n"
+#
+# msgid "Write FAILED(%d): memory type:%s, loc:%d, name: %s, number: %s\n"
+# msgstr "Speichern erfolglos(%d): Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n"
+#
+# msgid " Built %s %s for %s on %s \n"
+# msgstr " Kompiliert: %s %s für Modell %s an Port %s \n"
+#
+# msgid "%s|%d|Bad location or other error!\n"
+# msgstr "%s|%d|Falsche Zelle oder anderer Fehler!\n"
+#
--- /dev/null
+# This is the German locale definition for Gnokii.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Daniel Egger <Daniel.Egger@suse.de>, 1999, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii\n"
+"POT-Creation-Date: 2000-05-08 21:27+0200\n"
+"PO-Revision-Date: 2000-05-08 18:25:30+0100\n"
+"Last-Translator: Jacek Fiok <j.fiok@zodiac.mimuw.edu.pl>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Xgettext-Options: -a -k_ -s -v -d gnokii\n"
+"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c "
+"fbus-6110.c gnokii.c gsm-api.c\n"
+
+#: common/fbus-3810.c:525 common/fbus-6110.c:2037
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Wysy³am SMS do %s przez centrum wiadomo¶ci %s\n"
+
+#: common/fbus-3810.c:629
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Próba wys³ania wiadomo¶ci SMS zakoñczona niepowodzeniem, nastêpna próba (%d z %d)\n"
+
+#: common/fbus-3810.c:1161
+msgid "Couldn't open FB38 device: "
+msgstr "Nie mog³em otworzyæ urz±dzenia FB38: "
+
+#: common/fbus-3810.c:1253
+msgid "restarting.\n"
+msgstr "ponowne uruchamianie.\n"
+
+#: common/fbus-3810.c:1309
+#, c-format
+msgid "MT Fail %02x"
+msgstr "Niepowodzenie MT %02x"
+
+#: common/fbus-3810.c:1316 common/mbus-6160.c:689
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "Niepowodzenie CS %02x != %02x"
+
+#: common/fbus-3810.c:1430
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 Odpowied¼ na rejestracjê 0x%02x\n"
+
+#: common/fbus-3810.c:1446
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 Odpowied¼ na rejestracjê 0x%02x\n"
+
+#: common/fbus-3810.c:1447
+msgid "SIM access: %s.\n"
+msgstr "Dostêp do SIM: %s\n"
+
+#: common/fbus-3810.c:1523
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS zapisany pod adresem 0x%02x\n"
+
+#: common/fbus-3810.c:1533
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Zapisywanie SMSa nie powiod³o siê: 0x%02x\n"
+
+#: common/fbus-3810.c:1654
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN [prawdopodobnie] wprowadzony.\n"
+
+#: common/fbus-3810.c:1663
+msgid "Phone powering off..."
+msgstr "Wy³±czanie zasilania telefonu..."
+
+#: common/fbus-3810.c:1692
+msgid "Standard Ack write failed!"
+msgstr "Wys³anie standardowego potwierdzenia nie powiod³o siê!"
+
+#: common/fbus-3810.c:1718
+msgid "Unknown: "
+msgstr "Nieznany: "
+
+#: common/fbus-3810.c:1720
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Typ wiadomo¶ci: %02x"
+
+#: common/fbus-3810.c:1721
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "D³ugo¶æ wiadomo¶ci: %02x"
+
+#: common/fbus-3810.c:1722
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Numer sekwencyjny: %02x"
+
+#: common/fbus-3810.c:1723
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Suma kontrolna: %02x \n"
+" "
+
+#: common/fbus-3810.c:1815 common/fbus-3810.c:1936
+msgid "Set Mem Loc Write failed!"
+msgstr "Operacja zapisu do komórki pamiêci nieudana!"
+
+#: common/fbus-3810.c:1860
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - zapisywanie:"
+
+#: common/fbus-3810.c:1875
+msgid "0x4a Write failed!"
+msgstr "0x4a Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1890
+msgid "Explore Write failed!"
+msgstr "Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1900
+msgid "0x3f Write failed!"
+msgstr "0x3f Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:1960
+msgid "Request Mem Loc Write failed!"
+msgstr "¯±danie zapisu do komórki pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:1973
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "¯±danie zapisu numerów IMEI/wersji/modelu nie powiod³o siê!"
+
+#: common/fbus-3810.c:2016
+msgid "Send SMS header failed!"
+msgstr "Wys³anie nag³ówka wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2075
+msgid "Store SMS header failed!"
+msgstr "Zapisanie nag³ówka wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2100
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Wys³anie bloku %d wiadomo¶ci SMS nie powiod³o siê!"
+
+#: common/fbus-3810.c:2123
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "¯±danie zapisu wiadomo¶ci SMS do pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:2146
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Usuniêcie wiadomo¶ci SMS z pamiêci nie powiod³o siê!"
+
+#: common/fbus-3810.c:2165
+msgid "0x15 Write failed!"
+msgstr "0x15 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2182 common/mbus-6160.c:759
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - wiadomo¶æ za d³uga!\n"
+
+#: common/fbus-3810.c:2208 common/mbus-6160.c:788
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - zapisywanie:"
+
+#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368
+#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530
+#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688
+msgid "Write failed!"
+msgstr "Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2235
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Po³±czenie przychodz±ce - Typ: %s. %02x, Numer %s.\n"
+
+#: common/fbus-3810.c:2262
+msgid "0x27 Write failed!"
+msgstr "0x27 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2310
+msgid "0x4b Write failed!"
+msgstr "0x4b Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2329
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Status: %s. Baterie %02x RF %02x.\n"
+
+#: common/fbus-3810.c:2340
+msgid "0x10 Write failed!"
+msgstr "0x10 Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2344
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x10).\n"
+
+#: common/fbus-3810.c:2358
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Po³±czenie zakoñczone przez przeciwn± stronê (lub z siec).\n"
+
+#: common/fbus-3810.c:2372
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x12).\n"
+
+#: common/fbus-3810.c:2386
+msgid "Incoming call answered from phone.\n"
+msgstr "Po³±czenie przychodz±ce odebrane przez telefon.\n"
+
+#: common/fbus-3810.c:2400
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "%s po³±czenie ustanowione - status %02x %02x.\n"
+
+#: common/fbus-3810.c:2417
+msgid "0x2c Write failed!"
+msgstr "0x2c Operacja zapisu nieudana!"
+
+#: common/fbus-3810.c:2504
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Strefa czas.:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2571
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Przychodz±ca wiadomo¶æ SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Nadawca: %s(Typ %02x) "
+"Centrum wiadomo¶ci: %s\n"
+
+#: common/fbus-3810.c:2573
+msgid ""
+" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+" D³ugo¶æ wiadomo¶ci %d, pamiêæ wiadomo¶ci %d numer wiadomo¶ci %d, "
+"PID: %02x DCS: %02x Nieznane: %02x\n"
+
+#: common/fbus-3810.c:2666
+msgid "Mobile phone identification received:\n"
+msgstr "Otrzymano identyfikacjê telefonu:\n"
+
+#: common/fbus-3810.c:2667
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-3810.c:2669
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-3810.c:2671
+#, c-format
+msgid " Revision: %s\n"
+msgstr " Wersja: %s\n"
+
+#: common/fbus-3810.c:2739
+msgid "SMS Message Center Data:\n"
+msgstr "Dane centrum wiadomo¶ci SMS:\n"
+
+#: common/fbus-3810.c:2740
+msgid "Selected memory: 0x%02x\n"
+msgstr "Wybrana pamiêæ: 0x%02x\n"
+
+#: common/fbus-3810.c:2741
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Wiadomo¶ci w pamiêci aparatu: 0x%02x Nieprzeczytanych: 0x%02x\n"
+
+#: common/fbus-3810.c:2743
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Wiadomo¶ci na karcie SIM: 0x%02x Nieprzeczytanych: 0x%02x\n"
+
+#: common/fbus-3810.c:2745
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Odpowied¼ przez w³asne centrum wiadomo¶ci: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2747
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Raporty dorêczenia: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2749
+msgid "Messages sent as: 0x%02x\n"
+msgstr "Wiadomo¶ci wysy³ane jako: 0x%02x\n"
+
+#: common/fbus-3810.c:2750
+msgid "Message validity: 0x%02x\n"
+msgstr "Okres wa¿no¶ci wiadomo¶ci: 0x%02x\n"
+
+#: common/fbus-3810.c:2751
+msgid "Unknown: 0x%02x\n"
+msgstr "Nieznane: 0x%02x\n"
+
+#: common/fbus-3810.c:2754
+msgid "UnknownNumber field empty."
+msgstr "Nieznany: puste pole numeru."
+
+#: common/fbus-3810.c:2756
+msgid "UnknownNumber: "
+msgstr "Nieznany numer: "
+
+#: common/fbus-3810.c:2763
+msgid "Number field empty."
+msgstr "Puste pole numeru."
+
+#: common/fbus-3810.c:2766
+msgid "Number: "
+msgstr "Numer: "
+
+#: common/fbus-6110-ringtones.c:242
+msgid "File can not be opened!\n"
+msgstr "Nie mo¿na otworzyæ pliku!\n"
+
+#: common/fbus-6110.c:770
+msgid "Timeout in IR-mode\n"
+msgstr "Przekroczenie czasu oczekiwania w trybie IR\n"
+
+#: common/fbus-6110.c:802
+msgid "Couldn't open FB61 infrared device"
+msgstr "Nie mog³em otworzyæ urz±dzenia FB61"
+
+#: common/fbus-6110.c:870
+msgid "Starting IR mode...!\n"
+msgstr "Uruchamiam tryb IR...!\n"
+
+#: common/fbus-6110.c:2325
+msgid "Serial flags dump:\n"
+msgstr "Stan flag portu szeregowego:\n"
+
+#: common/fbus-6110.c:2326 common/mbus-640.c:893
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR jest %s.\n"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "up"
+msgstr "w³±czony"
+
+#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328
+#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894
+msgid "down"
+msgstr "wy³±czony"
+
+#: common/fbus-6110.c:2327 common/mbus-640.c:894
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS jest %s.\n"
+
+#: common/fbus-6110.c:2328
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR jest %s.\n"
+
+#: common/fbus-6110.c:2329
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS jest %s.\n"
+
+#: common/fbus-6110.c:2364
+msgid "Setting FBUS communication...\n"
+msgstr "Ustanawiam komunikacjê FBUS...\n"
+
+#: common/fbus-6110.c:2395
+msgid "Couldn't open FB61 device"
+msgstr "Nie mog³em otworzyæ urz±dzenia FB61"
+
+#: common/fbus-6110.c:2521
+msgid "Message: Call message, type 0x03:"
+msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, typ 0x03:"
+
+#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554
+#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620
+#, c-format
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Kolejny numer po³±czenia: %d\n"
+
+#: common/fbus-6110.c:2523 common/fbus-6110.c:2621
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Dok³adne znaczenie jeszcze nie jest znane, przykro mi :-(\n"
+
+#: common/fbus-6110.c:2536
+msgid "Message: Remote end hang up.\n"
+msgstr "Wiadomo¶æ: Zdalna strona roz³±czy³a siê.\n"
+
+#: common/fbus-6110.c:2549
+msgid "Message: Incoming call alert:\n"
+msgstr "Wiadomo¶æ: Ostrze¿enie o po³±czeniu:\n"
+
+#: common/fbus-6110.c:2555 common/fbus-6110.c:2835
+msgid " Number: "
+msgstr " Numer: "
+
+#: common/fbus-6110.c:2563 common/fbus-6110.c:2819
+msgid " Name: "
+msgstr " Nazwa: "
+
+#: common/fbus-6110.c:2584
+msgid "Message: Call answered.\n"
+msgstr "Wiadomo¶æ: Po³±czenie odebrane.\n"
+
+#: common/fbus-6110.c:2595
+msgid "Message: Call ended by your phone.\n"
+msgstr "Wiadomo¶æ: Po³±czenie zakoñczone przez Twój telefon.\n"
+
+#: common/fbus-6110.c:2619
+msgid "Message: Call message, type 0x0a:"
+msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, Typ 0x0a:"
+
+#: common/fbus-6110.c:2631
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x01\n"
+
+#: common/fbus-6110.c:2649
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Wiadomo¶æ: Wiadomo¶æ SMS wys³ana prawid³owo.\n"
+
+#: common/fbus-6110.c:2660
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Wiadomo¶æ: Wys³anie wiadomo¶ci SMS nie powiod³o siê.\n"
+
+#: common/fbus-6110.c:2669
+msgid "Message: SMS Message Received\n"
+msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n"
+
+#: common/fbus-6110.c:2670 common/fbus-6110.c:3997
+#, c-format
+msgid " SMS center number: %s\n"
+msgstr " Numer centrum wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:2674 common/fbus-6110.c:3998
+#, c-format
+msgid " Remote number: %s\n"
+msgstr " Zdalny numer: %s\n"
+
+#: common/fbus-6110.c:2675
+#, c-format
+msgid " Date: %s\n"
+msgstr " Data: %s\n"
+
+#: common/fbus-6110.c:2676
+msgid " SMS: "
+msgstr " SMS: "
+
+#: common/fbus-6110.c:2691
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Wiadomo¶æ: Poprawnie ustawione centrum wiadomo¶ci.\n"
+
+#: common/fbus-6110.c:2707
+msgid "Message: SMS Center received:\n"
+msgstr "Wiadomo¶æ: Otrzymano centrum wiadomo¶ci:\n"
+
+#: common/fbus-6110.c:2708
+#, c-format
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. Nazwa centrum wiadomo¶ci to %s\n"
+
+#: common/fbus-6110.c:2709
+#, c-format
+msgid " SMS Center number is %s\n"
+msgstr " Numer centrum wiadomo¶ci to %s\n"
+
+#: common/fbus-6110.c:2711
+msgid " SMS Center message format is "
+msgstr " Format wiadomo¶ci to "
+
+#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604
+#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335
+msgid "Text"
+msgstr "Tekst"
+
+#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608
+#: xgnokii/xgnokii.c:1349
+msgid "Paging"
+msgstr "Pager"
+
+#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612
+#: xgnokii/xgnokii.c:1342
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228
+#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: common/fbus-6110.c:2737
+msgid " SMS Center message validity is "
+msgstr " Okres wa¿no¶ci wiadomo¶ci to "
+
+#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084
+msgid "1 hour"
+msgstr "1 godzina"
+
+#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088
+msgid "6 hours"
+msgstr "6 godzin"
+
+#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092
+msgid "24 hours"
+msgstr "24 godziny"
+
+#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096
+msgid "72 hours"
+msgstr "72 godziny"
+
+#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656
+#: xgnokii/xgnokii.c:1414
+msgid "1 week"
+msgstr "1 tydzieñ"
+
+#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104
+msgid "Maximum time"
+msgstr "Czas maksymalny"
+
+#: common/fbus-6110.c:2784
+msgid "Message: SMS Center error received:\n"
+msgstr "Wiadomo¶æ: Otrzymano b³±d od centrum wiadomo¶ci:\n"
+
+#: common/fbus-6110.c:2785
+msgid " The request for SMS Center failed.\n"
+msgstr " ¯±danie do centrum wiadomo¶ci nie powiod³o siê.\n"
+
+#: common/fbus-6110.c:2796
+msgid "Unknown message!\n"
+msgstr "Nieznana wiadomo¶æ!\n"
+
+#: common/fbus-6110.c:2818
+msgid "Message: Phonebook entry received:\n"
+msgstr "Wiadomo¶æ: Otrzymano wpis ksi±¿ki telefonicznej:\n"
+
+#: common/fbus-6110.c:2855
+msgid " Date: "
+msgstr " Data: "
+
+#: common/fbus-6110.c:2857
+msgid " Time: "
+msgstr " Czas: "
+
+#: common/fbus-6110.c:2870
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu wpisu ksi±¿ki telefonicznej:\n"
+
+#: common/fbus-6110.c:2878
+msgid " Invalid memory type!\n"
+msgstr " Nieznany typ pamiêci!\n"
+
+#: common/fbus-6110.c:2888 common/fbus-6110.c:2926
+msgid " Unknown error!\n"
+msgstr " Nieznany b³±d!\n"
+
+#: common/fbus-6110.c:2899
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna zapisana prawid³owo.\n"
+
+#: common/fbus-6110.c:2916
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna nie zapisana - nazwa za d³uga.\n"
+
+#: common/fbus-6110.c:2937
+msgid "Message: Memory status received:\n"
+msgstr "Wiadomo¶æ: Otrzymano stan pamiêci:\n"
+
+#: common/fbus-6110.c:2939
+#, c-format
+msgid " Memory Type: %s\n"
+msgstr " Typ pamiêci: %s\n"
+
+#: common/fbus-6110.c:2940
+#, c-format
+msgid " Used: %d\n"
+msgstr " U¿ywane: %d\n"
+
+#: common/fbus-6110.c:2941
+#, c-format
+msgid " Free: %d\n"
+msgstr " Wolne: %d\n"
+
+#: common/fbus-6110.c:2956
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Wiadomo¶æ: B³±d stanu pamiêci, telefon jest prawdopodobnie wy³±czony.\n"
+
+#: common/fbus-6110.c:2963
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Wiadomo¶æ: B³±d stanu pamiêci, typ pamiêci nie obs³ugiwany przez ten model telefonu.\n"
+
+#: common/fbus-6110.c:2970
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Wiadomo¶æ: B³±d stanu pamiêci, czekam na kod zabezpieczaj±cy.\n"
+
+#: common/fbus-6110.c:2977
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Wiadomo¶æ: Nieznany b³±d stanu pamiêci, podtyp (MessageBuffer[4] = %02x\n"
+
+#: common/fbus-6110.c:2994
+msgid "Message: Caller group logo etc.\n"
+msgstr "Wiadomo¶æ: Logo grupy dzwoni±cych etc.\n"
+
+#: common/fbus-6110.c:2995
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Nazwa grupy dzwoni±cych: %s\n"
+
+#: common/fbus-6110.c:3015
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych otrzymane bez uprzedniego ¿±dania!\n"
+
+#: common/fbus-6110.c:3025
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Wiadomo¶æ: B³±d przy wyci±ganiu danych o grupie dzwoni±cych.\n"
+
+#: common/fbus-6110.c:3033
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3041
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu danych o grupie dzwoni±cych.\n"
+
+#: common/fbus-6110.c:3052
+msgid "Message: Speed dial entry received:\n"
+msgstr "Wiadomo¶æ: Wpis szybkiego wybierania otrzymany:\n"
+
+#: common/fbus-6110.c:3053
+#, c-format
+msgid " Location: %d\n"
+msgstr " Lokacja: %d\n"
+
+#: common/fbus-6110.c:3054
+#, c-format
+msgid " MemoryType: %s\n"
+msgstr " Typ pamiêci: %s\n"
+
+#: common/fbus-6110.c:3055
+#, c-format
+msgid " Number: %d\n"
+msgstr " Numer: %d\n"
+
+#: common/fbus-6110.c:3065
+msgid "Message: Speed dial entry error\n"
+msgstr "Wiadomo¶æ: B³±d wpisu szybkiego wybierania\n"
+
+#: common/fbus-6110.c:3075
+msgid "Message: Speed dial entry set.\n"
+msgstr "Wiadomo¶æ: Wpis szybkiego wybierania ustawiony.\n"
+
+#: common/fbus-6110.c:3085
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu wpisu szybkiego wybierania.\n"
+
+#: common/fbus-6110.c:3095
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x03\n"
+
+#: common/fbus-6110.c:3111
+msgid "Message: Phone status received:\n"
+msgstr "Wiadomo¶æ: Otrzymano status telefonu:\n"
+
+#: common/fbus-6110.c:3112
+msgid " Mode: "
+msgstr " Tryb: "
+
+#: common/fbus-6110.c:3118
+msgid "registered within the network\n"
+msgstr "zarejestrowany w sieci\n"
+
+#: common/fbus-6110.c:3127
+msgid "call in progress\n"
+msgstr "po³±czenie w trakcie\n"
+
+#: common/fbus-6110.c:3133
+msgid "waiting for security code\n"
+msgstr "oczekuje na kod zabezpieczaj±cy\n"
+
+#: common/fbus-6110.c:3139
+msgid "powered off\n"
+msgstr "wy³±czony\n"
+
+#: common/fbus-6110.c:3145 common/fbus-6110.c:3167
+msgid "unknown\n"
+msgstr "nieznany\n"
+
+#: common/fbus-6110.c:3149
+msgid " Power source: "
+msgstr " ¬ród³o zasilania: "
+
+#: common/fbus-6110.c:3155
+msgid "AC/DC\n"
+msgstr "sieæ zasilaj±ca\n"
+
+#: common/fbus-6110.c:3161
+msgid "battery\n"
+msgstr "bateria\n"
+
+#: common/fbus-6110.c:3171
+#, c-format
+msgid " Battery Level: %d\n"
+msgstr " Poziom baterii: %d\n"
+
+#: common/fbus-6110.c:3172
+#, c-format
+msgid " Signal strength: %d\n"
+msgstr " Si³a sygna³u: %d\n"
+
+#: common/fbus-6110.c:3184
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x04\n"
+
+#: common/fbus-6110.c:3257
+msgid "Message: Startup Logo received.\n"
+msgstr "Wiadomo¶æ: Otrzymano logo powitalne.\n"
+
+#: common/fbus-6110.c:3274
+#, c-format
+msgid "Startup Text: %s\n"
+msgstr "Tekst powitania: %s\n"
+
+#: common/fbus-6110.c:3286
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Wiadomo¶æ: Otrzymano logo powitalne bez wcze¶niejszego ¿±dania!\n"
+
+#: common/fbus-6110.c:3295
+msgid "Message: Startup logo correctly set.\n"
+msgstr "Wiadomo¶æ: Logo powitania ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3329
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Wiadomo¶æ: Logo operatora ustawione prawid³owo.\n"
+
+#: common/fbus-6110.c:3338
+msgid "Message: Error setting operator logo!\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu logo operatora!\n"
+
+#: common/fbus-6110.c:3348
+msgid "Message: Operator Logo received.\n"
+msgstr "Wiadomo¶æ: Otrzymano logo operatora.\n"
+
+#: common/fbus-6110.c:3365
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Wiadomo¶æ: Otrzymano logo operatora bez wcze¶niejszego ¿±dania!\n"
+
+#: common/fbus-6110.c:3374
+msgid "Message: Error getting operator logo!\n"
+msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu logo operatora!\n"
+
+#: common/fbus-6110.c:3392
+msgid "Message: Security Code status received: "
+msgstr "Wiadomo¶æ: Otrzymany stan kodu zabezpieczj±cego: "
+
+#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507
+msgid "waiting for Security Code.\n"
+msgstr "czeka na kod zabezpieczaj±cy.\n"
+
+#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512
+msgid "waiting for PIN.\n"
+msgstr "czeka na PIN.\n"
+
+#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517
+msgid "waiting for PIN2.\n"
+msgstr "czeka na PIN2.\n"
+
+#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522
+msgid "waiting for PUK.\n"
+msgstr "czeka na PUK.\n"
+
+#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527
+msgid "waiting for PUK2.\n"
+msgstr "czeka na PUK2.\n"
+
+#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532
+msgid "nothing to enter.\n"
+msgstr "nic do wprowadzenia.\n"
+
+#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537
+msgid "Unknown!\n"
+msgstr "Nieznany!\n"
+
+#: common/fbus-6110.c:3440
+msgid "Message: Security code accepted.\n"
+msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy przyjêty.\n"
+
+#: common/fbus-6110.c:3450
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy jest nieprawid³owy. Nie jeste¶ moim prawowitym w³a¶cicielem :-)\n"
+
+#: common/fbus-6110.c:3477
+msgid "Message: Network informations:\n"
+msgstr "Wiadomo¶æ: Informacje o sieci:\n"
+
+#: common/fbus-6110.c:3479
+#, c-format
+msgid " CellID: %s\n"
+msgstr " ID komórki: %s\n"
+
+#: common/fbus-6110.c:3480
+#, c-format
+msgid " LAC: %s\n"
+msgstr " LAC: %s\n"
+
+#: common/fbus-6110.c:3481
+#, c-format
+msgid " Network code: %s\n"
+msgstr " Kod sieci: %s\n"
+
+#: common/fbus-6110.c:3482
+#, c-format
+msgid " Network name: %s (%s)\n"
+msgstr " Nazwa sieci: %s (%s)\n"
+
+#: common/fbus-6110.c:3485
+msgid " Status: "
+msgstr " Status: "
+
+#: common/fbus-6110.c:3488
+msgid "home network selected"
+msgstr "wybrana sieæ domowa"
+
+#: common/fbus-6110.c:3489
+msgid "roaming network"
+msgstr "sieæ partnerska"
+
+#: common/fbus-6110.c:3490
+msgid "requesting network"
+msgstr "szuka sieci"
+
+#: common/fbus-6110.c:3491
+msgid "not registered in the network"
+msgstr "nie zarejestrowany w sieci"
+
+#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199
+#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219
+msgid "unknown"
+msgstr "nieznany"
+
+#: common/fbus-6110.c:3497
+#, c-format
+msgid " Network selection: %s\n"
+msgstr " Wybór sieci: %s\n"
+
+#: common/fbus-6110.c:3497
+msgid "manual"
+msgstr "rêczny"
+
+#: common/fbus-6110.c:3497
+msgid "automatic"
+msgstr "automatyczny"
+
+#: common/fbus-6110.c:3507
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x0a\n"
+
+#: common/fbus-6110.c:3545
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Nieznana wiadomo¶æ typu 0x0d.\n"
+
+#: common/fbus-6110.c:3564
+msgid "Message: Date and time set correctly\n"
+msgstr "Wiadomo¶æ: Data i czas ustawione prawid³owo\n"
+
+#: common/fbus-6110.c:3574 common/fbus-6110.c:3620
+msgid "Message: Date and time set error\n"
+msgstr "Wiadomo¶æ: B³±d przy ustawianiu daty i czasu\n"
+
+#: common/fbus-6110.c:3594
+msgid "Message: Date and time\n"
+msgstr "Wiadomo¶æ: Data i czas\n"
+
+#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863
+#, c-format
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Czas: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3596
+#, c-format
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Data: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3610
+msgid "Message: Alarm set correctly\n"
+msgstr "Wiadomo¶æ: Alarm ustawiony prawid³owo\n"
+
+#: common/fbus-6110.c:3632
+msgid "Message: Alarm\n"
+msgstr "Wiadomo¶æ: Alarm\n"
+
+#: common/fbus-6110.c:3633
+#, c-format
+msgid " Alarm: %02d:%02d\n"
+msgstr " Alarm: %02d:%02d\n"
+
+#: common/fbus-6110.c:3634
+#, c-format
+msgid " Alarm is %s\n"
+msgstr " Alarm jest %s\n"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "on"
+msgstr "w³±czony"
+
+#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467
+#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470
+#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473
+msgid "off"
+msgstr "wy³±czony"
+
+#: common/fbus-6110.c:3650
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x11\n"
+
+#: common/fbus-6110.c:3673
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza udany!\n"
+
+#: common/fbus-6110.c:3683 common/fbus-6110.c:3693
+msgid "Message: Calendar note write failed!\n"
+msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza nieudany!\n"
+
+#: common/fbus-6110.c:3702
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Nieznana wiadomo¶æ typu 0x13 i podtypu 0x65\n"
+
+#: common/fbus-6110.c:3742
+msgid "Message: Calendar note received.\n"
+msgstr "Wiadomo¶æ: Otrzymano wpis do kalendarza.\n"
+
+#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859
+#, c-format
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Data: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868
+#, c-format
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Data alarmu: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872
+#, c-format
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Czas alarmu: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3764
+#, c-format
+msgid " Type: %d\n"
+msgstr " Typ: %d\n"
+
+#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877
+#, c-format
+msgid " Text: %s\n"
+msgstr " Tekst: %s\n"
+
+#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880
+#, c-format
+msgid " Phone: %s\n"
+msgstr " Telefon: %s\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note not available\n"
+msgstr "Wiadomo¶æ: Wpis kalendarza niedostêpny\n"
+
+#: common/fbus-6110.c:3788
+msgid "Message: Calendar note error\n"
+msgstr "Wiadomo¶æ: B³±d wpisu do kalendarza\n"
+
+#: common/fbus-6110.c:3810
+msgid "Message: Calendar note deleted\n"
+msgstr "Wiadomo¶æ: Wpis do kalendarza usuniêty\n"
+
+#: common/fbus-6110.c:3821
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Wiadomo¶æ: Wpis do kalendarza nie mo¿e byæ usuniêty\n"
+
+#: common/fbus-6110.c:3831
+msgid "Message: Calendar note deleting error\n"
+msgstr "Wiadomo¶æ: B³±d przy usuwaniu wpisu kalendarza\n"
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar Alarm active\n"
+msgstr "Wiadomo¶æ: Alarm kalendarza aktywny\n"
+
+#: common/fbus-6110.c:3848
+#, c-format
+msgid " Item number: %d\n"
+msgstr " Numer pozycji: %d\n"
+
+#: common/fbus-6110.c:3856
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x13\n"
+
+#: common/fbus-6110.c:3919
+msgid "Concatenated message!!!\n"
+msgstr "Sklejone wiadomo¶ci!!!\n"
+
+#: common/fbus-6110.c:3940
+#, c-format
+msgid "Number: %d\n"
+msgstr "Numer: %d\n"
+
+#: common/fbus-6110.c:3945
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Wiadomo¶æ: Skrzynka nadawcza\n"
+
+#: common/fbus-6110.c:3948
+msgid "Sent\n"
+msgstr "Wys³ane\n"
+
+#: common/fbus-6110.c:3950
+msgid "Not sent\n"
+msgstr "Niewys³ane\n"
+
+#: common/fbus-6110.c:3954
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n"
+
+#: common/fbus-6110.c:3957
+msgid "Delivery Report\n"
+msgstr "Raport dostarczenia\n"
+
+#: common/fbus-6110.c:3959
+msgid "Unknown type\n"
+msgstr "Nieznany typ\n"
+
+#: common/fbus-6110.c:3962
+msgid "Read\n"
+msgstr "Przeczytane\n"
+
+#: common/fbus-6110.c:3964
+msgid "Not read\n"
+msgstr "Nieprzeczytane\n"
+
+#: common/fbus-6110.c:3966
+msgid " Date: %s "
+msgstr " Data: %s "
+
+#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241
+#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:3981
+msgid " SMSC response date: %s "
+msgstr " Data odpowiedzi SMSC: %s "
+
+#: common/fbus-6110.c:4074
+msgid "Delivered"
+msgstr "Dostarczone"
+
+#: common/fbus-6110.c:4079
+msgid "SM received by the SME"
+msgstr "SM otzymany przez SME"
+
+#: common/fbus-6110.c:4082
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+"SM przekazana przez SC do SME, ale SC nie móg³ potwierdziæ dostarczenia"
+
+#: common/fbus-6110.c:4085
+msgid "SM replaced by the SC"
+msgstr "SM zast±piona przez SC"
+
+#: common/fbus-6110.c:4093
+msgid "Failed"
+msgstr "Nieudane"
+
+#: common/fbus-6110.c:4100
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "B³±d tymczasowy, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n"
+
+#: common/fbus-6110.c:4105 common/fbus-6110.c:4198
+msgid "Congestion"
+msgstr ""
+
+#: common/fbus-6110.c:4109 common/fbus-6110.c:4202
+msgid "SME busy"
+msgstr "SME zajêty"
+
+#: common/fbus-6110.c:4113 common/fbus-6110.c:4206
+msgid "No response from SME"
+msgstr "Nie ma odpowiedzi od SME"
+
+#: common/fbus-6110.c:4117 common/fbus-6110.c:4210
+msgid "Service rejected"
+msgstr "Us³uga odrzucona"
+
+#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214
+msgid "Quality of service not aviable"
+msgstr "QoS niedostêpne"
+
+#: common/fbus-6110.c:4125 common/fbus-6110.c:4218
+msgid "Error in SME"
+msgstr "B³±d w SME"
+
+#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222
+#: common/fbus-6110.c:4232
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr "Zarezerwowane/Specyficzne dla SC: %x"
+
+#: common/fbus-6110.c:4136
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "B³±d, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n"
+
+#: common/fbus-6110.c:4141
+msgid "Remote procedure error"
+msgstr "B³±d zdalnej procedury"
+
+#: common/fbus-6110.c:4145
+msgid "Incompatibile destination"
+msgstr "Niekompatybilne przeznaczenie"
+
+#: common/fbus-6110.c:4149
+msgid "Connection rejected by SME"
+msgstr "Po³±czenie odrzucone przez SME"
+
+#: common/fbus-6110.c:4153
+msgid "Not obtainable"
+msgstr "Niemo¿liwe do uzyskania"
+
+#: common/fbus-6110.c:4161
+msgid "No internetworking available"
+msgstr "Brak po³±czenia miêdzysieciowego"
+
+#: common/fbus-6110.c:4165
+msgid "SM Validity Period Expired"
+msgstr "Okres wa¿no¶ci SM przekroczony"
+
+#: common/fbus-6110.c:4169
+msgid "SM deleted by originating SME"
+msgstr "SM wykasowana przez ¼ród³owe SME"
+
+#: common/fbus-6110.c:4173
+msgid "SM Deleted by SC Administration"
+msgstr "SM skasowany przez zarz±d SC"
+
+#: common/fbus-6110.c:4177
+msgid "SM does not exist"
+msgstr "SM nie istnieje"
+
+#: common/fbus-6110.c:4190
+msgid "Pending"
+msgstr "Oczekuj±ce"
+
+#: common/fbus-6110.c:4194
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "B³±d tymczasowy, SC ca³y czas próbuje przekazaæ SM\n"
+
+#: common/fbus-6110.c:4260
+msgid "Message: SMS reading failed.\n"
+msgstr "Wiadomo¶æ: Odczytanie wiadomo¶ci SMS nieudane.\n"
+
+#: common/fbus-6110.c:4268
+msgid " Invalid location!\n"
+msgstr " Z³a lokacja!\n"
+
+#: common/fbus-6110.c:4278
+msgid " Empty SMS location.\n"
+msgstr " Pusta lokacja SMS.\n"
+
+#: common/fbus-6110.c:4291
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Wiadomo¶æ: skasowanie SMS udane.\n"
+
+#: common/fbus-6110.c:4301
+msgid "Message: SMS Status Received\n"
+msgstr "Wiadomo¶æ: Otrzymano status wiadomo¶ci SMS\n"
+
+#: common/fbus-6110.c:4302
+#, c-format
+msgid " The number of messages: %d\n"
+msgstr " Ilo¶æ wiadomo¶ci: %d\n"
+
+#: common/fbus-6110.c:4303
+#, c-format
+msgid " Unread messages: %d\n"
+msgstr " Nieprzeczytane wiadomo¶ci: %d\n"
+
+#: common/fbus-6110.c:4315
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Wiadomo¶æ: B³±d statusu wiadomo¶ci, prawdopodobnie brak autoryzacji przez PIN\n"
+
+#: common/fbus-6110.c:4346
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Wiadomo¶æ: Netmonitor ustawiony poprawnie.\n"
+
+#: common/fbus-6110.c:4356
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Wiadomo¶æ: Otrzymano menu %d Netmonitora:\n"
+
+#: common/fbus-6110.c:4372
+msgid "Unknown message of type 0x40.\n"
+msgstr "Nieznana wiadomo¶æ typu 0x40.\n"
+
+#: common/fbus-6110.c:4394
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Wiadomo¶æ: Otrzymano identyfikacjê aparatu:\n"
+
+#: common/fbus-6110.c:4395
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-6110.c:4397
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid " Production Code: %s\n"
+msgstr " Kod produktu: %s\n"
+
+#: common/fbus-6110.c:4401
+#, c-format
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: common/fbus-6110.c:4403
+#, c-format
+msgid " Firmware: %s\n"
+msgstr " Firmware: %s\n"
+
+#: common/fbus-6110.c:4409
+#, c-format
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Magiczny numer: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4429
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Otrzymano potwierdzenie typu %02x, nr: %2x]\n"
+
+#: common/fbus-6110.c:4447
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 1.\n"
+
+#: common/fbus-6110.c:4471
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 2.\n"
+
+#: common/fbus-6110.c:4487
+msgid "Message: Unknown message.\n"
+msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ.\n"
+
+#: common/fbus-6110.c:4564
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr "Przerwana wiadomo¶æ wieloramkowa - ignorujê j± !!!\n"
+
+#: common/fbus-6110.c:4565
+msgid "Please report it ...\n"
+msgstr "Proszê to zg³osiæ ...\n"
+
+#: common/fbus-6110.c:4624
+msgid "Bad checksum!\n"
+msgstr "Z³a suma kontrolna!\n"
+
+#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648
+msgid "Phone"
+msgstr "Telefon"
+
+#: common/fbus-6110.c:4684
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4702
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Adresat wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:4703
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "¬ród³o wiadomo¶ci: %s\n"
+
+#: common/fbus-6110.c:4705
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Typ wiadomo¶ci: %02x\n"
+
+#: common/fbus-6110.c:4707
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Wiadomo¶æ nieznana: %02x\n"
+
+#: common/fbus-6110.c:4708
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"D³ugo¶æ wiadomo¶ci: %02x\n"
+"Telefon: "
+
+#: common/fbus-6110.c:4779
+msgid "PC: "
+msgstr "PC: "
+
+#: common/fbus-6110.c:4853
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Wysy³am potwierdzenie typu %02x, nr: %x]\n"
+
+#: common/mbus-6160.c:719
+msgid "Couldn't open MB61 device: "
+msgstr "Nie mog³em otworzyæ urz±dzenia MB61: "
+
+#: common/mbus-640.c:786
+msgid "Phone: "
+msgstr "Telefon: "
+
+#: common/mbus-640.c:816 common/mbus-640.c:916
+msgid "PC : "
+msgstr "PC : "
+
+#: common/mbus-640.c:826 common/mbus-640.c:929
+msgid "Write error!\n"
+msgstr "B³±d zapisu!\n"
+
+#: common/mbus-640.c:853
+msgid "Setting MBUS communication...\n"
+msgstr "Ustanawianie komunikacji MBUS...\n"
+
+#: common/rlp-common.c:706
+msgid "Unknown!!! "
+msgstr "Nieznany!!! "
+
+#: common/rlp-common.c:771
+msgid "BAD"
+msgstr "Z£Y"
+
+#: common/rlp-common.c:893
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "Ramka FCS jest nieprawid³owa. Ignorujê...\n"
+
+#: common/rlp-common.c:1006
+msgid "Send_TXU()\n"
+msgstr "Send_TXU()\n"
+
+#: common/rlp-common.c:1007
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr "XID_R_State=%d\n"
+
+#: common/rlp-common.c:1371
+msgid "RLP state 0.\n"
+msgstr "RLP stan 0.\n"
+
+#: common/rlp-common.c:1408
+msgid "RLP state 1.\n"
+msgstr "RLP stan 1.\n"
+
+#: common/rlp-common.c:1473
+msgid "RLP state 2.\n"
+msgstr "RLP stan 2.\n"
+
+#: common/rlp-common.c:1507
+msgid "UA received in RLP state 2.\n"
+msgstr "UA otrzymane przy RLP w stanie 2.\n"
+
+#: common/rlp-common.c:1564
+msgid "RLP state 3.\n"
+msgstr "RLP stan 3.\n"
+
+#: common/rlp-common.c:1622
+msgid "RLP state 4.\n"
+msgstr "RLP stan 4.\n"
+
+#: common/rlp-common.c:1732
+msgid "RLP state 5.\n"
+msgstr "RLP stan 5.\n"
+
+#: common/rlp-common.c:1791
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr "RLP stan 5 - jeszcze nie zaimplementowany!\n"
+
+#: common/rlp-common.c:1821
+msgid "RLP state 7.\n"
+msgstr "RLP stan 7.\n"
+
+#: common/rlp-common.c:1863
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr "DEBUG: Nieznany stan RLP!\n"
+
+#: gnokii/gnokii.c:207
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII wersja %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Budowane %s %s dla %s na %s \n"
+
+#: gnokii/gnokii.c:221
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+" gnokii --sendringtone destionation rtttlfile\n"
+" gnokii --reset [soft|hard]\n"
+msgstr ""
+" u¿ycie: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory typ_pamiêci pocz±tek koniec \n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial numer\n"
+" gnokii --setspeeddial numer typ_pamiêci lokacja\n"
+" gnokii --getsms typ_pamiêci pocz±tek koniec\n"
+" gnokii --deletesms typ_pamiêci pocz±tek koniec\n"
+" gnokii --sendsms adresat [--smsc numer_centrum_wiadomo¶ci |\n"
+" --smscno indeks_centrum] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc numer_centrum_wiadomo¶ci\n"
+" gnokii --setdatetime [RRRR [MM [DD [GG [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm GG MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote indeks [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote indeks\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf ci±g\n"
+" gnokii --sendlogo {caller|op} cel plik_logo [kod "
+"sieci]\n"
+" gnokii --setlogo logofile [kod sieci]\n"
+" gnokii --setlogo logofile [cz³onek grupy] [nazwa grupy]\n"
+" gnokii --setlogo text [tekst powitania]\n"
+" gnokii --getlogo logofile {caller|op|startup} [numer grupy]\n"
+" gnokii --sendringtone cel plik_rtttl\n"
+" gnokii --reset [soft|hard]\n"
+
+#: gnokii/gnokii.c:255
+msgid ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+msgstr ""
+
+#: gnokii/gnokii.c:260
+msgid ""
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output "
+"of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken "
+"from\n"
+" phone memory from address "
+"[message_center_index].\n"
+" If this argument is ommited SMSC number is "
+"taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+" [--long n] - send no more then n characters,\n"
+" default is 160\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number index from calendar.\n"
+" [-v] - output in vCalendar 1.0 format\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --sendlogo send the logofile to destination as operator\n"
+" or CLI logo\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --sendringtone send the rtttlfile to destination as ringtone\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+msgstr ""
+"\n"
+" --help wy¶wietla informacje o u¿yciu.\n"
+"\n"
+" --monitor wy¶wietla w trybie ci±g³ym informacje otrzymane\n"
+" z telefonu.\n"
+"\n"
+" --version wy¶wietla numer wersji i informacjê o prawach\n"
+" autorskich.\n"
+"\n"
+" --getmemory wczytuje dany obszar pamiêci z telefonu.\n"
+" Dostêpne typy pamiêci to:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook wczytuje dane ze standardowego wej¶cia i zapisuje\n"
+" je do ksi±¿ki telefonicznej.\n"
+" U¿ywa tego samego formatu co wyj¶cie z\n"
+" polecenia getphonebook.\n"
+"\n"
+" --getspeeddial wczytuje ustawienia szybkiego wybierania z danej\n"
+" pozycji.\n"
+"\n"
+" --setspeeddial ustawia szybkie wybieranie.\n"
+"\n"
+" --getsms wczytuje wiadomo¶ci SMS z podanej pamiêci\n"
+" pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n"
+" [koniec].\n"
+" Wpisy s± podawane na standardowe wyj¶cie.\n"
+"\n"
+" --deletesms kasuje wiadomo¶ci SMS z podanej pamiêci\n"
+" pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n"
+" [koniec].\n"
+"\n"
+" --sendsms wysy³a wiadomo¶ci do [adresata] przez\n"
+" [numer_centrum_wiadomo¶ci] lub numer SMSC brany\n"
+" z pamiêci telefonu z adresu [indeks_centrum].\n"
+" Je¶li ten argument jest pominiêty, numer SMSC jest\n"
+" brany z pamiêci z lokacji nr 1. Tekst wiadomo¶ci\n"
+" jest brany ze standardowego wej¶cia. Ta funkcja\n"
+" zosta³a tylko czê¶ciowo przetestowana i mo¿e w\n"
+" ogóle nie dzia³aæ w Twojej sieci. Znaczenie innych\n"
+" opcjonalnych parametrów:\n"
+" [-r] - wymagaj raportu dostarczenia\n"
+" [-C n] - Klasa wiadomo¶ci n, gdzie n = 0..3\n"
+" [-v n] - okres wa¿no¶ci w minutach\n"
+" [--long n] - wy¶lij nie wiêcej ni¿ n znaków,\n"
+" domy¶lnie 160\n"
+"\n"
+" --getsmsc poka¿ numer SMSC z lokacji\n"
+" [indeks_centrum_wiadomo¶ci].\n"
+"\n"
+" --setdatetime ustaw datê i czas telefonu.\n"
+"\n"
+" --getdatetime pokazuje aktualn± datê i czas.\n"
+"\n"
+" --setalarm ustawia budzik w telefonie.\n"
+"\n"
+" --getalarm pokazuje stan budzika.\n"
+"\n"
+" --dialvoice nawi±zuje po³±czenie g³osowe.\n"
+"\n"
+" --getcalendarnote wy¶wietla wpis z kalendarza z podanej daty.\n"
+" [-v] - wyj¶cie w formacie vCalendar 1.0\n"
+"\n"
+" --writecalendarnote dodaj wpis do kalendarza.\n"
+"\n"
+" --deletecalendarnote usuñ wpis z numerek [indeks]\n"
+" z kalendarza.\n"
+"\n"
+" --getdisplaystatus poka¿ jakie ikony s± wy¶wietlane.\n"
+"\n"
+" --netmonitor ustawianie/sprawdzanie trybu netmonitora.\n"
+"\n"
+" --identify sprawdzanie IMEI, wersji i modelu.\n"
+"\n"
+" --senddtmf wysy³anie sekwencji DTMF\n"
+"\n"
+" --sendlogo wysy³anie logo do adresata jako logo operatora\n"
+" albo CLI\n"
+"\n"
+" --setlogo ustawienie logo dzwoni±cego, operatora lub powitalne\n"
+"\n"
+" --getlogo odebranie logo dzwoni±cego, operatora lub powitalne\n"
+"\n"
+" --sendringtone wy¶lij plik_rtttl do celu jako sygna³ telefonu\n"
+"\n"
+" --reset [soft|hard] resetuje telefon.\n"
+"\n"
+
+#: gnokii/gnokii.c:344
+msgid ""
+" --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+" --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+" --entersecuritycode pyta o kod i przesy³a go do telefonu\n"
+"\n"
+" --getsecuritycodestatus pokazuje czy potrzebny jest kod\n"
+" zabezpieczaj±cy\n"
+"\n"
+
+#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282
+#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "Inicjalizacha GSM/FBUS nieudana! (Nieznany model?). Koñczê pracê.\n"
+
+#: gnokii/gnokii.c:382
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK nie zosta³ ustawiony. Koñczê pracê.\n"
+
+#: gnokii/gnokii.c:636
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "U¿yj '%s --help' ¿eby otrzymaæ pomoc.\n"
+
+#: gnokii/gnokii.c:815
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Nieznana opcja: %d\n"
+
+#: gnokii/gnokii.c:825
+msgid "Wrong number of arguments\n"
+msgstr "Z³a ilo¶æ argumentów\n"
+
+#: gnokii/gnokii.c:897 gnokii/gnokii.c:955
+msgid "Input too long!\n"
+msgstr "Wej¶cie za d³ugie!\n"
+
+#: gnokii/gnokii.c:950
+msgid "Couldn't read from stdin!\n"
+msgstr "B³±d podczas czytania z STDIN\n"
+
+#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692
+msgid "Send succeeded!\n"
+msgstr "Wys³ano OK.\n"
+
+#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Wysy³anie nieudane (b³±d=%d)\n"
+
+#: gnokii/gnokii.c:1042
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%d. Centrum SMS (%s) ma numer %s\n"
+
+#: gnokii/gnokii.c:1044
+msgid "Messages sent as "
+msgstr "Wiadomo¶ci wys³ane jako "
+
+#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625
+msgid "X.400"
+msgstr "X.400"
+
+# nie wiem czy dobrze zrobione
+#: gnokii/gnokii.c:1079
+msgid "Message validity is "
+msgstr "Poprawno¶æ wiadomo¶ci to "
+
+#: gnokii/gnokii.c:1115
+msgid "SMS center can not be found :-(\n"
+msgstr "Nie mo¿na znale¼æ centrum SMS :-(\n"
+
+#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225
+#: gnokii/gnokii.c:2392
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Nieznany typ pamiêci %s!\n"
+
+#: gnokii/gnokii.c:1214
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Wiadomo¶æ z Outbox "
+
+#: gnokii/gnokii.c:1217
+msgid "(sent)\n"
+msgstr "(wys³ano)\n"
+
+#: gnokii/gnokii.c:1219
+msgid "(not sent)\n"
+msgstr "(nie wys³ano)\n"
+
+#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1227
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Raport dorêczenia "
+
+#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269
+msgid "(read)\n"
+msgstr "(przeczytana)\n"
+
+#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271
+msgid "(not read)\n"
+msgstr "(nieprzeczytana)\n"
+
+#: gnokii/gnokii.c:1233
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data wys³ania: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1246
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr ""
+
+#: gnokii/gnokii.c:1259
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Wiadomo¶æ z Inbox "
+
+#: gnokii/gnokii.c:1273
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Data/Czas: %d-%d-%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1285
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Nadawca: %s Centrum SMS: %s\n"
+
+#: gnokii/gnokii.c:1291
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Po³±czony (%d/%d):\n"
+
+#: gnokii/gnokii.c:1297
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483
+#: gnokii/gnokii.c:2252
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funkcja nie zaimplementowana w modelu %s!\n"
+
+#: gnokii/gnokii.c:1312
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1318
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "Lokacja SMS %s %d pusta.\n"
+
+#: gnokii/gnokii.c:1324
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d nieudane!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1414
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "SMS %s %d skasowany\n"
+
+#: gnokii/gnokii.c:1421
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"Kasowanie SMS %s %d nieudane!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1472
+msgid "Enter your code: "
+msgstr ""
+
+#: gnokii/gnokii.c:1479
+msgid "Error: invalid code.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1481
+msgid "Code ok.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1485
+msgid "Other error.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1501
+msgid "Security code status: "
+msgstr ""
+
+#: gnokii/gnokii.c:1603
+msgid "Sending operator logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1607
+msgid "Sending caller line identification logo.\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1609
+msgid "You should specify what kind of logo to send!\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1628
+msgid "Operator code: %s\n"
+msgstr "Kod operatora: %s\n"
+
+#: gnokii/gnokii.c:1706
+msgid "Getting Logo.\n"
+msgstr "Pobieranie logo.\n"
+
+#: gnokii/gnokii.c:1752
+msgid "Logo file error.\n"
+msgstr "B³±d pliku z Logiem.\n"
+
+#: gnokii/gnokii.c:1758
+msgid "Sending Logo.\n"
+msgstr "Wysy³anie Logo.\n"
+
+#: gnokii/gnokii.c:1800
+msgid "BEGIN:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1801
+msgid "VERSION:1.0\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1802
+msgid "BEGIN:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1803
+msgid "CATEGORIES:"
+msgstr ""
+
+#: gnokii/gnokii.c:1806
+msgid "MISCELLANEOUS\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1809
+msgid "PHONE CALL\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1812
+msgid "MEETING\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1815
+msgid "SPECIAL OCCASION\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1818
+msgid "UNKNOWN\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1821
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1822
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1826
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1830
+msgid "END:VEVENT\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1831
+msgid "END:VCALENDAR\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1834
+msgid " Type of the note: "
+msgstr " Typ notatki: "
+
+#: gnokii/gnokii.c:1839
+msgid "Reminder\n"
+msgstr "Przypomnienie\n"
+
+#: gnokii/gnokii.c:1843
+msgid "Call\n"
+msgstr "Rozmowa\n"
+
+#: gnokii/gnokii.c:1847
+msgid "Meeting\n"
+msgstr "Spotkanie\n"
+
+#: gnokii/gnokii.c:1851
+msgid "Birthday\n"
+msgstr "Urodziny\n"
+
+#: gnokii/gnokii.c:1855
+msgid "Unknown\n"
+msgstr "Nieznany\n"
+
+#: gnokii/gnokii.c:1884
+msgid "The calendar note can not be read\n"
+msgstr ""
+
+#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403
+msgid "Succesfully written!\n"
+msgstr "Zapisano OK!\n"
+
+#: gnokii/gnokii.c:1943
+msgid " Calendar note deleted.\n"
+msgstr " Notatka skasowana.\n"
+
+#: gnokii/gnokii.c:1946
+msgid "The calendar note can not be deleted\n"
+msgstr "Notatka nie mo¿e byæ skasowana\n"
+
+#: gnokii/gnokii.c:2015
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Data: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:2016
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Czas: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2052
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Alarm: %s\n"
+
+#: gnokii/gnokii.c:2053
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Czas: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2094
+msgid "Entering monitor mode...\n"
+msgstr "Uruchamiam tryb monitoruj±cy...\n"
+
+#: gnokii/gnokii.c:2095
+msgid "Initialising GSM interface...\n"
+msgstr "Inicjalizacja interfejsu GSM...\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "RFLevel: %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Bateria: %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Zród³o zasilania: %s\n"
+
+#: gnokii/gnokii.c:2112
+msgid "AC/DC"
+msgstr "z sieci"
+
+#: gnokii/gnokii.c:2112
+msgid "battery"
+msgstr "bateria"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefon: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2127
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2130
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2133
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2136
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2139
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: U¿ywane %d, Wolne %d\n"
+
+#: gnokii/gnokii.c:2142
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "Wiadomo¶ci SMS: nieprzeczytanych %d, numer %d\n"
+
+#: gnokii/gnokii.c:2145
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Rozmowa przychodz±ca: %s\n"
+
+#: gnokii/gnokii.c:2148
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Sieæ: %s (%s), LAC (obszar wywo³añ): %s, CellID (ID komórki): %s\n"
+
+#: gnokii/gnokii.c:2153
+msgid "Leaving monitor mode...\n"
+msgstr "Wyj¶cie z trybu monitoruj±cego...\n"
+
+#: gnokii/gnokii.c:2257
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Typ pamiêci %s nie obs³ugiwany!\n"
+
+#: gnokii/gnokii.c:2262
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Z³a lokacja lub inny, niezidentyfikowany b³±d (%d)\n"
+
+#: gnokii/gnokii.c:2329
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Format problem on line %d [%s]\n"
+
+#: gnokii/gnokii.c:2343
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Zapisano OK: typ pamiêci: %s, Lokacja: %d, Nazwa: %s, Numer: %s\n"
+
+#: gnokii/gnokii.c:2345
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr ""
+"Nieudany zapis (%d): typ pamiêci: %s, lokacja: %d, nazwa: %s, numer: "
+"%s\n"
+
+#: gnokii/gnokii.c:2365
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr ""
+
+#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "B³±d podczas otwierania %s, u¿ywam konfiguracji domy¶lnej\n"
+
+#: gnokii/gnokii.c:2466
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Po³±czenie trwa: %s\n"
+
+#: gnokii/gnokii.c:2467
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Nieznany: %s\n"
+
+#: gnokii/gnokii.c:2468
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Nieprzeczytany SMS: %s\n"
+
+#: gnokii/gnokii.c:2469
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Po³±czenie typu Voice: %s\n"
+
+#: gnokii/gnokii.c:2470
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Aktywne po³±czenie typu Fax: %s\n"
+
+#: gnokii/gnokii.c:2471
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Aktywne po³±czenie typu Data: %s\n"
+
+#: gnokii/gnokii.c:2472
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Blokada klawiatury: %s\n"
+
+#: gnokii/gnokii.c:2473
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Pamiêæ SMS pe³na: %s\n"
+
+#: gnokii/gnokii.c:2525
+#, c-format
+msgid "IMEI: %s\n"
+msgstr "IMEI: %s\n"
+
+#: gnokii/gnokii.c:2526
+#, c-format
+msgid "Model: %s\n"
+msgstr "Model: %s\n"
+
+#: gnokii/gnokii.c:2527
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revision: %s\n"
+
+#: gnokii/gnokii.c:2559
+msgid "What kind of reset do you want??\n"
+msgstr "Jakiego typu resetu sobie ¿yczysz?\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid Version %s"
+
+#: gnokiid/gnokiid.c:70
+msgid " usage: gnokiid {--help|--version}"
+msgstr " u¿ycie: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:85
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:93
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr ""
+
+#: gnokiid/virtmodem.c:212
+msgid "Couldn't open pty!\n"
+msgstr "Nie mog³em otworzyæ pty!\n"
+
+#: gnokiid/virtmodem.c:220
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid NIE powinien byæ zainstalowany z setuid root!\n"
+
+#: gnokiid/virtmodem.c:224
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Slave pty = %s, wo³am %s dla stworzenia /dev/gnokii.\n"
+
+#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Nie odebrano GSM_LinkOK. Koniec pracy. \n"
+
+#: xgnokii/xgnokii.c:175
+msgid "/help/index.html"
+msgstr "/help/index.html"
+
+#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973
+msgid "Familly"
+msgstr "Rodzina"
+
+#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991
+msgid "Friends"
+msgstr "Przyjaciele"
+
+#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000
+msgid "Colleagues"
+msgstr "Znajomi"
+
+#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009
+msgid "Other"
+msgstr "Inni"
+
+#: xgnokii/xgnokii.c:244
+msgid "No group"
+msgstr "Zadna grupa"
+
+#: xgnokii/xgnokii.c:383
+msgid "Short Message received"
+msgstr "otrzymano SMS"
+
+#: xgnokii/xgnokii.c:398
+msgid "Call in progress"
+msgstr "Rozmowa w trakcie"
+
+#: xgnokii/xgnokii.c:411
+msgid "Hide"
+msgstr "Ukryj"
+
+#: xgnokii/xgnokii.c:539
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr "Rozmowa przychodz±ca od: %s\n"
+"Czas: %s"
+
+#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Zbiór %d"
+
+#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:629
+msgid "Voice"
+msgstr "Voice"
+
+#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386
+msgid "1 h"
+msgstr "1 godzina"
+
+#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393
+msgid "6 h"
+msgstr "6 godzin"
+
+#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400
+msgid "24 h"
+msgstr "24 godziny"
+
+#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407
+msgid "72 h"
+msgstr "72 godzin"
+
+#: xgnokii/xgnokii.c:660
+msgid "Max. time"
+msgstr "Maksymalny mo¿liwy czas"
+
+#: xgnokii/xgnokii.c:962
+msgid "Error saving SMS centers!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1020
+msgid "Error writing configuration file!"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572
+msgid "Contacts"
+msgstr "Ksi±¿ka adresowa"
+
+#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1044
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487
+msgid "Speed Dial"
+msgstr "Speed Dial"
+
+#: xgnokii/xgnokii.c:1057
+msgid "Keyboard"
+msgstr "Klawiatura"
+
+#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271
+msgid "Net Monitor"
+msgstr "Net Monitor"
+
+#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518
+msgid "Options"
+msgstr "Opcje"
+
+#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042
+msgid "Help"
+msgstr "Pomoc"
+
+#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103
+msgid "About"
+msgstr "O..."
+
+#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280
+#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914
+#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428
+#: xgnokii/xgnokii_sms.c:470
+msgid "Ok"
+msgstr "OK"
+
+#: xgnokii/xgnokii.c:1120
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1274
+msgid "Edit SMS Setting"
+msgstr "Edycja ustawieñ SMS"
+
+#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148
+#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788
+#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145
+#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270
+#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435
+#: xgnokii/xgnokii_sms.c:478
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: xgnokii/xgnokii.c:1301
+msgid "Set name:"
+msgstr "Podaj nazwê:"
+
+#: xgnokii/xgnokii.c:1314
+msgid "Center:"
+msgstr "Centrum:"
+
+#: xgnokii/xgnokii.c:1327
+msgid "Sending Format:"
+msgstr "Format wysy³ania:"
+
+#: xgnokii/xgnokii.c:1371
+msgid "Validity Period:"
+msgstr "Validity Period:"
+
+#: xgnokii/xgnokii.c:1379
+msgid "Max. Time"
+msgstr "Maksymalny czas"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Set name"
+msgstr "Podaj nazwê:"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Center number"
+msgstr "Numer centrum"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Format"
+msgstr "Format"
+
+#: xgnokii/xgnokii.c:1515
+msgid "Validity"
+msgstr "Validity"
+
+#: xgnokii/xgnokii.c:1523
+msgid "Apply"
+msgstr "Zastosuj"
+
+#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510
+#: xgnokii/xgnokii_dtmf.c:158
+msgid "Save"
+msgstr "Zapisz"
+
+#: xgnokii/xgnokii.c:1539
+msgid "Close"
+msgstr "Zamknij"
+
+#: xgnokii/xgnokii.c:1554
+msgid "Phone and connection type"
+msgstr "Telefon i typ po³±czenia"
+
+#: xgnokii/xgnokii.c:1561
+msgid "Connection"
+msgstr "Po³±czenie"
+
+#: xgnokii/xgnokii.c:1568
+msgid "Port:"
+msgstr "Port:"
+
+#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1598
+msgid "Init length:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1613
+msgid "Bindir:"
+msgstr ""
+
+#: xgnokii/xgnokii.c:1628
+msgid "Connection:"
+msgstr "Po³±czenie:"
+
+#: xgnokii/xgnokii.c:1632
+msgid "infrared"
+msgstr "podczerwieñ (IR)"
+
+#: xgnokii/xgnokii.c:1636
+msgid "serial"
+msgstr "szeregowe (serial)"
+
+#: xgnokii/xgnokii.c:1641
+msgid "Phone information"
+msgstr "Informacje o telefonie"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Version:"
+msgstr "Wersja:"
+
+#: xgnokii/xgnokii.c:1685
+msgid "Revision:"
+msgstr "Wersja:"
+
+#: xgnokii/xgnokii.c:1700
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1715
+msgid "Alarm setting"
+msgstr "Ustawianie alarmu"
+
+#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729
+msgid "Alarm"
+msgstr "Alarm"
+
+#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318
+msgid "Short Message Service"
+msgstr "Short Message Service"
+
+#: xgnokii/xgnokii.c:1789
+msgid "Edit"
+msgstr "Edycja"
+
+#: xgnokii/xgnokii.c:1803
+msgid "Business Card"
+msgstr "Business Card"
+
+#: xgnokii/xgnokii.c:1810
+msgid "User"
+msgstr "U¿ytkownik"
+
+#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: xgnokii/xgnokii.c:1854
+msgid "Title:"
+msgstr "Tytu³:"
+
+#: xgnokii/xgnokii.c:1880
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1906
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: xgnokii/xgnokii.c:1931
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1956
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:1982
+msgid "Address:"
+msgstr "Adres:"
+
+#: xgnokii/xgnokii.c:2006
+msgid "Caller groups names"
+msgstr "Nazwy grup dzwoni±cych"
+
+#: xgnokii/xgnokii.c:2013
+msgid "Groups"
+msgstr "Grupy"
+
+#: xgnokii/xgnokii.c:2022
+#, c-format
+msgid "Group %d:"
+msgstr "Grupa %d:"
+
+#: xgnokii/xgnokii.c:2035
+msgid "Help viewer"
+msgstr "Ogl±dacz pomocy"
+
+#: xgnokii/xgnokii.c:2049
+msgid "Viewer:"
+msgstr "Ogl±dacz:"
+
+#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:154
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:166
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_cfg.c:184
+msgid "ERROR: Can't write file config file!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_common.c:141
+msgid "Error"
+msgstr "B³±d"
+
+#: xgnokii/xgnokii_common.c:187
+msgid "Yes"
+msgstr "Tak"
+
+#: xgnokii/xgnokii_common.c:196
+msgid "No"
+msgstr "Nie"
+
+#: xgnokii/xgnokii_common.c:281
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Nie mogê uruchomiæ %s\n"
+
+#: xgnokii/xgnokii_contacts.c:88
+msgid "/help/contacts.html"
+msgstr "/help/contacts.html"
+
+#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243
+#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429
+#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584
+msgid "Can't change memory type!"
+msgstr "Nie mogê zmieniæ typu pamiêci!"
+
+#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:674
+msgid "Can't find pattern!"
+msgstr "Nie mogê znale¼æ ¶cie¿ki!"
+
+#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279
+msgid "Number:"
+msgstr "Numer:"
+
+#: xgnokii/xgnokii_contacts.c:827
+msgid "Memory:"
+msgstr "Pamiêæ:"
+
+#: xgnokii/xgnokii_contacts.c:831
+msgid "phone"
+msgstr "telefon"
+
+#: xgnokii/xgnokii_contacts.c:846
+msgid "Caller group:"
+msgstr "Grupa:"
+
+#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633
+#: xgnokii/xgnokii_speed.c:540
+msgid "Edit entry"
+msgstr "Edycja pozycji"
+
+#: xgnokii/xgnokii_contacts.c:907
+msgid "Delete entries"
+msgstr "Kasowanie pozycji"
+
+#: xgnokii/xgnokii_contacts.c:939
+msgid "Do you want to delete selected entries?"
+msgstr "Czy chcesz skasowaæ zaznaczone pozycje?"
+
+#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625
+msgid "New entry"
+msgstr "Nowa pozycja"
+
+#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629
+msgid "Duplicate entry"
+msgstr "Skopiuj pozycjê"
+
+#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062
+#: xgnokii/xgnokii_contacts.c:1087
+msgid "Can't find free memory."
+msgstr "Brak wolnej pamiêci."
+
+#: xgnokii/xgnokii_contacts.c:1128
+msgid "Changing memory type"
+msgstr "Zmieniam typ pamiêci"
+
+#: xgnokii/xgnokii_contacts.c:1136
+msgid "Continue"
+msgstr "Dalej"
+
+#: xgnokii/xgnokii_contacts.c:1156
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181
+msgid "Find"
+msgstr "Szukanie"
+
+#: xgnokii/xgnokii_contacts.c:1203
+msgid "Pattern:"
+msgstr "Scie¿ka:"
+
+#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Name"
+msgstr "Nazwa"
+
+#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568
+#: xgnokii/xgnokii_speed.c:484
+msgid "Number"
+msgstr "Numer"
+
+#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644
+msgid "Dial voice"
+msgstr "Dzwoñ (voice)"
+
+#: xgnokii/xgnokii_contacts.c:1385
+msgid "Phone memory..."
+msgstr "Pamiêæ telefonu..."
+
+#: xgnokii/xgnokii_contacts.c:1396
+msgid "SIM memory..."
+msgstr "Pamiêæ karty SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1423
+msgid "Saving entries"
+msgstr "Zapisujê pozycje"
+
+#: xgnokii/xgnokii_contacts.c:1448
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1481
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1503
+msgid "Save changes?"
+msgstr "Zapisaæ zmiany?"
+
+#: xgnokii/xgnokii_contacts.c:1519
+msgid "Don't save"
+msgstr "Nie zapisuj"
+
+#: xgnokii/xgnokii_contacts.c:1543
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Want you save these changes into phone?\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1641
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1665
+msgid "Getting entries"
+msgstr "Pobieranie danych"
+
+#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719
+#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691
+#, c-format
+msgid "%s: line %d: Can't get ME memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736
+#, c-format
+msgid "%s: line %d: Can't get SM memory entry number %d! %d\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110
+#: xgnokii/xgnokii_speed.c:378
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142
+#: xgnokii/xgnokii_speed.c:418
+msgid "Overwrite file?"
+msgstr "Nadpisaæ plik?"
+
+#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143
+#: xgnokii/xgnokii_speed.c:419
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436
+msgid "Export"
+msgstr "Export"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74
+#: xgnokii/xgnokii_speed.c:280
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2130
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357
+msgid "Import"
+msgstr "Import"
+
+#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036
+msgid "Select contacts"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673
+#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Memory"
+msgstr "Pamiêæ"
+
+#: xgnokii/xgnokii_contacts.c:2568
+msgid "Group"
+msgstr "Grupa"
+
+#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518
+msgid "Read from phone"
+msgstr "Odczyt z telefonu"
+
+#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522
+msgid "Save to phone"
+msgstr "Zapis do telefonu"
+
+#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529
+msgid "Import from file"
+msgstr "Import z pliku"
+
+#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533
+msgid "Export to file"
+msgstr "Eksport do pliku"
+
+#: xgnokii/xgnokii_contacts.c:2637
+msgid "Delete entry"
+msgstr "Skasuj pozycjê"
+
+#: xgnokii/xgnokii_dtmf.c:35
+msgid "/help/dtmf.html"
+msgstr "/help/dtmf.html"
+
+#: xgnokii/xgnokii_dtmf.c:91
+msgid "Load"
+msgstr "Odczyt"
+
+#: xgnokii/xgnokii_dtmf.c:207
+msgid "Dial Tone"
+msgstr "Dial Tone"
+
+#: xgnokii/xgnokii_netmon.c:38
+msgid "/help/netmon.html"
+msgstr "/help/netmon.html"
+
+#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338
+msgid "Active cell"
+msgstr "Aktywna komórka"
+
+#: xgnokii/xgnokii_netmon.c:341
+msgid "NCELL list I"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:344
+msgid "NCELL list II"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:347
+msgid "NCELL list III"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:350
+msgid "Prefered/Denied networks"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:353
+msgid "System information bits"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:356
+msgid "TMSI, Paging, PLU"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:359
+msgid "Cells info"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:362
+msgid "DTX, Cipher, Hopping"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:372
+msgid "Uplink DTX"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:375
+msgid "BTS TEST"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:378
+msgid "CELL BARR-Flag"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:381
+msgid "Accumulator, Charge status"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:384
+msgid "?Constant voltage charging display"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "?Battery full detection"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "Accumulator"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "SW-Resets"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Reset-Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "Cause codes for last connection abortion"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:409
+msgid "Reset handover counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:412
+msgid "Handover Counter"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:415
+msgid "Handover Counter (Dual)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "L2-Timeouts"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "SIM"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "?Block display 1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "Memory status before reset"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "Reset Counters"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:446
+msgid "Neighbourhood measurement"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:449
+msgid "Calls"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:452
+msgid "Temporary counters of DSP"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Control of task information displays"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Information of task numbers 0-7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Information of task numbers 8-15"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "Information of task numbers 16-23"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "Information of OS_SYSTEM_STACK"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "Information of the current MCU and DSP software versions"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:473
+msgid "Hardware version"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Chan"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:493
+msgid "RxLv"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:494
+msgid "C1"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "C2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:496
+msgid "ACT"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:497
+msgid "NC2"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "NC3"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:499
+msgid "NC4"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:500
+msgid "NC5"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "NC6"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:502
+msgid "NC7"
+msgstr ""
+
+#: xgnokii/xgnokii_netmon.c:533
+msgid "Page:"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:83
+msgid "/help/sms.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:88
+msgid "/help/sms_send.html"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "report"
+msgstr "raport"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "read"
+msgstr "przeczytane"
+
+#: xgnokii/xgnokii_sms.c:238
+msgid "unread"
+msgstr "nieprzeczytane"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "wys³ane"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "nie wys³±ne"
+
+#: xgnokii/xgnokii_sms.c:380
+msgid "From: "
+msgstr "Od: "
+
+#: xgnokii/xgnokii_sms.c:388
+msgid "Date: "
+msgstr "Data: "
+
+#: xgnokii/xgnokii_sms.c:438
+msgid "Function not implemented!"
+msgstr "Funkcja nie zaimplementowana!"
+
+#: xgnokii/xgnokii_sms.c:443
+msgid "Delete SMS failed!"
+msgstr "Kasowanie SMS nieudane!"
+
+#: xgnokii/xgnokii_sms.c:463
+msgid "Delete SMS"
+msgstr "Skasuj SMS"
+
+#: xgnokii/xgnokii_sms.c:495
+msgid "Do you want delete selected SMS?"
+msgstr "Czy chcesz skasowaæ wybrane SMS-y?"
+
+#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817
+msgid "Address line contains illegal address!"
+msgstr "Nieprawid³owa linia adresu!"
+
+#: xgnokii/xgnokii_sms.c:791
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr "wys³anie SMS do %s zakoñczone NIEpowodzeniem\n"
+"(b³±d=%d)"
+
+#: xgnokii/xgnokii_sms.c:988
+msgid "Send message"
+msgstr "Wy¶lij wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:992
+msgid "Save message to outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:999
+msgid "Check names"
+msgstr "Sprawd¼ nazwy"
+
+#: xgnokii/xgnokii_sms.c:1012
+msgid "To:"
+msgstr "Do:"
+
+#: xgnokii/xgnokii_sms.c:1084
+msgid "Delivery report"
+msgstr "Raport dorêczenia"
+
+#: xgnokii/xgnokii_sms.c:1088
+msgid "Send as Long SMS"
+msgstr "Wy¶lij jako d³ugi SMS"
+
+#: xgnokii/xgnokii_sms.c:1092
+msgid "SMS Center:"
+msgstr "Centrum SMS:"
+
+#: xgnokii/xgnokii_sms.c:1110
+msgid "New Message"
+msgstr "Nowa wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352
+msgid "Forward Message"
+msgstr "Prze¶lij dalej"
+
+#: xgnokii/xgnokii_sms.c:1177
+msgid "Reply Message"
+msgstr "Odpowied¼"
+
+#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361
+msgid "Bussiness Card"
+msgstr "Business Card"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Status"
+msgstr "Status"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Date / Time"
+msgstr "Data / Czas"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Sender"
+msgstr "Nadawca"
+
+#: xgnokii/xgnokii_sms.c:1314
+msgid "Message"
+msgstr "Wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1348
+msgid "New message"
+msgstr "Nowa wiadomo¶æ"
+
+#: xgnokii/xgnokii_sms.c:1356
+msgid "Reply message"
+msgstr "Odpowiedz"
+
+#: xgnokii/xgnokii_sms.c:1368
+msgid "Delete message"
+msgstr "Skasuj"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "SMS's"
+msgstr "SMS-y"
+
+#: xgnokii/xgnokii_sms.c:1402
+msgid "Inbox"
+msgstr ""
+
+#: xgnokii/xgnokii_sms.c:1408
+msgid "Outbox"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:42
+msgid "/help/speeddial.html"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:180
+msgid "Cannot allocate memory!"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:226
+#, c-format
+msgid ""
+"Error writing speed\n"
+"dial for key %d!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:298
+msgid "Cannot allocate memory!\n"
+msgstr ""
+
+#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338
+msgid "Error reading file!"
+msgstr "B³±d odczytu pliku"
+
+#: xgnokii/xgnokii_speed.c:484
+msgid "Key"
+msgstr "Klawisz"
+
+#: xgnokii/xgnokii_xkeyb.c:90
+msgid "/help/xkeyb.html"
+msgstr "/help/xkeyb.html"
+
+#: xgnokii/xgnokii_xkeyb.c:149
+msgid "Cannot load background pixmap!"
+msgstr "Nie mogê wczytaæ t³a"
+
+#: xgnokii/xgnokii_xkeyb.c:201
+msgid "/_File"
+msgstr "/_Plik"
+
+#: xgnokii/xgnokii_xkeyb.c:202
+msgid "/File/_Close"
+msgstr "/Plik/_Zamknij"
+
+#: xgnokii/xgnokii_xkeyb.c:203
+msgid "/_Help"
+msgstr "/_Pomoc"
+
+#: xgnokii/xgnokii_xkeyb.c:204
+msgid "/Help/_Help"
+msgstr "/Pomoc/_Pomoc"
+
+#: xgnokii/xgnokii_xkeyb.c:205
+msgid "/Help/_About"
+msgstr "/Pomoc/_O..."
+
+#: xgnokii/xgnokii_xkeyb.c:218
+msgid "XGnokii Keyboard"
+msgstr "Klawiatura XGnokii"
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnokii 0.3.2_pre23\n"
+"POT-Creation-Date: 2000-05-20 11:57+0200\n"
+"PO-Revision-Date: 2000-05-20 17:30+0200\n"
+"Last-Translator: Stanislav Meduna <stano@trillian.eunet.sk>\n"
+"Language-Team: gnokii\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/fbus-3810.c:517 common/fbus-6110.c:2076
+#, c-format
+msgid "Sending SMS to %s via message center %s\n"
+msgstr "Posiela sa SMS pre %s prostredníctvom centra %s\n"
+
+#: common/fbus-3810.c:621
+#, c-format
+msgid "SMS Send attempt failed, trying again (%d of %d)\n"
+msgstr "Poslanie SMS zlyhalo, nový pokus (%d z %d)\n"
+
+#: common/fbus-3810.c:1172
+msgid "Couldn't open FB38 device: "
+msgstr "Nie je mo¾né otvori» zariadenie FB38: "
+
+#: common/fbus-3810.c:1264
+msgid "restarting.\n"
+msgstr "nový ¹tart.\n"
+
+#: common/fbus-3810.c:1320
+#, c-format
+msgid "MT Fail %02x"
+msgstr "MT chyba %02x"
+
+#: common/fbus-3810.c:1327 common/mbus-6160.c:733
+#, c-format
+msgid "CS Fail %02x != %02x"
+msgstr "CS chyba %02x != %02x"
+
+#: common/fbus-3810.c:1441
+#, c-format
+msgid "0x15 Registration Response 0x%02x\n"
+msgstr "0x15 registraèná odpoveï 0x%02x\n"
+
+#: common/fbus-3810.c:1457
+#, c-format
+msgid "0x16 Registration Response 0x%02x\n"
+msgstr "0x16 registraèná odpoveï 0x%02x\n"
+
+#: common/fbus-3810.c:1458
+#, c-format
+msgid "SIM access: %s.\n"
+msgstr "Prístup k SIM: %s.\n"
+
+#: common/fbus-3810.c:1534
+#, c-format
+msgid "SMS Stored into location 0x%02x\n"
+msgstr "SMS zapísaná na pozíciu 0x%02x\n"
+
+#: common/fbus-3810.c:1544
+#, c-format
+msgid "SMS Store failed: 0x%02x\n"
+msgstr "Zápis SMS zlyhal: 0x%02x\n"
+
+#: common/fbus-3810.c:1665
+msgid "PIN [possibly] entered.\n"
+msgstr "PIN bol [pravdepodobne] zadaný.\n"
+
+#: common/fbus-3810.c:1674
+msgid "Phone powering off..."
+msgstr "Telefón sa vypína..."
+
+#: common/fbus-3810.c:1703
+msgid "Standard Ack write failed!"
+msgstr "Zápis ¹tandardného potvrdenia zlyhal!"
+
+#: common/fbus-3810.c:1729
+msgid "Unknown: "
+msgstr "Neznáma: "
+
+#: common/fbus-3810.c:1731
+#, c-format
+msgid "Msg Type: %02x "
+msgstr "Typ správy: %02x "
+
+#: common/fbus-3810.c:1732
+#, c-format
+msgid "Msg Len: %02x "
+msgstr "Då¾ka správy: %02x "
+
+#: common/fbus-3810.c:1733
+#, c-format
+msgid "Sequence Number: %02x "
+msgstr "Sekvenèné èíslo: %02x "
+
+#: common/fbus-3810.c:1734
+#, c-format
+msgid ""
+"Checksum: %02x \n"
+" "
+msgstr ""
+"Kontrolný súèet: %02x \n"
+" "
+
+#: common/fbus-3810.c:1826 common/fbus-3810.c:1956
+msgid "Set Mem Loc Write failed!"
+msgstr "Poslanie správy Set Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:1871
+msgid "TX_SendRLPFrame - write:"
+msgstr "TX_SendRLPFrame - zápis:"
+
+#: common/fbus-3810.c:1883
+msgid "Request HangupMessage Write failed!"
+msgstr "Poslanie správy Request HangupMessage zlyhalo!"
+
+#: common/fbus-3810.c:1895
+msgid "0x4a Write failed!"
+msgstr "Poslanie správy 0x4a zlyhalo!"
+
+#: common/fbus-3810.c:1910
+msgid "Explore Write failed!"
+msgstr "Poslanie správy Explore zlyhalo!"
+
+#: common/fbus-3810.c:1920
+msgid "0x3f Write failed!"
+msgstr "Poslanie správy 0x3f zlyhalo!"
+
+#: common/fbus-3810.c:1980
+msgid "Request Mem Loc Write failed!"
+msgstr "Poslanie správy Request Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:1993
+msgid "Request IMEI/Revision/Model Write failed!"
+msgstr "Poslanie správy Request IMEI/Revision/Model zlyhalo!"
+
+#: common/fbus-3810.c:2036
+msgid "Send SMS header failed!"
+msgstr "Poslanie SMS hlavièky zlyhalo!"
+
+#: common/fbus-3810.c:2095
+msgid "Store SMS header failed!"
+msgstr "Zápis SMS hlavièky zlyhal!"
+
+#: common/fbus-3810.c:2120
+#, c-format
+msgid "Send SMS block %d failed!"
+msgstr "Poslanie SMS bloku %d zlyhalo!"
+
+#: common/fbus-3810.c:2143
+msgid "Request SMS Mem Loc Write failed!"
+msgstr "Poslanie správy SMS Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:2166
+msgid "Delete SMS Mem Loc write failed!"
+msgstr "Poslanie správy Delete SMS Mem Loc zlyhalo!"
+
+#: common/fbus-3810.c:2185
+msgid "0x15 Write failed!"
+msgstr "Poslanie správy 0x15 zlyhalo!"
+
+#: common/fbus-3810.c:2202 common/mbus-6160.c:803
+msgid "TX_SendMessage - message too long!\n"
+msgstr "TX_SendMessage - správa je príli¹ dlhá!\n"
+
+#: common/fbus-3810.c:2228 common/mbus-6160.c:832
+msgid "TX_SendMessage - write:"
+msgstr "TX_SendMessage - zápis:"
+
+#: common/fbus-3810.c:2241 common/fbus-3810.c:2374 common/fbus-3810.c:2388
+#: common/fbus-3810.c:2402 common/fbus-3810.c:2416 common/fbus-3810.c:2550
+#: common/fbus-3810.c:2611 common/fbus-3810.c:2670 common/fbus-3810.c:2708
+msgid "Write failed!"
+msgstr "Zápis zlyhal!"
+
+#: common/fbus-3810.c:2255
+#, c-format
+msgid "Incoming call - Type: %s. %02x, Number %s.\n"
+msgstr "Prichádzajúce volanie: typ %s. %02x, èíslo %s.\n"
+
+#: common/fbus-3810.c:2282
+msgid "0x27 Write failed!"
+msgstr "Poslanie správy 0x27 zlyhalo!"
+
+#: common/fbus-3810.c:2330
+msgid "0x4b Write failed!"
+msgstr "Poslanie správy 0x4b zlyhalo!"
+
+#: common/fbus-3810.c:2349
+#, c-format
+msgid "Status: %s. Batt %02x RF %02x.\n"
+msgstr "Stav: %s. Batéria: %02x Signál: %02x.\n"
+
+#: common/fbus-3810.c:2360
+msgid "0x10 Write failed!"
+msgstr "Poslanie správy 0x10 zlyhalo!"
+
+#: common/fbus-3810.c:2364
+msgid "Call terminated from phone (0x10 message).\n"
+msgstr "Spojenie ukonèené telefónom (správa 0x10).\n"
+
+#: common/fbus-3810.c:2378
+msgid "Call terminated from opposite end of line (or from network).\n"
+msgstr "Spojenie ukonèené protistranou (alebo sie»ou).\n"
+
+#: common/fbus-3810.c:2392
+msgid "Call terminated from phone (0x12 message).\n"
+msgstr "Spojenie ukonèené telefónom (správa 0x12).\n"
+
+#: common/fbus-3810.c:2406
+msgid "Incoming call answered from phone.\n"
+msgstr "Telefón prijal prichádzajúci hovor.\n"
+
+#: common/fbus-3810.c:2420
+#, c-format
+msgid "%s call established - status bytes %02x %02x.\n"
+msgstr "Spojenie nadviazané: typ %s, stavové bajty %02x %02x.\n"
+
+#: common/fbus-3810.c:2437
+msgid "0x2c Write failed!"
+msgstr "Poslanie správy 0x2c zlyhalo!"
+
+#: common/fbus-3810.c:2524
+#, c-format
+msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n"
+msgstr "PID:%02x DCS:%02x Èas. pásmo:%02x Stat1:%02x Stat2:%02x\n"
+
+#: common/fbus-3810.c:2591
+#, c-format
+msgid ""
+"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg "
+"Center: %s\n"
+msgstr ""
+"Prichádzajúca SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Odosielateµ: %s(Typ %02x) "
+"SMS centrum: %s\n"
+
+#: common/fbus-3810.c:2593
+#, c-format
+msgid ""
+" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: "
+"%02x\n"
+msgstr ""
+" Då¾ka %d, Pamä» %d Èíslo %d, PID: %02x DCS: %02x Neznáme: %02x\n"
+
+#: common/fbus-3810.c:2686
+msgid "Mobile phone identification received:\n"
+msgstr "Identifikácia mobilného telefónu prijatá:\n"
+
+#: common/fbus-3810.c:2687
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-3810.c:2689
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-3810.c:2691
+#, c-format
+msgid " Revision: %s\n"
+msgstr " Revízia: %s\n"
+
+#: common/fbus-3810.c:2759
+msgid "SMS Message Center Data:\n"
+msgstr "Údaje SMS centra:\n"
+
+#: common/fbus-3810.c:2760
+#, c-format
+msgid "Selected memory: 0x%02x\n"
+msgstr "Zvolená pamä»: 0x%02x\n"
+
+#: common/fbus-3810.c:2761
+#, c-format
+msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n"
+msgstr "Správ v telefóne: 0x%02x, nepreèítaných: 0x%02x\n"
+
+#: common/fbus-3810.c:2763
+#, c-format
+msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n"
+msgstr "Správ na SIM: 0x%02x, nepreèítaných: 0x%02x\n"
+
+#: common/fbus-3810.c:2765
+#, c-format
+msgid "Reply via own centre: 0x%02x (%s)\n"
+msgstr "Odpoveï prostredníctvom vlastného centra: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2767
+#, c-format
+msgid "Delivery reports: 0x%02x (%s)\n"
+msgstr "Potvrdenie o doruèení: 0x%02x (%s)\n"
+
+#: common/fbus-3810.c:2769
+#, c-format
+msgid "Messages sent as: 0x%02x\n"
+msgstr "SPrávy posielané ako: 0x%02x\n"
+
+#: common/fbus-3810.c:2770
+#, c-format
+msgid "Message validity: 0x%02x\n"
+msgstr "Platnos» správ: 0x%02x\n"
+
+#: common/fbus-3810.c:2771
+#, c-format
+msgid "Unknown: 0x%02x\n"
+msgstr "Neznáme: 0x%02x\n"
+
+#: common/fbus-3810.c:2774
+msgid "UnknownNumber field empty."
+msgstr "Pole UnknownNumber prázdne."
+
+#: common/fbus-3810.c:2776
+msgid "UnknownNumber: "
+msgstr "UnknownNumber: "
+
+#: common/fbus-3810.c:2783
+msgid "Number field empty."
+msgstr "Èíselné pole prázdne."
+
+#: common/fbus-3810.c:2786
+msgid "Number: "
+msgstr "Èíslo: "
+
+#: common/fbus-6110-ringtones.c:256
+msgid "File can not be opened!\n"
+msgstr "Súbor nie je mo¾né otvori»!\n"
+
+#: common/fbus-6110.c:808
+msgid "Timeout in IR-mode\n"
+msgstr "Vypr¹anie èasového intervalu v IR-re¾ime\n"
+
+#: common/fbus-6110.c:840
+msgid "Couldn't open FB61 infrared device"
+msgstr "Nie je mo¾né otvori» FB61 infrèervené zariadenie"
+
+#: common/fbus-6110.c:908
+msgid "Starting IR mode...!\n"
+msgstr "©tart IR re¾imu...!\n"
+
+#: common/fbus-6110.c:2384
+msgid "Serial flags dump:\n"
+msgstr "Výpis sériových príznakov:\n"
+
+#: common/fbus-6110.c:2385 common/mbus-640.c:899
+#, c-format
+msgid "DTR is %s.\n"
+msgstr "DTR je %s.\n"
+
+#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387
+#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900
+msgid "up"
+msgstr "aktívne"
+
+#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387
+#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900
+msgid "down"
+msgstr "inaktívne"
+
+#: common/fbus-6110.c:2386 common/mbus-640.c:900
+#, c-format
+msgid "RTS is %s.\n"
+msgstr "RTS je %s.\n"
+
+#: common/fbus-6110.c:2387
+#, c-format
+msgid "CAR is %s.\n"
+msgstr "CAR je %s.\n"
+
+#: common/fbus-6110.c:2388
+#, c-format
+msgid "CTS is %s.\n"
+msgstr "CTS je %s.\n"
+
+#: common/fbus-6110.c:2423
+msgid "Setting FBUS communication...\n"
+msgstr "Nastavenie FBUS komunikácie...\n"
+
+#: common/fbus-6110.c:2454
+msgid "Couldn't open FB61 device"
+msgstr "Nie je mo¾né otvori» FB61 zariadenie"
+
+#: common/fbus-6110.c:2580
+msgid "Message: Call message, type 0x02:"
+msgstr "Správa: Volanie, typ 0x02:"
+
+#: common/fbus-6110.c:2581 common/fbus-6110.c:2593 common/fbus-6110.c:2695
+msgid " Exact meaning not known yet, sorry :-(\n"
+msgstr " Presný význam zatiaµ nie je známy, µutujeme :-(\n"
+
+#: common/fbus-6110.c:2591
+msgid "Message: Call message, type 0x03:"
+msgstr "Správa: Volanie, typ 0x03:"
+
+#: common/fbus-6110.c:2592 common/fbus-6110.c:2608 common/fbus-6110.c:2626
+#: common/fbus-6110.c:2657 common/fbus-6110.c:2668 common/fbus-6110.c:2694
+#, c-format
+msgid " Sequence nr. of the call: %d\n"
+msgstr " Sekvenèné èíslo volania: %d\n"
+
+#: common/fbus-6110.c:2607
+msgid "Message: Remote end hang up.\n"
+msgstr "Správa: Protistrana zavesila.\n"
+
+#: common/fbus-6110.c:2621
+msgid "Message: Incoming call alert:\n"
+msgstr "Správa: Prichádzajúce volanie:\n"
+
+#: common/fbus-6110.c:2627 common/fbus-6110.c:2910
+msgid " Number: "
+msgstr " Èíslo: "
+
+#: common/fbus-6110.c:2635 common/fbus-6110.c:2894
+msgid " Name: "
+msgstr " Meno: "
+
+#: common/fbus-6110.c:2656
+msgid "Message: Call answered.\n"
+msgstr "Správa: Volanie prijaté.\n"
+
+#: common/fbus-6110.c:2667
+msgid "Message: Call ended by your phone.\n"
+msgstr "Správa: Volanie ukonèené va¹ím telefónom.\n"
+
+#: common/fbus-6110.c:2693
+msgid "Message: Call message, type 0x0a:"
+msgstr "Správa: Volanie, typ 0x0a:"
+
+#: common/fbus-6110.c:2706
+msgid "Message: Unknown message of type 0x01\n"
+msgstr "Správa: Neznáma správa typu 0x01\n"
+
+#: common/fbus-6110.c:2724
+msgid "Message: SMS Message correctly sent.\n"
+msgstr "Správa: SMS správa úspe¹ne odoslaná.\n"
+
+#: common/fbus-6110.c:2735
+msgid "Message: Sending SMS Message failed.\n"
+msgstr "Správa: Odoslanie SMS správy zlyhalo.\n"
+
+#: common/fbus-6110.c:2744
+msgid "Message: SMS Message Received\n"
+msgstr "Správa: SMS správa prijatá\n"
+
+#: common/fbus-6110.c:2745 common/fbus-6110.c:4102
+#, c-format
+msgid " SMS center number: %s\n"
+msgstr " Èíslo SMS centra: %s\n"
+
+#: common/fbus-6110.c:2749 common/fbus-6110.c:4103
+#, c-format
+msgid " Remote number: %s\n"
+msgstr " Èíslo odosielateµa: %s\n"
+
+#: common/fbus-6110.c:2750
+#, c-format
+msgid " Date: %s\n"
+msgstr " Dátum: %s\n"
+
+#: common/fbus-6110.c:2751
+msgid " SMS: "
+msgstr " SMS: "
+
+#: common/fbus-6110.c:2766
+msgid "Message: SMS Center correctly set.\n"
+msgstr "Správa: SMS centrum korektne nastavené.\n"
+
+#: common/fbus-6110.c:2782
+msgid "Message: SMS Center received:\n"
+msgstr "Správa: SMS centrum prijaté:\n"
+
+#: common/fbus-6110.c:2783
+#, c-format
+msgid " %d. SMS Center name is %s\n"
+msgstr " %d. Názov SMS centra je %s\n"
+
+#: common/fbus-6110.c:2784
+#, c-format
+msgid " SMS Center number is %s\n"
+msgstr " Èíslo SMS centra je %s\n"
+
+#: common/fbus-6110.c:2786
+msgid " SMS Center message format is "
+msgstr " Formát správ SMS centra je "
+
+#: common/fbus-6110.c:2791 gnokii/gnokii.c:1021 xgnokii/xgnokii.c:525
+#: xgnokii/xgnokii.c:554 xgnokii/xgnokii.c:1376
+msgid "Text"
+msgstr "Text"
+
+#: common/fbus-6110.c:2795 gnokii/gnokii.c:1025 xgnokii/xgnokii.c:529
+#: xgnokii/xgnokii.c:1390
+msgid "Paging"
+msgstr "Paging"
+
+#: common/fbus-6110.c:2799 gnokii/gnokii.c:1029 xgnokii/xgnokii.c:533
+#: xgnokii/xgnokii.c:1383
+msgid "Fax"
+msgstr "Fax"
+
+#: common/fbus-6110.c:2803 gnokii/gnokii.c:1034
+msgid "Email"
+msgstr "Email"
+
+#: common/fbus-6110.c:2807 common/fbus-6110.c:2841 common/fbus-6110.c:4324
+#: common/fbus-6110.c:4817 gnokii/gnokii.c:1046 gnokii/gnokii.c:1080
+msgid "Unknown"
+msgstr "Neznámy"
+
+#: common/fbus-6110.c:2812
+msgid " SMS Center message validity is "
+msgstr " Platnos» správ SMS centra je "
+
+#: common/fbus-6110.c:2817 gnokii/gnokii.c:1056
+msgid "1 hour"
+msgstr "1 hodina"
+
+#: common/fbus-6110.c:2821 gnokii/gnokii.c:1060
+msgid "6 hours"
+msgstr "6 hodín"
+
+#: common/fbus-6110.c:2825 gnokii/gnokii.c:1064
+msgid "24 hours"
+msgstr "24 hodín"
+
+#: common/fbus-6110.c:2829 gnokii/gnokii.c:1068
+msgid "72 hours"
+msgstr "72 hodín"
+
+#: common/fbus-6110.c:2833 gnokii/gnokii.c:1072 xgnokii/xgnokii.c:577
+#: xgnokii/xgnokii.c:1455
+msgid "1 week"
+msgstr "1 tý¾deò"
+
+#: common/fbus-6110.c:2837 gnokii/gnokii.c:1076
+msgid "Maximum time"
+msgstr "Maximálny èas"
+
+#: common/fbus-6110.c:2859
+msgid "Message: SMS Center error received:\n"
+msgstr "Správa: Prijatá chyba SMS centra:\n"
+
+#: common/fbus-6110.c:2860
+msgid " The request for SMS Center failed.\n"
+msgstr " ®iados» o SMS centrum zlyhala.\n"
+
+#: common/fbus-6110.c:2871
+msgid "Unknown message!\n"
+msgstr "Naznáma správa!\n"
+
+#: common/fbus-6110.c:2893
+msgid "Message: Phonebook entry received:\n"
+msgstr "Správa: Príjem polo¾ky telefónneho zoznamu:\n"
+
+#: common/fbus-6110.c:2930
+msgid " Date: "
+msgstr " Dátum: "
+
+#: common/fbus-6110.c:2932
+msgid " Time: "
+msgstr " Èas: "
+
+#: common/fbus-6110.c:2945
+msgid "Message: Phonebook read entry error received:\n"
+msgstr "Správa: Prijatá chyba polo¾ky telefónneho zoznamu:\n"
+
+#: common/fbus-6110.c:2953
+msgid " Invalid memory type!\n"
+msgstr " Chybný typ pamäti!\n"
+
+#: common/fbus-6110.c:2963 common/fbus-6110.c:3001
+msgid " Unknown error!\n"
+msgstr " Neznáma chyba!\n"
+
+#: common/fbus-6110.c:2974
+msgid "Message: Phonebook written correctly.\n"
+msgstr "Správa: Polo¾ka telefónneho zoznamu úspe¹ne zapísaná.\n"
+
+#: common/fbus-6110.c:2991
+msgid "Message: Phonebook not written - name is too long.\n"
+msgstr "Správa: Polo¾ka telefónneho zoznamu nebola zapísaná - meno je príli¹ dlhé.\n"
+
+#: common/fbus-6110.c:3012
+msgid "Message: Memory status received:\n"
+msgstr "Správa: Príjatý stav pamäti:\n"
+
+#: common/fbus-6110.c:3014
+#, c-format
+msgid " Memory Type: %s\n"
+msgstr " Typ pamäti: %s\n"
+
+#: common/fbus-6110.c:3015
+#, c-format
+msgid " Used: %d\n"
+msgstr " Vyu¾ité: %d\n"
+
+#: common/fbus-6110.c:3016
+#, c-format
+msgid " Free: %d\n"
+msgstr " Voµné: %d\n"
+
+#: common/fbus-6110.c:3031
+msgid "Message: Memory status error, phone is probably powered off.\n"
+msgstr "Správa: Chyba stavu pamäti, telefón je pravdepodobne vypnutý.\n"
+
+#: common/fbus-6110.c:3038
+msgid ""
+"Message: Memory status error, memory type not supported by phone model.\n"
+msgstr ""
+"Správa: Chyba stavu pamäti, telefón tento typ nepodporuje.\n"
+
+#: common/fbus-6110.c:3045
+msgid "Message: Memory status error, waiting for security code.\n"
+msgstr "Správa: Chyba stavu pamäti, èaká sa na bezpeènostný kód.\n"
+
+#: common/fbus-6110.c:3052
+#, c-format
+msgid ""
+"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"
+msgstr ""
+"Správa: Neznáma chyba stavu pamäti, subkód (MessageBuffer[4]) = %02x\n"
+
+#: common/fbus-6110.c:3069
+msgid "Message: Caller group logo etc.\n"
+msgstr "Správa: Logo skupiny volajúcich a.p.\n"
+
+#: common/fbus-6110.c:3070
+#, c-format
+msgid "Caller group name: %s\n"
+msgstr "Názov skupiny: %s\n"
+
+#: common/fbus-6110.c:3090
+msgid "Message: Caller group data received but not requested!\n"
+msgstr "Správa: Údaje o skupine volajúcich prijaté, ale neboli po¾adované!\n"
+
+#: common/fbus-6110.c:3100
+msgid "Message: Error attempting to get caller group data.\n"
+msgstr "Správa: Chyba pri pokuse získa» údaje o skupine volajúcich.\n"
+
+#: common/fbus-6110.c:3108
+msgid "Message: Caller group data set correctly.\n"
+msgstr "Správa: Údaje o skupine volajúcich úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3116
+msgid "Message: Error attempting to set caller group data\n"
+msgstr "Správa: Chyba pri pokuse zapísa» údaje o skupine volajúcich.\n"
+
+#: common/fbus-6110.c:3127
+msgid "Message: Speed dial entry received:\n"
+msgstr "Správa: Polo¾ka skráteného volania prijatá:\n"
+
+#: common/fbus-6110.c:3128
+#, c-format
+msgid " Location: %d\n"
+msgstr " Pozícia: %d\n"
+
+#: common/fbus-6110.c:3129
+#, c-format
+msgid " MemoryType: %s\n"
+msgstr " Typ pamäti: %s\n"
+
+#: common/fbus-6110.c:3130
+#, c-format
+msgid " Number: %d\n"
+msgstr " Èíslo: %d\n"
+
+#: common/fbus-6110.c:3140
+msgid "Message: Speed dial entry error\n"
+msgstr "Správa: Chyba polo¾ky skráteného volania\n"
+
+#: common/fbus-6110.c:3150
+msgid "Message: Speed dial entry set.\n"
+msgstr "Správa: Polo¾ka skráteného volania zapísaná.\n"
+
+#: common/fbus-6110.c:3160
+msgid "Message: Speed dial entry setting error.\n"
+msgstr "Správa: Chyba pri zápise polo¾ky skráteného volanie.\n"
+
+#: common/fbus-6110.c:3170
+msgid "Message: Unknown message of type 0x03\n"
+msgstr "Správa: Neznáma správa typu 0x03\n"
+
+#: common/fbus-6110.c:3186
+msgid "Message: Phone status received:\n"
+msgstr "Správa: Prijatý stav telefónu:\n"
+
+#: common/fbus-6110.c:3187
+msgid " Mode: "
+msgstr " Re¾im: "
+
+#: common/fbus-6110.c:3193
+msgid "registered within the network\n"
+msgstr "registrovaný v sieti\n"
+
+#: common/fbus-6110.c:3202
+msgid "call in progress\n"
+msgstr "prebieha volanie\n"
+
+#: common/fbus-6110.c:3208
+msgid "waiting for security code\n"
+msgstr "èakajúci na bezpeènostný kód\n"
+
+#: common/fbus-6110.c:3214
+msgid "powered off\n"
+msgstr "vypnutý\n"
+
+#: common/fbus-6110.c:3220 common/fbus-6110.c:3242
+msgid "unknown\n"
+msgstr "neznámy\n"
+
+#: common/fbus-6110.c:3224
+msgid " Power source: "
+msgstr " Napájania: "
+
+#: common/fbus-6110.c:3230
+msgid "AC/DC\n"
+msgstr "sie»\n"
+
+#: common/fbus-6110.c:3236
+msgid "battery\n"
+msgstr "batéria\n"
+
+#: common/fbus-6110.c:3246
+#, c-format
+msgid " Battery Level: %d\n"
+msgstr " Nabitie batérie: %d\n"
+
+#: common/fbus-6110.c:3247
+#, c-format
+msgid " Signal strength: %d\n"
+msgstr " Sila signálu: %d\n"
+
+#: common/fbus-6110.c:3259
+msgid "Message: Unknown message of type 0x04\n"
+msgstr "Správa: Neznáma správa typu 0x04\n"
+
+#: common/fbus-6110.c:3275
+msgid "Message: Profile feature change result.\n"
+msgstr "Správa: Výsledok zmeny profilu.\n"
+
+#: common/fbus-6110.c:3333
+msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n"
+msgstr "Správa: Úvodné logo, privítanie a privítanie predajcu prijaté.\n"
+
+#: common/fbus-6110.c:3356
+msgid "Startup logo supported - "
+msgstr "Úvodné logo podporované - "
+
+#: common/fbus-6110.c:3359
+msgid "currently set\n"
+msgstr "nastavené\n"
+
+#: common/fbus-6110.c:3361 common/fbus-6110.c:3375 common/fbus-6110.c:3389
+msgid "currently empty\n"
+msgstr "prázdne\n"
+
+#: common/fbus-6110.c:3370
+msgid "Startup Text supported - "
+msgstr "Privítanie podporované - "
+
+#: common/fbus-6110.c:3373 common/fbus-6110.c:3387
+#, c-format
+msgid "currently set to \"%s\"\n"
+msgstr "nastavené na \"%s\"\n"
+
+#: common/fbus-6110.c:3384
+msgid "Dealer welcome note supported - "
+msgstr "Privítanie predajcu podporované - "
+
+#: common/fbus-6110.c:3399
+msgid "Message: Startup logo received but not requested!\n"
+msgstr "Správa: Úvodné logo prijaté, ale nepo¾adované!\n"
+
+#: common/fbus-6110.c:3408
+msgid ""
+"Message: Startup logo, welcome note or dealer welcome note correctly set.\n"
+msgstr ""
+"Správa: Úvodné logo, privítanie alebo privítanie predajcu úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3434
+msgid "Message: Operator logo correctly set.\n"
+msgstr "Správa: Logo operátora úspe¹ne nastavené.\n"
+
+#: common/fbus-6110.c:3443
+msgid "Message: Error setting operator logo!\n"
+msgstr "Správa: Chyba pri nastavení loga operátora!\n"
+
+#: common/fbus-6110.c:3453
+msgid "Message: Operator Logo received.\n"
+msgstr "Správa: Logo operátora prijaté.\n"
+
+#: common/fbus-6110.c:3470
+msgid "Message: Operator logo received but not requested!\n"
+msgstr "Správa: Logo operátora prijaté, ale nepo¾adované!\n"
+
+#: common/fbus-6110.c:3479
+msgid "Message: Error getting operator logo!\n"
+msgstr "Správa: Chyba pri získaní loga operátora!\n"
+
+#: common/fbus-6110.c:3497
+msgid "Message: Security Code status received: "
+msgstr "Správa: Stav bezpeènostného kódu prijatý: "
+
+#: common/fbus-6110.c:3503 gnokii/gnokii.c:1476
+msgid "waiting for Security Code.\n"
+msgstr "èaká sa na bzpeènostný kód.\n"
+
+#: common/fbus-6110.c:3508 gnokii/gnokii.c:1481
+msgid "waiting for PIN.\n"
+msgstr "èaká sa na PIN.\n"
+
+#: common/fbus-6110.c:3513 gnokii/gnokii.c:1486
+msgid "waiting for PIN2.\n"
+msgstr "èaká sa na PIN2.\n"
+
+#: common/fbus-6110.c:3518 gnokii/gnokii.c:1491
+msgid "waiting for PUK.\n"
+msgstr "èaká sa na PUK.\n"
+
+#: common/fbus-6110.c:3523 gnokii/gnokii.c:1496
+msgid "waiting for PUK2.\n"
+msgstr "èaká sa na PUK2.\n"
+
+#: common/fbus-6110.c:3528 gnokii/gnokii.c:1501
+msgid "nothing to enter.\n"
+msgstr "netreba niè zada».\n"
+
+#: common/fbus-6110.c:3533 gnokii/gnokii.c:1506
+msgid "Unknown!\n"
+msgstr "Neznámy!\n"
+
+#: common/fbus-6110.c:3545
+msgid "Message: Security code accepted.\n"
+msgstr "Správa: Bezpeènostný kód akceptovaný.\n"
+
+#: common/fbus-6110.c:3555
+msgid "Message: Security code is wrong. You're not my big owner :-)\n"
+msgstr "Správa: Bezpeènostný kód je chybný. Vy nie ste môj pán :-)\n"
+
+#: common/fbus-6110.c:3582
+msgid "Message: Network informations:\n"
+msgstr "Správa: Informácie o sieti:\n"
+
+#: common/fbus-6110.c:3584
+#, c-format
+msgid " CellID: %s\n"
+msgstr " ID bunky: %s\n"
+
+#: common/fbus-6110.c:3585
+#, c-format
+msgid " LAC: %s\n"
+msgstr " LAC: %s\n"
+
+#: common/fbus-6110.c:3586
+#, c-format
+msgid " Network code: %s\n"
+msgstr " Kód siete: %s\n"
+
+#: common/fbus-6110.c:3587
+#, c-format
+msgid " Network name: %s (%s)\n"
+msgstr " Názov siete: %s (%s)\n"
+
+#: common/fbus-6110.c:3590
+msgid " Status: "
+msgstr " Stav: "
+
+#: common/fbus-6110.c:3593
+msgid "home network selected"
+msgstr "zvolená domáca sie»"
+
+#: common/fbus-6110.c:3594
+msgid "roaming network"
+msgstr "roamingová sie»"
+
+#: common/fbus-6110.c:3595
+msgid "requesting network"
+msgstr "¾iados» o sie»"
+
+#: common/fbus-6110.c:3596
+msgid "not registered in the network"
+msgstr "neregistrovaný v sieti"
+
+#: common/fbus-6110.c:3597
+msgid "unknown"
+msgstr "neznámy"
+
+#: common/fbus-6110.c:3602
+#, c-format
+msgid " Network selection: %s\n"
+msgstr " Výber siete: %s\n"
+
+#: common/fbus-6110.c:3602
+msgid "manual"
+msgstr "manuálny"
+
+#: common/fbus-6110.c:3602
+msgid "automatic"
+msgstr "automatický"
+
+#: common/fbus-6110.c:3612
+msgid "Message: Unknown message of type 0x0a\n"
+msgstr "Správa: Neznáma správa typu 0x0a\n"
+
+#: common/fbus-6110.c:3650
+msgid "Unknown message of type 0x0d.\n"
+msgstr "Neznáma správa typu 0x0d\n"
+
+#: common/fbus-6110.c:3669
+msgid "Message: Date and time set correctly\n"
+msgstr "Správa: Dátum a èas úspe¹ne nastavené\n"
+
+#: common/fbus-6110.c:3679 common/fbus-6110.c:3725
+msgid "Message: Date and time set error\n"
+msgstr "Správa: Chyba pri nastavení dátumu a èasu\n"
+
+#: common/fbus-6110.c:3699
+msgid "Message: Date and time\n"
+msgstr "Správa: Dátum a èas\n"
+
+#: common/fbus-6110.c:3700 common/fbus-6110.c:3853 gnokii/gnokii.c:1839
+#, c-format
+msgid " Time: %02d:%02d:%02d\n"
+msgstr " Èas: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3701
+#, c-format
+msgid " Date: %4d/%02d/%02d\n"
+msgstr " Dátum: %4d/%02d/%02d\n"
+
+#: common/fbus-6110.c:3715
+msgid "Message: Alarm set correctly\n"
+msgstr "Správa: Budík úspe¹ne nastavený\n"
+
+#: common/fbus-6110.c:3737
+msgid "Message: Alarm\n"
+msgstr "Správa: Budík\n"
+
+#: common/fbus-6110.c:3738
+#, c-format
+msgid " Alarm: %02d:%02d\n"
+msgstr " Budík: %02d:%02d\n"
+
+#: common/fbus-6110.c:3739
+#, c-format
+msgid " Alarm is %s\n"
+msgstr " Budík je %s\n"
+
+#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579
+#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582
+#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585
+msgid "on"
+msgstr "zapnutý"
+
+#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579
+#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582
+#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585
+msgid "off"
+msgstr "vypnutý"
+
+#: common/fbus-6110.c:3755
+msgid "Message: Unknown message of type 0x11\n"
+msgstr "Správa: Neznáma správa typu 0x11\n"
+
+#: common/fbus-6110.c:3778
+msgid "Message: Calendar note write succesfull!\n"
+msgstr "Správa: Polo¾ka kalendára úspe¹ne zapísaná!\n"
+
+#: common/fbus-6110.c:3788 common/fbus-6110.c:3798
+msgid "Message: Calendar note write failed!\n"
+msgstr "Správa: Zápis polo¾ky kalendára zlyhal!\n"
+
+#: common/fbus-6110.c:3807
+msgid "Unknown message of type 0x13 and subtype 0x65\n"
+msgstr "Neznáma správa typu 0x13 a subtypu 0x65\n"
+
+#: common/fbus-6110.c:3847
+msgid "Message: Calendar note received.\n"
+msgstr "Správa: Polo¾ka kalendára prijatá.\n"
+
+#: common/fbus-6110.c:3849 gnokii/gnokii.c:1835
+#, c-format
+msgid " Date: %d-%02d-%02d\n"
+msgstr " Dátum: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3860 gnokii/gnokii.c:1844
+#, c-format
+msgid " Alarm date: %d-%02d-%02d\n"
+msgstr " Dátum upozornenia: %d-%02d-%02d\n"
+
+#: common/fbus-6110.c:3864 gnokii/gnokii.c:1848
+#, c-format
+msgid " Alarm time: %02d:%02d:%02d\n"
+msgstr " Èas upozornenia: %02d:%02d:%02d\n"
+
+#: common/fbus-6110.c:3869
+#, c-format
+msgid " Type: %d\n"
+msgstr " Typ: %d\n"
+
+#: common/fbus-6110.c:3870 gnokii/gnokii.c:1853
+#, c-format
+msgid " Text: %s\n"
+msgstr " Text: %s\n"
+
+#: common/fbus-6110.c:3873 gnokii/gnokii.c:1856
+#, c-format
+msgid " Phone: %s\n"
+msgstr " Telefón: %s\n"
+
+#: common/fbus-6110.c:3883
+msgid "Message: Calendar note not available\n"
+msgstr "Správa: Polo¾ka kalendára nie je k dispozícii\n"
+
+#: common/fbus-6110.c:3893
+msgid "Message: Calendar note error\n"
+msgstr "Správa: Chyba polo¾ky kalendára\n"
+
+#: common/fbus-6110.c:3915
+msgid "Message: Calendar note deleted\n"
+msgstr "Správa: Polo¾ka kalendára vymazaná\n"
+
+#: common/fbus-6110.c:3926
+msgid "Message: Calendar note can't be deleted\n"
+msgstr "Správa: Polo¾ka kalendára nemô¾e by» vymazaná\n"
+
+#: common/fbus-6110.c:3936
+msgid "Message: Calendar note deleting error\n"
+msgstr "Správa: Chyba pri mazaní polo¾ky kalendára\n"
+
+#: common/fbus-6110.c:3952
+msgid "Message: Calendar Alarm active\n"
+msgstr "Správa: Upozornenie kalendára aktívne\n"
+
+#: common/fbus-6110.c:3953
+#, c-format
+msgid " Item number: %d\n"
+msgstr " Èíslo polo¾ky: %d\n"
+
+#: common/fbus-6110.c:3961
+msgid "Message: Unknown message of type 0x13\n"
+msgstr "Správa: Neznáma správa typu 0x13\n"
+
+#: common/fbus-6110.c:4024
+msgid "Concatenated message!!!\n"
+msgstr "Zlo¾ená správa!!!\n"
+
+#: common/fbus-6110.c:4045
+#, c-format
+msgid "Number: %d\n"
+msgstr "Èíslo: %d\n"
+
+#: common/fbus-6110.c:4050
+msgid "Message: Outbox message (mobile originated)\n"
+msgstr "Správa: Odchádzajúca správa\n"
+
+#: common/fbus-6110.c:4053
+msgid "Sent\n"
+msgstr "Odoslaná\n"
+
+#: common/fbus-6110.c:4055
+msgid "Not sent\n"
+msgstr "Neodoslaná\n"
+
+#: common/fbus-6110.c:4059
+msgid "Message: Received SMS (mobile terminated)\n"
+msgstr "Správa: Príjem SMS\n"
+
+#: common/fbus-6110.c:4062
+msgid "Delivery Report\n"
+msgstr "Potvrdenie o doruèení\n"
+
+#: common/fbus-6110.c:4064
+msgid "Unknown type\n"
+msgstr "Neznámy typ\n"
+
+#: common/fbus-6110.c:4067
+msgid "Read\n"
+msgstr "Preèítaná\n"
+
+#: common/fbus-6110.c:4069
+msgid "Not read\n"
+msgstr "Nepreèítaná\n"
+
+#: common/fbus-6110.c:4071
+#, c-format
+msgid " Date: %s "
+msgstr " Dátum: %s "
+
+#: common/fbus-6110.c:4079 common/fbus-6110.c:4095 gnokii/gnokii.c:1210
+#: gnokii/gnokii.c:1223 gnokii/gnokii.c:1250
+#, c-format
+msgid "%02d00"
+msgstr "%02d00"
+
+#: common/fbus-6110.c:4086
+#, c-format
+msgid " SMSC response date: %s "
+msgstr " Dátum odpovede SMSC: %s "
+
+#: common/fbus-6110.c:4170
+msgid "Delivered"
+msgstr "Doruèená"
+
+#: common/fbus-6110.c:4175
+msgid "SM received by the SME"
+msgstr "Správa prijatá SME"
+
+#: common/fbus-6110.c:4178
+msgid ""
+"SM forwarded by the SC to the SME but the SC is unable to confirm delivery"
+msgstr ""
+"SC poslal správu SME, ale SC nie je schopné potvrdi» doruèenie"
+
+#: common/fbus-6110.c:4181
+msgid "SM replaced by the SC"
+msgstr "Správa prepísaná SC"
+
+#: common/fbus-6110.c:4189
+msgid "Failed"
+msgstr "Zlyhala"
+
+#: common/fbus-6110.c:4196
+msgid "Temporary error, SC is not making any more transfer attempts\n"
+msgstr "Doèasná chyba, SC sa nebude viac pokú¹a» o prenos\n"
+
+#: common/fbus-6110.c:4201 common/fbus-6110.c:4294
+msgid "Congestion"
+msgstr "Pre»a¾enie"
+
+#: common/fbus-6110.c:4205 common/fbus-6110.c:4298
+msgid "SME busy"
+msgstr "SME obsadené"
+
+#: common/fbus-6110.c:4209 common/fbus-6110.c:4302
+msgid "No response from SME"
+msgstr "SME neodpovedal"
+
+#: common/fbus-6110.c:4213 common/fbus-6110.c:4306
+msgid "Service rejected"
+msgstr "Slu¾ba odmietnutá"
+
+#: common/fbus-6110.c:4217 common/fbus-6110.c:4253 common/fbus-6110.c:4310
+msgid "Quality of service not aviable"
+msgstr "Kvalita slu¾ieb nedostupná"
+
+#: common/fbus-6110.c:4221 common/fbus-6110.c:4314
+msgid "Error in SME"
+msgstr "Chyba v SME"
+
+#: common/fbus-6110.c:4225 common/fbus-6110.c:4277 common/fbus-6110.c:4318
+#: common/fbus-6110.c:4328
+#, c-format
+msgid "Reserved/Specific to SC: %x"
+msgstr "Rezervované/SC ¹pecifické: %x"
+
+#: common/fbus-6110.c:4232
+msgid "Permanent error, SC is not making any more transfer attempts\n"
+msgstr "Trvalá chyba, SC sa nebude viac pokú¹a» o prenos\n"
+
+#: common/fbus-6110.c:4237
+msgid "Remote procedure error"
+msgstr "Chyba procedúry protistrany"
+
+#: common/fbus-6110.c:4241
+msgid "Incompatibile destination"
+msgstr "Nekompatibilný príjemca"
+
+#: common/fbus-6110.c:4245
+msgid "Connection rejected by SME"
+msgstr "Spojenie odmietnuté SME"
+
+#: common/fbus-6110.c:4249
+msgid "Not obtainable"
+msgstr "Nedá sa získa»"
+
+#: common/fbus-6110.c:4257
+msgid "No internetworking available"
+msgstr "Internetworking nedostupný"
+
+#: common/fbus-6110.c:4261
+msgid "SM Validity Period Expired"
+msgstr "Platnos» správy vypr¹ala"
+
+#: common/fbus-6110.c:4265
+msgid "SM deleted by originating SME"
+msgstr "Správa vymazaná odosielajúcim SME"
+
+#: common/fbus-6110.c:4269
+msgid "SM Deleted by SC Administration"
+msgstr "Správa zmazaná správcom SC"
+
+#: common/fbus-6110.c:4273
+msgid "SM does not exist"
+msgstr "SPráva neexistuje"
+
+#: common/fbus-6110.c:4286
+msgid "Pending"
+msgstr "Èakajúca"
+
+#: common/fbus-6110.c:4290
+msgid "Temporary error, SC still trying to transfer SM\n"
+msgstr "Doèasná chyba, SC sa stále pokú¹a správu doruèi»\n"
+
+#: common/fbus-6110.c:4356
+msgid "Message: SMS reading failed.\n"
+msgstr "Správa: Èítanie SMS zlyhalo.\n"
+
+#: common/fbus-6110.c:4364
+msgid " Invalid location!\n"
+msgstr " Chybná pozícia!\n"
+
+#: common/fbus-6110.c:4374
+msgid " Empty SMS location.\n"
+msgstr " Prázdna pozícia.\n"
+
+#: common/fbus-6110.c:4387
+msgid "Message: SMS deleted successfully.\n"
+msgstr "Správa: SMS úspe¹ne zmazaná.\n"
+
+#: common/fbus-6110.c:4397
+msgid "Message: SMS Status Received\n"
+msgstr "Správa: Príjem stavu SMS\n"
+
+#: common/fbus-6110.c:4398
+#, c-format
+msgid " The number of messages: %d\n"
+msgstr " Poèet správ: %d\n"
+
+#: common/fbus-6110.c:4399
+#, c-format
+msgid " Unread messages: %d\n"
+msgstr " Nepreèítaných správ: %d\n"
+
+#: common/fbus-6110.c:4411
+msgid "Message: SMS Status error, probably not authorized by PIN\n"
+msgstr "Správa: Chyba SMS stavu, pravdepodobne nebol zadaný PIN\n"
+
+#: common/fbus-6110.c:4442
+msgid "Message: Netmonitor correctly set.\n"
+msgstr "Správa: Monitor siete úspe¹ne zapnutý.\n"
+
+#: common/fbus-6110.c:4452
+#, c-format
+msgid "Message: Netmonitor menu %d received:\n"
+msgstr "Správa: Menu sie»ového monitora %d prijaté:\n"
+
+#: common/fbus-6110.c:4468
+msgid "Unknown message of type 0x40.\n"
+msgstr "Neznáma správa typu 0x40.\n"
+
+#: common/fbus-6110.c:4490
+msgid "Message: Mobile phone identification received:\n"
+msgstr "Správa: Identifikácia mobilného telefónu prijatá:\n"
+
+#: common/fbus-6110.c:4491
+#, c-format
+msgid " IMEI: %s\n"
+msgstr " IMEI: %s\n"
+
+#: common/fbus-6110.c:4493
+#, c-format
+msgid " Model: %s\n"
+msgstr " Model: %s\n"
+
+#: common/fbus-6110.c:4495
+#, c-format
+msgid " Production Code: %s\n"
+msgstr " Výrobné èíslo: %s\n"
+
+#: common/fbus-6110.c:4497
+#, c-format
+msgid " HW: %s\n"
+msgstr " HW: %s\n"
+
+#: common/fbus-6110.c:4499
+#, c-format
+msgid " Firmware: %s\n"
+msgstr " Firmware: %s\n"
+
+#: common/fbus-6110.c:4505
+#, c-format
+msgid " Magic bytes: %02x %02x %02x %02x\n"
+msgstr " Magické bajty: %02x %02x %02x %02x\n"
+
+#: common/fbus-6110.c:4525
+#, c-format
+msgid "[Received Ack of type %02x, seq: %2x]\n"
+msgstr "[Prijaté potvrdenie typu %02x, sekv.: %2x]\n"
+
+#: common/fbus-6110.c:4543
+msgid "Message: The phone is powered on - seq 1.\n"
+msgstr "Správa: Telefón sa zapína - sekv. 1.\n"
+
+#: common/fbus-6110.c:4567
+msgid "Message: The phone is powered on - seq 2.\n"
+msgstr "Správa: Telefón sa zapína - sekv. 2.\n"
+
+#: common/fbus-6110.c:4583
+msgid "Message: Unknown message.\n"
+msgstr "Správa: Neznáma správa.\n"
+
+#: common/fbus-6110.c:4681
+msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n"
+msgstr "Preru¹ená viacrámcová správa - ignorovaná !!!\n"
+
+#: common/fbus-6110.c:4682
+msgid "Please report it ...\n"
+msgstr "Prosím ohláste to...\n"
+
+#: common/fbus-6110.c:4749
+msgid "Bad checksum!\n"
+msgstr "Chybný kontrolný súèet!\n"
+
+#: common/fbus-6110.c:4811 xgnokii/xgnokii.c:1690
+msgid "Phone"
+msgstr "Telefón"
+
+#: common/fbus-6110.c:4814
+msgid "PC"
+msgstr "PC"
+
+#: common/fbus-6110.c:4832
+#, c-format
+msgid "Msg Dest: %s\n"
+msgstr "Cieµ správy: %s\n"
+
+#: common/fbus-6110.c:4833
+#, c-format
+msgid "Msg Source: %s\n"
+msgstr "Zdroj správy: %s\n"
+
+#: common/fbus-6110.c:4835
+#, c-format
+msgid "Msg Type: %02x\n"
+msgstr "Typ správy: %02x\n"
+
+#: common/fbus-6110.c:4837
+#, c-format
+msgid "Msg Unknown: %02x\n"
+msgstr "Neznáma správa: %02x\n"
+
+#: common/fbus-6110.c:4838
+#, c-format
+msgid ""
+"Msg Len: %02x\n"
+"Phone: "
+msgstr ""
+"Då¾ka správy: %02x\n"
+"Telefón: "
+
+#: common/fbus-6110.c:4909
+msgid "PC: "
+msgstr "PC:"
+
+#: common/fbus-6110.c:4983
+#, c-format
+msgid "[Sending Ack of type %02x, seq: %x]\n"
+msgstr "[Posiela sa potvrdenie typu %02x, sekv.: %x]\n"
+
+#: common/mbus-6160.c:763
+msgid "Couldn't open MB61 device: "
+msgstr "Nie je mo¾né otvori» zariadenie MB61: "
+
+#: common/mbus-640.c:792
+msgid "Phone: "
+msgstr "Telefón: "
+
+#: common/mbus-640.c:822 common/mbus-640.c:922
+msgid "PC : "
+msgstr "PC: "
+
+#: common/mbus-640.c:832 common/mbus-640.c:935
+msgid "Write error!\n"
+msgstr "Chyba zápisu!\n"
+
+#: common/mbus-640.c:859
+msgid "Setting MBUS communication...\n"
+msgstr "Nastavenie MBUS komunikácie...\n"
+
+#: common/rlp-common.c:669
+msgid "Unknown!!! "
+msgstr "Neznámy!!! "
+
+#: common/rlp-common.c:734
+msgid "BAD"
+msgstr "CHYBA"
+
+#: common/rlp-common.c:856
+msgid "Frame FCS is bad. Ignoring...\n"
+msgstr "Kontrolný súèet rámca je chybný. Ignoruje sa...\n"
+
+#: common/rlp-common.c:969
+msgid "Send_TXU()\n"
+msgstr "Send_TXU()\n"
+
+#: common/rlp-common.c:970
+#, c-format
+msgid "XID_R_State=%d\n"
+msgstr "XID_R_State=%d\n"
+
+#: common/rlp-common.c:1334
+msgid "RLP state 0.\n"
+msgstr "RLP stav 0.\n"
+
+#: common/rlp-common.c:1371
+msgid "RLP state 1.\n"
+msgstr "RLP stav 1.\n"
+
+#: common/rlp-common.c:1436
+msgid "RLP state 2.\n"
+msgstr "RLP stae 2.\n"
+
+#: common/rlp-common.c:1470
+msgid "UA received in RLP state 2.\n"
+msgstr "UA prijatý v RLP stave 2.\n"
+
+#: common/rlp-common.c:1527
+msgid "RLP state 3.\n"
+msgstr "RLP stav 3.\n"
+
+#: common/rlp-common.c:1585
+msgid "RLP state 4.\n"
+msgstr "RLP stav 4.\n"
+
+#: common/rlp-common.c:1695
+msgid "RLP state 5.\n"
+msgstr "RLP stav 5.\n"
+
+#: common/rlp-common.c:1754
+msgid "RLP state 6 - not yet implemented!\n"
+msgstr "RLP stav 6 - zatiaµ neimplementovaný!\n"
+
+#: common/rlp-common.c:1784
+msgid "RLP state 7.\n"
+msgstr "RLP stav 7.\n"
+
+#: common/rlp-common.c:1826
+msgid "DEBUG: Unknown RLP state!\n"
+msgstr "DEBUG: Neznámy RLP stav!\n"
+
+#: gnokii/gnokii.c:168
+#, c-format
+msgid ""
+"GNOKII Version %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Built %s %s for %s on %s \n"
+msgstr ""
+"GNOKII verzia %s\n"
+"Copyright (C) Hugh Blemings <hugh@linuxcare.com>, 1999, 2000\n"
+"Copyright (C) Pavel Janík ml. <Pavel.Janik@linux.cz>, 1999, 2000\n"
+"Kompilácia: %s %s pre %s na %s \n"
+
+#: gnokii/gnokii.c:182
+msgid ""
+" usage: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory memory_type start end\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial number\n"
+" gnokii --setspeeddial number memory_type location\n"
+" gnokii --getsms memory_type start end\n"
+" gnokii --deletesms memory_type start end\n"
+" gnokii --sendsms destination [--smsc message_center_number |\n"
+" --smscno message_center_index] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc message_center_number\n"
+" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice number\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} destionation logofile [network "
+"code]\n"
+" gnokii --setlogo logofile [network code]\n"
+" gnokii --setlogo logofile [caller group number] [group name]\n"
+" gnokii --setlogo text [startup text]\n"
+" gnokii --setlogo dealer [dealer startup text]\n"
+" gnokii --getlogo logofile {caller|op|startup} [caller group "
+"number]\n"
+" gnokii --sendringtone destionation rtttlfile\n"
+" gnokii --reset [soft|hard]\n"
+" gnokii --getprofile [number]\n"
+msgstr ""
+" Pou¾itie: gnokii [--help|--monitor|--version]\n"
+" gnokii --getmemory typ_pamäti zaèiatok koniec\n"
+" gnokii --writephonebook\n"
+" gnokii --getspeeddial èíslo\n"
+" gnokii --setspeeddial èíslo typ_pamäti pozícia\n"
+" gnokii --getsms typ_pamäti zaèiatok koniec\n"
+" gnokii --deletesms typ_pamäti zaèiatok koniec\n"
+" gnokii --sendsms cieµ [--smsc èíslo_centra_správ |\n"
+" --smscno index_centra_správ] [-r] [-C n] [-v n]\n"
+" [--long n]\n"
+" gnokii --getsmsc èíslo_centra_správ\n"
+" gnokii --setdatetime [RRRR [MM [DD [HH [MM]]]]]\n"
+" gnokii --getdatetime\n"
+" gnokii --setalarm HH MM\n"
+" gnokii --getalarm\n"
+" gnokii --dialvoice èíslo\n"
+" gnokii --getcalendarnote index [-v]\n"
+" gnokii --writecalendarnote\n"
+" gnokii --deletecalendarnote index\n"
+" gnokii --getdisplaystatus\n"
+" gnokii --netmonitor {reset|off|field|devel|next|nr}\n"
+" gnokii --identify\n"
+" gnokii --senddtmf string\n"
+" gnokii --sendlogo {caller|op} cieµ logo_súbor [kód_siete]\n"
+" gnokii --setlogo logo_súbor [kód_siete]\n"
+" gnokii --setlogo logo_súbor [èíslo_skupiny] [názov_skupiny]\n"
+" gnokii --setlogo text [úvodný_text]\n"
+" gnokii --setlogo dealer [úvodný_text_predajcu]\n"
+" gnokii --getlogo logofile {caller|op|startup} [èíslo_skupiny]\n"
+" gnokii --sendringtone cieµ rtttl_súbor\n"
+" gnokii --reset [soft|hard]\n"
+" gnokii --getprofile [èíslo]\n"
+
+#: gnokii/gnokii.c:218
+msgid ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+msgstr ""
+" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n"
+" gnokii --getsecuritycodestatus\n"
+
+#: gnokii/gnokii.c:223
+msgid ""
+"\n"
+" --help display usage information.\n"
+"\n"
+" --monitor continually updates phone status to stderr.\n"
+"\n"
+" --version displays version and copyright information.\n"
+"\n"
+" --getmemory reads specificed memory location from phone.\n"
+" Valid memory types are:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook reads data from stdin and writes to phonebook.\n"
+" Uses the same format as provided by the output "
+"of\n"
+" the getphonebook command.\n"
+"\n"
+" --getspeeddial reads speed dial from the specified location.\n"
+"\n"
+" --setspeeddial specify speed dial.\n"
+"\n"
+" --getsms gets SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+" Entries are dumped to stdout.\n"
+"\n"
+" --deletesms deletes SMS messages from specified memory type\n"
+" starting at entry [start] and ending at [end].\n"
+"\n"
+" --sendsms sends an SMS message to [destination] via\n"
+" [message_center_number] or SMSC number taken "
+"from\n"
+" phone memory from address "
+"[message_center_index].\n"
+" If this argument is ommited SMSC number is "
+"taken\n"
+" from phone memory from location 1. Message text\n"
+" is taken from stdin. This function has had\n"
+" limited testing and may not work at all on your\n"
+" network. Meaning of other optional parameters:\n"
+" [-r] - request for delivery report\n"
+" [-C n] - Class Message n, where n can be 0..3\n"
+" [-v n] - validity in minutes\n"
+" [--long n] - send no more then n characters,\n"
+" default is 160\n"
+"\n"
+" --getsmsc show the SMSC number from location\n"
+" [message_center_number].\n"
+"\n"
+" --setdatetime set the date and the time of the phone.\n"
+"\n"
+" --getdatetime shows current date and time in the phone.\n"
+"\n"
+" --setalarm set the alarm of the phone.\n"
+"\n"
+" --getalarm shows current alarm.\n"
+"\n"
+" --dialvoice initiate voice call.\n"
+"\n"
+" --getcalendarnote get the note with number index from calendar.\n"
+" [-v] - output in vCalendar 1.0 format\n"
+"\n"
+" --writecalendarnote write the note to calendar.\n"
+"\n"
+" --deletecalendarnote delete the note with number [index]\n"
+" from calendar.\n"
+"\n"
+" --getdisplaystatus shows what icons are displayed.\n"
+"\n"
+" --netmonitor setting/querying netmonitor mode.\n"
+"\n"
+" --identify get IMEI, model and revision\n"
+"\n"
+" --senddtmf send DTMF sequence\n"
+"\n"
+" --sendlogo send the logofile to destination as operator\n"
+" or CLI logo\n"
+"\n"
+" --setlogo set caller, startup or operator logo\n"
+"\n"
+" --getlogo get caller, startup or operator logo\n"
+"\n"
+" --sendringtone send the rtttlfile to destination as ringtone\n"
+"\n"
+" --reset [soft|hard] resets the phone.\n"
+"\n"
+" --getprofile [number] show settings for selected(all) profile(s)\n"
+"\n"
+msgstr ""
+"\n"
+" --help zobrazi» informáciu o pou¾ití.\n"
+"\n"
+" --monitor priebe¾ne vypisova» stav telefónu na ¹tandardný\n"
+" chybový výstup.\n"
+"\n"
+" --version zobrazi» verziu a informáciu o copyrighte.\n"
+"\n"
+" --getmemory preèíta» zadanú pamä»ovú pozíciu z telefónu.\n"
+" Platné typy pamäti sú:\n"
+" ME, SM, FD, ON, EN, DC, RC, MC, LD\n"
+"\n"
+" --writephonebook preèíta» údaje zo ¹tandardného vstupu a zapísa».\n"
+" ich do telefónneho zoznamu. Pou¾itý formát je\n"
+" zhodný s výstupným formátom príkazu getphonebook.\n"
+"\n"
+" --getspeeddial preèíta» definíciu skráteného volania zo zadanej\n"
+" pozície.\n"
+"\n"
+" --setspeeddial zadefinova» zrýchlené volanie.\n"
+"\n"
+" --getsms preèíta» krátke správy zo zadaného typu pamäti\n"
+" od pozície [zaèiatok] po [koniec]. Záznamy sa\n"
+" zapí¹u na ¹tandardný výstup.\n"
+"\n"
+" --deletesms zmaza» krátke správy zo zadaného typu pamäti\n"
+" od pozície [zaèiatok] po [koniec].\n"
+"\n"
+" --sendsms posla» krátku správu pre [cieµ] prostredníctvom\n"
+" [èísla_centra_správ] alebo èísla SMSC na pozícii\n"
+" [index_centa_správ] v pamäti telefónu.\n"
+" Pokiaµ je tento argument vynechaný, èíslo sa\n"
+" preèíta z pozície 1 pamäti telefónu. Text správy\n"
+" sa preèíta zo ¹tandardného vstupu. Táto funkcia\n"
+" bola len èiastoène testovaná a vo va¹ej sieti\n"
+" nemusí fungova». Význam ostatných voliteµných\n"
+" parametrov je::\n"
+" [-r] - vy¾iada» potvrdenie o doruèení\n"
+" [-C n] - trieda správy n, kde n je 0 a¾ 3\n"
+" [-v n] - èas platnosti v minútach\n"
+" [--long n] - neposiela» viac ako n znakov,\n"
+" prednastavená hodnota je 160\n"
+"\n"
+" --getsmsc ukáza» èíslo centra správ na pozícii\n"
+" [èíslo_centra_správ].\n"
+"\n"
+" --setdatetime nastavi» dátum a èas v telefóne.\n"
+"\n"
+" --getdatetime zobrazi» dátum a èas telefónu.\n"
+"\n"
+" --setalarm nastavi» budík v telefóne.\n"
+"\n"
+" --getalarm zobrazi» aktuálny budík.\n"
+"\n"
+" --dialvoice zaèa» hlasové volanie.\n"
+"\n"
+" --getcalendarnote zobrazi» poznámku èíslo [index] z kalendára.\n"
+" [-v] - výstup vo formáte vCalendar 1.0\n"
+"\n"
+" --writecalendarnote zapísa» poznámku do kalendára.\n"
+"\n"
+" --deletecalendarnote vymaza» poznámku èíslo [index]\n"
+" z kalendára.\n"
+"\n"
+" --getdisplaystatus ukáza», ktoré ikony sú zobrazené.\n"
+"\n"
+" --netmonitor nastavi»/zisti» re¾im monitora siete.\n"
+"\n"
+" --identify zobrazi» IMEI, model a revíziu\n"
+"\n"
+" --senddtmf posla» DTMF sekvenciu\n"
+"\n"
+" --sendlogo posla» logo_súbor cieµu ako logo operátora\n"
+" alebo skupiny\n"
+"\n"
+" --setlogo nastavi» úvodné logo, logo volajúceho alebo\n"
+" logo operátora\n"
+"\n"
+" --getlogo získa» úvodné logo, logo volajúceho alebo\n"
+" logo operátora\n"
+"\n"
+" --sendringtone posla» rtttl_súbor cieµu ako vyzváòanie\n"
+"\n"
+" --reset [soft|hard] resetova» telefón.\n"
+"\n"
+" --getprofile [number] zobrazi» nastavenia zvoleného (v¹etkých)\n"
+" profilov\n"
+"\n"
+
+#: gnokii/gnokii.c:309
+msgid ""
+" --entersecuritycode asks for the code and sends it to the phone\n"
+"\n"
+" --getsecuritycodestatus show if a security code is needed\n"
+"\n"
+msgstr ""
+" --entersecuritycode vypýta» kód a posla» ho telefónu\n"
+"\n"
+" --getsecuritycodestatus zobrazi», èi je po¾adovaný bezpeènostný kód\n"
+"\n"
+
+#: gnokii/gnokii.c:336 gnokii/gnokii.c:2721 gnokiid/virtmodem.c:262
+#: xlogos/xlogos.c:139
+msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n"
+msgstr "GSM/FBUS inicializácia zlyhala (neznámy model?). Koniec.\n"
+
+#: gnokii/gnokii.c:347
+msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n"
+msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec.\n"
+
+#: gnokii/gnokii.c:605
+#, c-format
+msgid "Use '%s --help' for usage informations.\n"
+msgstr "Pou¾ite '%s --help' na získanie informácie o pou¾ití.\n"
+
+#: gnokii/gnokii.c:788
+#, c-format
+msgid "Unknown option: %d\n"
+msgstr "Neznáma voµba: %d\n"
+
+#: gnokii/gnokii.c:798
+msgid "Wrong number of arguments\n"
+msgstr "Nesprávny poèet argumentov\n"
+
+#: gnokii/gnokii.c:869 gnokii/gnokii.c:927
+msgid "Input too long!\n"
+msgstr "Vstup príli¹ dlhý!\n"
+
+#: gnokii/gnokii.c:922
+msgid "Couldn't read from stdin!\n"
+msgstr "Nie je mo¾né èíta» zo ¹tandardného vstupu!\n"
+
+#: gnokii/gnokii.c:988 gnokii/gnokii.c:1625 gnokii/gnokii.c:2779
+msgid "Send succeeded!\n"
+msgstr "Poslanie bolo úspe¹né!\n"
+
+#: gnokii/gnokii.c:990 gnokii/gnokii.c:1627 gnokii/gnokii.c:2781
+#, c-format
+msgid "SMS Send failed (error=%d)\n"
+msgstr "Poslanie SMS zlyhalo (chyba=%d)\n"
+
+#: gnokii/gnokii.c:1014
+#, c-format
+msgid "%d. SMS center (%s) number is %s\n"
+msgstr "%. Èíslo SMS centra (%s) je %s\n"
+
+#: gnokii/gnokii.c:1016
+msgid "Messages sent as "
+msgstr "Správy poslané ako "
+
+#: gnokii/gnokii.c:1038 xgnokii/xgnokii.c:542
+msgid "ERMES"
+msgstr "ERMES"
+
+#: gnokii/gnokii.c:1042 xgnokii/xgnokii.c:546
+msgid "X.400"
+msgstr "X.400"
+
+#: gnokii/gnokii.c:1051
+msgid "Message validity is "
+msgstr "Platnos» správy je "
+
+#: gnokii/gnokii.c:1087
+msgid "SMS center can not be found :-(\n"
+msgstr "SMS centrum nie je mo¾né nájs» :-(\n"
+
+#: gnokii/gnokii.c:1156 gnokii/gnokii.c:1363 gnokii/gnokii.c:2334
+#: gnokii/gnokii.c:2504
+#, c-format
+msgid "Unknown memory type %s!\n"
+msgstr "Neznámy typ pamäti %s!\n"
+
+#: gnokii/gnokii.c:1183
+#, c-format
+msgid "%d. Outbox Message "
+msgstr "%d. Správa vo výstupnej schránke "
+
+#: gnokii/gnokii.c:1186
+msgid "(sent)\n"
+msgstr "(odoslaná)\n"
+
+#: gnokii/gnokii.c:1188
+msgid "(not sent)\n"
+msgstr "(neodoslaná)\n"
+
+#: gnokii/gnokii.c:1190 gnokii/gnokii.c:1229
+#, c-format
+msgid ""
+"Text: %s\n"
+"\n"
+msgstr ""
+"Text: %s\n"
+"\n"
+
+#: gnokii/gnokii.c:1196
+#, c-format
+msgid "%d. Delivery Report "
+msgstr "%d. Potvrdenie o doruèení"
+
+#: gnokii/gnokii.c:1198 gnokii/gnokii.c:1238
+msgid "(read)\n"
+msgstr "(preèítaná)\n"
+
+#: gnokii/gnokii.c:1200 gnokii/gnokii.c:1240
+msgid "(not read)\n"
+msgstr "(nepreèítaná)\n"
+
+#: gnokii/gnokii.c:1202
+#, c-format
+msgid "Sending date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum a èas odoslania: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1208 gnokii/gnokii.c:1221 gnokii/gnokii.c:1248
+#, c-format
+msgid "+%02d00"
+msgstr "+%02d00"
+
+#: gnokii/gnokii.c:1215
+#, c-format
+msgid "Response date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum a èas odpovede: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1228
+#, c-format
+msgid "Receiver: %s Msg Center: %s\n"
+msgstr "Príjemca: %s Centrum správ: %s\n"
+
+#: gnokii/gnokii.c:1235
+#, c-format
+msgid "%d. Inbox Message "
+msgstr "%d. Správa vo vstupnej schránke "
+
+#: gnokii/gnokii.c:1242
+#, c-format
+msgid "Date/time: %d/%d/%d %d:%02d:%02d "
+msgstr "Dátum/èas: %d/%d/%d %d:%02d:%02d "
+
+#: gnokii/gnokii.c:1254
+#, c-format
+msgid "Sender: %s Msg Center: %s\n"
+msgstr "Odosielateµ: %s Centrum správ: %s\n"
+
+#: gnokii/gnokii.c:1260
+#, c-format
+msgid "Linked (%d/%d):\n"
+msgstr "Zre»azenie (%d/%d)\n"
+
+#: gnokii/gnokii.c:1266
+#, c-format
+msgid ""
+"Text:\n"
+"%s\n"
+"\n"
+msgstr ""
+"Text:\n"
+"%s\n"
+"\n"
+
+#: gnokii/gnokii.c:1275 gnokii/gnokii.c:1386 gnokii/gnokii.c:1452
+#: gnokii/gnokii.c:2252 gnokii/gnokii.c:2361
+#, c-format
+msgid "Function not implemented in %s model!\n"
+msgstr "Funkcia nie je pre odel %s implementovaná!\n"
+
+#: gnokii/gnokii.c:1281
+#, c-format
+msgid "Invalid location: %s %d\n"
+msgstr "Nesprávna pozícia %s %d\n"
+
+#: gnokii/gnokii.c:1287
+#, c-format
+msgid "SMS location %s %d empty.\n"
+msgstr "SMS pozícia %s %d je prázdna.\n"
+
+#: gnokii/gnokii.c:1293
+#, c-format
+msgid ""
+"GetSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"GetSMS %s %d zlyhalo!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1383
+#, c-format
+msgid "Deleted SMS %s %d\n"
+msgstr "Zmazaná SMS %s %d\n"
+
+#: gnokii/gnokii.c:1390
+#, c-format
+msgid ""
+"DeleteSMS %s %d failed!(%d)\n"
+"\n"
+msgstr ""
+"DeleteSMS %s %d zlyhalo!(%d)\n"
+"\n"
+
+#: gnokii/gnokii.c:1441
+msgid "Enter your code: "
+msgstr "Zadajte vá¹ kód: "
+
+#: gnokii/gnokii.c:1448
+msgid "Error: invalid code.\n"
+msgstr "Chyba: Nesprávny kód.\n"
+
+#: gnokii/gnokii.c:1450
+msgid "Code ok.\n"
+msgstr "Kód v poriadku.\n"
+
+#: gnokii/gnokii.c:1454
+msgid "Other error.\n"
+msgstr "Iná chyba.\n"
+
+#: gnokii/gnokii.c:1470
+msgid "Security code status: "
+msgstr "Stav bezpeènostného kódu: "
+
+#: gnokii/gnokii.c:1572
+msgid "Sending operator logo.\n"
+msgstr "Posielanie loga operátora.\n"
+
+#: gnokii/gnokii.c:1576
+msgid "Sending caller line identification logo.\n"
+msgstr "Posielanie loga volajúceho.\n"
+
+#: gnokii/gnokii.c:1578
+msgid "You should specify what kind of logo to send!\n"
+msgstr "Je potrebné zada» druh posielaného loga!\n"
+
+#: gnokii/gnokii.c:1597
+#, c-format
+msgid "Operator code: %s\n"
+msgstr "Kód operátora: %s\n"
+
+#: gnokii/gnokii.c:1675
+msgid "Getting Logo.\n"
+msgstr "Získanie loga.\n"
+
+#: gnokii/gnokii.c:1728
+msgid "Logo file error.\n"
+msgstr "Chyba v súbore s logom.\n"
+
+#: gnokii/gnokii.c:1734
+msgid "Sending Logo.\n"
+msgstr "Posielanie loga.\n"
+
+#: gnokii/gnokii.c:1776
+msgid "BEGIN:VCALENDAR\n"
+msgstr "BEGIN:VCALENDAR\n"
+
+#: gnokii/gnokii.c:1777
+msgid "VERSION:1.0\n"
+msgstr "VERSION:1.0\n"
+
+#: gnokii/gnokii.c:1778
+msgid "BEGIN:VEVENT\n"
+msgstr "BEGIN:VEVENT\n"
+
+#: gnokii/gnokii.c:1779
+msgid "CATEGORIES:"
+msgstr "CATEGORIES:"
+
+#: gnokii/gnokii.c:1782
+msgid "MISCELLANEOUS\n"
+msgstr "MISCELLANEOUS\n"
+
+#: gnokii/gnokii.c:1785
+msgid "PHONE CALL\n"
+msgstr "PHONE CALL\n"
+
+#: gnokii/gnokii.c:1788
+msgid "MEETING\n"
+msgstr "MEETING\n"
+
+#: gnokii/gnokii.c:1791
+msgid "SPECIAL OCCASION\n"
+msgstr "SPECIAL OCCASION\n"
+
+#: gnokii/gnokii.c:1794
+msgid "UNKNOWN\n"
+msgstr "UNKNOWN\n"
+
+#: gnokii/gnokii.c:1797
+#, c-format
+msgid "SUMMARY:%s\n"
+msgstr "SUMMARY:%s\n"
+
+#: gnokii/gnokii.c:1798
+#, c-format
+msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+msgstr "DTSTART:%04d%02d%02dT%02d%02d%02d\n"
+
+#: gnokii/gnokii.c:1802
+#, c-format
+msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+msgstr "DALARM:%04d%02d%02dT%02d%02d%02d\n"
+
+#: gnokii/gnokii.c:1806
+msgid "END:VEVENT\n"
+msgstr "END:VEVENT\n"
+
+#: gnokii/gnokii.c:1807
+msgid "END:VCALENDAR\n"
+msgstr "END:VCALENDAR\n"
+
+#: gnokii/gnokii.c:1810
+msgid " Type of the note: "
+msgstr " Typ poznámky: "
+
+#: gnokii/gnokii.c:1815
+msgid "Reminder\n"
+msgstr "Pripomenutie\n"
+
+#: gnokii/gnokii.c:1819
+msgid "Call\n"
+msgstr "Telefonát\n"
+
+#: gnokii/gnokii.c:1823
+msgid "Meeting\n"
+msgstr "Stretnutie\n"
+
+#: gnokii/gnokii.c:1827
+msgid "Birthday\n"
+msgstr "Narodeniny\n"
+
+#: gnokii/gnokii.c:1831
+msgid "Unknown\n"
+msgstr "Neznámy\n"
+
+#: gnokii/gnokii.c:1860
+msgid "The calendar note can not be read\n"
+msgstr "Polo¾ku kalendára nie je mo¾né preèíta»\n"
+
+#: gnokii/gnokii.c:1899 gnokii/gnokii.c:2515
+msgid "Succesfully written!\n"
+msgstr "Zápis bol úspe¹ný!\n"
+
+#: gnokii/gnokii.c:1919
+msgid " Calendar note deleted.\n"
+msgstr " Polo¾ka kalendára vymazaná.\n"
+
+#: gnokii/gnokii.c:1922
+msgid "The calendar note can not be deleted\n"
+msgstr "Polo¾ku kalendára nie je mo¾né vymaza»\n"
+
+#: gnokii/gnokii.c:1991
+#, c-format
+msgid "Date: %4d/%02d/%02d\n"
+msgstr "Dátum: %4d/%02d/%02d\n"
+
+#: gnokii/gnokii.c:1992
+#, c-format
+msgid "Time: %02d:%02d:%02d\n"
+msgstr "Èas: %02d:%02d:%02d\n"
+
+#: gnokii/gnokii.c:2028
+#, c-format
+msgid "Alarm: %s\n"
+msgstr "Upozornenie: %s\n"
+
+#: gnokii/gnokii.c:2029
+#, c-format
+msgid "Time: %02d:%02d\n"
+msgstr "Èas: %02d:%02d\n"
+
+#: gnokii/gnokii.c:2070
+msgid "Entering monitor mode...\n"
+msgstr "Aktivácia re¾imu monitorovania siete...\n"
+
+#: gnokii/gnokii.c:2071
+msgid "Initialising GSM interface...\n"
+msgstr "Inicializácia GSM rozhrania...\n"
+
+#: gnokii/gnokii.c:2082
+#, c-format
+msgid "RFLevel: %d\n"
+msgstr "Sila signálu: %d\n"
+
+#: gnokii/gnokii.c:2085
+#, c-format
+msgid "Battery: %d\n"
+msgstr "Batéria: %d\n"
+
+#: gnokii/gnokii.c:2088
+#, c-format
+msgid "Power Source: %s\n"
+msgstr "Napájanie: %s\n"
+
+#: gnokii/gnokii.c:2088
+msgid "AC/DC"
+msgstr "sie»"
+
+#: gnokii/gnokii.c:2088
+msgid "battery"
+msgstr "batéria"
+
+#: gnokii/gnokii.c:2091
+#, c-format
+msgid "SIM: Used %d, Free %d\n"
+msgstr "SIM: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2094
+#, c-format
+msgid "Phone: Used %d, Free %d\n"
+msgstr "Telefón: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2097
+#, c-format
+msgid "DC: Used %d, Free %d\n"
+msgstr "DC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2100
+#, c-format
+msgid "EN: Used %d, Free %d\n"
+msgstr "EN: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2103
+#, c-format
+msgid "FD: Used %d, Free %d\n"
+msgstr "FD: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2106
+#, c-format
+msgid "LD: Used %d, Free %d\n"
+msgstr "LD: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2109
+#, c-format
+msgid "MC: Used %d, Free %d\n"
+msgstr "MC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2112
+#, c-format
+msgid "ON: Used %d, Free %d\n"
+msgstr "ON: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2115
+#, c-format
+msgid "RC: Used %d, Free %d\n"
+msgstr "RC: Pou¾itých %d, voµných %d\n"
+
+#: gnokii/gnokii.c:2118
+#, c-format
+msgid "SMS Messages: UnRead %d, Number %d\n"
+msgstr "SMS správy: Nepreèítaných %d, poèet %d\n"
+
+#: gnokii/gnokii.c:2121
+#, c-format
+msgid "Incoming call: %s\n"
+msgstr "Prichádzajúci hovor: %s\n"
+
+#: gnokii/gnokii.c:2124
+#, c-format
+msgid "Network: %s (%s), LAC: %s, CellID: %s\n"
+msgstr "Sie»: %s (%s), LAC: %s, ID bunky: %s\n"
+
+#: gnokii/gnokii.c:2129
+msgid "Leaving monitor mode...\n"
+msgstr "Deaktivácia re¾imu monitorovania siete...\n"
+
+#: gnokii/gnokii.c:2178
+#, c-format
+msgid "Profile number must be value from 1 to %d!\n"
+msgstr "Èíslo profilu musí by» od 1 po %d!\n"
+
+#: gnokii/gnokii.c:2185
+#, c-format
+msgid "This phone supports only %d profiles!\n"
+msgstr "Tento telefón podporuje iba %d profilov!\n"
+
+#: gnokii/gnokii.c:2257
+msgid "Unspecified error\n"
+msgstr "Bli¾¹ie neurèená chyba\n"
+
+#: gnokii/gnokii.c:2366
+#, c-format
+msgid "Memory type %s not supported!\n"
+msgstr "Typ pamäti %s nie je podporovaný!\n"
+
+#: gnokii/gnokii.c:2371
+#, c-format
+msgid "%s|%d|Bad location or other error!(%d)\n"
+msgstr "%s|%d|Chybná pozícia alebo iná chyba!(%d)\n"
+
+#: gnokii/gnokii.c:2440
+#, c-format
+msgid "Format problem on line %d [%s]\n"
+msgstr "Problém formátu na riadku %d [%s]\n"
+
+#: gnokii/gnokii.c:2455
+#, c-format
+msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Zápis úspe¹ný: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n"
+
+#: gnokii/gnokii.c:2457
+#, c-format
+msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"
+msgstr "Zápis ZLYHAL: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n"
+
+#: gnokii/gnokii.c:2477
+#, c-format
+msgid "SpeedDial nr. %d: %d:%d\n"
+msgstr "Zrýchlená voµba è. %d: %d:%d\n"
+
+#: gnokii/gnokii.c:2546 xgnokii/xgnokii.c:2264 xlogos/xlogos.c:103
+#, c-format
+msgid "error opening %s, using default config\n"
+msgstr "chyba pri otváraní %s, pou¾itá prednastavená konfigurácia\n"
+
+#: gnokii/gnokii.c:2578
+#, c-format
+msgid "Call in progress: %s\n"
+msgstr "Prebieha volanie: %s\n"
+
+#: gnokii/gnokii.c:2579
+#, c-format
+msgid "Unknown: %s\n"
+msgstr "Neznámy: %s\n"
+
+#: gnokii/gnokii.c:2580
+#, c-format
+msgid "Unread SMS: %s\n"
+msgstr "Nepreèítané SMS: %s\n"
+
+#: gnokii/gnokii.c:2581
+#, c-format
+msgid "Voice call: %s\n"
+msgstr "Hlasové volanie: %s\n"
+
+#: gnokii/gnokii.c:2582
+#, c-format
+msgid "Fax call active: %s\n"
+msgstr "Faxové volanie: %s\n"
+
+#: gnokii/gnokii.c:2583
+#, c-format
+msgid "Data call active: %s\n"
+msgstr "Dátové volanie: %s\n"
+
+#: gnokii/gnokii.c:2584
+#, c-format
+msgid "Keyboard lock: %s\n"
+msgstr "Zámok klávesnice: %s\n"
+
+#: gnokii/gnokii.c:2585
+#, c-format
+msgid "SMS storage full: %s\n"
+msgstr "Pamä» SMS plná: %s\n"
+
+#: gnokii/gnokii.c:2637
+#, c-format
+msgid "IMEI: %s\n"
+msgstr "IMEI: %s\n"
+
+#: gnokii/gnokii.c:2638
+#, c-format
+msgid "Model: %s\n"
+msgstr "Model: %s\n"
+
+#: gnokii/gnokii.c:2639
+#, c-format
+msgid "Revision: %s\n"
+msgstr "Revízia: %s\n"
+
+#: gnokii/gnokii.c:2671
+msgid "What kind of reset do you want??\n"
+msgstr "Aký druh resetu si ¾eláte??\n"
+
+#: gnokiid/gnokiid.c:58
+#, c-format
+msgid "gnokiid Version %s"
+msgstr "gnokiid verzia %s"
+
+#: gnokiid/gnokiid.c:70
+msgid " usage: gnokiid {--help|--version}"
+msgstr " pou¾itie: gnokiid {--help|--version}"
+
+#: gnokiid/virtmodem.c:87
+msgid "VM_Initialise - VM_GSMInitialise failed!\n"
+msgstr "VM_Initialise - VM_GSMInitialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:94
+msgid "VM_Initialise - VM_PtySetup failed!\n"
+msgstr "VM_Initialise - VM_PtySetup zlyhal!\n"
+
+#: gnokiid/virtmodem.c:99
+msgid "VM_Initialise - ATEM_Initialise failed!\n"
+msgstr "VM_Initialise - ATEM_Initialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:104
+msgid "VM_Initialise - DP_Initialise failed!\n"
+msgstr "VM_Initialise - DP_Initialise zlyhal!\n"
+
+#: gnokiid/virtmodem.c:198
+msgid "Couldn't open pty!\n"
+msgstr "Nie je mo¾né otvori» pseudoterminál!\n"
+
+#: gnokiid/virtmodem.c:206
+msgid "gnokiid should not be installed setuid root!\n"
+msgstr "gnokiid by nemal by» nain¹talovaný setuid na root-a!\n"
+
+#: gnokiid/virtmodem.c:210
+#, c-format
+msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n"
+msgstr "Slave pseudoterminál je %s, volá sa %s pre vytvorenie /dev/gnokii.\n"
+
+#: gnokiid/virtmodem.c:274 xlogos/xlogos.c:150
+msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n"
+msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec. \n"
+
+#: xgnokii/xgnokii.c:194 xgnokii/xgnokii_contacts.c:2070
+msgid "Reading caller groups names ..."
+msgstr "Èítajú sa názvy skupín volajúcich ..."
+
+#: xgnokii/xgnokii.c:198 xgnokii/xgnokii.c:991
+msgid "Familly"
+msgstr "Rodina"
+
+#: xgnokii/xgnokii.c:199 xgnokii/xgnokii.c:1003
+msgid "VIP"
+msgstr "VIP"
+
+#: xgnokii/xgnokii.c:200 xgnokii/xgnokii.c:1015
+msgid "Friends"
+msgstr "Priatelia"
+
+#: xgnokii/xgnokii.c:201 xgnokii/xgnokii.c:1027
+msgid "Colleagues"
+msgstr "Kolegovia"
+
+#: xgnokii/xgnokii.c:202 xgnokii/xgnokii.c:1039
+msgid "Other"
+msgstr "Iní"
+
+#: xgnokii/xgnokii.c:203
+msgid "No group"
+msgstr "®iadna skupina"
+
+#: xgnokii/xgnokii.c:321
+msgid "Short Message received"
+msgstr "Krátka správa prijatá"
+
+#: xgnokii/xgnokii.c:333
+msgid "Working ..."
+msgstr "Pracujem ..."
+
+#: xgnokii/xgnokii.c:350
+msgid "Call in progress"
+msgstr "Prebieha volanie"
+
+#: xgnokii/xgnokii.c:363
+msgid "Hide"
+msgstr "Skry»"
+
+#: xgnokii/xgnokii.c:460
+#, c-format
+msgid ""
+"Outgoing call in progress:\n"
+"Time: %s"
+msgstr ""
+"Prebieha odchádzajúce volanie:\n"
+"Èas: %s"
+
+#: xgnokii/xgnokii.c:463
+#, c-format
+msgid ""
+"Incomming call from: %s\n"
+"Time: %s"
+msgstr ""
+"Prichádzajúce volanie od: %s\n"
+"Èas: %s"
+
+#: xgnokii/xgnokii.c:516 xgnokii/xgnokii_sms.c:571
+#, c-format
+msgid "Set %d"
+msgstr "Súbor %d"
+
+#: xgnokii/xgnokii.c:538 xgnokii/xgnokii.c:1397
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: xgnokii/xgnokii.c:550
+msgid "Voice"
+msgstr "Hlas"
+
+#: xgnokii/xgnokii.c:561 xgnokii/xgnokii.c:1427
+msgid "1 h"
+msgstr "1 h"
+
+#: xgnokii/xgnokii.c:565 xgnokii/xgnokii.c:1434
+msgid "6 h"
+msgstr "6 h"
+
+#: xgnokii/xgnokii.c:569 xgnokii/xgnokii.c:585 xgnokii/xgnokii.c:1441
+msgid "24 h"
+msgstr "24 h"
+
+#: xgnokii/xgnokii.c:573 xgnokii/xgnokii.c:1448
+msgid "72 h"
+msgstr "72 h"
+
+#: xgnokii/xgnokii.c:581
+msgid "Max. time"
+msgstr "Max. èas"
+
+#: xgnokii/xgnokii.c:628
+msgid "Reading SMS centers ..."
+msgstr "Naèítavajú sa SMS centrá ..."
+
+#: xgnokii/xgnokii.c:982
+msgid "Error saving SMS centers!"
+msgstr "Chyba pri zápise SMS centier!"
+
+#: xgnokii/xgnokii.c:1052
+msgid "Error writing configuration file!"
+msgstr "Chyba pri zápise konfiguraèného súboru!"
+
+#: xgnokii/xgnokii.c:1064 xgnokii/xgnokii_contacts.c:2880
+msgid "Contacts"
+msgstr "Kontakty"
+
+#: xgnokii/xgnokii.c:1070 xgnokii/xgnokii.c:1800
+msgid "SMS"
+msgstr "SMS"
+
+#: xgnokii/xgnokii.c:1075
+msgid "Calendar"
+msgstr "Kalendár"
+
+#: xgnokii/xgnokii.c:1080
+msgid "DTMF"
+msgstr "DTMF"
+
+#: xgnokii/xgnokii.c:1085 xgnokii/xgnokii_speed.c:565
+msgid "Speed Dial"
+msgstr "Zrýchlená voµba"
+
+#: xgnokii/xgnokii.c:1090
+msgid "Keyboard"
+msgstr "Klávesnica"
+
+#: xgnokii/xgnokii.c:1095 xgnokii/xgnokii_netmon.c:318
+msgid "Net Monitor"
+msgstr "Monitor siete"
+
+#: xgnokii/xgnokii.c:1104 xgnokii/xgnokii.c:1560
+msgid "Options"
+msgstr "Voµby"
+
+#: xgnokii/xgnokii.c:1114 xgnokii/xgnokii.c:2080
+msgid "Help"
+msgstr "Nápoveda"
+
+#: xgnokii/xgnokii.c:1120 xgnokii/xgnokii.c:1137
+msgid "About"
+msgstr "O aplikácii"
+
+#: xgnokii/xgnokii.c:1141 xgnokii/xgnokii.c:1321
+#: xgnokii/xgnokii_contacts.c:806 xgnokii/xgnokii_contacts.c:936
+#: xgnokii/xgnokii_contacts.c:1301 xgnokii/xgnokii_contacts.c:2712
+#: xgnokii/xgnokii_sms.c:468
+msgid "Ok"
+msgstr "OK"
+
+#: xgnokii/xgnokii.c:1154
+#, c-format
+msgid ""
+"xgnokii version: %s\n"
+"gnokii version: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Jan Derfinak\n"
+msgstr ""
+"xgnokii verzia: %s\n"
+"gnokii verzia: %s\n"
+"\n"
+"Copyright (C) 1999 Pavel Janík ml.,\n"
+"Hugh Blemings & Ján Derfiòák\n"
+
+#: xgnokii/xgnokii.c:1315
+msgid "Edit SMS Setting"
+msgstr "Zmena nastavení SMS"
+
+#: xgnokii/xgnokii.c:1329 xgnokii/xgnokii_common.c:240
+#: xgnokii/xgnokii_common.c:326 xgnokii/xgnokii_contacts.c:814
+#: xgnokii/xgnokii_contacts.c:944 xgnokii/xgnokii_contacts.c:1173
+#: xgnokii/xgnokii_contacts.c:1219 xgnokii/xgnokii_contacts.c:1310
+#: xgnokii/xgnokii_contacts.c:1590 xgnokii/xgnokii_contacts.c:2719
+#: xgnokii/xgnokii_sms.c:476
+msgid "Cancel"
+msgstr "Zru¹i»"
+
+#: xgnokii/xgnokii.c:1342
+msgid "Set's name:"
+msgstr "Meno súboru:"
+
+#: xgnokii/xgnokii.c:1355
+msgid "Center:"
+msgstr "Centrum:"
+
+#: xgnokii/xgnokii.c:1368
+msgid "Sending Format:"
+msgstr "Formát posielania:"
+
+#: xgnokii/xgnokii.c:1412
+msgid "Validity Period:"
+msgstr "Èas platnosti:"
+
+#: xgnokii/xgnokii.c:1420
+msgid "Max. Time"
+msgstr "Max. èas"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Set's name"
+msgstr "Meno súboru"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Center number"
+msgstr "Èíslo centra"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Format"
+msgstr "Formát"
+
+#: xgnokii/xgnokii.c:1557
+msgid "Validity"
+msgstr "Platnos»"
+
+#: xgnokii/xgnokii.c:1565
+msgid "Apply"
+msgstr "Pou¾i»"
+
+#: xgnokii/xgnokii.c:1574 xgnokii/xgnokii_contacts.c:1574
+#: xgnokii/xgnokii_dtmf.c:178
+msgid "Save"
+msgstr "Ulo¾i»"
+
+#: xgnokii/xgnokii.c:1581
+msgid "Close"
+msgstr "Zavrie»"
+
+#: xgnokii/xgnokii.c:1596
+msgid "Phone and connection type"
+msgstr "Typ telefónu a pripojenia"
+
+#: xgnokii/xgnokii.c:1603
+msgid "Connection"
+msgstr "Pripojenie"
+
+#: xgnokii/xgnokii.c:1610
+msgid "Port:"
+msgstr "Port:"
+
+#: xgnokii/xgnokii.c:1625 xgnokii/xgnokii.c:1697
+msgid "Model:"
+msgstr "Model:"
+
+#: xgnokii/xgnokii.c:1640
+msgid "Init length:"
+msgstr "Då¾ka inicializácie:"
+
+#: xgnokii/xgnokii.c:1655
+msgid "Bindir:"
+msgstr "Bindir:"
+
+#: xgnokii/xgnokii.c:1670
+msgid "Connection:"
+msgstr "Pripojenie:"
+
+#: xgnokii/xgnokii.c:1674
+msgid "infrared"
+msgstr "infraèervené"
+
+#: xgnokii/xgnokii.c:1678
+msgid "serial"
+msgstr "sériové"
+
+#: xgnokii/xgnokii.c:1683
+msgid "Phone information"
+msgstr "Informácia o telefóne"
+
+#: xgnokii/xgnokii.c:1712
+msgid "Version:"
+msgstr "Verzia:"
+
+#: xgnokii/xgnokii.c:1727
+msgid "Revision:"
+msgstr "Revízia:"
+
+#: xgnokii/xgnokii.c:1742
+msgid "IMEI:"
+msgstr "IMEI:"
+
+#: xgnokii/xgnokii.c:1756
+msgid "Alarm setting"
+msgstr "Nastavenie budíka"
+
+#: xgnokii/xgnokii.c:1763 xgnokii/xgnokii.c:1770
+msgid "Alarm"
+msgstr "Budík"
+
+#: xgnokii/xgnokii.c:1794 xgnokii/xgnokii_sms.c:1423
+msgid "Short Message Service"
+msgstr "Slu¾ba krátkych správ"
+
+#: xgnokii/xgnokii.c:1828
+msgid "Edit"
+msgstr "Upravi»"
+
+#: xgnokii/xgnokii.c:1842
+msgid "Business Card"
+msgstr "Vizitka"
+
+#: xgnokii/xgnokii.c:1848
+msgid "User"
+msgstr "Pou¾ívateµ"
+
+#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii_contacts.c:827
+msgid "Name:"
+msgstr "Meno:"
+
+#: xgnokii/xgnokii.c:1892
+msgid "Title:"
+msgstr "Titul:"
+
+#: xgnokii/xgnokii.c:1918
+msgid "Company:"
+msgstr "Firma:"
+
+#: xgnokii/xgnokii.c:1944
+msgid "Telephone:"
+msgstr "Telefón:"
+
+#: xgnokii/xgnokii.c:1969
+msgid "Fax:"
+msgstr "Fax:"
+
+#: xgnokii/xgnokii.c:1994
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: xgnokii/xgnokii.c:2020
+msgid "Address:"
+msgstr "Adresa:"
+
+#: xgnokii/xgnokii.c:2044
+msgid "Caller groups names"
+msgstr "Názvy skupín volajúcich"
+
+#: xgnokii/xgnokii.c:2051
+msgid "Groups"
+msgstr "Skupiny"
+
+#: xgnokii/xgnokii.c:2060
+#, c-format
+msgid "Group %d:"
+msgstr "Skupina %d:"
+
+#: xgnokii/xgnokii.c:2073
+msgid "Help viewer"
+msgstr "Prezeraè pomôcok"
+
+#: xgnokii/xgnokii.c:2087
+msgid "Viewer:"
+msgstr "Prezeraè:"
+
+#: xgnokii/xgnokii.c:2247 xgnokii/xgnokii_cfg.c:71
+msgid "WARNING: Can't find HOME enviroment variable!\n"
+msgstr "VAROVANIE: Nie je mo¾né nájs» premennú prostredia HOME!\n"
+
+#: xgnokii/xgnokii.c:2252 xgnokii/xgnokii_cfg.c:77 xgnokii/xgnokii_cfg.c:92
+msgid "WARNING: Can't allocate memory for config reading!\n"
+msgstr "VAROVANIE: Nie je mo¾né prideli» pamä» pre èítanie konfigurácie!\n"
+
+#: xgnokii/xgnokii_cfg.c:156
+msgid "ERROR: Can't find HOME enviroment variable!\n"
+msgstr "CHYBA: Nie je mo¾né nájs» premennú prostredia HOME!\n"
+
+#: xgnokii/xgnokii_cfg.c:162 xgnokii/xgnokii_cfg.c:180
+msgid "ERROR: Can't allocate memory for config writing!\n"
+msgstr "CHYBA: Nie je mo¾né prideli» pamä» pre zápis konfigurácie!\n"
+
+#: xgnokii/xgnokii_cfg.c:168
+#, c-format
+msgid "ERROR: Can't open file %s for writing!\n"
+msgstr "CHYBA: Nie je mo¾né otvori» súbor %s pre zápis!\n"
+
+#: xgnokii/xgnokii_cfg.c:186
+msgid "ERROR: Can't write config file!\n"
+msgstr "CHYBA: Nie je mo¾né zapísa» konfiguraèný súbor!\n"
+
+#: xgnokii/xgnokii_common.c:233
+msgid "Error"
+msgstr "Chyba"
+
+#: xgnokii/xgnokii_common.c:272
+msgid "Info"
+msgstr "Informácia"
+
+#: xgnokii/xgnokii_common.c:310
+msgid "Yes"
+msgstr "Áno"
+
+#: xgnokii/xgnokii_common.c:319
+msgid "No"
+msgstr "Nie"
+
+#: xgnokii/xgnokii_common.c:406
+#, c-format
+msgid "Can't exec %s\n"
+msgstr "Nie je mo¾né spusti» %s\n"
+
+#: xgnokii/xgnokii_contacts.c:230 xgnokii/xgnokii_contacts.c:263
+#: xgnokii/xgnokii_contacts.c:426 xgnokii/xgnokii_contacts.c:451
+#: xgnokii/xgnokii_contacts.c:585 xgnokii/xgnokii_contacts.c:607
+msgid "Can't change memory type!"
+msgstr "Nie je mo¾né zmeni» typ pamäti!"
+
+#: xgnokii/xgnokii_contacts.c:274 xgnokii/xgnokii_contacts.c:321
+msgid ""
+"Sorry, phonebook name will be truncated,\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Meno z telefónneho zoznamu bude ¾iaµ\n"
+"pri zápise do pamäti na SIM skrátené!"
+
+#: xgnokii/xgnokii_contacts.c:462 xgnokii/xgnokii_contacts.c:501
+msgid ""
+"Sorry, phonebook name will be truncated\n"
+"because you save it into SIM memory!"
+msgstr ""
+"Meno z telefónneho zoznamu bude ¾iaµ\n"
+"pri zápise do pamäti na SIM skrátené!"
+
+#: xgnokii/xgnokii_contacts.c:696
+msgid "Can't find pattern!"
+msgstr "Nie je mo¾né nájs» vzor!"
+
+#: xgnokii/xgnokii_contacts.c:840 xgnokii/xgnokii_contacts.c:1319
+msgid "Number:"
+msgstr "Èíslo:"
+
+#: xgnokii/xgnokii_contacts.c:852
+msgid "Memory:"
+msgstr "Pamä»:"
+
+#: xgnokii/xgnokii_contacts.c:856
+msgid "phone"
+msgstr "telefón"
+
+#: xgnokii/xgnokii_contacts.c:869
+msgid "Caller group:"
+msgstr "Skupina volajúcich:"
+
+#: xgnokii/xgnokii_contacts.c:883 xgnokii/xgnokii_contacts.c:2941
+#: xgnokii/xgnokii_speed.c:618
+msgid "Edit entry"
+msgstr "Upravi» polo¾ku"
+
+#: xgnokii/xgnokii_contacts.c:929
+msgid "Delete entries"
+msgstr "Vymaza» polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:961
+msgid "Do you want to delete selected entries?"
+msgstr "®eláte si zmaza» zvolené polo¾ky?"
+
+#: xgnokii/xgnokii_contacts.c:973 xgnokii/xgnokii_contacts.c:2933
+msgid "New entry"
+msgstr "Nová polo¾ka"
+
+#: xgnokii/xgnokii_contacts.c:1012 xgnokii/xgnokii_contacts.c:2937
+msgid "Duplicate entry"
+msgstr "Duplikova» polo¾ku"
+
+#: xgnokii/xgnokii_contacts.c:1078 xgnokii/xgnokii_contacts.c:1088
+#: xgnokii/xgnokii_contacts.c:1113
+msgid "Can't find free memory."
+msgstr "Voµná pamä» nie je k dispozícii."
+
+#: xgnokii/xgnokii_contacts.c:1157
+msgid "Changing memory type"
+msgstr "Zmena typu pamäti"
+
+#: xgnokii/xgnokii_contacts.c:1164
+msgid "Continue"
+msgstr "Pokraèova»"
+
+#: xgnokii/xgnokii_contacts.c:1184
+msgid ""
+"If you change from phone memory to SIM memory\n"
+"some entries may be truncated."
+msgstr ""
+"Pri presune z pamäti telefónu na SIM mô¾u\n"
+"by» niektoré polo¾ky skrátené."
+
+#: xgnokii/xgnokii_contacts.c:1204 xgnokii/xgnokii_contacts.c:1210
+msgid "Find"
+msgstr "Nájs»"
+
+#: xgnokii/xgnokii_contacts.c:1232
+msgid "Pattern:"
+msgstr "Vzor:"
+
+#: xgnokii/xgnokii_contacts.c:1245 xgnokii/xgnokii_contacts.c:2875
+#: xgnokii/xgnokii_speed.c:560
+msgid "Name"
+msgstr "Meno"
+
+#: xgnokii/xgnokii_contacts.c:1251 xgnokii/xgnokii_contacts.c:2875
+#: xgnokii/xgnokii_speed.c:560
+msgid "Number"
+msgstr "Èíslo"
+
+#: xgnokii/xgnokii_contacts.c:1295 xgnokii/xgnokii_contacts.c:2952
+msgid "Dial voice"
+msgstr "Zavola»"
+
+#: xgnokii/xgnokii_contacts.c:1428
+msgid "Phone memory..."
+msgstr "Pamä» telefónu..."
+
+#: xgnokii/xgnokii_contacts.c:1439
+msgid "SIM memory..."
+msgstr "Pamä» SIM..."
+
+#: xgnokii/xgnokii_contacts.c:1468
+msgid "Saving entries"
+msgstr "Ukladám polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:1502
+#, c-format
+msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"
+msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku ME pamäti èíslo %d! Chyba: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1544
+#, c-format
+msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n"
+msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku SM pamäti èíslo %d! Chyba: %d\n"
+
+#: xgnokii/xgnokii_contacts.c:1567
+msgid "Save changes?"
+msgstr "Ulo¾i» zmeny?"
+
+#: xgnokii/xgnokii_contacts.c:1583
+msgid "Don't save"
+msgstr "Neulo¾i»"
+
+#: xgnokii/xgnokii_contacts.c:1607
+msgid ""
+"You have made changes in your\n"
+"contacts directory.\n"
+"\n"
+"\n"
+"Do you want save these changes into phone?\n"
+msgstr ""
+"Vo va¹om adresári kontaktov\n"
+"ste urobili zmeny.\n"
+"\n"
+"\n"
+"®eláte si tieto zmeny zapísa» do telefónu?\n"
+
+#: xgnokii/xgnokii_contacts.c:1673 xgnokii/xgnokii_contacts.c:1700
+#: xgnokii/xgnokii_contacts.c:2424 xgnokii/xgnokii_contacts.c:2447
+#, c-format
+msgid "%s: line %d: Can't allocate memory!\n"
+msgstr "%s: riadok %d: Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_contacts.c:1796
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries to 100!\n"
+msgstr ""
+"Nie je mo¾né zisti» stav SM pamäti!\n"
+"\n"
+"Max. poèet SIM polo¾iek nastavený na 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:1821
+msgid "Getting entries"
+msgstr "Naèítavam polo¾ky"
+
+#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:128
+#: xgnokii/xgnokii_speed.c:434
+#, c-format
+msgid "Can't open file %s for writing!"
+msgstr "Nie je mo¾né otvori» súbor %s pre zápis!"
+
+#: xgnokii/xgnokii_contacts.c:2165 xgnokii/xgnokii_dtmf.c:161
+#: xgnokii/xgnokii_speed.c:476
+msgid "Overwrite file?"
+msgstr "Prepísa» súbor?"
+
+#: xgnokii/xgnokii_contacts.c:2166 xgnokii/xgnokii_dtmf.c:162
+#: xgnokii/xgnokii_speed.c:477
+#, c-format
+msgid ""
+"File %s already exist.\n"
+"Overwrite?"
+msgstr ""
+"Súbor %s u¾ existuje.\n"
+"Prepísa»?"
+
+#: xgnokii/xgnokii_contacts.c:2184 xgnokii/xgnokii_speed.c:495
+msgid "Export"
+msgstr "Export"
+
+#: xgnokii/xgnokii_contacts.c:2345 xgnokii/xgnokii_dtmf.c:90
+#: xgnokii/xgnokii_speed.c:334
+#, c-format
+msgid "Can't open file %s for reading!"
+msgstr "Nie je mo¾né otvori» súbor %s pre èítanie!"
+
+#: xgnokii/xgnokii_contacts.c:2399
+msgid ""
+"Can't get SM memory status!\n"
+"\n"
+"Setting max SIM entries set to 100!\n"
+msgstr ""
+"Nie je mo¾né zisti» stav SM pamäti!\n"
+"\n"
+"Max. poèet SIM polo¾iek nastavený na 100!\n"
+
+#: xgnokii/xgnokii_contacts.c:2512 xgnokii/xgnokii_speed.c:412
+msgid "Import"
+msgstr "Import"
+
+#: xgnokii/xgnokii_contacts.c:2709 xgnokii/xgnokii_sms.c:1115
+msgid "Select contacts"
+msgstr "Výber kontaktov"
+
+#: xgnokii/xgnokii_contacts.c:2742 xgnokii/xgnokii_contacts.c:2981
+#: xgnokii/xgnokii_sms.c:1565 xgnokii/xgnokii_speed.c:643
+#, c-format
+msgid "Error: %s: line %d: Can't allocate memory!\n"
+msgstr "Chyba: %s: riadok %d: Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_contacts.c:2840 xgnokii/xgnokii_dtmf.c:217
+#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1005
+#: xgnokii/xgnokii_sms.c:1388 xgnokii/xgnokii_speed.c:535
+#: xgnokii/xgnokii_xkeyb.c:241
+msgid "/_File"
+msgstr "/Súbor"
+
+#: xgnokii/xgnokii_contacts.c:2841 xgnokii/xgnokii_speed.c:536
+msgid "/File/_Read from phone"
+msgstr "/Súbor/Naèíta» z telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2842 xgnokii/xgnokii_speed.c:537
+msgid "/File/_Save to phone"
+msgstr "/Súbor/Zapísa» do telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_speed.c:538
+msgid "/File/_Import from file"
+msgstr "/Súbor/Import zo súboru"
+
+#: xgnokii/xgnokii_contacts.c:2844 xgnokii/xgnokii_speed.c:539
+msgid "/File/_Export to file"
+msgstr "/Súbor/Export do súboru"
+
+#: xgnokii/xgnokii_contacts.c:2845 xgnokii/xgnokii_dtmf.c:220
+#: xgnokii/xgnokii_netmon.c:261 xgnokii/xgnokii_sms.c:1010
+#: xgnokii/xgnokii_sms.c:1391 xgnokii/xgnokii_speed.c:540
+#: xgnokii/xgnokii_xkeyb.c:242
+msgid "/File/_Close"
+msgstr "/Súbor/Zavrie»"
+
+#: xgnokii/xgnokii_contacts.c:2846 xgnokii/xgnokii_speed.c:541
+msgid "/_Edit"
+msgstr "/Úpravy"
+
+#: xgnokii/xgnokii_contacts.c:2847
+msgid "/Edit/_New"
+msgstr "/Úpravy/Nový"
+
+#: xgnokii/xgnokii_contacts.c:2848
+msgid "/Edit/D_uplicate"
+msgstr "/Úpravy/Duplikova»"
+
+#: xgnokii/xgnokii_contacts.c:2849 xgnokii/xgnokii_speed.c:542
+msgid "/Edit/_Edit"
+msgstr "/Úpravy/Upravi»"
+
+#: xgnokii/xgnokii_contacts.c:2850
+msgid "/Edit/_Delete"
+msgstr "/Úpravy/Zmaza»"
+
+#: xgnokii/xgnokii_contacts.c:2851
+msgid "/Edit/_Change memory type"
+msgstr "/Úpravy/Zmeni» typ pamäti"
+
+#: xgnokii/xgnokii_contacts.c:2852
+msgid "/Edit/_Find"
+msgstr "/Úpravy/Vyhµada»"
+
+#: xgnokii/xgnokii_contacts.c:2853
+msgid "/Edit/Find ne_xt"
+msgstr "/Úpravy/Vyhµada» ïal¹í"
+
+#: xgnokii/xgnokii_contacts.c:2854
+msgid "/Edit/Select _all"
+msgstr "/Úpravy/Vybra» v¹etky"
+
+#: xgnokii/xgnokii_contacts.c:2855
+msgid "/_Dial"
+msgstr "/Zavola»"
+
+#: xgnokii/xgnokii_contacts.c:2856
+msgid "/Dial/Dial _voice"
+msgstr "/Zavola»/Zavola» (hlas)"
+
+#: xgnokii/xgnokii_contacts.c:2857 xgnokii/xgnokii_dtmf.c:221
+#: xgnokii/xgnokii_netmon.c:265 xgnokii/xgnokii_sms.c:1011
+#: xgnokii/xgnokii_sms.c:1398 xgnokii/xgnokii_speed.c:543
+#: xgnokii/xgnokii_xkeyb.c:243
+msgid "/_Help"
+msgstr "/Nápoveda"
+
+#: xgnokii/xgnokii_contacts.c:2858 xgnokii/xgnokii_dtmf.c:222
+#: xgnokii/xgnokii_netmon.c:266 xgnokii/xgnokii_sms.c:1012
+#: xgnokii/xgnokii_sms.c:1399 xgnokii/xgnokii_speed.c:544
+#: xgnokii/xgnokii_xkeyb.c:244
+msgid "/Help/_Help"
+msgstr "/Nápoveda/Nápoveda"
+
+#: xgnokii/xgnokii_contacts.c:2859 xgnokii/xgnokii_dtmf.c:223
+#: xgnokii/xgnokii_netmon.c:267 xgnokii/xgnokii_sms.c:1013
+#: xgnokii/xgnokii_sms.c:1400 xgnokii/xgnokii_speed.c:545
+#: xgnokii/xgnokii_xkeyb.c:245
+msgid "/Help/_About"
+msgstr "/Nápoveda/O aplikácii"
+
+#: xgnokii/xgnokii_contacts.c:2875
+msgid "Memory"
+msgstr "Pamä»"
+
+#: xgnokii/xgnokii_contacts.c:2875
+msgid "Group"
+msgstr "Skupina"
+
+#: xgnokii/xgnokii_contacts.c:2911 xgnokii/xgnokii_speed.c:596
+msgid "Read from phone"
+msgstr "Naèíta» z telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2915 xgnokii/xgnokii_speed.c:600
+msgid "Save to phone"
+msgstr "Zapísa» do telefónu"
+
+#: xgnokii/xgnokii_contacts.c:2922 xgnokii/xgnokii_speed.c:607
+msgid "Import from file"
+msgstr "Import zo súboru"
+
+#: xgnokii/xgnokii_contacts.c:2926 xgnokii/xgnokii_speed.c:611
+msgid "Export to file"
+msgstr "Export do súboru"
+
+#: xgnokii/xgnokii_contacts.c:2945
+msgid "Delete entry"
+msgstr "Zmaza» polo¾ku"
+
+#: xgnokii/xgnokii_dtmf.c:108
+msgid "Load"
+msgstr "Naèíta»"
+
+#: xgnokii/xgnokii_dtmf.c:218
+msgid "/File/_Open"
+msgstr "/Súbor/Otvori»"
+
+#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_sms.c:1007
+#: xgnokii/xgnokii_sms.c:1389
+msgid "/File/_Save"
+msgstr "/Súbor/Ulo¾i»"
+
+#: xgnokii/xgnokii_calendar.c:243 xgnokii/xgnokii_contacts.c:2843
+#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_sms.c:1012
+#: xgnokii/xgnokii_sms.c:1394 xgnokii/xgnokii_speed.c:538
+msgid "/File/Sep1"
+msgstr "/Súbor/Sep1"
+
+#: xgnokii/xgnokii_calendar.c:245 xgnokii/xgnokii_contacts.c:2846
+#: xgnokii/xgnokii_sms.c:1015 xgnokii/xgnokii_speed.c:541
+msgid "/File/Sep2"
+msgstr "/Súbor/Sep2"
+
+#: xgnokii/xgnokii_calendar.c:248
+msgid "/File/Sep3"
+msgstr "/Súbor/Sep3"
+
+#: xgnokii/xgnokii_contacts.c:2853
+msgid "/Edit/Sep3"
+msgstr "/Úpravy/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:257 xgnokii/xgnokii_contacts.c:2855
+msgid "/Edit/Sep4"
+msgstr "/Úpravy/Sep4"
+
+#: xgnokii/xgnokii_contacts.c:2858
+msgid "/Edit/Sep5"
+msgstr "/Úpravy/Sep5"
+
+#: xgnokii/xgnokii_sms.c:1401
+msgid "/Messages/Sep3"
+msgstr "/Správy/Sep3"
+
+#: xgnokii/xgnokii_calendar.c:244
+msgid "/File/Send via S_MS"
+msgstr "/Súbor/Po¹li ako SMS"
+
+#: xgnokii/xgnokii_calendar.c:251
+msgid "/Edit/Add _reminder"
+msgstr "/Úpravy/Pridaj pripomienku"
+
+#: xgnokii/xgnokii_calendar.c:252
+msgid "/Edit/Add _call"
+msgstr "/Úpravy/Pridaj volanie"
+
+#: xgnokii/xgnokii_calendar.c:253
+msgid "/Edit/Add _meeting"
+msgstr "/Úpravy/Pridaj schôdzku"
+
+#: xgnokii/xgnokii_calendar.c:254
+msgid "/Edit/Add _birthday"
+msgstr "/Úpravy/Pridaj narodeniny"
+
+#: xgnokii/xgnokii_dtmf.c:244
+msgid "Dial Tone"
+msgstr "Tónová voµba"
+
+#: xgnokii/xgnokii_netmon.c:262
+msgid "/_Tools"
+msgstr "/Nástroje"
+
+#: xgnokii/xgnokii_netmon.c:263
+msgid "/Tools/Net monitor o_n"
+msgstr "/Nástroje/Zapnú» monitor siete"
+
+#: xgnokii/xgnokii_netmon.c:264
+msgid "/Tools/Net monitor o_ff"
+msgstr "/Nástroje/Vypnú» monitor siete"
+
+#: xgnokii/xgnokii_netmon.c:381 xgnokii/xgnokii_netmon.c:384
+msgid "Active cell"
+msgstr "Aktívna bunka"
+
+#: xgnokii/xgnokii_netmon.c:387
+msgid "NCELL list I"
+msgstr "NCELL zoznam I"
+
+#: xgnokii/xgnokii_netmon.c:390
+msgid "NCELL list II"
+msgstr "NCELL zoznam II"
+
+#: xgnokii/xgnokii_netmon.c:393
+msgid "NCELL list III"
+msgstr "NCELL zoznam III"
+
+#: xgnokii/xgnokii_netmon.c:396
+msgid "Prefered/Denied networks"
+msgstr "Preferované/Zakázané siete"
+
+#: xgnokii/xgnokii_netmon.c:399
+msgid "System information bits"
+msgstr "Systémové informácie"
+
+#: xgnokii/xgnokii_netmon.c:402
+msgid "TMSI, Paging, PLU"
+msgstr "TMSI, Paging, PLU"
+
+#: xgnokii/xgnokii_netmon.c:405
+msgid "Cells info"
+msgstr "Informácie o bunkách"
+
+#: xgnokii/xgnokii_netmon.c:408
+msgid "DTX, Cipher, Hopping"
+msgstr "DTX, ©ifra, Hopping"
+
+#: xgnokii/xgnokii_netmon.c:418
+msgid "Uplink DTX"
+msgstr "Uplink DTX"
+
+#: xgnokii/xgnokii_netmon.c:421
+msgid "BTS TEST"
+msgstr "BTS TEST"
+
+#: xgnokii/xgnokii_netmon.c:424
+msgid "CELL BARR-Flag"
+msgstr "CELL BARR-Príznak"
+
+#: xgnokii/xgnokii_netmon.c:427
+msgid "Accumulator, Charge status"
+msgstr "Akumulátor, Stav nabitia"
+
+#: xgnokii/xgnokii_netmon.c:430
+msgid "?Constant voltage charging display"
+msgstr "?Nabíjanie kon¹tantným napätím"
+
+#: xgnokii/xgnokii_netmon.c:433
+msgid "?Battery full detection"
+msgstr "?Detekcia plného nabitia batérie"
+
+#: xgnokii/xgnokii_netmon.c:436
+msgid "Accumulator"
+msgstr "Akumulátor"
+
+#: xgnokii/xgnokii_netmon.c:439
+msgid "SW-Resets"
+msgstr "SW-Resety"
+
+#: xgnokii/xgnokii_netmon.c:442
+msgid "Reset-Counter"
+msgstr "Èítaè resetov"
+
+#: xgnokii/xgnokii_netmon.c:445
+msgid "Cause codes for last connection abortion"
+msgstr "Dôvod posledného zru¹enia spojenia"
+
+#: xgnokii/xgnokii_netmon.c:455
+msgid "Reset handover counters"
+msgstr "Vynulova» èítaèe handoverov"
+
+#: xgnokii/xgnokii_netmon.c:458
+msgid "Handover Counter"
+msgstr "Èítaè handoverov"
+
+#: xgnokii/xgnokii_netmon.c:461
+msgid "Handover Counter (Dual)"
+msgstr "Èítaè handoverov (duálny)"
+
+#: xgnokii/xgnokii_netmon.c:464
+msgid "L2-Timeouts"
+msgstr "L2-Timeouty"
+
+#: xgnokii/xgnokii_netmon.c:467
+msgid "SIM"
+msgstr "SIM"
+
+#: xgnokii/xgnokii_netmon.c:470
+msgid "?Block display 1"
+msgstr "?Block display 1"
+
+#: xgnokii/xgnokii_netmon.c:476
+msgid "Memory status before reset"
+msgstr "Stav pamäti pred resetom"
+
+#: xgnokii/xgnokii_netmon.c:479
+msgid "Reset Counters"
+msgstr "Èítaèe resetov"
+
+#: xgnokii/xgnokii_netmon.c:482
+msgid "Counter for PLMN Search and Cell reselection (Singleband)"
+msgstr "Èítaè vyhµadávania PLMN a nového výberu siete (Singleband)"
+
+#: xgnokii/xgnokii_netmon.c:492
+msgid "Neighbourhood measurement"
+msgstr "Meranie susedstva"
+
+#: xgnokii/xgnokii_netmon.c:495
+msgid "Calls"
+msgstr "Volania"
+
+#: xgnokii/xgnokii_netmon.c:498
+msgid "Temporary counters of DSP"
+msgstr "Prechodné èítaèe DSP"
+
+#: xgnokii/xgnokii_netmon.c:501
+msgid "Control of task information displays"
+msgstr "Riadenie zobrazenia informácií o úlohe"
+
+#: xgnokii/xgnokii_netmon.c:504
+msgid "Information about task numbers 0-7"
+msgstr "Informácie o úlohách 0-7"
+
+#: xgnokii/xgnokii_netmon.c:507
+msgid "Information about task numbers 8-15"
+msgstr "Informácie o úlohách 8-15"
+
+#: xgnokii/xgnokii_netmon.c:510
+msgid "Information about task numbers 16-23"
+msgstr "Informácie o úlohách 16-23"
+
+#: xgnokii/xgnokii_netmon.c:513
+msgid "Information about OS_SYSTEM_STACK"
+msgstr "Informácie o OS_SYSTEM_STACK"
+
+#: xgnokii/xgnokii_netmon.c:516
+msgid "Information about current MCU and DSP software versions"
+msgstr "Informácia o aktuálnych verziách softvéru MCU a DSP"
+
+#: xgnokii/xgnokii_netmon.c:519
+msgid "Hardware version"
+msgstr "Verzia hardvéru"
+
+#: xgnokii/xgnokii_netmon.c:538
+msgid "Chan"
+msgstr "Chan"
+
+#: xgnokii/xgnokii_netmon.c:539
+msgid "RxLv"
+msgstr "RxLv"
+
+#: xgnokii/xgnokii_netmon.c:540
+msgid "C1"
+msgstr "C1"
+
+#: xgnokii/xgnokii_netmon.c:541
+msgid "C2"
+msgstr "C2"
+
+#: xgnokii/xgnokii_netmon.c:542
+msgid "ACT"
+msgstr "ACT"
+
+#: xgnokii/xgnokii_netmon.c:543
+msgid "NC2"
+msgstr "NC2"
+
+#: xgnokii/xgnokii_netmon.c:544
+msgid "NC3"
+msgstr "NC3"
+
+#: xgnokii/xgnokii_netmon.c:545
+msgid "NC4"
+msgstr "NC4"
+
+#: xgnokii/xgnokii_netmon.c:546
+msgid "NC5"
+msgstr "NC5"
+
+#: xgnokii/xgnokii_netmon.c:547
+msgid "NC6"
+msgstr "NC6"
+
+#: xgnokii/xgnokii_netmon.c:548
+msgid "NC7"
+msgstr "NC7"
+
+#: xgnokii/xgnokii_netmon.c:579
+msgid "Page:"
+msgstr "Stránka:"
+
+#: xgnokii/xgnokii_sms.c:232
+msgid "report"
+msgstr "potvrdenie"
+
+#: xgnokii/xgnokii_sms.c:234
+msgid "read"
+msgstr "preèítaná"
+
+#: xgnokii/xgnokii_sms.c:236
+msgid "unread"
+msgstr "nepreèítaná"
+
+#: xgnokii/xgnokii_sms.c:294
+msgid "sent"
+msgstr "odoslaná"
+
+#: xgnokii/xgnokii_sms.c:296
+msgid "unsent"
+msgstr "neodoslaná"
+
+#: xgnokii/xgnokii_sms.c:364
+msgid "From: "
+msgstr "Od: "
+
+#: xgnokii/xgnokii_sms.c:372
+msgid "Date: "
+msgstr "Dátum: "
+
+#: xgnokii/xgnokii_sms.c:461
+msgid "Delete SMS"
+msgstr "Zmaza» SMS"
+
+#: xgnokii/xgnokii_sms.c:493
+msgid "Do you want to delete selected SMS?"
+msgstr "®eláte si vymaza» zvolené SMS?"
+
+#: xgnokii/xgnokii_sms.c:711 xgnokii/xgnokii_sms.c:842
+msgid "Address line contains illegal address!"
+msgstr "Riadok s adresou obsahuje neplatnú adresu!"
+
+#: xgnokii/xgnokii_sms.c:814
+#, c-format
+msgid ""
+"SMS send to %s failed\n"
+"(error=%d)"
+msgstr ""
+"Odoslanie SMS pre %s zlyhalo\n"
+"(chyba=%d)"
+
+#: xgnokii/xgnokii_sms.c:904 xgnokii/xgnokii_sms.c:941
+#, c-format
+msgid "Sending SMS to %s (%d/%d) ...\n"
+msgstr "Odosiela sa SMS pre %s (%d/%d) ...\n"
+
+#: xgnokii/xgnokii_sms.c:968
+#, c-format
+msgid "Sending SMS to %s ...\n"
+msgstr "Odosiela sa SMS pre %s ...\n"
+
+#: xgnokii/xgnokii_sms.c:1006
+msgid "/File/Sen_d"
+msgstr "/Súbor/Posla»"
+
+#: xgnokii/xgnokii_sms.c:1008
+msgid "/File/Check _Names"
+msgstr "/Súbor/Skontrolova» mená"
+
+#: xgnokii/xgnokii_sms.c:1009
+msgid "/File/C_ontacts"
+msgstr "/Súbor/Kontakty"
+
+#: xgnokii/xgnokii_sms.c:1067
+msgid "Send message"
+msgstr "Odosla» správu"
+
+#: xgnokii/xgnokii_sms.c:1071
+msgid "Save message to outbox"
+msgstr "Ulo¾i» správu do výstupnej schránky"
+
+#: xgnokii/xgnokii_sms.c:1078
+msgid "Check names"
+msgstr "Skontrolova» mená"
+
+#: xgnokii/xgnokii_sms.c:1091
+msgid "To:"
+msgstr "Pre:"
+
+#: xgnokii/xgnokii_sms.c:1163
+msgid "Delivery report"
+msgstr "Potvrdenie o doruèení"
+
+#: xgnokii/xgnokii_sms.c:1167
+msgid "Send as Long SMS"
+msgstr "Odosla» ako dlhú SMS"
+
+#: xgnokii/xgnokii_sms.c:1171
+msgid "SMS Center:"
+msgstr "SMS centrum:"
+
+#: xgnokii/xgnokii_sms.c:1190
+msgid "New Message"
+msgstr "Nová správa"
+
+#: xgnokii/xgnokii_sms.c:1217
+msgid "Forward Message"
+msgstr "Posla» správu inam"
+
+#: xgnokii/xgnokii_sms.c:1261
+msgid "Reply Message"
+msgstr "Odpoveda» na správu"
+
+#: xgnokii/xgnokii_sms.c:1297 xgnokii/xgnokii_sms.c:1465
+msgid "Bussiness Card"
+msgstr "Vizitka"
+
+#: xgnokii/xgnokii_sms.c:1390
+msgid "/File/_Refresh"
+msgstr "/Súbor/Obnovi»"
+
+#: xgnokii/xgnokii_sms.c:1392
+msgid "/_Messages"
+msgstr "/Správy"
+
+#: xgnokii/xgnokii_sms.c:1393
+msgid "/_Messages/_New"
+msgstr "/Správy/Nová"
+
+#: xgnokii/xgnokii_sms.c:1394
+msgid "/_Messages/_Forward"
+msgstr "/Správy/Posla» inam"
+
+#: xgnokii/xgnokii_sms.c:1395
+msgid "/_Messages/_Reply"
+msgstr "/Správy/Odpoveda»"
+
+#: xgnokii/xgnokii_sms.c:1396
+msgid "/_Messages/_Delete"
+msgstr "/Správy/Zmaza»"
+
+#: xgnokii/xgnokii_sms.c:1397
+msgid "/_Messages/_Bussiness card"
+msgstr "/Správy/Vizitka"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Status"
+msgstr "Stav"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Date / Time"
+msgstr "Dátum / èas"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Sender"
+msgstr "Odosielateµ"
+
+#: xgnokii/xgnokii_sms.c:1418
+msgid "Message"
+msgstr "Správa"
+
+#: xgnokii/xgnokii_sms.c:1452
+msgid "New message"
+msgstr "Nová správa"
+
+#: xgnokii/xgnokii_sms.c:1456
+msgid "Forward message"
+msgstr "Posla» správu inam"
+
+#: xgnokii/xgnokii_sms.c:1460
+msgid "Reply message"
+msgstr "Odpoveda» na správu"
+
+#: xgnokii/xgnokii_sms.c:1472
+msgid "Delete message"
+msgstr "Zmaza» správu"
+
+#: xgnokii/xgnokii_sms.c:1497
+msgid "SMS's"
+msgstr "SMS"
+
+#: xgnokii/xgnokii_sms.c:1506
+msgid "Inbox"
+msgstr "Vstupná schránka"
+
+#: xgnokii/xgnokii_sms.c:1512
+msgid "Outbox"
+msgstr "Výstupná schránka"
+
+#: xgnokii/xgnokii_speed.c:188
+msgid "Reading data ..."
+msgstr "Naèítavajú sa údaje ..."
+
+#: xgnokii/xgnokii_speed.c:199 xgnokii/xgnokii_speed.c:205
+#: xgnokii/xgnokii_speed.c:264
+msgid "Cannot allocate memory!"
+msgstr "Nie je mo¾né prideli» pamä»!"
+
+#: xgnokii/xgnokii_speed.c:352
+msgid "Cannot allocate memory!\n"
+msgstr "Nie je mo¾né prideli» pamä»!\n"
+
+#: xgnokii/xgnokii_speed.c:364 xgnokii/xgnokii_speed.c:392
+msgid "Error reading file!"
+msgstr "Chyba pri èítaní súboru!"
+
+#: xgnokii/xgnokii_speed.c:560
+msgid "Key"
+msgstr "Klávesa"
+
+#: xgnokii/xgnokii_xkeyb.c:182
+msgid "Cannot load background pixmap!"
+msgstr "Nie je mo¾né naèíta» obrázok pozadia!"
+
+#: xgnokii/xgnokii_xkeyb.c:259
+msgid "XGnokii Keyboard"
+msgstr "XGnokii klávesnica"
--- /dev/null
+
+#
+# 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
+
--- /dev/null
+/*
+
+ $Id$
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Mgnokiidev gets passed a slave pty name by gnokiid and uses this
+ information to create a symlink from the pty to /dev/gnokii.
+
+*/
+
+#include <stdio.h>
+#include <errno.h>
+#include <signal.h>
+#include <termios.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#define DEVLEN 30
+#define MAXLEN 12
+
+int main(int argc, char *argv[])
+{
+ int count, err;
+ char dev_name[DEVLEN];
+
+ /* Check we have one and only one command line argument. */
+ if (argc != 2) {
+ fprintf(stderr, "mgnokiidev takes one and only one argument!\n");
+ exit(-2);
+ }
+
+ /* Check if argument has a reasonable length (less than MAXLEN characters) */
+ if (strlen(argv[1]) >= MAXLEN) {
+ fprintf(stderr, "Argument must be less than %d characters.\n", MAXLEN);
+ exit (-2);
+ }
+
+ strncpy(dev_name, argv[1], DEVLEN);
+
+ /* Check for suspicious characters. */
+ for (count = 0; count < strlen(dev_name); count ++)
+ if (!(isalnum(dev_name[count]) || dev_name[count]=='/')) {
+ fprintf(stderr, "Suspicious character at index %d in argument.\n", count);
+ exit (-2);
+ }
+
+ /* Now become root */
+ setuid(0);
+
+ /* Change group of slave pty to group of mgnokiidev */
+ err = chown(dev_name, -1, getgid());
+
+ if (err < 0) {
+ perror("mgnokiidev - chown: ");
+ exit (-2);
+ }
+
+ /* Change permissions to rw by group */
+ err = chmod(dev_name, S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR);
+
+ if (err < 0) {
+ perror("mgnokiidev - chmod: ");
+ exit (-2);
+ }
+
+ /* FIXME: Possible bug - should check that /dev/gnokii doesn't already exist
+ in case multiple users are trying to run gnokii. Well, but will be
+ mgnokiidev called then? I do not think so - you will probably got the
+ message serialport in use or similar. Don't you. I haven't tested it
+ though. */
+
+ /* Remove symlink in case it already exists. Don't care if it fails. */
+ unlink ("/dev/gnokii");
+
+ /* Create symlink */
+ err = symlink(dev_name, "/dev/gnokii");
+
+ if (err < 0) {
+ perror("mgnokiidev - symlink: ");
+ exit (-2);
+ }
+
+ /* Done */
+ exit (0);
+}
--- /dev/null
+#!/usr/bin/perl
+# $Id$
+#
+# Author: Tomi Ollila <Tomi.Ollila@iki.fi>
+#
+# Created: Tue Oct 10 18:04:02 2000 too
+# Last modified: Wed Oct 25 22:41:50 2000 too
+#
+# HISTORY
+# $Log$
+# Revision 1.1.1.1 2001/11/25 21:59:23 short
+# :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001
+#
+# Revision 1.1 2000/11/03 13:18:08 pavel
+#
+# Tomi's todologo.
+#
+
+
+$a1= " a b c dd ee ff gg h h i j k l m m nn o pp q r r ss ";
+$a2= "a a bb c d d ee f g hhh i j k k l mmm n n o o p p q q rr s ";
+$a3= "aaa b b c d d e ff g g hhh i j j kk l m m n n o o pp q r s ";
+$a4= "a a bb c dd e f gg h h i j k k ll m m n n o p q r ss ";
+
+$a1 .= "ttt u u v v w w x x y y zz 333 4 55 6 777 88 9 ";
+$a2 .= " t u u v v w w x y y z 3 4 4 5 6 7 88 9 9 ";
+$a3 .= " t u u v v www x y z 3 444 5 6 6 7 88 9 ";
+$a4 .= " t uuu v w w x x y zz 33 4 5 6 7 88 9 ";
+
+$a1 =~ tr/ /0/;
+$a2 =~ tr/ /0/;
+$a3 =~ tr/ /0/;
+$a4 =~ tr/ /0/;
+
+
+sub searchalpha
+{
+ $_ = $_[0];
+ tr/A-Z/a-z/;
+ tr/210/zio/;
+
+ $width = 1;
+ $aa1 = $aa2 = $aa3 = $aa4 = '0';
+
+ $i = index $a4, $_; return if ($i < 0);
+ $m = index $a3, $_; $i = $m if ($i >= 0 && $m < $i);
+ $m = index $a2, $_; $i = $m if ($i >= 0 && $m < $i);
+ $m = index $a1, $_; $i = $m if ($i >= 0 && $m < $i);
+
+ $j = rindex $a4, $_;
+ $m = rindex $a3, $_; $j = $m if ($m > $j);
+ $m = rindex $a2, $_; $j = $m if ($m > $j);
+ $m = rindex $a1, $_; $j = $m if ($m > $j);
+
+
+ $width = $j - $i + 2;
+
+ $aa1 = substr $a1, $i, $width; $aa1 =~ tr/0/1/c;
+ $aa2 = substr $a2, $i, $width; $aa2 =~ tr/0/1/c;
+ $aa3 = substr $a3, $i, $width; $aa3 =~ tr/0/1/c;
+ $aa4 = substr $a4, $i, $width; $aa4 =~ tr/0/1/c;
+}
+
+@ilines = split /\s*-\s*/, "@ARGV";
+
+for ($i = 0; $i < 14; $i++)
+{
+ $line[$i] = "0" x 72;
+}
+
+$l = 0;
+foreach (@ilines)
+{
+ $p = 0;
+
+ @lc = split //, $_;
+
+ foreach (@lc)
+ {
+ searchalpha($_);
+ $l1 .= $aa1;
+ $l2 .= $aa2;
+ $l3 .= $aa3;
+ $l4 .= $aa4;
+ }
+
+ $line[$l++] = substr $l1 . "0" x 72, 0, 72;
+ $line[$l++] = substr $l2 . "0" x 72, 0, 72;
+ $line[$l++] = substr $l3 . "0" x 72, 0, 72;
+ $line[$l++] = substr $l4 . "0" x 72, 0, 72;
+ $line[$l++] = "0" x 72;
+
+ undef $l1; undef $l2; undef $l3; undef $l4;
+}
+
+# header is just copied from gnokii.nol.
+print "NOL\000\001\000\346\000\001\000\110\000\016\000\001\000\001\000\126\000";
+
+for ($i = 0; $i < 14; $i++)
+{
+ print "$line[$i]";
+}
--- /dev/null
+
+
+#
+# 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
--- /dev/null
+20000715
\ No newline at end of file
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h> /* for getenv */
+#include <locale.h>
+#include <string.h>
+#include <time.h> /* for time */
+#include <pthread.h>
+
+#ifndef WIN32
+# include <unistd.h> /* for usleep */
+# include <signal.h>
+#else
+# include <windows.h>
+# include "../win32/winserial.h"
+# define WRITEPHONE(a, b, c) WriteCommBlock(b, c)
+# undef IN
+# undef OUT
+# define sleep(x) Sleep((x) * 1000)
+# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000))
+#endif
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "files/cfgreader.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_sms.h"
+#include "xgnokii_netmon.h"
+#include "xgnokii_dtmf.h"
+#include "xgnokii_speed.h"
+#include "xgnokii_xkeyb.h"
+#include "xgnokii_calendar.h"
+#include "xgnokii_logos.h"
+#include "xgnokii_xring.h"
+#include "xgnokii_cfg.h"
+#include "xgnokii_data.h"
+#include "newmodules/n6110.h"
+
+#include "xpm/logo.xpm"
+#include "xpm/background.xpm"
+#include "xpm/sms.xpm"
+#include "xpm/alarm.xpm"
+
+/* Widgets for dialogs. */
+static GtkWidget *SplashWindow;
+static GtkWidget *GUI_MainWindow;
+static GtkWidget *AboutDialog;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static GtkWidget *OptionsDialog;
+static bool optionsDialogIsOpened;
+
+/* SMS sets list */
+static GtkWidget *SMSClist;
+
+/* Pixmap used for drawing all the stuff. */
+static GdkPixmap *Pixmap = NULL;
+
+/* Pixmap used for background. */
+static GdkPixmap *BackgroundPixmap = NULL;
+
+/* Pixmap used for SMS picture. */
+static GdkPixmap *SMSPixmap = NULL;
+
+/* Pixmap used for alarm picture. */
+static GdkPixmap *AlarmPixmap = NULL;
+
+
+/* Widget for popup menu */
+static GtkWidget *Menu;
+static GtkWidget *netmon_menu_item;
+static GtkWidget *sms_menu_item;
+static GtkWidget *calendar_menu_item;
+static GtkWidget *logos_menu_item;
+static GtkWidget *dtmf_menu_item;
+static GtkWidget *speedDial_menu_item;
+static GtkWidget *xkeyb_menu_item;
+static GtkWidget *cg_names_option_frame;
+static GtkWidget *sms_option_frame;
+static GtkWidget *mail_option_frame;
+static GtkWidget *user_option_frame;
+static GtkWidget *data_menu_item;
+
+/* Hold main configuration data for xgnokii */
+XgnokiiConfig xgnokiiConfig;
+
+gint max_phonebook_name_length;
+gint max_phonebook_number_length;
+gint max_phonebook_sim_name_length;
+gint max_phonebook_sim_number_length;
+
+/* Local variables */
+static char *DefaultXGnokiiDir = XGNOKIIDIR;
+static char *DefaultXGnokiiDocsDir = XGNOKIIDOCSDIR;
+static bool SMSSettingsInitialized = FALSE;
+static bool CallersGroupsInitialized = FALSE;
+static bool SMSFoldersInitialized = FALSE;
+static gint hiddenCallDialog;
+static guint splashRemoveHandler;
+
+GSM_SMSFolders folders;
+
+static struct CallDialog {
+ GtkWidget *dialog;
+ GtkWidget *label;
+} inCallDialog;
+
+typedef struct {
+ GtkWidget *alarmSwitch;
+ GtkWidget *alarmHour;
+ GtkWidget *alarmMin;
+} AlarmWidgets;
+
+typedef struct {
+ GtkWidget *port;
+ GtkWidget *model;
+ GtkWidget *init;
+ GtkWidget *bindir;
+ GtkWidget *serial, *infrared, *mbus;
+} ConnectionWidgets;
+
+typedef struct {
+ GtkWidget *model;
+ GtkWidget *version;
+ GtkWidget *revision;
+ GtkWidget *imei;
+ GtkWidget *simNameLen;
+ GtkWidget *phoneNameLen;
+} PhoneWidgets;
+
+typedef struct {
+ GtkWidget *set;
+ GtkWidget *number;
+ GtkWidget *defaultrecipient;
+ GtkWidget *format;
+ GtkWidget *validity;
+ GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
+} SMSWidgets;
+
+typedef struct {
+ GtkWidget *name;
+ GtkWidget *title;
+ GtkWidget *company;
+ GtkWidget *telephone;
+ GtkWidget *fax;
+ GtkWidget *email;
+ GtkWidget *address;
+ GtkWidget *status;
+ gint max;
+ gint used;
+} UserWidget;
+
+static struct ConfigDialogData
+{
+ ConnectionWidgets connection;
+ PhoneWidgets phone;
+ GtkWidget *groups[6];
+ AlarmWidgets alarm;
+ SMSWidgets sms;
+ UserWidget user;
+ GtkWidget *mailbox;
+ GtkWidget *help;
+} configDialogData;
+
+static GSM_MessageCenter tempMessageSettings;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/main/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+void GUI_InitSMSFoldersInf (void)
+{
+ if (SMSFoldersInitialized)
+ return;
+
+ GSM->GetSMSFolders(&folders);
+
+ SMSFoldersInitialized = TRUE;
+ GUIEventSend (GUI_EVENT_SMS_FOLDERS_CHANGED);
+}
+
+void GUI_InitCallerGroupsInf (void)
+{
+ D_CallerGroup *cg;
+ PhoneEvent *e;
+ register gint i;
+
+ if (CallersGroupsInitialized)
+ return;
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading caller groups names ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ xgnokiiConfig.callerGroups[0] = g_strndup( _("Familly"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[1] = g_strndup( _("VIP"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[2] = g_strndup( _("Friends"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[3] = g_strndup( _("Colleagues"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[4] = g_strndup( _("Other"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[5] = g_strndup( _("No group"), MAX_CALLER_GROUP_LENGTH);
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ for (i = 0; i < 5; i++)
+ {
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = i;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&callerGroupMutex);
+ pthread_cond_wait (&callerGroupCond, &callerGroupMutex);
+ pthread_mutex_unlock (&callerGroupMutex);
+
+ if (*cg->text != '\0' && cg->status == GE_NONE)
+ {
+ g_free (xgnokiiConfig.callerGroups[i]);
+ xgnokiiConfig.callerGroups[i] = g_strndup (cg->text, MAX_CALLER_GROUP_LENGTH);
+ }
+ g_free (cg);
+ }
+
+ CallersGroupsInitialized = TRUE;
+ gtk_widget_hide (infoDialog.dialog);
+ GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+}
+
+
+static inline void DrawBackground (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ BackgroundPixmap,
+ 0, 0,
+ 0, 0,
+ 261, 96);
+}
+
+int network_levels[] = {
+ 152, 69, 11, 3,
+ 138, 69, 11, 3,
+ 124, 69, 11, 4,
+ 110, 69, 11, 6
+};
+
+
+static inline void DrawNetwork (GtkWidget *data, int rflevel)
+{
+ int i;
+
+ if (rflevel > 100)
+ rflevel = 100;
+ for (i = 0; (i * 25) <= rflevel; i++)
+ {
+ float percent = ((float) rflevel - i * 25) / 25;
+
+ if (percent > 1)
+ percent = 1;
+ gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+ network_levels[4 * i] + network_levels[4 * i + 2] * (1 - percent),
+ network_levels[4 * i + 1],
+ network_levels[4 * i + 2] * percent,
+ network_levels[4 * i + 3]);
+ }
+}
+
+
+int battery_levels[] = {
+ 50, 69, 11, 3,
+ 64, 69, 11, 3,
+ 78, 69, 11, 4,
+ 92, 69, 11, 6
+};
+
+static inline void DrawBattery (GtkWidget *data, int batterylevel)
+{
+ int i;
+
+ if (batterylevel < 0)
+ return;
+ if (batterylevel > 100)
+ batterylevel = 100;
+ for (i = 0; (i * 25) <= batterylevel; i++)
+ {
+ float percent = ((float) batterylevel - i * 25) / 25;
+ if (percent > 1)
+ percent = 1;
+ gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+ battery_levels[4 * i],
+ battery_levels[4 * i + 1],
+ battery_levels[4 * i + 2] * percent,
+ battery_levels[4 * i + 3]);
+ }
+}
+
+static inline void DrawSMS (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ SMSPixmap,
+ 0, 0,
+ 25, 47,
+ 26, 7);
+}
+
+
+static inline void DrawAlarm (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ AlarmPixmap,
+ 0, 0,
+ 163, 11,
+ 9, 9);
+}
+
+static inline void DrawText (GtkWidget *data, int at, char *text)
+{
+ static GdkFont *Font;
+
+ Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-*-*");
+ gdk_draw_string (Pixmap,
+ Font,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ 33, at, text);
+}
+
+
+static inline void DrawSMSReceived (GtkWidget *data)
+{
+ DrawText (data, 25, _("Short Message received"));
+}
+
+
+static inline void DrawWorking (GtkWidget *data)
+{
+ DrawText(data, 40, _("Working ..."));
+}
+
+
+static inline void HideCallDialog (GtkWidget *widget, gpointer data)
+{
+ hiddenCallDialog = 1;
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+static void CreateInCallDialog (void)
+{
+ GtkWidget *button, *hbox;
+
+ inCallDialog.dialog = gtk_dialog_new ();
+ gtk_window_position (GTK_WINDOW (inCallDialog.dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_title (GTK_WINDOW (inCallDialog.dialog), _("Call in progress"));
+ gtk_container_set_border_width (GTK_CONTAINER (inCallDialog.dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (inCallDialog.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->vbox), hbox, FALSE, FALSE, 5);
+ gtk_widget_show (hbox);
+
+ inCallDialog.label = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (hbox), inCallDialog.label, FALSE, FALSE, 0);
+ gtk_widget_show (inCallDialog.label);
+
+ button = gtk_button_new_with_label (_("Hide"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->action_area),
+ button, TRUE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (HideCallDialog), (gpointer) inCallDialog.dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+}
+
+
+static gint Update (gpointer data)
+{
+ static gchar lastCallNum[20] = "";
+ static gchar callBuf[80];
+ static gchar timeBuf[10];
+ static gchar *anonym = "anonymous";
+ static struct tm stm;
+ static gint smsNumber = 0;
+ static gint callTimerStart = 0;
+ gint callTimer = 0;
+ time_t t;
+ static gchar *name;
+ static bool outgoing = TRUE;
+
+
+ /* The number of SMS messages before second */
+ static int smsold=0;
+
+ /* The number of second for we should display "Short Message Received" message */
+ static int smsreceived=-1;
+
+ DrawBackground (data);
+
+ DrawNetwork(data, phoneMonitor.rfLevel);
+
+ DrawBattery(data, phoneMonitor.batteryLevel);
+
+ if (phoneMonitor.alarm)
+ DrawAlarm (data);
+
+ if (phoneMonitor.working)
+ DrawText (data, 25, phoneMonitor.working);
+
+ pthread_mutex_lock (&smsMutex);
+ if (phoneMonitor.sms.unRead > 0)
+ {
+ DrawSMS (data);
+
+ if (phoneMonitor.sms.unRead > smsold && smsold != -1)
+ smsreceived = 10; /* The message "Short Message Received" is displayed for 10s */
+ }
+ if (smsNumber != phoneMonitor.sms.number)
+ GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+
+ smsold = phoneMonitor.sms.unRead;
+
+ smsNumber = phoneMonitor.sms.number;
+
+ pthread_mutex_unlock (&smsMutex);
+
+ if (smsreceived >= 0)
+ {
+ DrawSMSReceived (data);
+ smsreceived--;
+ }
+
+ pthread_mutex_lock (&callMutex);
+ if (phoneMonitor.call.callInProgress != CS_Idle)
+ {
+ if (phoneMonitor.call.callInProgress == CS_InProgress)
+ {
+ if (!callTimerStart)
+ callTimerStart = callTimer = time (NULL);
+ else
+ callTimer = time (NULL);
+ }
+
+ if (phoneMonitor.call.callInProgress == CS_Waiting)
+ {
+ outgoing = FALSE;
+
+ if (*phoneMonitor.call.callNum == '\0')
+ name = anonym;
+ else if (strncmp (phoneMonitor.call.callNum, lastCallNum, 20))
+ {
+ strncpy (lastCallNum, phoneMonitor.call.callNum, 20);
+ lastCallNum[19] = '\0';
+ name = GUI_GetName (phoneMonitor.call.callNum);
+ if (!name)
+ name = phoneMonitor.call.callNum;
+ }
+ }
+ t = (time_t) difftime (callTimer, callTimerStart);
+ (void) gmtime_r (&t, &stm);
+ strftime (timeBuf, 10, "%T", &stm);
+ if (outgoing)
+ g_snprintf (callBuf, 80, _("Outgoing call in progress:\nTime: %s"),
+ timeBuf);
+ else
+ g_snprintf (callBuf, 80, _("Incomming call from: %s\nTime: %s"),
+ name, timeBuf);
+
+ gtk_label_set_text (GTK_LABEL (inCallDialog.label), callBuf);
+ if (!GTK_WIDGET_VISIBLE (inCallDialog.dialog) && !hiddenCallDialog)
+ gtk_widget_show (inCallDialog.dialog);
+ }
+ else
+ {
+ callTimerStart = callTimer = 0;
+ *lastCallNum = '\0';
+ outgoing = TRUE;
+ if (GTK_WIDGET_VISIBLE (inCallDialog.dialog))
+ gtk_widget_hide (inCallDialog.dialog);
+ hiddenCallDialog = 0;
+ }
+ pthread_mutex_unlock (&callMutex);
+
+ gtk_widget_draw (data,NULL);
+
+ GUIEventSend (GUI_EVENT_NETMON_CHANGED);
+
+ return TRUE;
+}
+
+
+/* Redraw the screen from the backing pixmap */
+static inline gint ExposeEvent (GtkWidget *widget, GdkEventExpose *event)
+{
+ gdk_draw_pixmap (widget->window,
+ widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ Pixmap,
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+
+ return FALSE;
+}
+
+
+static void ParseSMSCenters (void)
+{
+ register gint i;
+ register gint j;
+
+ gtk_clist_freeze (GTK_CLIST (SMSClist));
+
+ gtk_clist_clear (GTK_CLIST (SMSClist));
+
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ {
+ gchar *row[5];
+ if (*(configDialogData.sms.smsSetting[i].Name) == '\0')
+ row[0] = g_strdup_printf (_("Set %d"), i + 1);
+ else
+ row[0] = g_strdup (configDialogData.sms.smsSetting[i].Name);
+
+ row[1] = g_strdup (configDialogData.sms.smsSetting[i].Number);
+
+ switch (configDialogData.sms.smsSetting[i].Format)
+ {
+ case GSMF_Text:
+ row[2] = g_strdup (_("Text"));
+ break;
+
+ case GSMF_Paging:
+ row[2] = g_strdup (_("Paging"));
+ break;
+
+ case GSMF_Fax:
+ row[2] = g_strdup (_("Fax"));
+ break;
+
+ case GSMF_Email:
+ case GSMF_UCI:
+ row[2] = g_strdup (_("E-Mail"));
+ break;
+
+ case GSMF_ERMES:
+ row[2] = g_strdup (_("ERMES"));
+ break;
+
+ case GSMF_X400:
+ row[2] = g_strdup (_("X.400"));
+ break;
+
+ case GSMF_Voice:
+ row[2] = g_strdup (_("Voice"));
+ break;
+
+ default:
+ row[2] = g_strdup (_("Text"));
+ break;
+ }
+
+ switch (configDialogData.sms.smsSetting[i].Validity)
+ {
+ case GSMV_1_Hour:
+ row[3] = g_strdup (_("1 h"));
+ break;
+
+ case GSMV_6_Hours:
+ row[3] = g_strdup (_("6 h"));
+ break;
+
+ case GSMV_24_Hours:
+ row[3] = g_strdup (_("24 h"));
+ break;
+
+ case GSMV_72_Hours:
+ row[3] = g_strdup (_("72 h"));
+ break;
+
+ case GSMV_1_Week:
+ row[3] = g_strdup (_("1 week"));
+ break;
+
+ case GSMV_Max_Time:
+ row[3] = g_strdup (_("Max. time"));
+ break;
+
+ default:
+ row[3] = g_strdup (_("24 h"));
+ break;
+ }
+
+ row[4] = g_strdup (configDialogData.sms.smsSetting[i].DefaultRecipient);
+
+ gtk_clist_append( GTK_CLIST (SMSClist), row);
+
+ for (j = 0; j < 5; j++)
+ g_free (row[j]);
+ }
+
+ gtk_clist_thaw (GTK_CLIST (SMSClist));
+}
+
+
+static void RefreshUserStatus (void)
+{
+ gchar buf[8];
+ configDialogData.user.used = GTK_ENTRY (configDialogData.user.name)->text_length
+ + GTK_ENTRY (configDialogData.user.title)->text_length
+ + GTK_ENTRY (configDialogData.user.company)->text_length
+ + GTK_ENTRY (configDialogData.user.telephone)->text_length
+ + GTK_ENTRY (configDialogData.user.fax)->text_length
+ + GTK_ENTRY (configDialogData.user.email)->text_length
+ + GTK_ENTRY (configDialogData.user.address)->text_length;
+ configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+ if (GTK_ENTRY (configDialogData.user.telephone)->text_length > 0)
+ configDialogData.user.max -= 4;
+ if (GTK_ENTRY (configDialogData.user.fax)->text_length > 0)
+ configDialogData.user.max -= 4;
+ g_snprintf (buf, 8, "%d/%d", configDialogData.user.used, configDialogData.user.max);
+ gtk_label_set_text (GTK_LABEL (configDialogData.user.status), buf);
+}
+
+
+void GUI_InitSMSSettings (void)
+{
+ PhoneEvent *e;
+ D_SMSCenter *c;
+ register gint i;
+
+ if (SMSSettingsInitialized)
+ return;
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading SMS centers ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ for (i = 1; i <= MAX_SMS_CENTER; i++)
+ {
+ xgnokiiConfig.smsSetting[i - 1].No = i;
+ c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+ c->center = &(xgnokiiConfig.smsSetting[i - 1]);
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetSMSCenter;
+ e->data = c;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&smsCenterMutex);
+ pthread_cond_wait (&smsCenterCond, &smsCenterMutex);
+ pthread_mutex_unlock (&smsCenterMutex);
+
+ if (c->status != GE_NONE)
+ break;
+
+ g_free (c);
+
+ configDialogData.sms.smsSetting[i - 1] = xgnokiiConfig.smsSetting[i - 1];
+ }
+
+ xgnokiiConfig.smsSets = i - 1;
+
+ ParseSMSCenters ();
+
+ SMSSettingsInitialized = TRUE;
+
+ gtk_widget_hide (infoDialog.dialog);
+}
+
+
+void GUI_ShowOptions (void)
+{
+ PhoneEvent *e;
+ D_Alarm *alarm;
+ register gint i;
+
+ if (optionsDialogIsOpened)
+ return;
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.port), xgnokiiConfig.port);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.model), xgnokiiConfig.model);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.init), xgnokiiConfig.initlength);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.bindir), xgnokiiConfig.bindir);
+
+ if (!strcmp(xgnokiiConfig.connection, "fbus"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.serial), TRUE);
+
+ if (!strcmp(xgnokiiConfig.connection, "infrared"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.infrared), TRUE);
+
+ if (!strcmp(xgnokiiConfig.connection, "mbus"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.mbus), TRUE);
+
+ /* Phone */
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.model), phoneMonitor.phone.model);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.version), phoneMonitor.phone.version);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.revision), phoneMonitor.phone.revision);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.imei), phoneMonitor.phone.imei);
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen),
+ atof (xgnokiiConfig.maxSIMLen));
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen),
+ atof (xgnokiiConfig.maxPhoneLen));
+
+ /* Alarm */
+ alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetAlarm;
+ e->data = alarm;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&alarmMutex);
+ pthread_cond_wait (&alarmCond, &alarmMutex);
+ pthread_mutex_unlock (&alarmMutex);
+
+ if (alarm->status != GE_NONE)
+ {
+ xgnokiiConfig.alarmSupported = FALSE;
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), 0.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), 0.0);
+ }
+ else
+ {
+ xgnokiiConfig.alarmSupported = TRUE;
+ if (alarm->time.IsSet)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), alarm->time.Hour);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), alarm->time.Minute);
+ }
+ g_free (alarm);
+
+ /* SMS */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (sms_option_frame);
+ GUI_InitSMSSettings ();
+ }
+ else
+ gtk_widget_hide (sms_option_frame);
+
+
+ /* BUSINESS CARD */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (user_option_frame);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.name),
+ xgnokiiConfig.user.name);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.title),
+ xgnokiiConfig.user.title);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.company),
+ xgnokiiConfig.user.company);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.telephone),
+ xgnokiiConfig.user.telephone);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.fax),
+ xgnokiiConfig.user.fax);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.email),
+ xgnokiiConfig.user.email);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.address),
+ xgnokiiConfig.user.address);
+
+ RefreshUserStatus();
+ }
+ else
+ gtk_widget_hide (user_option_frame);
+
+
+ /* Groups */
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ gtk_widget_show (cg_names_option_frame);
+ GUI_InitCallerGroupsInf ();
+ for ( i = 0; i < 6; i++)
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.groups[i]), xgnokiiConfig.callerGroups[i]);
+ }
+ else
+ gtk_widget_hide (cg_names_option_frame);
+
+ /* Mail */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (mail_option_frame);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.mailbox),
+ xgnokiiConfig.mailbox);;
+ }
+ else
+ gtk_widget_hide (mail_option_frame);
+
+ /* Help */
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.help),
+ xgnokiiConfig.helpviewer);
+
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0) {} else
+ gtk_clist_set_column_visibility (GTK_CLIST (SMSClist), 4, (GetModelFeature(FN_SMSCDEFAULT)!=0));
+
+ optionsDialogIsOpened = TRUE;
+ gtk_widget_show (OptionsDialog);
+}
+
+
+inline void GUI_ShowAbout (void)
+{
+ gtk_widget_show (AboutDialog);
+}
+
+
+inline void GUI_HideAbout(void)
+{
+ gtk_widget_hide (AboutDialog);
+}
+
+
+static void MainExit (void)
+{
+ PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+
+ e->event = Event_Exit;
+ e->data = NULL;
+ GUI_InsertEvent (e);
+ pthread_join (monitor_th, NULL);
+
+ //need to correctly close connection
+ GSM->Terminate();
+
+ gtk_main_quit();
+}
+
+
+static void ShowMenu (GdkEventButton *event)
+{
+ GdkEventButton *bevent = (GdkEventButton *) event;
+
+ if (GetModelFeature(FN_KEYPRESS)!=0)
+ gtk_widget_show (xkeyb_menu_item);
+ else
+ gtk_widget_hide (xkeyb_menu_item);
+
+ if (GetModelFeature(FN_NETMONITOR)!=0)
+ gtk_widget_show (netmon_menu_item);
+ else
+ gtk_widget_hide (netmon_menu_item);
+
+ if (GetModelFeature(FN_SMS)!=0)
+ gtk_widget_show (sms_menu_item);
+ else
+ gtk_widget_hide (sms_menu_item);
+
+ if (GetModelFeature(FN_CALENDAR)!=0)
+ gtk_widget_show (calendar_menu_item);
+ else
+ gtk_widget_hide (calendar_menu_item);
+
+ if (GetModelFeature(FN_DTMF)!=0)
+ gtk_widget_show (dtmf_menu_item);
+ else
+ gtk_widget_hide (dtmf_menu_item);
+
+ if (GetModelFeature(FN_SPEEDDIAL)!=0)
+ gtk_widget_show (speedDial_menu_item);
+ else
+ gtk_widget_hide (speedDial_menu_item);
+
+ if (GetModelFeature(FN_DATACALLS)!=0)
+ gtk_widget_show (data_menu_item);
+ else
+ gtk_widget_hide (data_menu_item);
+
+ gtk_menu_popup (GTK_MENU (Menu), NULL, NULL, NULL, NULL,
+ bevent->button, bevent->time);
+}
+
+
+static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event)
+{
+ /* Left button */
+ if (event->button == 1) {
+
+ /* Close */
+ if (event->x >= 206 && event->x <= 221 &&
+ event->y >= 42 && event->y <= 55)
+ {
+ if (GUI_ContactsIsChanged())
+ GUI_QuitSaveContacts();
+ else
+ MainExit ();
+ }
+ else if ((event->x >= 180 && event->x <= 195 &&
+ event->y >= 30 && event->y <= 50) ||
+ (event->x >= 185 && event->x <= 215 &&
+ event->y >= 15 && event->y <= 30))
+ {
+ GUI_ShowContacts ();
+ }
+ else if (event->x >= 190 && event->x <= 210 &&
+ event->y >= 70 && event->y <= 85)
+ {
+ if (GetModelFeature(FN_SMS)==0)
+ phoneMonitor.working = _("SMS not supported!");
+ else
+ GUI_ShowSMS ();
+ }
+ else if (event->x >= 235 && event->x <= 248 &&
+ event->y >= 27 && event->y <= 75)
+ {
+ if (GetModelFeature(FN_CALENDAR)==0)
+ phoneMonitor.working = _("Calendar not supported!");
+ else
+ GUI_ShowCalendar ();
+ }
+ else if (event->x >= 245 && event->x <= 258 &&
+ event->y >= 83 && event->y <= 93)
+ {
+ GUI_ShowOptions();
+ }
+ } /* Right button */
+ else if (event->button == 3)
+ ShowMenu (event);
+
+ // g_print ("event->x: %f\n", event->x);
+ // g_print ("event->y: %f\n", event->y);
+
+ return TRUE;
+}
+
+
+static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
+{
+ PhoneEvent *e;
+ D_Alarm *alarm;
+ register gint i;
+
+ /* Phone */
+ max_phonebook_sim_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen));
+ max_phonebook_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen));
+ g_free (xgnokiiConfig.maxSIMLen);
+ g_free (xgnokiiConfig.maxPhoneLen);
+ xgnokiiConfig.maxSIMLen = g_strdup_printf ("%d", max_phonebook_sim_name_length);
+ xgnokiiConfig.maxPhoneLen = g_strdup_printf ("%d", max_phonebook_name_length);
+
+ /* ALARM */
+ /* From fbus-6110.c
+ FIXME: we should also allow to set the alarm off :-) */
+ if (xgnokiiConfig.alarmSupported
+ && GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch)->active)
+ {
+ alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+ alarm->time.Hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour));
+ alarm->time.Minute = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin));
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SetAlarm;
+ e->data = alarm;
+ GUI_InsertEvent (e);
+ }
+
+ /* SMS */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ xgnokiiConfig.smsSetting[i] = configDialogData.sms.smsSetting[i];
+ GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED);
+ }
+
+ /* BUSINESS CARD */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ g_free(xgnokiiConfig.user.name);
+ xgnokiiConfig.user.name = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.name)));
+ g_free(xgnokiiConfig.user.title);
+ xgnokiiConfig.user.title = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.title)));
+ g_free(xgnokiiConfig.user.company);
+ xgnokiiConfig.user.company = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.company)));
+ g_free(xgnokiiConfig.user.telephone);
+ xgnokiiConfig.user.telephone = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.telephone)));
+ g_free(xgnokiiConfig.user.fax);
+ xgnokiiConfig.user.fax = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.fax)));
+ g_free(xgnokiiConfig.user.email);
+ xgnokiiConfig.user.email = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.email)));
+ g_free(xgnokiiConfig.user.address);
+ xgnokiiConfig.user.address = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.address)));
+ }
+
+ /* GROUPS */
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ for ( i = 0; i < 6; i++)
+ {
+ strncpy(xgnokiiConfig.callerGroups[i],
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.groups[i])),
+ MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[i][MAX_CALLER_GROUP_LENGTH] = '\0';
+ }
+ GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+ GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+ }
+
+ /* Mail */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ g_free(xgnokiiConfig.mailbox);
+ xgnokiiConfig.mailbox = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.mailbox)));
+ }
+
+ /* Help */
+ g_free(xgnokiiConfig.helpviewer);
+ xgnokiiConfig.helpviewer = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.help)));
+}
+
+
+static void OptionsSaveCallback (GtkWidget *widget, gpointer data )
+{
+ D_CallerGroup *cg;
+ D_SMSCenter *c;
+ PhoneEvent *e;
+ register gint i;
+
+ //gtk_widget_hide(GTK_WIDGET(data));
+ OptionsApplyCallback (widget, data);
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ {
+ xgnokiiConfig.smsSetting[i].No = i + 1;
+ c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+ c->center = &(xgnokiiConfig.smsSetting[i]);
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SetSMSCenter;
+ e->data = c;
+ GUI_InsertEvent (e);
+ }
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 0;
+ if (strcmp (xgnokiiConfig.callerGroups[0], _("Familly")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[0], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 1;
+ if (strcmp (xgnokiiConfig.callerGroups[1], _("VIP")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[1], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 2;
+ if (strcmp (xgnokiiConfig.callerGroups[2], _("Friends")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[2], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 3;
+ if (strcmp (xgnokiiConfig.callerGroups[3], _("Colleagues")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[3], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 4;
+ if (strcmp (xgnokiiConfig.callerGroups[4], _("Other")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[4], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+ }
+
+ if (GUI_SaveXConfig())
+ {
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), _("Error writing configuration file!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+}
+
+
+static GtkWidget *CreateMenu (void)
+{
+ GtkWidget *menu, *menu_items;
+
+ menu = gtk_menu_new ();
+
+ menu_items = gtk_menu_item_new_with_label (_("Contacts"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowContacts), NULL);
+ gtk_widget_show (menu_items);
+
+ sms_menu_item = gtk_menu_item_new_with_label (_("SMS"));
+ gtk_menu_append (GTK_MENU (menu), sms_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (sms_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowSMS), NULL);
+
+ calendar_menu_item = gtk_menu_item_new_with_label (_("Calendar"));
+ gtk_menu_append (GTK_MENU (menu), calendar_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (calendar_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowCalendar), NULL);
+
+ logos_menu_item = gtk_menu_item_new_with_label (_("Logos"));
+ gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowLogosWindow), NULL);
+ gtk_widget_show(logos_menu_item);
+
+ logos_menu_item = gtk_menu_item_new_with_label (_("Ringtones"));
+ gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowRingtonesWindow), NULL);
+ gtk_widget_show(logos_menu_item);
+
+ dtmf_menu_item = gtk_menu_item_new_with_label (_("DTMF"));
+ gtk_menu_append (GTK_MENU (menu), dtmf_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (dtmf_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowDTMF), NULL);
+
+ speedDial_menu_item = gtk_menu_item_new_with_label (_("Speed Dial"));
+ gtk_menu_append (GTK_MENU (menu), speedDial_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (speedDial_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowSpeedDial), NULL);
+
+ xkeyb_menu_item = gtk_menu_item_new_with_label (_("Keyboard"));
+ gtk_menu_append (GTK_MENU (menu), xkeyb_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (xkeyb_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowXkeyb), NULL);
+
+ netmon_menu_item = gtk_menu_item_new_with_label (_("Net Monitor"));
+ gtk_menu_append (GTK_MENU (menu), netmon_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (netmon_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowNetmon), NULL);
+
+ data_menu_item = gtk_menu_item_new_with_label (_("Data calls"));
+ gtk_menu_append (GTK_MENU (menu), data_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (data_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowData), NULL);
+
+ menu_items = gtk_menu_item_new ();
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("Options"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC(GUI_ShowOptions), NULL);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new ();
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("Help"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC(Help1), NULL);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("About"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowAbout), NULL);
+ gtk_widget_show (menu_items);
+
+ return menu;
+}
+
+
+static GtkWidget *CreateAboutDialog (void)
+{
+ GtkWidget *dialog;
+ GtkWidget *button, *hbox, *label;
+ gchar buf[200];
+
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("About"));
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, FALSE, 5);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (GUI_HideAbout), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ g_snprintf (buf, 200, _("xgnokii version: %s\ngnokii version: %s\n\n\
+Copyright (C) 1999 Pavel Janík ml.,\nHugh Blemings & Jan Derfinak\n"), XVERSION, VERSION);
+ label = gtk_label_new ((gchar *) buf);
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ return dialog;
+}
+
+
+static inline void SetFormat (GtkWidget *item, gpointer data)
+{
+ tempMessageSettings.Format = GPOINTER_TO_INT (data);
+}
+
+
+static inline void SetValidity (GtkWidget *item, gpointer data)
+{
+ tempMessageSettings.Validity = GPOINTER_TO_INT (data);
+}
+
+
+static inline void OptionsDeleteEvent (GtkWidget *widget, GdkEvent *event, gpointer data )
+{
+ gtk_widget_hide( GTK_WIDGET (widget));
+ optionsDialogIsOpened = FALSE;
+}
+
+
+static inline void OptionsCloseCallback (GtkWidget *widget, gpointer data )
+{
+ gtk_widget_hide(GTK_WIDGET(data));
+ optionsDialogIsOpened = FALSE;
+}
+
+
+static gint CheckInUserDataLength (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer callback_data)
+{
+ register gint len;
+
+ len = configDialogData.user.max - (GTK_ENTRY (configDialogData.user.name)->text_length
+ + GTK_ENTRY (configDialogData.user.title)->text_length
+ + GTK_ENTRY (configDialogData.user.company)->text_length
+ + GTK_ENTRY (configDialogData.user.telephone)->text_length
+ + GTK_ENTRY (configDialogData.user.fax)->text_length
+ + GTK_ENTRY (configDialogData.user.email)->text_length
+ + GTK_ENTRY (configDialogData.user.address)->text_length
+ - GTK_ENTRY (widget)->text_length);
+
+ if (len < 1)
+ {
+ gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+ return (FALSE);
+ }
+ else
+ gtk_entry_set_editable (GTK_ENTRY (widget), TRUE);
+ if (GPOINTER_TO_INT (callback_data) == 3
+ || GPOINTER_TO_INT (callback_data) == 4)
+ {
+ if ((GPOINTER_TO_INT (callback_data) == 3
+ && GTK_ENTRY (configDialogData.user.telephone)->text_length == 0)
+ || (GPOINTER_TO_INT (callback_data) == 4
+ && GTK_ENTRY (configDialogData.user.fax)->text_length == 0))
+ len -= 4;
+
+ if (len < 1)
+ {
+ gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+ return (FALSE);
+ }
+
+ if (len > max_phonebook_number_length)
+ len = max_phonebook_number_length;
+ }
+
+ gtk_entry_set_max_length (GTK_ENTRY (widget), len);
+ return (FALSE);
+}
+
+
+static inline gint CheckOutUserDataLength (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer callback_data)
+{
+ gtk_entry_set_max_length (GTK_ENTRY (widget), GPOINTER_TO_INT (callback_data));
+ return (FALSE);
+}
+
+
+static inline gint RefreshUserStatusCallBack (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer callback_data)
+{
+ RefreshUserStatus ();
+ if (GTK_EDITABLE (widget)->editable == FALSE)
+ return (FALSE);
+ if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear ||
+ event->keyval == GDK_Insert || event->keyval == GDK_Delete ||
+ event->keyval == GDK_Home || event->keyval == GDK_End ||
+ event->keyval == GDK_Left || event->keyval == GDK_Right ||
+ event->keyval == GDK_Return ||
+ (event->keyval >= 0x20 && event->keyval <= 0xFF))
+ return (TRUE);
+
+ return (FALSE);
+}
+
+
+static void OkEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.set)),
+ GSM_MAX_SMS_CENTER_NAME_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name[GSM_MAX_SMS_CENTER_NAME_LENGTH - 1]
+ = '\0';
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.number)),
+ GSM_MAX_SMS_CENTER_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number[GSM_MAX_SMS_CENTER_LENGTH]
+ = '\0';
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.defaultrecipient)),
+ GSM_MAX_RECIPIENT_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient[GSM_MAX_RECIPIENT_LENGTH]
+ = '\0';
+
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format
+ = tempMessageSettings.Format;
+
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity
+ = tempMessageSettings.Validity;
+
+ ParseSMSCenters ();
+
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+static inline void EditSMSSetDialogClick (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ GtkWidget *data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ gtk_signal_emit_by_name(GTK_OBJECT (data), "clicked");
+}
+
+
+static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+ static GtkWidget *dialog = NULL;
+ GtkWidget *button, *label, *label2, *hbox, *hbox2, *menu, *item;
+
+ if (GTK_CLIST (SMSClist)->selection == NULL)
+ return;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_dialog_new();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Edit SMS Setting"));
+ gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkEditSMSSetDialog), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Set's name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.set = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_NAME_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.set, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.set, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.set);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Center:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.number = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.number, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.number, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.number);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox2, FALSE, FALSE, 9);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (hbox2);
+
+ label2 = gtk_label_new (_("Default recipient:"));
+ gtk_box_pack_start(GTK_BOX(hbox2), label2, FALSE, FALSE, 2);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (label2);
+
+ configDialogData.sms.defaultrecipient = gtk_entry_new_with_max_length(GSM_MAX_RECIPIENT_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.defaultrecipient, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox2), configDialogData.sms.defaultrecipient, FALSE, FALSE, 2);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (configDialogData.sms.defaultrecipient);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+ label = gtk_label_new (_("Sending Format:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.format = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ gtk_widget_set_usize (configDialogData.sms.format, 110, 28);
+
+ item = gtk_menu_item_new_with_label (_("Text"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Text);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("Fax"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Fax);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("Paging"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Paging);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("E-Mail"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Email);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.format), menu);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.format, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.format);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Validity Period:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.validity = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ gtk_widget_set_usize (configDialogData.sms.validity, 110, 28);
+
+ item = gtk_menu_item_new_with_label (_("Max. Time"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_Max_Time);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("1 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_1_Hour);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("6 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_6_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("24 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_24_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("72 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_72_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("1 week"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_1_Week);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.validity), menu);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.validity, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.validity);
+ }
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.set),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.number),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.defaultrecipient),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient);
+
+ switch (configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format)
+ {
+ case GSMF_Text:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 0);
+ break;
+
+ case GSMF_Paging:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 2);
+ break;
+
+ case GSMF_Fax:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 1);
+ break;
+
+ case GSMF_Email:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 3);
+ break;
+
+ default:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 0);
+ }
+
+ switch (configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity)
+ {
+ case GSMV_1_Hour:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 1);
+ break;
+
+ case GSMV_6_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 2);
+ break;
+
+ case GSMV_24_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 3);
+ break;
+
+ case GSMV_72_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 4);
+ break;
+
+ case GSMV_1_Week:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 5);
+ break;
+
+ case GSMV_Max_Time:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 0);
+ break;
+
+ default:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 3);
+ }
+
+ tempMessageSettings.Format = configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format;
+ tempMessageSettings.Validity = configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity;
+
+ gtk_widget_show (dialog);
+}
+
+
+static GtkWidget *CreateOptionsDialog (void)
+{
+ gchar labelBuffer[10];
+ GtkWidget *dialog;
+ GtkWidget *button, *hbox, *vbox, *label, *notebook, *frame, *clistScrolledWindow;
+ register gint i;
+ GtkAdjustment *adj;
+ gchar *titles[5] = { _("Set's name"), _("Center number"), _("Format"), _("Validity"), _("Default recipient")};
+
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Options"));
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (OptionsDeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Apply"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsApplyCallback), (gpointer)dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Save"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsSaveCallback), (gpointer)dialog);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Close"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsCloseCallback), (gpointer)dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ notebook = gtk_notebook_new ();
+ gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
+ gtk_widget_show(notebook);
+
+ /*** Connection notebook ***/
+ frame = gtk_frame_new (_("Phone and connection type"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Connection"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Port:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.port = gtk_entry_new_with_max_length (10);
+ gtk_widget_set_usize (configDialogData.connection.port, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.port),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.port, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.port);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Model:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.model = gtk_entry_new_with_max_length (5);
+ gtk_widget_set_usize (configDialogData.connection.model, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.model),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.model, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.model);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Init length:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.init = gtk_entry_new_with_max_length (100);
+ gtk_widget_set_usize (configDialogData.connection.init, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.init),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.init, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.init);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Bindir:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.bindir = gtk_entry_new_with_max_length (100);
+ gtk_widget_set_usize (configDialogData.connection.bindir, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.bindir),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.bindir, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.bindir);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Connection:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 3);
+ gtk_widget_show (label);
+
+ configDialogData.connection.infrared = gtk_radio_button_new_with_label (NULL, _("infrared"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.infrared, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.infrared);
+
+ configDialogData.connection.serial = gtk_radio_button_new_with_label (
+ gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("fbus"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.serial, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.serial);
+
+ configDialogData.connection.mbus = gtk_radio_button_new_with_label (
+ gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.serial)), _("mbus"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.mbus, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.mbus);
+
+ /*** Phone notebook ***/
+ frame = gtk_frame_new (_("Phone information"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Phone"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Model:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.model = gtk_entry_new_with_max_length (7);
+ gtk_widget_set_usize (configDialogData.phone.model, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.model),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.model, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.model);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Version:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.version = gtk_entry_new_with_max_length (7);
+ gtk_widget_set_usize (configDialogData.phone.version, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.version),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.version, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.version);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Revision:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.revision = gtk_entry_new_with_max_length (64);
+ gtk_widget_set_usize (configDialogData.phone.revision, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.revision),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.revision, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.revision);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("IMEI:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.imei = gtk_entry_new_with_max_length (64);
+ gtk_widget_set_usize (configDialogData.phone.imei, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.imei),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.imei, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.imei);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new ("Names length:");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new ("SIM:");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+ configDialogData.phone.simNameLen = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.phone.simNameLen, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.simNameLen);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+ configDialogData.phone.phoneNameLen = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.phoneNameLen, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.phoneNameLen);
+
+ label = gtk_label_new ("Phone:");
+ gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ /*** Alarm notebook ***/
+ xgnokiiConfig.alarmSupported = TRUE;
+
+ frame = gtk_frame_new (_("Alarm setting"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show(vbox);
+
+ label = gtk_label_new (_("Alarm"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
+ gtk_widget_show (hbox);
+
+ configDialogData.alarm.alarmSwitch = gtk_check_button_new_with_label (_("Alarm"));
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmSwitch, FALSE, FALSE, 10);
+ gtk_widget_show (configDialogData.alarm.alarmSwitch);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 23.0, 1.0, 4.0, 0.0);
+ configDialogData.alarm.alarmHour = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmHour, FALSE, FALSE, 0);
+ gtk_widget_show (configDialogData.alarm.alarmHour);
+
+ label = gtk_label_new (":");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 59.0, 1.0, 10.0, 0.0);
+ configDialogData.alarm.alarmMin = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmMin, FALSE, FALSE, 0);
+ gtk_widget_show (configDialogData.alarm.alarmMin);
+
+ /*** SMS notebook ***/
+ sms_option_frame = gtk_frame_new (_("Short Message Service"));
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (sms_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("SMS"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sms_option_frame, label);
+
+ SMSClist = gtk_clist_new_with_titles (5, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (SMSClist), GTK_SHADOW_OUT);
+ gtk_clist_column_titles_passive (GTK_CLIST (SMSClist));
+ gtk_clist_set_auto_sort (GTK_CLIST (SMSClist), FALSE);
+
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 0, 70);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 1, 115);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 2, 40);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 3, 55);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 4, 100);
+// gtk_clist_set_column_justification (GTK_CLIST (SMSClist), 1, GTK_JUSTIFY_RIGHT);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), SMSClist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (vbox), clistScrolledWindow,
+ TRUE, TRUE, 10);
+
+ gtk_widget_show (SMSClist);
+
+ gtk_widget_show (clistScrolledWindow);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+
+ button = gtk_button_new_with_label (_("Edit"));
+ gtk_box_pack_start (GTK_BOX (hbox),
+ button, TRUE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ShowEditSMSSetDialog), (gpointer)dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ gtk_signal_connect (GTK_OBJECT (SMSClist), "select_row",
+ GTK_SIGNAL_FUNC (EditSMSSetDialogClick),
+ (gpointer) button);
+
+ /*** Business notebook ***/
+ user_option_frame = gtk_frame_new (_("Business Card"));
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (user_option_frame), vbox);
+ gtk_widget_show(vbox);
+
+ label = gtk_label_new(_("User"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), user_option_frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ configDialogData.user.status = gtk_label_new ("");
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.user.status, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.status);
+
+ configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+ configDialogData.user.used = 0;
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.name = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.name, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 0);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.name, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.name);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Title:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.title = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.title, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 1);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.title, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.title);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Company:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.company = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.company, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 2);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.company, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.company);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Telephone:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.telephone = gtk_entry_new_with_max_length(max_phonebook_number_length);
+ gtk_widget_set_usize (configDialogData.user.telephone, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 3);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.telephone, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.telephone);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Fax:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.fax = gtk_entry_new_with_max_length(max_phonebook_number_length);
+ gtk_widget_set_usize (configDialogData.user.fax, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 4);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.fax, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.fax);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("E-Mail:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.email = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.email, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 5);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.email, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.email);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Address:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.address = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.address, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 6);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.address, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.address);
+
+
+ /*** Groups notebook ***/
+ cg_names_option_frame = gtk_frame_new (_("Caller groups names"));
+
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (cg_names_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Groups"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), cg_names_option_frame, label);
+
+ for ( i = 0; i < 6; i++)
+ {
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 3);
+ gtk_widget_show (hbox);
+
+ g_snprintf (labelBuffer, 10, _("Group %d:"), i + 1);
+ label = gtk_label_new (labelBuffer);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.groups[i] = gtk_entry_new_with_max_length (MAX_CALLER_GROUP_LENGTH);
+ gtk_widget_set_usize (configDialogData.groups[i], 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.groups[i], FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.groups[i]);
+ }
+
+ /* Mail */
+ mail_option_frame = gtk_frame_new (_("Mailbox"));
+ gtk_widget_show (mail_option_frame);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (mail_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Mail"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), mail_option_frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Path to mailbox:"));
+ gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.mailbox = gtk_entry_new_with_max_length (MAILBOX_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.mailbox, 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.mailbox, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.mailbox);
+
+ /* Help */
+ frame = gtk_frame_new (_("Help viewer"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Help"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Viewer:"));
+ gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.help = gtk_entry_new_with_max_length (HTMLVIEWER_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.help, 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.help, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.help);
+
+
+ optionsDialogIsOpened = FALSE;
+ return dialog;
+}
+
+
+static void TopLevelWindow (void)
+{
+ GtkWidget *drawing_area;
+ GdkBitmap *mask;
+ GtkStyle *style;
+ GdkGC *gc;
+ struct sigaction act;
+
+ GUI_MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_realize (GUI_MainWindow);
+
+ BackgroundPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+ SMSPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_sms);
+
+ AlarmPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_alarm);
+
+ Pixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+// gdk_window_set_icon_name (GUI_MainWindow->window, "XXX");
+ style = gtk_widget_get_default_style ();
+ gc = style->black_gc;
+
+ /* Create the drawing area */
+ drawing_area = gtk_drawing_area_new ();
+
+ /* Signals used to handle backing pixmap */
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+ (GtkSignalFunc) ExposeEvent, NULL);
+
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+ (GtkSignalFunc) ButtonPressEvent, NULL);
+
+ gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+ | GDK_BUTTON_PRESS_MASK);
+
+ gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 261, 96);
+ gtk_container_add (GTK_CONTAINER (GUI_MainWindow), drawing_area);
+
+ gdk_draw_pixmap (drawing_area->window,
+ drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)],
+ Pixmap,
+ 0, 0,
+ 0, 0,
+ 261, 96);
+
+ gtk_widget_shape_combine_mask (GUI_MainWindow, mask, 0, 0);
+
+ gtk_signal_connect (GTK_OBJECT (GUI_MainWindow), "destroy",
+ GTK_SIGNAL_FUNC (MainExit),
+ NULL);
+
+ Menu = CreateMenu ();
+ OptionsDialog = CreateOptionsDialog ();
+ AboutDialog = CreateAboutDialog ();
+ GUI_CreateSMSWindow ();
+ GUI_CreateContactsWindow ();
+ GUI_CreateNetmonWindow ();
+ GUI_CreateDTMFWindow ();
+ GUI_CreateSpeedDialWindow ();
+ GUI_CreateXkeybWindow ();
+ GUI_CreateCalendarWindow ();
+ GUI_CreateLogosWindow ();
+ GUI_CreateDataWindow();
+ GUI_CreateRingtonesWindow ();
+ CreateErrorDialog (&errorDialog, GUI_MainWindow);
+ CreateInfoDialog (&infoDialog, GUI_MainWindow);
+ CreateInCallDialog ();
+
+ act.sa_handler = RemoveZombie;
+ sigemptyset (&(act.sa_mask));
+ act.sa_flags = SA_NOCLDSTOP;
+ sigaction (SIGCHLD, &act, NULL);
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ act.sa_handler = SIG_IGN;
+ sigemptyset (&(act.sa_mask));
+ sigaction (SIGALRM, &act, NULL);
+#endif
+
+ gtk_widget_show_all (GUI_MainWindow);
+ GUI_Refresh ();
+
+ GUI_InitPhoneMonitor ();
+ pthread_create (&monitor_th, NULL, GUI_Connect, NULL);
+
+ gtk_timeout_add (1000, (GtkFunction) Update, GUI_MainWindow);
+
+ hiddenCallDialog = 0;
+}
+
+
+static void SplashScreen (void)
+{
+ GtkWidget *pixmap, *fixed;
+ GdkPixmap *gdk_pixmap;
+ GdkBitmap *mask;
+ GtkStyle *style;
+ GdkGC *gc;
+
+ SplashWindow = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_widget_realize (SplashWindow);
+
+ gtk_widget_set_usize (SplashWindow, 475, 160);
+ gtk_window_position (GTK_WINDOW (SplashWindow), GTK_WIN_POS_CENTER);
+
+ style = gtk_widget_get_default_style();
+ gc = style->black_gc;
+ gdk_pixmap = gdk_pixmap_create_from_xpm_d(SplashWindow->window, &mask,
+ &style->bg[GTK_STATE_NORMAL],
+ XPM_logo);
+ pixmap = gtk_pixmap_new(gdk_pixmap, mask);
+
+ fixed = gtk_fixed_new();
+ gtk_widget_set_usize(fixed, 261, 96);
+ gtk_fixed_put(GTK_FIXED(fixed), pixmap, 0, 0);
+ gtk_container_add(GTK_CONTAINER (SplashWindow), fixed);
+
+ gtk_widget_shape_combine_mask (SplashWindow, mask, 0, 0);
+
+ gtk_widget_show_all (SplashWindow);
+}
+
+
+static gint RemoveSplash (GtkWidget *Win)
+{
+ if (GTK_WIDGET_VISIBLE (SplashWindow))
+ {
+ gtk_timeout_remove (splashRemoveHandler);
+ gtk_widget_hide (SplashWindow);
+ gtk_widget_destroy (SplashWindow);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void ReadConfig (void)
+{
+ /* Read config file */
+ if (CFG_ReadConfig(&xgnokiiConfig.model, &xgnokiiConfig.port,
+ &xgnokiiConfig.initlength, &xgnokiiConfig.connection,
+ &xgnokiiConfig.bindir, &xgnokiiConfig.synchronizetime,false) < 0) {
+ exit(-1);
+ }
+
+#ifndef WIN32
+ if ((xgnokiiConfig.locale = getenv ("LC_ALL")) == NULL)
+ if ((xgnokiiConfig.locale = getenv ("LC_MESSAGES")) == NULL)
+ if ((xgnokiiConfig.locale = getenv ("LANG")) == NULL)
+ xgnokiiConfig.locale = "POSIX";
+#endif
+
+ GUI_ReadXConfig();
+ max_phonebook_name_length = atoi (xgnokiiConfig.maxPhoneLen);
+ max_phonebook_sim_name_length = atoi (xgnokiiConfig.maxSIMLen);
+
+#ifndef WIN32
+ xgnokiiConfig.xgnokiidir = DefaultXGnokiiDir;
+ xgnokiiConfig.xgnokiidocsdir = DefaultXGnokiiDocsDir;
+#endif
+ if (CheckModel (N6110_Information, xgnokiiConfig.model, CurrentConnectionType)) {
+ max_phonebook_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+ max_phonebook_sim_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+ }
+ else
+ {
+ max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH;
+ }
+
+ xgnokiiConfig.callerGroups[0] = xgnokiiConfig.callerGroups[1] =
+ xgnokiiConfig.callerGroups[2] = xgnokiiConfig.callerGroups[3] =
+ xgnokiiConfig.callerGroups[4] = xgnokiiConfig.callerGroups[5] = NULL;
+ xgnokiiConfig.smsSets = 0;
+}
+
+
+int main (int argc, char *argv[])
+{
+#ifdef USE_NLS
+ textdomain("gnokii");
+#endif
+
+ (void) gtk_set_locale ();
+
+ gtk_init (&argc, &argv);
+
+ /* Show the splash screen. */
+
+ SplashScreen ();
+
+ /* Remove it after a while. */
+
+ ReadConfig ();
+ TopLevelWindow ();
+
+ splashRemoveHandler = gtk_timeout_add(5000, (GtkFunction) RemoveSplash, (gpointer) SplashWindow);
+
+ gtk_main ();
+
+ return(0);
+}
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_H
+#define XGNOKII_H
+
+#include <gtk/gtk.h>
+#include "config.h"
+#include "misc.h"
+#include "gsm-sms.h"
+
+#define MAX_CALLER_GROUP_LENGTH 10
+#define MAX_SMS_CENTER 10
+#define MAX_BUSINESS_CARD_LENGTH 139
+
+typedef struct {
+ gchar *name;
+ gchar *title;
+ gchar *company;
+ gchar *telephone;
+ gchar *fax;
+ gchar *email;
+ gchar *address;
+} UserInf;
+
+typedef struct {
+ gchar *initlength; /* Init length from .gnokiirc file */
+ gchar *model; /* Model from .gnokiirc file. */
+ gchar *port; /* Serial port from .gnokiirc file */
+ gchar *connection; /* Connection type from .gnokiirc file */
+ gchar *synchronizetime;
+ gchar *bindir;
+ gchar *xgnokiidir;
+ gchar *xgnokiidocsdir;
+ gchar *helpviewer; /* Program to showing help files */
+ gchar *mailbox; /* Mailbox, where we can save SMS's */
+ gchar *maxSIMLen; /* Max length of names on SIM card */
+ gchar *maxPhoneLen;/* Max length of names in phone */
+ gchar *locale;
+ GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
+ UserInf user;
+ gchar *callerGroups[6];
+ gint smsSets:4;
+ bool alarmSupported:1;
+} XgnokiiConfig;
+
+/* Hold main configuration data for xgnokii */
+extern XgnokiiConfig xgnokiiConfig;
+
+extern gint max_phonebook_name_length;
+extern gint max_phonebook_number_length;
+extern gint max_phonebook_sim_name_length;
+extern gint max_phonebook_sim_number_length;
+extern GSM_SMSFolders folders;
+extern void GUI_InitCallerGroupsInf (void);
+extern void GUI_InitSMSSettings (void);
+extern void GUI_InitSMSFoldersInf (void);
+extern void GUI_ShowAbout (void);
+
+#endif /* XGNOKII_H */
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <time.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_calendar.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/SendSMS.xpm"
+#include "xpm/NewBD.xpm"
+#include "xpm/NewCall.xpm"
+#include "xpm/NewMeet.xpm"
+#include "xpm/NewRem.xpm"
+#include "xpm/quest.xpm"
+
+
+typedef struct {
+ GtkWidget *calendar;
+ GtkWidget *notesClist;
+ GtkWidget *noteText;
+ GdkColor colour;
+} CalendarWidget;
+
+
+typedef struct {
+ guint year;
+ guint month;
+ guint day;
+ GtkWidget *button;
+} Date;
+
+
+typedef struct {
+ Date date;
+ guchar hours;
+ guchar minutes;
+ GtkWidget *button;
+ GtkWidget *hButton;
+ GtkWidget *mButton;
+} DateTime;
+
+
+typedef struct {
+ GtkWidget *dialog;
+ Date date;
+ DateTime alarm;
+ GtkWidget *alarmCheck;
+ GtkWidget *text;
+} AddDialogData;
+
+typedef struct {
+ GtkWidget *dialog;
+ DateTime date;
+ DateTime alarm;
+ GtkWidget *alarmCheck;
+ GtkWidget *text;
+} AddDialogData2;
+
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *cal;
+} CalendarDialog;
+
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *cal;
+} CalTimeDialog;
+
+
+static GtkWidget *GUI_CalendarWindow;
+static ErrorDialog errorDialog = {NULL, NULL};
+static CalendarWidget cal = {NULL, NULL};
+static QuestMark questMark;
+static AddDialogData addReminderDialogData;
+static AddDialogData2 addCallDialogData;
+static AddDialogData2 addMeetingDialogData;
+static AddDialogData addBirthdayDialogData;
+static CalendarDialog calendarDialog = {NULL, NULL};
+static CalTimeDialog calTimeDialog = {NULL, NULL};
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/help/%s/windows/calendar/index.html", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static inline void CloseCalendar (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_CalendarWindow);
+}
+
+
+inline void GUI_ShowCalendar ()
+{
+ if (GetModelFeature(FN_CALENDAR)!=0)
+ gtk_widget_show (GUI_CalendarWindow);
+}
+
+
+static gint InsertCalendarEntry (GSM_CalendarNote *note)
+{
+ gchar *row[6];
+
+ row[0] = g_strdup_printf ("%d", note->Location);
+
+ switch (note->Type)
+ {
+ case GCN_REMINDER:
+ row[1] = _("Reminder");
+ row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
+ note->Time.Month, note->Time.Year);
+ row[5] = "";
+ break;
+
+ case GCN_CALL:
+ row[1] = _("Call");
+ row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
+ note->Time.Month, note->Time.Year,
+ note->Time.Hour, note->Time.Minute);
+ row[5] = note->Phone;
+ break;
+
+ case GCN_MEETING:
+ row[1] = _("Meeting");
+ row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
+ note->Time.Month, note->Time.Year,
+ note->Time.Hour, note->Time.Minute);
+ row[5] = "";
+ break;
+
+ case GCN_BIRTHDAY:
+ row[1] = _("Birthday");
+ row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
+ note->Time.Month, note->Time.Year);
+ row[5] = "";
+ break;
+
+ default:
+ row[1] = _("Unknown");
+ row[5] = "";
+ break;
+ }
+
+ row[3] = note->Text;
+
+ if (note->Alarm.Year == 0)
+ row[4] = "";
+ else
+ row[4] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Alarm.Day,
+ note->Alarm.Month, note->Alarm.Year,
+ note->Alarm.Hour, note->Alarm.Minute);
+
+ gtk_clist_freeze (GTK_CLIST (cal.notesClist));
+ gtk_clist_append (GTK_CLIST (cal.notesClist), row);
+ gtk_clist_sort (GTK_CLIST (cal.notesClist));
+ gtk_clist_thaw (GTK_CLIST (cal.notesClist));
+
+ g_free (row[0]);
+ g_free (row[2]);
+ if (*row[4] != '\0')
+ g_free (row[4]);
+
+ return (GE_NONE);
+}
+
+static void ClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ gchar *buf;
+
+ gtk_text_freeze (GTK_TEXT (cal.noteText));
+
+ gtk_text_set_point (GTK_TEXT (cal.noteText), 0);
+ gtk_text_forward_delete (GTK_TEXT (cal.noteText), gtk_text_get_length (GTK_TEXT (cal.noteText)));
+
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+ _("Type: "), -1);
+ gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+ _("Date: "), -1);
+ gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ "\n", -1);
+
+ gtk_calendar_select_month (GTK_CALENDAR (cal.calendar),
+ atoi (buf + 3) - 1, atoi (buf + 6));
+ gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), atoi (buf));
+
+ gtk_clist_get_text (GTK_CLIST (clist), row, 4, &buf);
+ if (*buf != '\0')
+ {
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+ _("Alarm: "), -1);
+
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ "\n", -1);
+ }
+
+ gtk_clist_get_text (GTK_CLIST (clist), row, 5, &buf);
+ if (*buf != '\0')
+ {
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+ _("Number: "), -1);
+
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ "\n", -1);
+ }
+
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
+ _("Text: "), -1);
+ gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
+ gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
+ buf, -1);
+
+ gtk_text_thaw (GTK_TEXT (cal.noteText));
+}
+
+static inline gint ReadCalendarFailed (gint i)
+{
+ return (0);
+}
+
+
+static void ReadCalNotes (void)
+{
+ PhoneEvent *e;
+ D_CalendarNoteAll *cna;
+
+ gtk_clist_clear (GTK_CLIST (cal.notesClist));
+
+ cna = (D_CalendarNoteAll *) g_malloc (sizeof (D_CalendarNoteAll));
+ cna->InsertEntry = InsertCalendarEntry;
+ cna->ReadFailed = ReadCalendarFailed;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetCalendarNoteAll;
+ e->data = cna;
+ GUI_InsertEvent (e);
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+ char *text1 = NULL;
+ char *text2 = NULL;
+
+ GtkCListRow *row1 = (GtkCListRow *) ptr1;
+ GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+ switch (row1->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+ switch (row2->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+
+ if (!text2)
+ return (text1 != NULL);
+
+ if (!text1)
+ return -1;
+
+ if (*text2 == '\0')
+ return (*text1 != '\0');
+
+ if (*text1 == '\0')
+ return (-1);
+
+ if (clist->sort_column == 0)
+ {
+ gint n1 = atoi (text1);
+ gint n2 = atoi (text2);
+
+ if (n1 > n2)
+ return (1);
+ else if (n1 < n2)
+ return (-1);
+ else
+ return 0;
+ }
+
+ if (clist->sort_column == 2 || clist->sort_column == 4)
+ {
+ GDate *date1, *date2;
+ gint time1, time2;
+ gint ret;
+
+ date1 = g_date_new_dmy (atoi (text1), atoi (text1 + 3), atoi (text1 + 6));
+ date2 = g_date_new_dmy (atoi (text2), atoi (text2 + 3), atoi (text2 + 6));
+
+ ret = g_date_compare (date1, date2);
+
+ g_date_free (date1);
+ g_date_free (date2);
+
+ if (ret)
+ return (ret);
+
+ if (strlen (text1) > 10)
+ time1 = atoi (text1 + 11) * 60 + atoi (text1 + 14);
+ else
+ time1 = 0;
+
+ if (strlen (text2) > 10)
+ time2 = atoi (text2 + 11) * 60 + atoi (text2 + 14);
+ else
+ time2 = 0;
+
+ if (time1 > time2)
+ return (1);
+ else if (time1 < time2)
+ return (-1);
+ else
+ return 0;
+
+/* struct tm bdTime;
+ time_t time1, time2;
+
+ bdTime.tm_sec = 0;
+ if (strlen (text1) > 10)
+ {
+ bdTime.tm_min = atoi (text1 + 14);
+ bdTime.tm_hour = atoi (text1 + 11);
+ }
+ else
+ bdTime.tm_min = bdTime.tm_hour = 0;
+ bdTime.tm_mday = atoi (text1);
+ bdTime.tm_mon = atoi (text1 + 3);
+ bdTime.tm_year = atoi (text1 + 6) - 1900;
+ bdTime.tm_isdst = -1;
+
+ time1 = mktime (&bdTime);
+
+ bdTime.tm_sec = 0;
+ if (strlen (text2) > 10)
+ {
+ bdTime.tm_min = atoi (text2 + 14);
+ bdTime.tm_hour = atoi (text2 + 11);
+ }
+ else
+ bdTime.tm_min = bdTime.tm_hour = 0;
+ bdTime.tm_mday = atoi (text2);
+ bdTime.tm_mon = atoi (text2 + 3);
+ bdTime.tm_year = atoi (text2 + 6) - 1900;
+ bdTime.tm_isdst = -1;
+
+ time2 = mktime (&bdTime);
+
+ g_print ("Cas1: %s - %d, Cas2: %s - %d\n", text1, time1, text2, time2);
+
+ if (time1 > time2)
+ return (1);
+ else if (time1 < time2)
+ return (-1);
+ else
+ return 0; */
+ }
+
+ return (g_strcasecmp (text1, text2));
+}
+
+
+static gint ReverseSelection (gconstpointer a, gconstpointer b)
+{
+ gchar *buf1, *buf2;
+ gint index1, index2;
+ gint row1 = GPOINTER_TO_INT (a);
+ gint row2 = GPOINTER_TO_INT (b);
+
+ gtk_clist_get_text (GTK_CLIST (cal.notesClist), row1, 0, &buf1);
+ gtk_clist_get_text (GTK_CLIST (cal.notesClist), row2, 0, &buf2);
+
+ index1 = atoi (buf1);
+ index2 = atoi (buf2);
+
+ if (index1 < index2)
+ return (1);
+ else if (index1 > index2)
+ return (-1);
+ else
+ return (0);
+}
+
+
+static gint AddCalendarNote(GSM_CalendarNote *cnote)
+{
+ GSM_Error error;
+ PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ D_CalendarNote *dnote = (D_CalendarNote *)g_malloc(sizeof(D_CalendarNote));
+
+ dnote->entry = cnote;
+ e->event = Event_WriteCalendarNote;
+ e->data = dnote;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&calendarMutex);
+ pthread_cond_wait (&calendarCond, &calendarMutex);
+ pthread_mutex_unlock (&calendarMutex);
+
+#ifdef XDEBUG
+ g_print ("Saving calendar note\n");
+#endif
+
+ error = dnote->status;
+ g_free (dnote);
+
+ if (error != GE_NONE)
+ {
+ gchar *buf = g_strdup_printf (_("Saving failed failed\n(error=%d)"), error);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ g_free (buf);
+ }
+ else
+ g_print ("Note saved\n");
+
+ return (error);
+}
+
+static void OkAddReminderDialog (GtkWidget *widget, gpointer data)
+{
+ GSM_CalendarNote note;
+
+ note.Type = GCN_REMINDER;
+ note.Location = 0;
+ strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
+ note.Time.Year = ((AddDialogData *)data)->date.year;
+ note.Time.Month = ((AddDialogData *)data)->date.month;
+ note.Time.Day = ((AddDialogData *)data)->date.day;
+ note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
+ if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
+ note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
+ note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
+ note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
+ note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
+ note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
+ note.Alarm.Second = note.Alarm.Timezone = 0;
+ } else {
+ note.Alarm.Year = 0;
+ }
+ AddCalendarNote(¬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, "<Branch>"},
+ { NULL, "<control>R", ReadCalNotes, 0, NULL},
+ { NULL, "<control>S", NULL, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>X", NULL, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>I", NULL, 0, NULL},
+ { NULL, "<control>E", NULL, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseCalendar, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>N", AddReminder, 0, NULL},
+ { NULL, "<control>C", AddCall, 0, NULL},
+ { NULL, "<control>M", AddMeeting, 0, NULL},
+ { NULL, "<control>B", AddBirthday, 0, NULL},
+ { NULL, NULL, NULL, 0, NULL},
+ { NULL, "<control>D", DeleteNote, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>A", NULL, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+ menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+ menu_items[3].path = g_strdup (_("/File/Sep1"));
+ menu_items[4].path = g_strdup (_("/File/Send via S_MS"));
+ menu_items[5].path = g_strdup (_("/File/Sep2"));
+ menu_items[6].path = g_strdup (_("/File/_Import from file"));
+ menu_items[7].path = g_strdup (_("/File/_Export to file"));
+ menu_items[8].path = g_strdup (_("/File/Sep3"));
+ menu_items[9].path = g_strdup (_("/File/_Close"));
+ menu_items[10].path = g_strdup (_("/_Edit"));
+ menu_items[11].path = g_strdup (_("/Edit/Add _reminder"));
+ menu_items[12].path = g_strdup (_("/Edit/Add _call"));
+ menu_items[13].path = g_strdup (_("/Edit/Add _meeting"));
+ menu_items[14].path = g_strdup (_("/Edit/Add _birthday"));
+ menu_items[15].path = g_strdup (_("/Edit/_Edit"));
+ menu_items[16].path = g_strdup (_("/Edit/_Delete"));
+ menu_items[17].path = g_strdup (_("/Edit/Sep4"));
+ menu_items[18].path = g_strdup (_("/Edit/Select _all"));
+ menu_items[19].path = g_strdup (_("/_Help"));
+ menu_items[20].path = g_strdup (_("/Help/_Help"));
+ menu_items[21].path = g_strdup (_("/Help/_About"));
+}
+
+void GUI_CreateCalendarWindow ()
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar, *toolbar, *scrolledWindow, *hpaned;
+ GtkWidget *main_vbox;
+ GdkColormap *cmap;
+ time_t t;
+ struct tm *tm;
+ SortColumn *sColumn;
+ register gint i;
+ gchar *titles[6] = { _("#"), _("Type"), _("Date"), _("Text"),
+ _("Alarm"), _("Number")};
+
+ InitMainMenu ();
+ GUI_CalendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_wmclass (GTK_WINDOW (GUI_CalendarWindow), "CalendarWindow", "Xgnokii");
+ gtk_window_set_title (GTK_WINDOW (GUI_CalendarWindow), _("Calendar"));
+ //gtk_widget_set_usize (GTK_WIDGET (GUI_CalendarWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (GUI_CalendarWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_CalendarWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_CalendarWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_CalendarWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+ NewPixmap(Read_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ReadCalNotes, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+ NewPixmap(Send_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send via SMS"), NULL,
+ NewPixmap(SendSMS_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+ NewPixmap(Open_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+ NewPixmap(Save_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit note"), NULL,
+ NewPixmap(Edit_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add reminder"), NULL,
+ NewPixmap(NewRem_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) AddReminder, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add call"), NULL,
+ NewPixmap(NewCall_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) AddCall, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add meeting"), NULL,
+ NewPixmap(NewMeet_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) AddMeeting, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add birthday"), NULL,
+ NewPixmap(NewBD_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) AddBirthday, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete note"), NULL,
+ NewPixmap(Delete_xpm, GUI_CalendarWindow->window,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) DeleteNote, NULL);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ hpaned = gtk_hpaned_new ();
+ //gtk_paned_set_handle_size (GTK_PANED (hpaned), 10);
+ //gtk_paned_set_gutter_size (GTK_PANED (hpaned), 15);
+ gtk_box_pack_start (GTK_BOX (main_vbox), hpaned, TRUE, TRUE, 0);
+ gtk_widget_show (hpaned);
+
+ /* Note viewer */
+ cal.noteText = gtk_text_new (NULL, NULL);
+ gtk_text_set_editable (GTK_TEXT (cal.noteText), FALSE);
+ gtk_text_set_word_wrap (GTK_TEXT (cal.noteText), TRUE);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
+
+ gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.noteText);
+ gtk_widget_show_all (scrolledWindow);
+
+ /* Calendar */
+ cal.calendar = gtk_calendar_new ();
+
+ t = time (NULL);
+ tm = localtime (&t);
+ gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), tm->tm_mon, tm->tm_year + 1900);
+ gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), tm->tm_mday);
+
+ gtk_paned_add2 (GTK_PANED (hpaned), cal.calendar);
+ gtk_widget_show (cal.calendar);
+
+ /* Notes list */
+ cal.notesClist = gtk_clist_new_with_titles (6, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (cal.notesClist), GTK_SHADOW_OUT);
+ gtk_clist_set_compare_func (GTK_CLIST (cal.notesClist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (cal.notesClist), 0);
+ gtk_clist_set_sort_type (GTK_CLIST (cal.notesClist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (cal.notesClist), FALSE);
+ gtk_clist_set_selection_mode (GTK_CLIST (cal.notesClist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 0, 15);
+ gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 1, 52);
+ gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 2, 110);
+ gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 3, 130);
+ gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 4, 110);
+ gtk_clist_set_column_justification (GTK_CLIST (cal.notesClist), 0, GTK_JUSTIFY_RIGHT);
+
+ for (i = 0; i < 6; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ gtk_main_quit ();
+ }
+ sColumn->clist = cal.notesClist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (cal.notesClist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (cal.notesClist), "select_row",
+ GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_usize (scrolledWindow, 550, 100);
+ gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.notesClist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ gtk_box_pack_end (GTK_BOX (main_vbox), scrolledWindow,
+ TRUE, TRUE, 0);
+
+ gtk_widget_show (cal.notesClist);
+ gtk_widget_show (scrolledWindow);
+
+ cmap = gdk_colormap_get_system();
+ cal.colour.red = 0xffff;
+ cal.colour.green = 0;
+ cal.colour.blue = 0;
+ if (!gdk_color_alloc (cmap, &(cal.colour)))
+ g_error (_("couldn't allocate colour"));
+
+ questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_CalendarWindow->window,
+ &questMark.mask,
+ &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL],
+ quest_xpm);
+
+ CreateErrorDialog (&errorDialog, GUI_CalendarWindow);
+}
--- /dev/null
+/*
+
+ 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
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "xgnokii_cfg.h"
+#include "xgnokii.h"
+
+ConfigEntry config[] = {
+ {"name", &(xgnokiiConfig.user.name)},
+ {"title", &(xgnokiiConfig.user.title)},
+ {"company", &(xgnokiiConfig.user.company)},
+ {"telephone", &(xgnokiiConfig.user.telephone)},
+ {"fax", &(xgnokiiConfig.user.fax)},
+ {"email", &(xgnokiiConfig.user.email)},
+ {"address", &(xgnokiiConfig.user.address)},
+ {"viewer", &(xgnokiiConfig.helpviewer)},
+ {"mailbox", &(xgnokiiConfig.mailbox)},
+ {"simlen", &(xgnokiiConfig.maxSIMLen)},
+ {"phonelen", &(xgnokiiConfig.maxPhoneLen)},
+ {"", NULL}
+};
+
+
+static void GetDefaultValues ()
+{
+ gchar *homedir;
+
+ xgnokiiConfig.user.name = g_strdup ("");
+ xgnokiiConfig.user.title = g_strdup ("");
+ xgnokiiConfig.user.company = g_strdup ("");
+ xgnokiiConfig.user.telephone = g_strdup ("");
+ xgnokiiConfig.user.fax = g_strdup ("");
+ xgnokiiConfig.user.email = g_strdup ("");
+ xgnokiiConfig.user.address = g_strdup ("");
+ xgnokiiConfig.helpviewer = g_strdup ("netscape");
+ if ((homedir = g_get_home_dir ()) == NULL)
+ homedir = "";
+ xgnokiiConfig.mailbox = g_strdup_printf ("%s/Mail/smsbox", homedir);
+ xgnokiiConfig.maxSIMLen = g_strdup ("14");
+ xgnokiiConfig.maxPhoneLen = g_strdup ("16");
+}
+
+
+void GUI_ReadXConfig ()
+{
+ FILE *file;
+ gchar *line;
+ gchar *homedir;
+ gchar *rcfile;
+ gchar *current;
+ register gint len;
+ register gint i;
+
+ GetDefaultValues ();
+
+#ifdef WIN32
+/* homedir = getenv("HOMEDRIVE");
+ g_strconcat(homedir, getenv("HOMEPATH"), NULL); */
+ homedir = g_get_home_dir ();
+ rcfile=g_strconcat(homedir, "\\_xgnokiirc", NULL);
+#else
+ if ((homedir = g_get_home_dir ()) == NULL)
+ {
+ g_print (_("WARNING: Can't find HOME enviroment variable!\n"));
+ return;
+ }
+
+ if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+ {
+ g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+ return;
+ }
+#endif
+
+ if ((file = fopen (rcfile, "r")) == NULL)
+ {
+ g_free (rcfile);
+ return;
+ }
+
+ g_free (rcfile);
+
+ if ((line = (char *) g_malloc (255)) == NULL)
+ {
+ g_print (_("WARNING: Can't allocate memory for config reading!\n"));
+ fclose (file);
+ return;
+ }
+
+ while (fgets (line, 255, file) != NULL)
+ {
+ gint v;
+ current = line;
+
+ /* Strip leading, trailing whitespace */
+ while (isspace ((gint) *current))
+ current++;
+
+ while ((strlen (current) > 0) && isspace ((gint) current[strlen (current) - 1]))
+ current[strlen (current) - 1] = '\0';
+
+ /* Ignore blank lines and comments */
+
+ if ((*current == '\n') || (*current == '\0') || (*current == '#'))
+ continue;
+
+ i = 0;
+ while (*config[i].key != '\0')
+ {
+ len = strlen (config[i].key);
+ if (g_strncasecmp (config[i].key, current, len) == 0)
+ {
+ current += len;
+ while (isspace ((int) *current))
+ current++;
+ if (*current == '=')
+ {
+ current++;
+ while(isspace ((int) *current))
+ current++;
+ g_free (*config[i].value);
+ switch (i)
+ {
+ case 3:
+ case 4:
+ *config[i].value = g_strndup (current, max_phonebook_number_length);
+ break;
+
+ case 7:
+ *config[i].value = g_strndup (current, HTMLVIEWER_LENGTH);
+ break;
+
+ case 8:
+ *config[i].value = g_strndup (current, MAILBOX_LENGTH);
+ break;
+
+ case 9:
+ case 10:
+ v = atoi (current);
+ if ( v > 0 && v < 100 )
+ *config[i].value = g_strndup (current, 3);
+ break;
+
+ default:
+ *config[i].value = g_strndup (current, MAX_BUSINESS_CARD_LENGTH);
+ break;
+ }
+ }
+ }
+ i++;
+ }
+ }
+
+ fclose (file);
+ g_free (line);
+}
+
+
+gint GUI_SaveXConfig ()
+{
+ FILE *file;
+ gchar *line;
+ gchar *homedir;
+ gchar *rcfile;
+ register gint i;
+
+ if ((homedir = getenv ("HOME")) == NULL)
+ {
+ g_print (_("ERROR: Can't find HOME enviroment variable!\n"));
+ return (1);
+ }
+
+ if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL)
+ {
+ g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+ return (2);
+ }
+
+ if ((file = fopen (rcfile, "w")) == NULL)
+ {
+ g_print (_("ERROR: Can't open file %s for writing!\n"), rcfile);
+ g_free (rcfile);
+ return (3);
+ }
+
+ g_free (rcfile);
+
+ i = 0;
+ while (*config[i].key != '\0')
+ {
+ if ((line = g_strdup_printf ("%s = %s\n", config[i].key, *config[i].value)) == NULL)
+ {
+ g_print (_("ERROR: Can't allocate memory for config writing!\n"));
+ fclose (file);
+ return (2);
+ }
+ if (fputs (line, file) == EOF)
+ {
+ g_print (_("ERROR: Can't write config file!\n"));
+ g_free (line);
+ fclose (file);
+ return (4);
+ }
+ g_free (line);
+ i++;
+ }
+
+ fclose (file);
+ return (0);
+}
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_CFG_H
+#define XGNOKII_CFG_H
+
+#include <gtk/gtk.h>
+#include "xgnokii.h"
+
+#define HTMLVIEWER_LENGTH 200
+#define MAILBOX_LENGTH 200
+
+typedef struct {
+ gchar key[10];
+ gchar **value;
+} ConfigEntry;
+
+extern void GUI_ReadXConfig();
+extern gint GUI_SaveXConfig();
+
+#endif
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef WIN32
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/wait.h>
+# include <signal.h>
+#endif
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h" /* for _() */
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xpm/quest.xpm"
+#include "xpm/stop.xpm"
+#include "xpm/info.xpm"
+
+typedef struct {
+ GUIEventType type;
+ void (*func)(void);
+} GUIEvent;
+
+static GSList *guiEvents = NULL;
+
+
+inline void DeleteEvent (const GtkWidget *widget, const GdkEvent *event, const gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (widget));
+}
+
+
+inline void CancelDialog (const GtkWidget *widget, const gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+void CreateErrorDialog (ErrorDialog *errorDialog, GtkWidget *window)
+{
+ GtkWidget *button, *hbox, *pixmap;
+
+ errorDialog->dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (errorDialog->dialog), _("Error"));
+ gtk_window_set_modal (GTK_WINDOW (errorDialog->dialog), TRUE);
+ gtk_window_position (GTK_WINDOW (errorDialog->dialog), GTK_WIN_POS_MOUSE);
+ gtk_container_set_border_width (GTK_CONTAINER (errorDialog->dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (errorDialog->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (errorDialog->dialog)->action_area),
+ button, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) errorDialog->dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (errorDialog->dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ if (window)
+ {
+ pixmap = NewPixmap (stop_xpm, window->window,
+ &window->style->bg[GTK_STATE_NORMAL]);
+ gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show (pixmap);
+ }
+
+ errorDialog->text = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX(hbox), errorDialog->text, FALSE, FALSE, 10);
+ gtk_widget_show (errorDialog->text);
+}
+
+
+void CreateInfoDialog (InfoDialog *infoDialog, GtkWidget *window)
+{
+ GtkWidget *hbox, *pixmap;
+
+ infoDialog->dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (infoDialog->dialog), _("Info"));
+ gtk_window_set_modal (GTK_WINDOW (infoDialog->dialog), TRUE);
+ gtk_window_position (GTK_WINDOW (infoDialog->dialog), GTK_WIN_POS_MOUSE);
+ gtk_container_set_border_width (GTK_CONTAINER (infoDialog->dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (infoDialog->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (infoDialog->dialog)->vbox), hbox);
+ gtk_widget_show_now (hbox);
+
+ if (window)
+ {
+ pixmap = NewPixmap (info_xpm, window->window,
+ &window->style->bg[GTK_STATE_NORMAL]);
+ gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show_now (pixmap);
+ }
+
+ infoDialog->text = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX(hbox), infoDialog->text, FALSE, FALSE, 10);
+ gtk_widget_show_now (infoDialog->text);
+}
+
+
+void CreateYesNoDialog (YesNoDialog *yesNoDialog, const GtkSignalFunc yesFunc,
+ const GtkSignalFunc noFunc, GtkWidget *window)
+{
+ GtkWidget *button, *hbox, *pixmap;
+
+ yesNoDialog->dialog = gtk_dialog_new ();
+ gtk_window_position (GTK_WINDOW (yesNoDialog->dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal (GTK_WINDOW (yesNoDialog->dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (yesNoDialog->dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (yesNoDialog->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+
+ button = gtk_button_new_with_label (_("Yes"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+ button, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (yesFunc), (gpointer) yesNoDialog->dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("No"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+ button, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (noFunc), (gpointer) yesNoDialog->dialog);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area),
+ button, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) yesNoDialog->dialog);
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (yesNoDialog->dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ if (window)
+ {
+ pixmap = NewPixmap (quest_xpm, window->window,
+ &window->style->bg[GTK_STATE_NORMAL]);
+ gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show (pixmap);
+ }
+
+ yesNoDialog->text = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (hbox), yesNoDialog->text, FALSE, FALSE, 10);
+ gtk_widget_show (yesNoDialog->text);
+}
+
+
+GtkWidget* NewPixmap (gchar **data, GdkWindow *window, GdkColor *background)
+{
+ GtkWidget *wpixmap;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+
+ pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, background, data);
+
+ wpixmap = gtk_pixmap_new (pixmap, mask);
+
+ return wpixmap;
+}
+
+
+gint LaunchProcess (const gchar *p, const gchar *arg, const gint infile,
+ const gint outfile, const gint errfile)
+{
+ pid_t pid;
+
+ if (p == 0)
+ return (1);
+ pid = fork ();
+ if (pid == -1)
+ return (-1);
+ if (pid == 0)
+ {
+ pid = getpid ();
+ setpgid (pid, pid);
+ if (getuid () != geteuid ())
+ seteuid (getuid ());
+
+ signal (SIGINT, SIG_DFL);
+ signal (SIGQUIT, SIG_DFL);
+ signal (SIGTSTP, SIG_DFL);
+ signal (SIGTTIN, SIG_DFL);
+ signal (SIGTTOU, SIG_DFL);
+ signal (SIGCHLD, SIG_DFL);
+
+ if (infile != STDIN_FILENO)
+ {
+ dup2 (infile, STDIN_FILENO);
+ close (infile);
+ }
+ if (outfile != STDOUT_FILENO)
+ {
+ dup2 (outfile, STDOUT_FILENO);
+ close (outfile);
+ }
+ if (errfile != STDERR_FILENO)
+ {
+ dup2 (errfile, STDERR_FILENO);
+ close (errfile);
+ }
+
+ execlp (p, p, arg, NULL);
+ g_print (_("Can't exec %s\n"), p);
+ execlp ("/bin/false", p, NULL);
+ return (-1);
+ }
+
+ setpgid (pid, pid);
+ return (0);
+}
+
+
+void RemoveZombie (const gint sign)
+{
+ gint status;
+
+ wait (&status);
+}
+
+
+void Help (const GtkWidget *w, const gpointer data)
+{
+ gchar buf[255] = "file:";
+
+ strncat (buf, xgnokiiConfig.xgnokiidocsdir, 255 - strlen (buf));
+ buf[254] = '\0';
+ strncat (buf, (gchar *) data, 255 - strlen (buf));
+ buf[254] = '\0';
+ LaunchProcess (xgnokiiConfig.helpviewer, buf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO);
+}
+
+
+inline gint strrncmp (const gchar * const s1, const gchar * const s2, size_t n)
+{
+ gint l1 = strlen (s1);
+ gint l2 = strlen (s2);
+
+ if (l1 == 0 && l2 != 0)
+ return (-1);
+ else if (l1 != 0 && l2 == 0)
+ return (1);
+
+ while (l1-- > 0 && l2-- > 0 && n-- > 0)
+ {
+ if (s1[l1] < s2[l2])
+ return (-1);
+ else if (s1[l1] > s2[l2])
+ return (1);
+ }
+
+ return (0);
+}
+
+
+inline void GUI_Refresh (void)
+{
+ while (gtk_events_pending())
+ gtk_main_iteration();
+}
+
+
+inline void SetSortColumn (GtkWidget *widget, SortColumn *data)
+{
+ gtk_clist_set_sort_column (GTK_CLIST (data->clist), data->column);
+ gtk_clist_sort (GTK_CLIST (data->clist));
+}
+
+
+inline void GUIEventAdd (GUIEventType type, void (*func)(void))
+{
+ GUIEvent *event = g_malloc (sizeof (GUIEvent));
+
+ event->type = type;
+ event->func = func;
+
+ guiEvents = g_slist_append (guiEvents, event);
+}
+
+
+bool GUIEventRemove (GUIEventType type, void (*func)(void))
+{
+ GUIEvent event;
+ GSList *list;
+
+ event.type = type;
+ event.func = func;
+
+ list = g_slist_find (guiEvents, &event);
+ if (list)
+ {
+ g_print ("Nasiel som\n");
+ guiEvents = g_slist_remove_link (guiEvents, list);
+ g_slist_free_1 (list);
+ return (TRUE);
+ }
+
+ return (FALSE);
+}
+
+static inline void CallEvent (gpointer data, gpointer user_data)
+{
+ GUIEvent *event = (GUIEvent *) data;
+
+ if (event->type == GPOINTER_TO_INT (user_data))
+ event->func ();
+}
+
+inline void GUIEventSend (GUIEventType type)
+{
+ g_slist_foreach (guiEvents, CallEvent, GINT_TO_POINTER (type));
+}
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_COMMON_H
+#define XGNOKII_COMMON_H
+
+#include <gtk/gtk.h>
+#include <stdlib.h> /* for size_t */
+
+typedef struct {
+ GtkWidget *clist;
+ gint column;
+} SortColumn;
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *text;
+} ErrorDialog;
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *text;
+} InfoDialog;
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *text;
+} YesNoDialog;
+
+typedef struct {
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+} QuestMark;
+
+typedef enum {
+ GUI_EVENT_CONTACTS_CHANGED,
+ GUI_EVENT_CALLERS_GROUPS_CHANGED,
+ GUI_EVENT_SMS_NUMBER_CHANGED,
+ GUI_EVENT_SMS_CENTERS_CHANGED,
+ GUI_EVENT_NETMON_CHANGED,
+ GUI_EVENT_SMS_FOLDERS_CHANGED
+} GUIEventType;
+
+extern void CancelDialog (const GtkWidget *, const gpointer);
+extern void CreateErrorDialog (ErrorDialog *, GtkWidget *);
+extern void CreateInfoDialog (InfoDialog *, GtkWidget *);
+extern void CreateYesNoDialog (YesNoDialog *, const GtkSignalFunc,
+ const GtkSignalFunc, GtkWidget *);
+extern GtkWidget* NewPixmap (gchar **, GdkWindow *, GdkColor *);
+extern void DeleteEvent (const GtkWidget *, const GdkEvent *, const gpointer );
+extern gint LaunchProcess (const gchar *, const gchar *, const gint,
+ const gint, const gint);
+extern void RemoveZombie (const gint);
+extern void Help (const GtkWidget *, const gpointer);
+extern gint strrncmp (const gchar * const, const gchar * const, size_t);
+extern gchar *GetModel (const gchar *);
+extern bool CallerGroupSupported (const gchar *);
+extern bool NetmonitorSupported (const gchar *);
+extern bool KeyboardSupported (const gchar *);
+extern bool SMSSupported (const gchar *);
+extern bool CalendarSupported (const gchar *);
+extern bool DTMFSupported (const gchar *);
+extern bool DataSupported (const gchar *);
+extern bool SpeedDialSupported (const gchar *);
+extern void GUI_Refresh (void);
+extern void SetSortColumn (GtkWidget *, SortColumn *);
+extern void GUIEventAdd (GUIEventType, void (*)(void));
+extern bool GUIEventRemove (GUIEventType, void (*)(void));
+extern void GUIEventSend (GUIEventType);
+#endif
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ $Id$
+
+*/
+
+
+#include "misc.h"
+
+#include <stdio.h>
+#include <pthread.h>
+
+#ifndef WIN32
+# include <unistd.h>
+#else
+# include <windows.h>
+# define sleep(x) Sleep((x) * 1000)
+# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000))
+# define index strchr
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#if __unices__
+# include <strings.h>
+#endif
+#include <gtk/gtk.h>
+
+#include "gsm-api.h"
+#include "gsm-common.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_sms.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/New.xpm"
+#include "xpm/Duplicate.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/Dial.xpm"
+#include "xpm/sim.xpm"
+#include "xpm/phone.xpm"
+#include "xpm/quest.xpm"
+
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *entry;
+} DialVoiceDialog;
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *entry;
+ gint row;
+ GtkWidget *gbutton;
+ GtkWidget *mbutton;
+ GtkWidget *wbutton;
+ GtkWidget *fbutton;
+ GtkWidget *hbutton;
+ PhonebookEntry *pbEntry;
+} ExtPbkDialog;
+
+static GtkWidget *GUI_ContactsWindow;
+static bool fbus3810;
+static bool contactsMemoryInitialized;
+static MemoryStatus memoryStatus;
+static ContactsMemory contactsMemory; /* Hold contacts. */
+static GtkWidget *clist;
+static StatusInfo statusInfo;
+static ProgressDialog progressDialog = {NULL, NULL, NULL};
+static ErrorDialog errorDialog = {NULL, NULL};
+static FindEntryStruct findEntryStruct = { "", 0};
+static ExportDialogData exportDialogData = {NULL};
+static MemoryPixmaps memoryPixmaps;
+static QuestMark questMark;
+static EditEntryData newEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditEntryData editEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditEntryData duplicateEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static EditNumbersData editNumbersData = {NULL, NULL};
+
+/* return != 0 if user has unsaved changes in contacts memory */
+inline gint GUI_ContactsIsChanged (void)
+{
+ return statusInfo.ch_ME | statusInfo.ch_SM;
+}
+
+
+/* return TRUE if Contacts memory was read from phone or from file */
+inline bool GUI_ContactsIsIntialized (void)
+{
+ return contactsMemoryInitialized;
+}
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/help/%s/windows/contacts/index.html", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+void RefreshStatusInfo (void)
+{
+ char p,s;
+
+ if (statusInfo.ch_ME)
+ p = '*';
+ else
+ p = ' ';
+
+ if (statusInfo.ch_SM)
+ s = '*';
+ else
+ s = ' ';
+ g_snprintf(statusInfo.text, STATUS_INFO_LENGTH, "SIM: %d/%d%c Phone: %d/%d%c",
+ memoryStatus.UsedSM, memoryStatus.MaxSM, s,
+ memoryStatus.UsedME, memoryStatus.MaxME, p);
+ gtk_label_set_text(GTK_LABEL (statusInfo.label), statusInfo.text);
+}
+
+
+static inline void SetGroup0 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 0;
+}
+
+
+static inline void SetGroup1 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 1;
+}
+
+
+static inline void SetGroup2 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 2;
+}
+
+
+static inline void SetGroup3 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 3;
+}
+
+
+static inline void SetGroup4 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 4;
+}
+
+
+static inline void SetGroup5 (GtkWidget *item, gpointer data)
+{
+ ((EditEntryData *) data)->newGroup = 5;
+}
+
+
+PhonebookEntry *FindFreeEntry (GSM_MemoryType type)
+{
+ PhonebookEntry *entry;
+ gint start, end;
+ register gint i;
+
+ if (type == GMT_ME)
+ {
+ if (memoryStatus.FreeME == 0)
+ return NULL;
+ start = 0;
+ end = memoryStatus.MaxME;
+ }
+ else
+ {
+ if (memoryStatus.FreeSM == 0)
+ return NULL;
+ start = memoryStatus.MaxME;
+ end = memoryStatus.MaxME + memoryStatus.MaxSM;
+ }
+
+ for(i = start; i < end; i++)
+ {
+ entry = g_ptr_array_index(contactsMemory, i);
+ if (entry->status == E_Empty || entry->status == E_Deleted)
+ return entry;
+ }
+
+ return NULL;
+}
+
+
+inline PhonebookEntry *GUI_GetEntry (GSM_MemoryType type, gint nr)
+{
+ if ((type == GMT_ME && (nr < 1 || nr >= memoryStatus.MaxME)) ||
+ (type == GMT_SM && (nr < 1 || nr >= memoryStatus.MaxSM)))
+ return NULL;
+
+ if (type == GMT_ME)
+ return g_ptr_array_index (contactsMemory, nr - 1);
+ else
+ return g_ptr_array_index (contactsMemory, nr + memoryStatus.MaxME - 1);
+}
+
+
+static void CloseContacts (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_ContactsWindow);
+}
+
+
+/* I don't want to allow window to close */
+static void ProgressDialogDeleteEvent (GtkWidget *w, gpointer data)
+{
+ return;
+}
+
+
+static void CancelEditDialog (GtkWidget *widget, gpointer data )
+{
+ gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog));
+}
+
+
+
+static void OkEditEntryDialog (GtkWidget *widget, gpointer data)
+{
+ gchar *clist_row[4];
+ PhonebookEntry *entry;
+
+ if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active &&
+ ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM)
+ {
+ if ((entry = FindFreeEntry(GMT_ME)) == NULL)
+ {
+ gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ strncpy(entry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_name_length);
+ entry->entry.Name[max_phonebook_name_length] = '\0';
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(entry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_number_length);
+ entry->entry.Name[max_phonebook_number_length] = '\0';
+ }
+
+ entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ entry->status = E_Changed;
+
+ ((EditEntryData*) data)->pbEntry->status = E_Deleted;
+
+ memoryStatus.UsedME++;
+ memoryStatus.FreeME--;
+ memoryStatus.UsedSM--;
+ memoryStatus.FreeSM++;
+ statusInfo.ch_ME = statusInfo.ch_SM = 1;
+
+ ((EditEntryData*) data)->pbEntry = entry;
+ }
+ else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active &&
+ ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ {
+ if ((entry = FindFreeEntry(GMT_SM)) == NULL)
+ {
+ gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ strncpy(entry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_sim_name_length);
+ entry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+ if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+ {
+ gtk_label_set_text( GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\
+because you save it into SIM memory!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(entry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_sim_number_length);
+ entry->entry.Name[max_phonebook_sim_number_length] = '\0';
+ }
+
+ entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ entry->status = E_Changed;
+
+ ((EditEntryData*) data)->pbEntry->status = E_Deleted;
+
+ memoryStatus.UsedME--;
+ memoryStatus.FreeME++;
+ memoryStatus.UsedSM++;
+ memoryStatus.FreeSM--;
+ statusInfo.ch_ME = statusInfo.ch_SM = 1;
+
+ ((EditEntryData*) data)->pbEntry = entry;
+ }
+ else
+ {
+ if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active)
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_name_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0';
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_number_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0';
+ }
+ }
+ else
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_sim_name_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+ if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\
+because you save it into SIM memory!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_sim_number_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0';
+ }
+ }
+
+ ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ ((EditEntryData*) data)->pbEntry->status = E_Changed;
+
+ if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ statusInfo.ch_ME = 1;
+ else
+ statusInfo.ch_SM = 1;
+ }
+
+ gtk_widget_hide (GTK_WIDGET(((EditEntryData*) data)->dialog));
+
+ RefreshStatusInfo ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_remove (GTK_CLIST (clist), ((EditEntryData*) data)->row);
+
+ clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name;
+
+ clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number;
+
+ if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ clist_row[2] = "P";
+ else
+ clist_row[2] = "S";
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group];
+ else
+ clist_row[3] = "";
+ gtk_clist_insert(GTK_CLIST (clist), ((EditEntryData*) data)->row, clist_row);
+ if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+ gtk_clist_set_row_data(GTK_CLIST (clist), ((EditEntryData*) data)->row, (gpointer) ((EditEntryData*) data)->pbEntry);
+
+ gtk_clist_sort(GTK_CLIST (clist));
+ gtk_clist_thaw(GTK_CLIST (clist));
+}
+
+
+static void OkDeleteEntryDialog(GtkWidget *widget, gpointer data )
+{
+ PhonebookEntry *pbEntry;
+ GList *sel;
+ gint row;
+
+ sel = GTK_CLIST (clist)->selection;
+
+ gtk_clist_freeze(GTK_CLIST (clist));
+
+ while (sel != NULL)
+ {
+ row = GPOINTER_TO_INT(sel->data);
+ pbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row);
+ sel = sel->next;
+
+ pbEntry->status = E_Deleted;
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ {
+ memoryStatus.UsedME--;
+ memoryStatus.FreeME++;
+ statusInfo.ch_ME = 1;
+ }
+ else
+ {
+ memoryStatus.UsedSM--;
+ memoryStatus.FreeSM++;
+ statusInfo.ch_SM = 1;
+ }
+
+ gtk_clist_remove(GTK_CLIST (clist), row);
+ }
+
+ RefreshStatusInfo ();
+
+ gtk_widget_hide(GTK_WIDGET (data));
+
+ gtk_clist_thaw(GTK_CLIST (clist));
+}
+
+
+static void OkNewEntryDialog(GtkWidget *widget, gpointer data )
+{
+ gchar *clist_row[4];
+ PhonebookEntry *entry;
+
+ if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active &&
+ ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM)
+ {
+ if ((entry = FindFreeEntry (GMT_ME)) == NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ strncpy(entry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_name_length);
+ entry->entry.Name[max_phonebook_name_length] = '\0';
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(entry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_number_length);
+ entry->entry.Name[max_phonebook_number_length] = '\0';
+ }
+
+ entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ entry->status = E_Changed;
+
+ ((EditEntryData*) data)->pbEntry = entry;
+ }
+ else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active &&
+ ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ {
+ if ((entry = FindFreeEntry (GMT_SM)) == NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ strncpy(entry->entry.Name,
+ gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_sim_name_length);
+ entry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+ if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\
+because you save it into SIM memory!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(entry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_sim_number_length);
+ entry->entry.Name[max_phonebook_sim_number_length] = '\0';
+ }
+
+ entry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ entry->status = E_Changed;
+
+ ((EditEntryData*) data)->pbEntry = entry;
+ }
+ else
+ {
+ if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active)
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_name_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0';
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy(((EditEntryData*) data)->pbEntry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_number_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0';
+ }
+ }
+ else
+ {
+ strncpy (((EditEntryData*) data)->pbEntry->entry.Name,
+ gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)),
+ max_phonebook_sim_name_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+
+ if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\
+because you save it into SIM memory!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ }
+ else
+ {
+ strncpy (((EditEntryData*) data)->pbEntry->entry.Number,
+ gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)),
+ max_phonebook_sim_number_length);
+ ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0';
+ }
+ }
+
+ ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup;
+
+ ((EditEntryData*) data)->pbEntry->status = E_Changed;
+ }
+
+ if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ {
+ memoryStatus.UsedME++;
+ memoryStatus.FreeME--;
+ statusInfo.ch_ME = 1;
+ }
+ else
+ {
+ memoryStatus.UsedSM++;
+ memoryStatus.FreeSM--;
+ statusInfo.ch_SM = 1;
+ }
+
+ gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog));
+
+ RefreshStatusInfo ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name;
+
+ clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number;
+
+ if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ clist_row[2] = "P";
+ else
+ clist_row[2] = "S";
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group];
+ else
+ clist_row[3] = "";
+ gtk_clist_insert (GTK_CLIST (clist), 1, clist_row);
+
+ if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+ gtk_clist_set_row_data (GTK_CLIST (clist), 1, (gpointer) ((EditEntryData*) data)->pbEntry);
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static void OkChangeEntryDialog( GtkWidget *widget, gpointer data)
+{
+ gchar *clist_row[4];
+ gint row;
+ PhonebookEntry *oldPbEntry, *newPbEntry;
+ GList *sel;
+ gchar string[100];
+
+ sel = GTK_CLIST (clist)->selection;
+
+ gtk_widget_hide(GTK_WIDGET (data));
+
+ gtk_clist_freeze(GTK_CLIST (clist));
+
+ while (sel != NULL)
+ {
+ row = GPOINTER_TO_INT (sel->data);
+ oldPbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row);
+
+ sel = sel->next;
+
+ if (oldPbEntry->entry.MemoryType == GMT_SM)
+ {
+ if ((newPbEntry = FindFreeEntry (GMT_ME)) == NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ newPbEntry->entry = oldPbEntry->entry;
+ newPbEntry->entry.MemoryType = GMT_ME;
+
+ newPbEntry->status = E_Changed;
+ oldPbEntry->status = E_Deleted;
+
+ memoryStatus.UsedME++;
+ memoryStatus.FreeME--;
+ memoryStatus.UsedSM--;
+ memoryStatus.FreeSM++;
+ statusInfo.ch_ME = statusInfo.ch_SM = 1;
+
+ }
+ else
+ {
+ if ((newPbEntry = FindFreeEntry(GMT_SM)) == NULL)
+ {
+ gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!"));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ newPbEntry->entry = oldPbEntry->entry;
+ newPbEntry->entry.Name[max_phonebook_sim_name_length] = '\0';
+ newPbEntry->entry.MemoryType = GMT_SM;
+
+ newPbEntry->status = E_Changed;
+ oldPbEntry->status = E_Deleted;
+
+ memoryStatus.UsedME--;
+ memoryStatus.FreeME++;
+ memoryStatus.UsedSM++;
+ memoryStatus.FreeSM--;
+ statusInfo.ch_ME = statusInfo.ch_SM = 1;
+ }
+
+ gtk_clist_remove(GTK_CLIST (clist), row);
+
+ clist_row[0] = newPbEntry->entry.Name;
+
+ if (newPbEntry->entry.SubEntriesCount>0) {
+ snprintf(string,100,"%s *",newPbEntry->entry.Number);
+ clist_row[1]=string;
+ } else clist_row[1] = newPbEntry->entry.Number;
+
+ if( newPbEntry->entry.MemoryType == GMT_ME)
+ clist_row[2] = "P";
+ else
+ clist_row[2] = "S";
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ clist_row[3] = xgnokiiConfig.callerGroups[newPbEntry->entry.Group];
+ else
+ clist_row[3] = "";
+ gtk_clist_insert (GTK_CLIST (clist), row, clist_row);
+ if (newPbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+ gtk_clist_set_row_data (GTK_CLIST (clist), row, (gpointer) newPbEntry);
+ }
+
+ RefreshStatusInfo ();
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static void SearchEntry (void)
+{
+ gchar *buf;
+ gchar *entry;
+ gint i;
+
+ if (!contactsMemoryInitialized || *findEntryStruct.pattern == '\0')
+ return;
+
+ gtk_clist_unselect_all( GTK_CLIST (clist));
+ g_strup(findEntryStruct.pattern);
+
+ gtk_clist_get_text( GTK_CLIST (clist), findEntryStruct.lastRow,
+ findEntryStruct.type, &entry);
+ i = (findEntryStruct.lastRow + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM);
+
+ while (findEntryStruct.lastRow != i)
+ {
+ buf = g_strdup (entry);
+ g_strup (buf);
+
+ if (strstr( buf, findEntryStruct.pattern))
+ {
+ g_free(buf);
+ findEntryStruct.lastRow = i;
+ gtk_clist_select_row( GTK_CLIST (clist),
+ (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1)
+ % (memoryStatus.MaxME + memoryStatus.MaxSM),
+ findEntryStruct.type);
+ gtk_clist_moveto( GTK_CLIST (clist),
+ (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1)
+ % (memoryStatus.MaxME + memoryStatus.MaxSM),
+ findEntryStruct.type, 0.5, 0.5);
+ return;
+ }
+ g_free(buf);
+ gtk_clist_get_text (GTK_CLIST (clist), i, findEntryStruct.type, &entry);
+
+ i = (i + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM);
+ }
+
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find pattern!"));
+ gtk_widget_show (errorDialog.dialog);
+}
+
+
+static void OkFindEntryDialog (GtkWidget *widget, gpointer data)
+{
+ if (GTK_TOGGLE_BUTTON (((FindEntryData*) data)->nameB)->active)
+ findEntryStruct.type = FIND_NAME;
+ else
+ findEntryStruct.type = FIND_NUMBER;
+
+ strncpy(findEntryStruct.pattern,
+ gtk_entry_get_text (GTK_ENTRY (((FindEntryData*) data)->pattern)),
+ max_phonebook_number_length);
+ findEntryStruct.pattern[max_phonebook_number_length] = '\0';
+
+ findEntryStruct.lastRow = 0;
+
+ gtk_widget_hide( ((FindEntryData*) data)->dialog);
+
+ SearchEntry ();
+}
+
+
+void CreateGroupMenu (EditEntryData *data)
+{
+ GtkWidget *item;
+
+ if (data->groupMenu)
+ {
+ gtk_option_menu_remove_menu (GTK_OPTION_MENU (data->group));
+ if (GTK_IS_WIDGET (data->groupMenu))
+ gtk_widget_destroy (GTK_WIDGET (data->groupMenu));
+ data->groupMenu = NULL;
+ }
+
+ data->groupMenu = gtk_menu_new ();
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[0]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup0),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[1]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup1),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[2]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup2),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[3]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup3),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[4]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup4),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[5]);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetGroup5),
+ (gpointer) data);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (data->groupMenu), item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (data->group), data->groupMenu);
+}
+
+
+inline void GUI_RefreshGroupMenu (void)
+{
+ if (newEditEntryData.group)
+ CreateGroupMenu (&newEditEntryData);
+
+ if (editEditEntryData.group)
+ CreateGroupMenu (&editEditEntryData);
+
+ if (duplicateEditEntryData.group)
+ CreateGroupMenu (&duplicateEditEntryData);
+}
+
+
+static void EditSubEntries (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+// EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row),
+// row);
+ {
+ gchar *buf;
+
+ gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+ g_print (buf);
+ }
+}
+
+
+static void EditNumbers (GtkWidget *widget, void *data)
+{
+ GtkWidget *button, *clistScrolledWindow;
+ gchar *row[3];
+ register gint i;
+
+
+ if (editNumbersData.dialog == NULL)
+ {
+ editNumbersData.dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (editNumbersData.dialog), _("Numbers"));
+ gtk_window_set_modal (GTK_WINDOW (editNumbersData.dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (editNumbersData.dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (editNumbersData.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+// gtk_signal_connect (GTK_OBJECT (button), "clicked",
+// GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("New"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+// gtk_signal_connect (GTK_OBJECT (button), "clicked",
+// GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) editNumbersData.dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox), 5);
+
+ editNumbersData.clist = gtk_clist_new (3);
+ gtk_clist_set_shadow_type (GTK_CLIST (editNumbersData.clist), GTK_SHADOW_OUT);
+
+ gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 0, 4);
+ gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 1, 115);
+ gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 2, 10);
+ //gtk_clist_set_column_justification (GTK_CLIST (editNumbersData.clist), 2, GTK_JUSTIFY_CENTER);
+
+ gtk_signal_connect (GTK_OBJECT (editNumbersData.clist), "select_row",
+ GTK_SIGNAL_FUNC (EditSubEntries), NULL);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), editNumbersData.clist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox),
+ clistScrolledWindow);
+
+ gtk_widget_show (editNumbersData.clist);
+ gtk_widget_show (clistScrolledWindow);
+ }
+
+ gtk_clist_freeze (GTK_CLIST (editNumbersData.clist));
+ gtk_clist_clear (GTK_CLIST (editNumbersData.clist));
+
+ for(i = 0; i < editNumbersData.pbEntry->entry.SubEntriesCount; i++)
+ {
+ if (strcmp (editNumbersData.pbEntry->entry.Number,
+ editNumbersData.pbEntry->entry.SubEntries[i].data.Number) == 0)
+ row[0] = "*";
+ else
+ row[0] = "";
+
+ row[1] = editNumbersData.pbEntry->entry.SubEntries[i].data.Number;
+
+ switch (editNumbersData.pbEntry->entry.SubEntries[i].EntryType)
+ {
+ case GSM_Number:
+ switch (editNumbersData.pbEntry->entry.SubEntries[i].NumberType)
+ {
+ case GSM_General:
+ row[2] = "General";
+ break;
+
+ case GSM_Mobile:
+ row[2] = "Mobile";
+ break;
+
+ case GSM_Work:
+ row[2] = "Work";
+ break;
+
+ case GSM_Fax:
+ row[2] = "Fax";
+ break;
+
+ case GSM_Home:
+ row[2] = "Home";
+ break;
+
+ default:
+ row[2] = "Unknown";
+ break;
+ }
+ break;
+
+ case GSM_Note:
+ row[2] = "Note";
+ break;
+
+ case GSM_Postal:
+ row[2] = "Postal";
+ break;
+
+ case GSM_Email:
+ row[2] = "E-Mail";
+ break;
+
+ case GSM_Name:
+ row[2] = "Name";
+ break;
+
+ default:
+ row[2] = "Unknown";
+ break;
+ }
+
+ gtk_clist_append (GTK_CLIST (editNumbersData.clist), row);
+/* if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+*/
+ }
+
+ gtk_clist_thaw (GTK_CLIST (editNumbersData.clist));
+
+ gtk_widget_show (editNumbersData.dialog);
+}
+
+
+static void CreateEditDialog (EditEntryData *editEntryData, gchar *title,
+ GtkSignalFunc okFunc)
+{
+ GtkWidget *button, *label, *hbox;
+
+ editEntryData->dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (editEntryData->dialog), title);
+ gtk_window_set_modal (GTK_WINDOW (editEntryData->dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (editEntryData->dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (editEntryData->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) editEntryData);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ editEntryData->name = gtk_entry_new_with_max_length (100);
+
+ gtk_box_pack_end(GTK_BOX(hbox), editEntryData->name, FALSE, FALSE, 2);
+ gtk_widget_show (editEntryData->name);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Number:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ button = gtk_button_new ();
+ editEntryData->number = gtk_label_new ("");
+
+ gtk_container_add (GTK_CONTAINER (button), editEntryData->number);
+
+ gtk_box_pack_end(GTK_BOX(hbox), button, TRUE, TRUE, 2);
+
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (EditNumbers), NULL);
+ gtk_widget_show_all (button);
+ }
+ else
+ {
+ editEntryData->number = gtk_entry_new_with_max_length (max_phonebook_number_length);
+ gtk_box_pack_end(GTK_BOX(hbox), editEntryData->number, FALSE, FALSE, 2);
+ gtk_widget_show (editEntryData->number);
+ }
+
+/* if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) {
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+// gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Extended:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+// gtk_widget_show (label);
+
+ editEntryData->extended = gtk_combo_new();
+ gtk_box_pack_end(GTK_BOX(hbox), editEntryData->extended, FALSE, FALSE, 2);
+// gtk_widget_show (editEntryData->extended);
+
+ gtk_signal_connect (GTK_OBJECT (GTK_COMBO(editEntryData->extended)->entry), "activate",
+ GTK_SIGNAL_FUNC (ExtPbkChanged), (gpointer) editEntryData);
+ }
+*/
+
+ editEntryData->memoryBox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox),
+ editEntryData->memoryBox);
+
+ label = gtk_label_new (_("Memory:"));
+ gtk_box_pack_start(GTK_BOX (editEntryData->memoryBox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ editEntryData->memoryTypePhone = gtk_radio_button_new_with_label (NULL, _("phone"));
+ gtk_box_pack_end (GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypePhone, TRUE, FALSE, 2);
+ gtk_widget_show (editEntryData->memoryTypePhone);
+
+ editEntryData->memoryTypeSIM = gtk_radio_button_new_with_label(
+ gtk_radio_button_group (GTK_RADIO_BUTTON (editEntryData->memoryTypePhone)), "SIM");
+ gtk_box_pack_end(GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypeSIM, TRUE, FALSE, 2);
+ gtk_widget_show (editEntryData->memoryTypeSIM);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ editEntryData->groupLabel = gtk_label_new (_("Caller group:"));
+ gtk_box_pack_start (GTK_BOX (hbox), editEntryData->groupLabel, FALSE, FALSE, 2);
+
+ editEntryData->group = gtk_option_menu_new ();
+
+ CreateGroupMenu (editEntryData);
+
+ gtk_box_pack_start (GTK_BOX (hbox), editEntryData->group, TRUE, TRUE, 0);
+}
+
+
+static void EditPbEntry(PhonebookEntry *pbEntry, gint row)
+{
+ if (editEditEntryData.dialog == NULL)
+ CreateEditDialog(&editEditEntryData, _("Edit entry"), OkEditEntryDialog);
+
+ editEditEntryData.pbEntry = pbEntry;
+ editEditEntryData.newGroup = pbEntry->entry.Group;
+ editEditEntryData.row = row;
+ editNumbersData.pbEntry = pbEntry;
+
+ gtk_entry_set_text (GTK_ENTRY (editEditEntryData.name), pbEntry->entry.Name);
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ gtk_label_set_text (GTK_LABEL (editEditEntryData.number), pbEntry->entry.Number);
+ else
+ gtk_entry_set_text (GTK_ENTRY (editEditEntryData.number), pbEntry->entry.Number);
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypePhone), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypeSIM), TRUE);
+
+ gtk_option_menu_set_history( GTK_OPTION_MENU (editEditEntryData.group),
+ pbEntry->entry.Group);
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ gtk_widget_show (editEditEntryData.group);
+ gtk_widget_show (editEditEntryData.groupLabel);
+ }
+ else
+ {
+ gtk_widget_hide (editEditEntryData.group);
+ gtk_widget_hide (editEditEntryData.groupLabel);
+ }
+
+ if (memoryStatus.MaxME > 0)
+ gtk_widget_show (GTK_WIDGET (editEditEntryData.memoryBox));
+ else
+ gtk_widget_hide (GTK_WIDGET (editEditEntryData.memoryBox));
+
+ gtk_widget_show (GTK_WIDGET (editEditEntryData.dialog));
+}
+
+
+void DeletePbEntry (void)
+{
+ static GtkWidget *dialog = NULL;
+ GtkWidget *button, *hbox, *label, *pixmap;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Delete entries"));
+ gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkDeleteEntryDialog), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+ gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show(pixmap);
+
+ label = gtk_label_new(_("Do you want to delete selected entries?"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
+ gtk_widget_show(label);
+ }
+
+ gtk_widget_show(GTK_WIDGET (dialog));
+}
+
+
+void NewPbEntry(PhonebookEntry *pbEntry)
+{
+ if (newEditEntryData.dialog == NULL)
+ CreateEditDialog (&newEditEntryData, _("New entry"), OkNewEntryDialog);
+
+ newEditEntryData.pbEntry = pbEntry;
+ newEditEntryData.newGroup = 5;
+ editNumbersData.pbEntry = pbEntry;
+
+ gtk_entry_set_text (GTK_ENTRY (newEditEntryData.name), "");
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ gtk_label_set_text (GTK_LABEL (newEditEntryData.number), "");
+ else
+ gtk_entry_set_text (GTK_ENTRY (newEditEntryData.number), "");
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypePhone), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypeSIM), TRUE);
+
+ gtk_option_menu_set_history( GTK_OPTION_MENU (newEditEntryData.group),
+ pbEntry->entry.Group);
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ gtk_widget_show (newEditEntryData.group);
+ gtk_widget_show (newEditEntryData.groupLabel);
+ }
+ else
+ {
+ gtk_widget_hide (newEditEntryData.group);
+ gtk_widget_hide (newEditEntryData.groupLabel);
+ }
+
+ if (memoryStatus.MaxME > 0)
+ gtk_widget_show (GTK_WIDGET (newEditEntryData.memoryBox));
+ else
+ gtk_widget_hide (GTK_WIDGET (newEditEntryData.memoryBox));
+
+ gtk_widget_show(GTK_WIDGET (newEditEntryData.dialog));
+}
+
+
+void DuplicatePbEntry (PhonebookEntry *pbEntry)
+{
+ if (duplicateEditEntryData.dialog == NULL)
+ CreateEditDialog (&duplicateEditEntryData, _("Duplicate entry"), OkNewEntryDialog);
+
+ duplicateEditEntryData.pbEntry = pbEntry;
+ duplicateEditEntryData.newGroup = pbEntry->entry.Group;
+ editNumbersData.pbEntry = pbEntry;
+
+ gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.name), pbEntry->entry.Name);
+
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ gtk_label_set_text (GTK_LABEL (duplicateEditEntryData.number), pbEntry->entry.Number);
+ else
+ gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.number), pbEntry->entry.Number);
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypePhone), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypeSIM), TRUE);
+
+ gtk_option_menu_set_history( GTK_OPTION_MENU (duplicateEditEntryData.group),
+ pbEntry->entry.Group);
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ gtk_widget_show (duplicateEditEntryData.group);
+ gtk_widget_show (duplicateEditEntryData.groupLabel);
+ }
+ else
+ {
+ gtk_widget_hide (duplicateEditEntryData.group);
+ gtk_widget_hide (duplicateEditEntryData.groupLabel);
+ }
+
+ if (memoryStatus.MaxME > 0)
+ gtk_widget_show (GTK_WIDGET (duplicateEditEntryData.memoryBox));
+ else
+ gtk_widget_hide (GTK_WIDGET (duplicateEditEntryData.memoryBox));
+
+ gtk_widget_show(GTK_WIDGET (duplicateEditEntryData.dialog));
+}
+
+
+static void EditEntry (void)
+{
+ if (contactsMemoryInitialized)
+ {
+ if (GTK_CLIST (clist)->selection == NULL)
+ return;
+
+ EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist),
+ GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data)),
+ GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data));
+ }
+}
+
+
+static void DuplicateEntry (void)
+{
+ PhonebookEntry *new, *old;
+
+ if (contactsMemoryInitialized)
+ {
+ if (GTK_CLIST (clist)->selection == NULL)
+ return;
+
+ old = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist), GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data));
+
+ if ( old->entry.MemoryType == GMT_ME)
+ {
+ if ((new = FindFreeEntry (GMT_ME)) == NULL)
+ if ((new = FindFreeEntry (GMT_SM)) == NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ }
+ else
+ {
+ if ((new = FindFreeEntry(GMT_SM)) == NULL)
+ if ((new = FindFreeEntry(GMT_ME)) == NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+ }
+
+ new->entry = old->entry;
+
+ DuplicatePbEntry (new);
+ }
+}
+
+
+static void NewEntry (void)
+{
+ PhonebookEntry *entry;
+
+ if (contactsMemoryInitialized)
+ {
+ if ((entry = FindFreeEntry (GMT_SM)) != NULL)
+ NewPbEntry(entry);
+ else if ((entry = FindFreeEntry (GMT_ME)) != NULL)
+ NewPbEntry(entry);
+ else
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory."));
+ gtk_widget_show (errorDialog.dialog);
+ }
+ }
+}
+
+
+static inline void ClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row),
+ row);
+}
+
+
+static inline void DeleteEntry (void)
+{
+ if (contactsMemoryInitialized)
+ {
+ if (GTK_CLIST (clist)->selection == NULL)
+ return;
+
+ DeletePbEntry ();
+ }
+}
+
+
+static void ChMemType (void)
+{
+ static GtkWidget *dialog = NULL;
+ GtkWidget *button, *hbox, *label;
+
+ if (contactsMemoryInitialized)
+ {
+ if (GTK_CLIST (clist)->selection == NULL)
+ return;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Changing memory type"));
+ gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Continue"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkChangeEntryDialog), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("If you change from phone memory to SIM memory\nsome entries may be truncated."));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
+ gtk_widget_show (label);
+ }
+
+ gtk_widget_show (dialog);
+ }
+}
+
+
+static void FindFirstEntry (void)
+{
+ static FindEntryData findEntryData = { NULL };
+ GtkWidget *button, *label, *hbox;
+
+ if (contactsMemoryInitialized)
+ {
+ if (findEntryData.dialog == NULL)
+ {
+ findEntryData.dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (findEntryData.dialog), _("Find"));
+ gtk_window_set_modal (GTK_WINDOW (findEntryData.dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (findEntryData.dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (findEntryData.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Find"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkFindEntryDialog), (gpointer) &findEntryData);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) &findEntryData);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Pattern:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ findEntryData.pattern = gtk_entry_new_with_max_length (max_phonebook_name_length);
+
+ gtk_box_pack_end (GTK_BOX (hbox), findEntryData.pattern, FALSE, FALSE, 2);
+ gtk_widget_show (findEntryData.pattern);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ findEntryData.nameB = gtk_radio_button_new_with_label (NULL, _("Name"));
+ gtk_box_pack_start (GTK_BOX (hbox), findEntryData.nameB, TRUE, FALSE, 2);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (findEntryData.nameB), TRUE);
+ gtk_widget_show (findEntryData.nameB);
+
+ findEntryData.numberB = gtk_radio_button_new_with_label (
+ gtk_radio_button_group (GTK_RADIO_BUTTON (findEntryData.nameB)), _("Number"));
+ gtk_box_pack_start (GTK_BOX(hbox), findEntryData.numberB, TRUE, FALSE, 2);
+ gtk_widget_show (findEntryData.numberB);
+ }
+
+ gtk_widget_show (findEntryData.dialog);
+ }
+}
+
+
+static inline void SelectAll (void)
+{
+ gtk_clist_select_all (GTK_CLIST (clist));
+}
+
+
+static inline void OkDialVoiceDialog (GtkWidget *w, gpointer data)
+{
+ PhoneEvent *e;
+ gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (((DialVoiceDialog *) data)->entry)));
+
+ if (strlen (buf) > 0)
+ {
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_DialVoice;
+ e->data = buf;
+ GUI_InsertEvent (e);
+ }
+ else
+ g_free (buf);
+
+ gtk_widget_hide (((DialVoiceDialog *) data)->dialog);
+}
+
+
+static void DialVoice (void)
+{
+ static DialVoiceDialog dialVoiceDialog = {NULL, NULL};
+ GtkWidget *button, *label;
+ PhonebookEntry *pbEntry;
+
+ if (dialVoiceDialog.dialog == NULL)
+ {
+ dialVoiceDialog.dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialVoiceDialog.dialog), _("Dial voice"));
+ gtk_window_set_modal(GTK_WINDOW (dialVoiceDialog.dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialVoiceDialog.dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialVoiceDialog.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkDialVoiceDialog), (gpointer) &dialVoiceDialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialVoiceDialog.dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), 5);
+
+ label = gtk_label_new (_("Number:"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), label, FALSE, FALSE, 5);
+ gtk_widget_show (label);
+
+ dialVoiceDialog.entry = gtk_entry_new_with_max_length (GSM_MAX_PHONEBOOK_NUMBER_LENGTH);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), dialVoiceDialog.entry, FALSE, FALSE, 5);
+ gtk_widget_show (dialVoiceDialog.entry);
+ }
+
+ if (GTK_CLIST (clist)->selection != NULL)
+ {
+ pbEntry = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist),
+ GPOINTER_TO_INT (GTK_CLIST (clist)->selection->data));
+
+ gtk_entry_set_text (GTK_ENTRY (dialVoiceDialog.entry), pbEntry->entry.Number);
+ }
+
+ gtk_widget_show (dialVoiceDialog.dialog);
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+ static gchar phoneText[] = "B";
+ static gchar simText[] = "A";
+ char *text1 = NULL;
+ char *text2 = NULL;
+ gint ret;
+
+ GtkCListRow *row1 = (GtkCListRow *) ptr1;
+ GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+ switch (row1->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+ switch (row2->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+
+ if (clist->sort_column == 2)
+ {
+ if (((PhonebookEntry *) row1->data)->entry.MemoryType == GMT_ME)
+ text1 = phoneText;
+ else
+ text1 = simText;
+ if (((PhonebookEntry *) row2->data)->entry.MemoryType == GMT_ME)
+ text2 = phoneText;
+ else
+ text2 = simText;
+ }
+
+ if (!text2)
+ return (text1 != NULL);
+
+ if (!text1)
+ return -1;
+
+ if ((ret = g_strcasecmp (text1, text2)) == 0)
+ {
+ if (((PhonebookEntry *) row1->data)->entry.MemoryType < ((PhonebookEntry *) row2->data)->entry.MemoryType)
+ ret = -1;
+ else if (((PhonebookEntry *) row1->data)->entry.MemoryType > ((PhonebookEntry *) row2->data)->entry.MemoryType)
+ ret = 1;
+ }
+
+ return ret;
+}
+
+
+static void CreateProgressDialog (gint maxME, gint maxSM)
+{
+ GtkWidget *vbox, *label;
+ GtkAdjustment *adj;
+
+ progressDialog.dialog = gtk_window_new (GTK_WINDOW_DIALOG);
+ gtk_window_position (GTK_WINDOW (progressDialog.dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal (GTK_WINDOW (progressDialog.dialog), TRUE);
+ gtk_signal_connect (GTK_OBJECT (progressDialog.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (ProgressDialogDeleteEvent), NULL);
+
+ vbox = gtk_vbox_new (FALSE, 10);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+ gtk_container_add (GTK_CONTAINER (progressDialog.dialog), vbox);
+
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Phone memory..."));
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxME, 0, 0, 0);
+ progressDialog.pbarME = gtk_progress_bar_new_with_adjustment (adj);
+
+ gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarME, FALSE, FALSE, 0);
+ gtk_widget_show (progressDialog.pbarME);
+
+ label = gtk_label_new (_("SIM memory..."));
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxSM, 0, 0, 0);
+ progressDialog.pbarSM = gtk_progress_bar_new_with_adjustment (adj);
+
+ gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarSM, FALSE, FALSE, 0);
+ gtk_widget_show (progressDialog.pbarSM);
+}
+
+
+static void SaveContacts (void)
+{
+ register gint i;
+ PhonebookEntry *pbEntry;
+ PhoneEvent *e;
+ D_MemoryLocation *ml;
+
+ if (progressDialog.dialog == NULL)
+ {
+ CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM);
+ }
+
+ if (contactsMemoryInitialized && progressDialog.dialog)
+ {
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0);
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0);
+ gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Saving entries"));
+ gtk_widget_show_now (progressDialog.dialog);
+
+ /* Save Phone memory */
+ for(i = 0; i < memoryStatus.MaxME; i++)
+ {
+ pbEntry = g_ptr_array_index(contactsMemory, i);
+#ifdef XDEBUG
+ g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+ pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+ (int) pbEntry->status);
+#endif
+ if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted)
+ {
+ if (pbEntry->status == E_Deleted)
+ {
+ pbEntry->entry.Name[0] = '\0';
+ pbEntry->entry.Number[0] = '\0';
+ pbEntry->entry.Group = 5;
+ }
+
+ pbEntry->entry.Location = i + 1;
+ ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation));
+ ml->entry = &(pbEntry->entry);
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_WriteMemoryLocation;
+ e->data = ml;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ml->status != GE_NONE)
+ {
+ g_print (_("%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"),
+ __FILE__, __LINE__, i + 1, ml->status);
+ }
+ g_free (ml);
+ }
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), i + 1);
+ GUI_Refresh ();
+ }
+
+ /* Save SIM memory */
+ for (i = memoryStatus.MaxME; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+#ifdef XDEBUG
+ g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+ pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+ (int) pbEntry->status);
+#endif
+
+ if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted)
+ {
+ if (pbEntry->status == E_Deleted)
+ {
+ pbEntry->entry.Name[0] = '\0';
+ pbEntry->entry.Number[0] = '\0';
+ pbEntry->entry.Group = 5;
+ }
+
+ pbEntry->entry.Location = i - memoryStatus.MaxME + 1;
+ ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation));
+ ml->entry = &(pbEntry->entry);
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_WriteMemoryLocation;
+ e->data = ml;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ml->status != GE_NONE)
+ {
+ g_print(_("%s: line %d:Can't write SM memory entry number %d! Error: %d\n"),
+ __FILE__, __LINE__, i - memoryStatus.MaxME + 1, ml->status);
+ }
+ g_free (ml);
+ }
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), i - memoryStatus.MaxME + 1);
+ GUI_Refresh ();
+ }
+
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+ RefreshStatusInfo ();
+ gtk_widget_hide (progressDialog.dialog);
+ }
+}
+
+
+static GtkWidget *CreateSaveQuestionDialog (GtkSignalFunc SaveFunc,
+ GtkSignalFunc DontSaveFunc)
+{
+ GtkWidget *dialog;
+ GtkWidget *button, *label, *hbox, *pixmap;
+
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Save changes?"));
+ gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Save"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (SaveFunc), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Don't save"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (DontSaveFunc), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start(GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect(GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+ gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show (pixmap);
+
+ label = gtk_label_new (_("You have made changes in your\ncontacts directory.\n\
+\n\nDo you want save these changes into phone?\n"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ return dialog;
+}
+
+
+static void OkExtPbkDialog (GtkWidget *w, gpointer data) {
+
+ ExtPbkDialog *d=(ExtPbkDialog*)data;
+ GSM_NumberType numtype;
+ gint i, found=999;
+ gchar *chars;
+
+ if (w==d->gbutton) numtype=GSM_General;
+ else if (w==d->mbutton) numtype=GSM_Mobile;
+ else if (w==d->wbutton) numtype=GSM_Work;
+ else if (w==d->fbutton) numtype=GSM_Fax;
+ else if (w==d->hbutton) numtype=GSM_Home;
+ else numtype=GSM_General;
+
+ /* Search through subentries */
+
+ for (i=0;i<d->pbEntry->entry.SubEntriesCount;i++) {
+ if (d->pbEntry->entry.SubEntries[i].EntryType==GSM_Number)
+ if (d->pbEntry->entry.SubEntries[i].NumberType==numtype)
+ found=i;
+ }
+
+ if (found>i) { /* Not found */
+ found=d->pbEntry->entry.SubEntriesCount;
+ d->pbEntry->entry.SubEntriesCount++;
+ d->pbEntry->entry.SubEntries[found].EntryType=GSM_Number;
+ d->pbEntry->entry.SubEntries[found].NumberType=numtype;
+ }
+
+ chars=gtk_editable_get_chars(GTK_EDITABLE(d->entry),0,-1);
+ strcpy(d->pbEntry->entry.SubEntries[found].data.Number,chars);
+ g_free(chars);
+
+ /* Update the entry dialog */
+ EditPbEntry(d->pbEntry,d->row);
+
+ gtk_widget_hide (d->dialog);
+}
+
+
+void ExtPbkChanged (GtkWidget *widget, gpointer data )
+{
+ static ExtPbkDialog dialog = {NULL,NULL,0,NULL,NULL,NULL,NULL,NULL};
+ GtkWidget *button;
+ static GtkWidget *label;
+ gchar *chars;
+
+
+ if (dialog.dialog==NULL) {
+
+ dialog.dialog=gtk_dialog_new();
+
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Which Extended Phonebook Entry?"));
+ gtk_window_set_modal(GTK_WINDOW (dialog.dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog.dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ dialog.gbutton = gtk_button_new_with_label (_("General"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+ dialog.gbutton, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.gbutton), "clicked",
+ GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+ gtk_widget_show (dialog.gbutton);
+ dialog.mbutton = gtk_button_new_with_label (_("Mobile"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+ dialog.mbutton, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.mbutton), "clicked",
+ GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+ gtk_widget_show (dialog.mbutton);
+ dialog.wbutton = gtk_button_new_with_label (_("Work"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+ dialog.wbutton, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.wbutton), "clicked",
+ GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+ gtk_widget_show (dialog.wbutton);
+ dialog.fbutton = gtk_button_new_with_label (_("Fax"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+ dialog.fbutton, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.fbutton), "clicked",
+ GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+ gtk_widget_show (dialog.fbutton);
+ dialog.hbutton = gtk_button_new_with_label (_("Home"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox),
+ dialog.hbutton, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (dialog.hbutton), "clicked",
+ GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog );
+ gtk_widget_show (dialog.hbutton);
+
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog.dialog);
+ gtk_widget_show (button);
+
+ label = gtk_label_new("");
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), label, FALSE, FALSE, 5);
+ gtk_widget_show(label);
+ }
+
+ chars=gtk_editable_get_chars(GTK_EDITABLE(widget),0,-1);
+ gtk_label_set_text(GTK_LABEL(label),chars);
+ g_free(chars);
+ dialog.pbEntry=((EditEntryData*)data)->pbEntry;
+ dialog.row=((EditEntryData*)data)->row;
+ dialog.entry=widget;
+ gtk_widget_show(dialog.dialog);
+}
+
+
+
+void GUI_RefreshContacts (void)
+{
+ PhonebookEntry *pbEntry;
+ gint row_i = 0;
+ register gint i;
+
+ if (contactsMemoryInitialized == FALSE)
+ return;
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_clear (GTK_CLIST (clist));
+
+ for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ gchar *row[4];
+
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+ if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted)
+ {
+ row[0] = pbEntry->entry.Name;
+
+ row[1] = pbEntry->entry.Number;
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ row[2] = "P";
+ else
+ row[2] = "S";
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group];
+ else
+ row[3] = "";
+ gtk_clist_append (GTK_CLIST (clist), row);
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+ gtk_clist_set_row_data (GTK_CLIST (clist), row_i++, (gpointer) pbEntry);
+ }
+#ifdef XDEBUG
+ g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name,
+ pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group,
+ (int) pbEntry->status);
+#endif
+ }
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+}
+
+
+static gint InsertPBEntryME (GSM_PhonebookEntry *entry)
+{
+ PhonebookEntry *pbEntry;
+
+ if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+ {
+ g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ g_ptr_array_free (contactsMemory, TRUE);
+ gtk_widget_hide (progressDialog.dialog);
+ return (-1);
+ }
+
+ pbEntry->entry = *entry;
+
+ if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0')
+ pbEntry->status = E_Empty;
+ else
+ pbEntry->status = E_Unchanged;
+
+ g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), entry->Location);
+ GUI_Refresh ();
+
+ return (GE_NONE);
+}
+
+
+static gint InsertPBEntrySM (GSM_PhonebookEntry *entry)
+{
+ PhonebookEntry *pbEntry;
+
+ if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+ {
+ g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ g_ptr_array_free (contactsMemory, TRUE);
+ gtk_widget_hide (progressDialog.dialog);
+ return (-1);
+ }
+
+ pbEntry->entry = *entry;
+
+ if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0')
+ pbEntry->status = E_Empty;
+ else
+ {
+ pbEntry->status = E_Unchanged;
+ if (fbus3810)
+ {
+ memoryStatus.UsedSM++;
+ memoryStatus.FreeSM--;
+ }
+ }
+
+ g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), entry->Location);
+ GUI_Refresh ();
+
+ return (GE_NONE);
+}
+
+
+static inline gint ReadFailedPBEntry (gint i)
+{
+ g_ptr_array_free (contactsMemory, TRUE);
+ gtk_widget_hide (progressDialog.dialog);
+ return (0);
+}
+
+
+static void ReadContactsMain (void)
+{
+ PhoneEvent *e;
+ D_MemoryStatus *ms;
+ D_MemoryLocationAll *mla;
+ PhonebookEntry *pbEntry;
+ register gint i;
+
+ fbus3810 = FALSE;
+
+ if (contactsMemoryInitialized == TRUE)
+ {
+ for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+ g_free (pbEntry);
+ }
+ g_ptr_array_free (contactsMemory, TRUE);
+ contactsMemory = NULL;
+ gtk_clist_clear (GTK_CLIST (clist));
+ contactsMemoryInitialized = FALSE;
+ memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+ memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+ RefreshStatusInfo ();
+ }
+
+ ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus));
+ ms->memoryStatus.MemoryType = GMT_ME;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryStatus;
+ e->data = ms;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ms->status != GE_NONE)
+ /* Phone don't support ME (5110) */
+ memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0;
+ else
+ {
+ memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free;
+ memoryStatus.UsedME = ms->memoryStatus.Used;
+ memoryStatus.FreeME = ms->memoryStatus.Free;
+ }
+
+ ms->memoryStatus.MemoryType = GMT_SM;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryStatus;
+ e->data = ms;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ms->status != GE_NONE)
+ {
+ fbus3810 = TRUE; /* I try to recognize memoryStatus.UsedSM while reading */
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\
+Setting max SIM entries to 100!\n"));
+ memoryStatus.MaxSM = memoryStatus.FreeSM = 100;
+ memoryStatus.UsedSM = 0;
+ gtk_widget_show (errorDialog.dialog);
+ }
+ else
+ {
+ memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free;
+ memoryStatus.UsedSM = ms->memoryStatus.Used;
+ memoryStatus.FreeSM = ms->memoryStatus.Free;
+ }
+ g_free (ms);
+
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+
+ RefreshStatusInfo ();
+
+ if (progressDialog.dialog == NULL)
+ {
+ CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM);
+ }
+
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0);
+ gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0);
+ gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Getting entries"));
+ gtk_widget_show_now (progressDialog.dialog);
+
+ contactsMemory = g_ptr_array_new ();
+
+ mla = (D_MemoryLocationAll *) g_malloc (sizeof (D_MemoryLocationAll));
+ if (memoryStatus.MaxME > 0)
+ {
+ mla->min = 1;
+ mla->max = memoryStatus.MaxME;
+ mla->type = GMT_ME;
+ mla->used = memoryStatus.UsedME; //MW
+ mla->InsertEntry = InsertPBEntryME;
+ mla->ReadFailed = ReadFailedPBEntry;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryLocationAll;
+ e->data = mla;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (mla->status != GE_NONE)
+ {
+ g_free (mla);
+ gtk_widget_hide (progressDialog.dialog);
+ return;
+ }
+ }
+
+ mla->min = 1;
+ mla->max = memoryStatus.MaxSM;
+ mla->type = GMT_SM;
+ mla->used = memoryStatus.UsedSM; //MW
+ mla->InsertEntry = InsertPBEntrySM;
+ mla->ReadFailed = ReadFailedPBEntry;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryLocationAll;
+ e->data = mla;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (mla->status != GE_NONE)
+ {
+ g_free (mla);
+ gtk_widget_hide (progressDialog.dialog);
+ return;
+ }
+
+ g_free (mla);
+
+ gtk_widget_hide (progressDialog.dialog);
+
+ contactsMemoryInitialized = TRUE;
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+ GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+ GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+}
+
+
+static void ReadSaveCallback (GtkWidget *widget, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ SaveContacts ();
+ ReadContactsMain ();
+}
+
+
+static void ReadDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ReadContactsMain ();
+}
+
+
+static void ReadSaveContacts (void)
+{
+ static GtkWidget *dialog = NULL;
+
+ if (dialog == NULL)
+ dialog = CreateSaveQuestionDialog (ReadSaveCallback, ReadDontSaveCallback);
+
+ gtk_widget_show (dialog);
+}
+
+
+static void ReadContacts (void)
+{
+ if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM))
+ ReadSaveContacts ();
+ else
+ ReadContactsMain ();
+}
+
+
+inline void GUI_ReadContacts (void)
+{
+ ReadContacts ();
+}
+
+
+inline void GUI_SaveContacts (void)
+{
+ SaveContacts ();
+}
+
+
+inline void GUI_ShowContacts (void)
+{
+ if (xgnokiiConfig.callerGroups[0] == NULL)
+ {
+ GUI_Refresh ();
+ GUI_InitCallerGroupsInf ();
+ }
+ gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+ GUI_RefreshContacts ();
+ gtk_widget_show (GUI_ContactsWindow);
+// if (!contactsMemoryInitialized)
+// ReadContacts ();
+}
+
+static void ExportVCARD (FILE *f)
+{
+ gchar buf2[10];
+ register gint i,j;
+ PhonebookEntry *pbEntry;
+
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status == E_Deleted || pbEntry->status == E_Empty)
+ continue;
+
+ fprintf (f, "BEGIN:VCARD\n");
+ fprintf (f, "VERSION:3.0\n");
+ fprintf (f, "FN:%s\n", pbEntry->entry.Name);
+ fprintf (f, "TEL;PREF:%s\n", pbEntry->entry.Number);
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ sprintf (buf2, "ME%d", i + 1);
+ else
+ sprintf (buf2, "SM%d", i - memoryStatus.MaxME + 1);
+
+ fprintf (f, "X_GSM_STORE_AT:%s\n", buf2);
+ fprintf (f, "X_GSM_CALLERGROUP:%d\n", pbEntry->entry.Group);
+
+ /* Add ext. pbk info if required */
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ for (j = 0; j < pbEntry->entry.SubEntriesCount; j++)
+ {
+ if (pbEntry->entry.SubEntries[j].EntryType == GSM_Number)
+ fprintf (f, "TEL;UNKNOWN_%d:%s\n", pbEntry->entry.SubEntries[j].NumberType,
+ pbEntry->entry.SubEntries[j].data.Number);
+ }
+
+ fprintf (f, "END:VCARD\n\n");
+ }
+
+ fclose (f);
+}
+
+
+static void ExportNative (FILE *f)
+{
+ gchar buf[IO_BUF_LEN], buf2[10];
+ register gint i,j;
+ PhonebookEntry *pbEntry;
+
+
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status != E_Deleted && pbEntry->status != E_Empty)
+ {
+ if (index (pbEntry->entry.Name, ';') != NULL)
+ {
+ strcpy (buf, "\"");
+ strcat (buf, pbEntry->entry.Name);
+ strcat (buf, "\";");
+ }
+ else
+ {
+ strcpy (buf, pbEntry->entry.Name);
+ strcat (buf, ";");
+ }
+
+ if (index (pbEntry->entry.Number, ';') != NULL)
+ {
+ strcat (buf, "\"");
+ strcat (buf, pbEntry->entry.Number);
+ strcat (buf, "\";");
+ }
+ else
+ {
+ strcat (buf, pbEntry->entry.Number);
+ strcat (buf, ";");
+ }
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ sprintf (buf2, "B;%d;%d;", i + 1, pbEntry->entry.Group);
+ else
+ sprintf (buf2, "A;%d;%d;", i - memoryStatus.MaxME + 1, pbEntry->entry.Group);
+ strcat (buf, buf2);
+
+ /* Add ext. pbk info if required */
+ if (GetModelFeature(FN_PHONEBOOK)==F_PBK71)
+ {
+ for (j = 0; j < pbEntry->entry.SubEntriesCount; j++)
+ if (pbEntry->entry.SubEntries[j].EntryType==GSM_Number)
+ {
+ sprintf(buf2,"%d;",pbEntry->entry.SubEntries[j].NumberType);
+ strcat(buf,buf2);
+
+ if (index (pbEntry->entry.SubEntries[j].data.Number, ';') != NULL)
+ {
+ strcat (buf, "\"");
+ strcat (buf, pbEntry->entry.SubEntries[j].data.Number);
+ strcat (buf, "\";");
+ }
+ else
+ {
+ strcat (buf, pbEntry->entry.SubEntries[j].data.Number);
+ strcat (buf, ";");
+ }
+ }
+ }
+ fprintf (f, "%s\n", buf);
+ }
+ }
+
+ fclose(f);
+}
+
+
+static void ExportContactsMain (gchar *name)
+{
+ FILE *f;
+ gchar buf[IO_BUF_LEN];
+
+ if ((f = fopen (name, "w")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ if (strstr (name, ".vcard") || strstr (name, ".gcrd"))
+ ExportVCARD (f);
+ else
+ ExportNative (f);
+}
+
+
+static void YesExportDialog (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ExportContactsMain (exportDialogData.fileName);
+}
+
+
+static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ static YesNoDialog dialog = { NULL, NULL};
+ FILE *f;
+ gchar err[80];
+
+ exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+ {
+ fclose (f);
+ if (dialog.dialog == NULL)
+ {
+ CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_ContactsWindow);
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+ g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName);
+ gtk_label_set_text (GTK_LABEL(dialog.text), err);
+ }
+ gtk_widget_show (dialog.dialog);
+ }
+ else
+ ExportContactsMain (exportDialogData.fileName);
+}
+
+
+static void ExportContacts (void)
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (contactsMemoryInitialized)
+ {
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Export"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+ }
+}
+
+
+static bool ParseLine (GSM_PhonebookEntry *entry, gint *num, gchar *buf)
+{
+ register gint i = 0;
+ size_t len;
+ gchar s_num[5];
+ gchar *endptr;
+
+ entry->Empty = FALSE;
+ entry->SubEntriesCount=0;
+
+ len = strlen (buf);
+ if (buf[i] == '"')
+ {
+ i++;
+ while (i < len && i <= GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != '"')
+ {
+ entry->Name[i - 1] = buf[i];
+ i++;
+ }
+ entry->Name[i - 1] = '\0';
+ if (i >= len)
+ return FALSE;
+ if (buf[++i] != ';')
+ return FALSE;
+ }
+ else
+ {
+ while (i < len && i < GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != ';')
+ {
+ entry->Name[i] = buf[i];
+ i++;
+ }
+ entry->Name[i] = '\0';
+ if (buf[i] != ';')
+ return FALSE;
+ if (i >= len)
+ return FALSE;
+ }
+ buf += (i + 1);
+ i = 0;
+
+ len = strlen (buf);
+ if (buf[i] == '"')
+ {
+ i++;
+ while (i < len && i <= GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != '"')
+ {
+ entry->Number[i - 1] = buf[i];
+ i++;
+ }
+ entry->Number[i - 1] = '\0';
+ if (i >= len)
+ return FALSE;
+ if (buf[++i] != ';')
+ return FALSE;
+ }
+ else
+ {
+ while (i < len && i < GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != ';')
+ {
+ entry->Number[i] = buf[i];
+ i++;
+ }
+ entry->Number[i] = '\0';
+ if (buf[i] != ';')
+ return FALSE;
+ if (i >= len)
+ return FALSE;
+ }
+ buf += (i + 1);
+ i = 0;
+
+ if (!strncmp(buf, "B;", 2))
+ {
+ entry->MemoryType = GMT_ME;
+ buf += 2;
+ }
+ else
+ if (!strncmp(buf, "A;", 2))
+ {
+ entry->MemoryType = GMT_SM;
+ buf += 2;
+ }
+ else
+ if (!strncmp(buf, "ME;", 3))
+ {
+ entry->MemoryType = GMT_ME;
+ buf += 3;
+ }
+ else
+ if (!strncmp(buf, "SM;", 3))
+ {
+ entry->MemoryType = GMT_SM;
+ buf += 3;
+ }
+ else
+ return FALSE;
+
+ len = strlen (buf);
+ while (i < len && i < 4 && buf[i] != ';')
+ {
+ s_num[i] = buf[i];
+ i++;
+ }
+ s_num[i] = '\0';
+ if (buf[i] != ';')
+ return FALSE;
+ if (i >= len)
+ return FALSE;
+ buf += (i + 1);
+ i = 0;
+
+ *num = strtol (s_num, &endptr, 10);
+ if (s_num == endptr)
+ return FALSE;
+ if (*num == LONG_MIN || *num == LONG_MAX)
+ return FALSE;
+
+
+ if ( *buf == '\n' || *buf == '\r') /* for compatibility with NCDS */
+ entry->Group = 5;
+ else
+ {
+ len = strlen (buf);
+ while (i < len && i < 4 && buf[i] != ';')
+ {
+ s_num[i] = buf[i];
+ i++;
+ }
+ s_num[i] = '\0';
+ if (buf[i] != ';')
+ return FALSE;
+ if (i >= len)
+ return FALSE;
+
+ entry->Group = strtol (s_num, &endptr, 10);
+ if (s_num == endptr)
+ return FALSE;
+ if (entry->Group == LONG_MIN || entry->Group == LONG_MAX)
+ return FALSE;
+ if (entry->Group < 0 || entry->Group > 5)
+ return FALSE;
+
+ buf += (i + 1);
+ i = 0;
+
+ /* Ext Pbk Support */
+
+ while (*buf!='\n')
+ {
+ entry->SubEntries[entry->SubEntriesCount].EntryType=GSM_Number;
+ len = strlen (buf);
+ while (i < len && i < 4 && buf[i] != ';')
+ {
+ s_num[i] = buf[i];
+ i++;
+ }
+ s_num[i] = '\0';
+ if (buf[i] != ';')
+ return FALSE;
+ if (i >= len)
+ return FALSE;
+ entry->SubEntries[entry->SubEntriesCount].NumberType=(GSM_NumberType)strtol (s_num, &endptr, 10);
+ if (s_num == endptr)
+ return FALSE;
+ buf += (i + 1);
+ i = 0;
+ len = strlen (buf);
+ while (i < len && i < GSM_MAX_PHONEBOOK_TEXT_LENGTH && buf[i] != ';')
+ {
+ entry->SubEntries[entry->SubEntriesCount].data.Number[i] = buf[i];
+ i++;
+ }
+ entry->SubEntries[entry->SubEntriesCount].data.Number[i] = '\0';
+ buf += (i + 1);
+ i = 0;
+ if (i >= len)
+ return FALSE;
+ entry->SubEntriesCount++;
+ }
+ }
+
+ return TRUE;
+}
+
+
+static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ FILE *f;
+ PhoneEvent *e;
+ D_MemoryStatus *ms;
+ PhonebookEntry *pbEntry;
+ GSM_PhonebookEntry gsmEntry;
+ gchar buf[IO_BUF_LEN];
+ gchar *fileName;
+ gint i;
+
+ fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (fileName, "r")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ if (contactsMemoryInitialized == TRUE)
+ {
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index(contactsMemory, i);
+ g_free(pbEntry);
+ }
+ g_ptr_array_free (contactsMemory, TRUE);
+ contactsMemory = NULL;
+ gtk_clist_clear (GTK_CLIST (clist));
+ contactsMemoryInitialized = FALSE;
+ memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+ memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+ RefreshStatusInfo ();
+ }
+
+ ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus));
+ ms->memoryStatus.MemoryType = GMT_ME;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryStatus;
+ e->data = ms;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ms->status != GE_NONE)
+ /* Phone don't support ME (5110) */
+ memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0;
+ else
+ {
+ memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free;
+ memoryStatus.UsedME = 0;
+ memoryStatus.FreeME = memoryStatus.MaxME;
+ }
+
+ ms->memoryStatus.MemoryType = GMT_SM;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetMemoryStatus;
+ e->data = ms;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&memoryMutex);
+ pthread_cond_wait (&memoryCond, &memoryMutex);
+ pthread_mutex_unlock (&memoryMutex);
+
+ if (ms->status != GE_NONE)
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\
+Setting max SIM entries set to 100!\n"));
+ memoryStatus.MaxSM = memoryStatus.FreeSM = 100;
+ memoryStatus.UsedSM = 0;
+ gtk_widget_show (errorDialog.dialog);
+ }
+ else
+ {
+ memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free;
+ memoryStatus.UsedSM = 0;
+ memoryStatus.FreeSM = memoryStatus.MaxSM;
+ }
+ g_free (ms);
+
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+
+ RefreshStatusInfo ();
+
+ contactsMemory = g_ptr_array_new ();
+
+ for (i = 1; i <= memoryStatus.MaxME; i++)
+ {
+ if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+ {
+ fclose (f);
+ g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ g_ptr_array_free (contactsMemory, TRUE);
+ return;
+ }
+
+ pbEntry->entry.Empty = FALSE;
+ pbEntry->entry.Name[0] = '\0';
+ pbEntry->entry.Number[0] = '\0';
+ pbEntry->entry.MemoryType = GMT_ME;
+ pbEntry->entry.Group = 5;
+ pbEntry->status = E_Deleted; /* I must set status to E_Deleted, since I */
+ /* I want clear empty entries when saving to */
+ /* to phone */
+ pbEntry->entry.SubEntriesCount=0;
+
+ g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+ pbEntry = NULL;
+ }
+
+ for (i = 1; i <= memoryStatus.MaxSM; i++)
+ {
+ if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL)
+ {
+ fclose (f);
+ g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ g_ptr_array_free (contactsMemory, TRUE);
+ return;
+ }
+
+ pbEntry->entry.Empty = FALSE;
+ pbEntry->entry.Name[0] = '\0';
+ pbEntry->entry.Number[0] = '\0';
+ pbEntry->entry.MemoryType = GMT_SM;
+ pbEntry->entry.Group = 5;
+ pbEntry->status = E_Deleted;
+ pbEntry->entry.SubEntriesCount=0;
+
+ g_ptr_array_add (contactsMemory, (gpointer) pbEntry);
+ pbEntry = NULL;
+ }
+
+
+ while (fgets (buf, IO_BUF_LEN, f))
+ {
+ if (ParseLine (&gsmEntry, &i, buf))
+ {
+ if (gsmEntry.MemoryType == GMT_ME && memoryStatus.FreeME > 0
+ && i > 0 && i <= memoryStatus.MaxME)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i - 1);
+
+ if (pbEntry->status == E_Deleted)
+ {
+ pbEntry->entry = gsmEntry;
+ pbEntry->status = E_Changed;
+ memoryStatus.UsedME++;
+ memoryStatus.FreeME--;
+ statusInfo.ch_ME = 1;
+ }
+ }
+ else if (gsmEntry.MemoryType == GMT_SM && memoryStatus.FreeSM > 0
+ && i > 0 && i <= memoryStatus.MaxSM)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, memoryStatus.MaxME + i - 1);
+
+ if (pbEntry->status == E_Deleted)
+ {
+ pbEntry->entry = gsmEntry;
+ pbEntry->status = E_Changed;
+ memoryStatus.UsedSM++;
+ memoryStatus.FreeSM--;
+ statusInfo.ch_SM = 1;
+ }
+ }
+ }
+ }
+
+ contactsMemoryInitialized = TRUE;
+ RefreshStatusInfo ();
+ GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+ GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+}
+
+
+static void ImportContactsFileDialog ()
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Import"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+}
+
+
+static void ImportSaveCallback (GtkWidget *widget, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ SaveContacts ();
+ ImportContactsFileDialog ();
+}
+
+
+static void ImportDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ImportContactsFileDialog ();
+}
+
+
+void static ImportSaveContacts (void)
+{
+ static GtkWidget *dialog = NULL;
+
+ if (dialog == NULL)
+ dialog = CreateSaveQuestionDialog (ImportSaveCallback, ImportDontSaveCallback);
+
+ gtk_widget_show (dialog);
+}
+
+
+static void ImportContacts (void)
+{
+ if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM))
+ ImportSaveContacts ();
+ else
+ ImportContactsFileDialog ();
+}
+
+
+static void QuitSaveCallback (GtkWidget *widget, gpointer data)
+{
+ PhoneEvent *e;
+
+ gtk_widget_hide (GTK_WIDGET (data));
+ SaveContacts ();
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_Exit;
+ e->data = NULL;
+ GUI_InsertEvent (e);
+ pthread_join (monitor_th, NULL);
+ gtk_main_quit ();
+}
+
+
+static void QuitDontSaveCallback (GtkWidget *widget, gpointer data)
+{
+ PhoneEvent *e;
+
+ gtk_widget_hide (GTK_WIDGET (data));
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_Exit;
+ e->data = NULL;
+ GUI_InsertEvent (e);
+ pthread_join (monitor_th, NULL);
+ gtk_main_quit ();
+}
+
+
+void GUI_QuitSaveContacts (void)
+{
+ static GtkWidget *dialog = NULL;
+
+ if (dialog == NULL)
+ dialog = CreateSaveQuestionDialog (QuitSaveCallback, QuitDontSaveCallback);
+
+ gtk_widget_show (dialog);
+}
+
+
+/* Function take number and return name belonged to number.
+ If no name is found, return NULL;
+ Do not modify returned name!
+*/
+gchar *GUI_GetName (gchar *number)
+{
+ PhonebookEntry *pbEntry;
+ register gint i;
+
+ if (contactsMemoryInitialized == FALSE || number == NULL)
+ return (gchar *)NULL;
+
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+ continue;
+
+ if (strcmp (pbEntry->entry.Number, number) == 0)
+ return pbEntry->entry.Name;
+ }
+
+ for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+ continue;
+
+ if (strrncmp (pbEntry->entry.Number, number, 9) == 0)
+ return pbEntry->entry.Name;
+ }
+
+ return NULL;
+}
+
+
+gchar *GUI_GetNameExact (gchar *number)
+{
+ PhonebookEntry *pbEntry;
+ register gint i;
+
+ if (contactsMemoryInitialized == FALSE || number == NULL)
+ return (gchar *)NULL;
+
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+ continue;
+
+ if (strcmp (pbEntry->entry.Number, number) == 0)
+ return pbEntry->entry.Name;
+ }
+
+ return NULL;
+}
+
+
+gchar *GUI_GetNumber (gchar *name)
+{
+ PhonebookEntry *pbEntry;
+ register gint i;
+
+ if (contactsMemoryInitialized == FALSE || name == NULL || *name == '\0')
+ return (gchar *)NULL;
+
+ for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+
+ if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted)
+ continue;
+
+ if (strcmp (pbEntry->entry.Name, name) == 0)
+ return pbEntry->entry.Number;
+ }
+
+ return NULL;
+}
+
+
+static void SelectDialogClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ SelectContactData *data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ gtk_signal_emit_by_name(GTK_OBJECT (data->okButton), "clicked");
+}
+
+
+SelectContactData *GUI_SelectContactDialog (void)
+{
+ PhonebookEntry *pbEntry;
+ static SelectContactData selectContactData;
+ SortColumn *sColumn;
+ gchar *titles[4] = { "Name", "Number", "Memory", "Group"};
+ gint row_i = 0;
+ register gint i;
+ gchar string[100];
+
+ if (contactsMemoryInitialized == FALSE)
+ return NULL;
+
+ selectContactData.dialog = gtk_dialog_new ();
+ gtk_widget_set_usize (GTK_WIDGET (selectContactData.dialog), 436, 200);
+ gtk_window_set_title (GTK_WINDOW (selectContactData.dialog), _("Select contacts"));
+ gtk_window_set_modal (GTK_WINDOW (selectContactData.dialog), TRUE);
+
+ selectContactData.okButton = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area),
+ selectContactData.okButton, TRUE, TRUE, 10);
+ GTK_WIDGET_SET_FLAGS (selectContactData.okButton, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (selectContactData.okButton);
+ gtk_widget_show (selectContactData.okButton);
+
+ selectContactData.cancelButton = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area),
+ selectContactData.cancelButton, TRUE, TRUE, 10);
+ gtk_widget_show (selectContactData.cancelButton);
+
+ selectContactData.clist = gtk_clist_new_with_titles (4, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (selectContactData.clist), GTK_SHADOW_OUT);
+ gtk_clist_set_compare_func (GTK_CLIST (selectContactData.clist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (selectContactData.clist), 0);
+ gtk_clist_set_sort_type (GTK_CLIST (selectContactData.clist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (selectContactData.clist), FALSE);
+ gtk_clist_set_selection_mode (GTK_CLIST (selectContactData.clist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 0, 150);
+ gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 1, 115);
+ gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 3, 70);
+ gtk_clist_set_column_justification (GTK_CLIST(selectContactData.clist), 2, GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_visibility (GTK_CLIST(selectContactData.clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ return NULL;
+ }
+ sColumn->clist = selectContactData.clist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (selectContactData.clist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (selectContactData.clist), "select_row",
+ GTK_SIGNAL_FUNC (SelectDialogClickEntry),
+ (gpointer) &selectContactData);
+
+ selectContactData.clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (selectContactData.clistScrolledWindow),
+ selectContactData.clist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (selectContactData.clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->vbox),
+ selectContactData.clistScrolledWindow,
+ TRUE, TRUE, 0);
+
+ gtk_widget_show (selectContactData.clist);
+ gtk_widget_show (selectContactData.clistScrolledWindow);
+
+ if (xgnokiiConfig.callerGroups[0] == NULL)
+ GUI_InitCallerGroupsInf ();
+
+ gtk_clist_freeze (GTK_CLIST (selectContactData.clist));
+ for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++)
+ {
+ gchar *row[4];
+
+ pbEntry = g_ptr_array_index (contactsMemory, i);
+ if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted)
+ {
+ row[0] = pbEntry->entry.Name;
+
+ if (pbEntry->entry.SubEntriesCount>0) {
+ snprintf(string,100,"%s *",pbEntry->entry.Number);
+ row[1]=string;
+ } else row[1] = pbEntry->entry.Number;
+
+
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ row[2] = "P";
+ else
+ row[2] = "S";
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group];
+ else
+ row[3] = "";
+ gtk_clist_append (GTK_CLIST (selectContactData.clist), row);
+ if (pbEntry->entry.MemoryType == GMT_ME)
+ gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2,
+ memoryPixmaps.phoneMemPix, memoryPixmaps.mask);
+ else
+ gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2,
+ memoryPixmaps.simMemPix, memoryPixmaps.mask);
+
+ gtk_clist_set_row_data (GTK_CLIST (selectContactData.clist), row_i++, (gpointer) pbEntry);
+ }
+ }
+
+ gtk_clist_sort (GTK_CLIST (selectContactData.clist));
+ gtk_clist_thaw (GTK_CLIST (selectContactData.clist));
+
+ gtk_widget_show (selectContactData.dialog);
+
+ return &selectContactData;
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>R", ReadContacts, 0, NULL},
+ { NULL, "<control>S", SaveContacts, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>I", ImportContacts, 0, NULL},
+ { NULL, "<control>E", ExportContacts, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseContacts, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>N", NewEntry, 0, NULL},
+ { NULL, "<control>U", DuplicateEntry, 0, NULL},
+ { NULL, NULL, EditEntry, 0, NULL},
+ { NULL, "<control>D", DeleteEntry, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>C", ChMemType, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>F", FindFirstEntry, 0, NULL},
+ { NULL, "<control>L", SearchEntry, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>A", SelectAll, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>V", DialVoice, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+ menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+ menu_items[3].path = g_strdup (_("/File/Sep1"));
+ menu_items[4].path = g_strdup (_("/File/_Import from file"));
+ menu_items[5].path = g_strdup (_("/File/_Export to file"));
+ menu_items[6].path = g_strdup (_("/File/Sep2"));
+ menu_items[7].path = g_strdup (_("/File/_Close"));
+ menu_items[8].path = g_strdup (_("/_Edit"));
+ menu_items[9].path = g_strdup (_("/Edit/_New"));
+ menu_items[10].path = g_strdup (_("/Edit/D_uplicate"));
+ menu_items[11].path = g_strdup (_("/Edit/_Edit"));
+ menu_items[12].path = g_strdup (_("/Edit/_Delete"));
+ menu_items[13].path = g_strdup (_("/Edit/Sep3"));
+ menu_items[14].path = g_strdup (_("/Edit/_Change memory type"));
+ menu_items[15].path = g_strdup (_("/Edit/Sep4"));
+ menu_items[16].path = g_strdup (_("/Edit/_Find"));
+ menu_items[17].path = g_strdup (_("/Edit/Find ne_xt"));
+ menu_items[18].path = g_strdup (_("/Edit/Sep5"));
+ menu_items[19].path = g_strdup (_("/Edit/Select _all"));
+ menu_items[20].path = g_strdup (_("/_Dial"));
+ menu_items[21].path = g_strdup (_("/Dial/Dial _voice"));
+ menu_items[22].path = g_strdup (_("/_Help"));
+ menu_items[23].path = g_strdup (_("/Help/_Help"));
+ menu_items[24].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateContactsWindow (void)
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ SortColumn *sColumn;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *toolbar;
+ GtkWidget *clistScrolledWindow;
+ GtkWidget *status_hbox;
+ register gint i;
+ gchar *titles[4] = { _("Name"), _("Number"), _("Memory"), _("Group")};
+
+ InitMainMenu ();
+ contactsMemoryInitialized = FALSE;
+ GUI_ContactsWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_ContactsWindow), _("Contacts"));
+ gtk_widget_set_usize (GTK_WIDGET (GUI_ContactsWindow), 436, 220);
+ //gtk_container_set_border_width (GTK_CONTAINER (GUI_ContactsWindow), 10);
+ gtk_signal_connect (GTK_OBJECT (GUI_ContactsWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_ContactsWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_ContactsWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_ContactsWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+ NewPixmap(Read_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ReadContacts, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+ NewPixmap(Send_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) SaveContacts, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+ NewPixmap(Open_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ImportContacts, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+ NewPixmap(Save_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ExportContacts, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New entry"), NULL,
+ NewPixmap(New_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NewEntry, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Duplicate entry"), NULL,
+ NewPixmap(Duplicate_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) DuplicateEntry, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL,
+ NewPixmap(Edit_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) EditEntry, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete entry"), NULL,
+ NewPixmap(Delete_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) DeleteEntry, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Dial voice"), NULL,
+ NewPixmap(Dial_xpm, GUI_ContactsWindow->window,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) DialVoice, NULL);
+
+// gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+
+ clist = gtk_clist_new_with_titles (4, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT);
+ gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (clist), 0);
+ gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE);
+ gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST (clist), 0, 150);
+ gtk_clist_set_column_width (GTK_CLIST (clist), 1, 115);
+ gtk_clist_set_column_width (GTK_CLIST (clist), 3, 70);
+ gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER);
+// gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, (GetModelFeature(FN_CALLERGROUPS)!=0));
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ gtk_main_quit ();
+ }
+ sColumn->clist = clist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+ GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow,
+ TRUE, TRUE, 0);
+
+ gtk_widget_show (clist);
+ gtk_widget_show (clistScrolledWindow);
+
+ status_hbox = gtk_hbox_new (FALSE,20);
+ gtk_box_pack_start (GTK_BOX (main_vbox), status_hbox, FALSE, FALSE, 0);
+ gtk_widget_show (status_hbox);
+
+ memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME =
+ memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0;
+ statusInfo.ch_ME = statusInfo.ch_SM = 0;
+
+ statusInfo.label = gtk_label_new ("");
+ RefreshStatusInfo ();
+ gtk_box_pack_start (GTK_BOX (status_hbox), statusInfo.label, FALSE, FALSE, 10);
+ gtk_widget_show (statusInfo.label);
+
+ memoryPixmaps.simMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+ &memoryPixmaps.mask,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+ sim_xpm);
+
+ memoryPixmaps.phoneMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+ &memoryPixmaps.mask,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+ phone_xpm);
+
+ questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window,
+ &questMark.mask,
+ &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL],
+ quest_xpm);
+
+ CreateErrorDialog (&errorDialog, GUI_ContactsWindow);
+ GUIEventAdd (GUI_EVENT_CONTACTS_CHANGED, GUI_RefreshContacts);
+ GUIEventAdd (GUI_EVENT_CALLERS_GROUPS_CHANGED, GUI_RefreshGroupMenu);
+}
+
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ $Id$
+
+*/
+
+#ifndef XGNOKII_CONTACTS_H
+#define XGNOKII_CONTACTS_H
+
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+
+#define IO_BUF_LEN 160
+
+/* Structure to keep memory status information */
+typedef struct {
+ int MaxME; /* Maximum Phone memory entries. */
+ int UsedME; /* Actualy used Phone memory entries. */
+ int FreeME; /* FreeME = MaxME - UsedME */
+ int MaxSM; /* Maximum SIM memory entries. */
+ int UsedSM;
+ int FreeSM;
+} MemoryStatus;
+
+/* Array to hold contacts entry */
+typedef GPtrArray* ContactsMemory;
+
+/* Structure to keep contacts memory entry status */
+typedef enum {
+ E_Unchanged, /* Entry is not empty and is unchanged. */
+ E_Changed, /* Entry is not empty and is changed. */
+ E_Deleted, /* Entry was deleted. */
+ E_Empty /* Entry is empty. */
+} EntryStatus;
+
+/* Memory entry data */
+typedef struct {
+ GSM_PhonebookEntry entry; /* Phonebook entry self. */
+ EntryStatus status; /* Entry status. */
+} PhonebookEntry;
+
+/* Structure to hold information of Edit and New dialogs */
+typedef struct {
+ PhonebookEntry *pbEntry;
+ GtkWidget *dialog;
+ GtkWidget *name;
+ GtkWidget *number;
+ GtkWidget *extended;
+ GtkWidget *memoryBox;
+ GtkWidget *memoryTypePhone;
+ GtkWidget *memoryTypeSIM;
+ GtkWidget *group;
+ GtkWidget *groupLabel;
+ GtkWidget *groupMenu;
+ gint newGroup;
+ gint row;
+} EditEntryData;
+
+
+typedef struct {
+ PhonebookEntry *pbEntry;
+ GtkWidget *dialog;
+ GtkWidget *clist;
+} EditNumbersData;
+
+
+/* Structure to hold information for FindEntry dialog. */
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *pattern;
+ GtkWidget *nameB;
+ GtkWidget *numberB;
+} FindEntryData;
+
+
+/* Contains fileName for Export dialog. */
+typedef struct {
+ gchar *fileName;
+} ExportDialogData;
+
+
+/* Hold widgets for SelectContactDialog */
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *clist; /* list of contacts */
+ GtkWidget *clistScrolledWindow;
+ GtkWidget *okButton; /* Ok and Cancel button widgets */
+ GtkWidget *cancelButton;
+} SelectContactData;
+
+
+/* Max length for status line. (Line that shows used/max information for
+ memories). */
+#define STATUS_INFO_LENGTH 40
+
+
+/* Structure to hold information for status line (bottom line of window) */
+typedef struct {
+ GtkWidget *label;
+ gchar text[STATUS_INFO_LENGTH]; /* Status line text. */
+ gint ch_ME:1; /* 1 if phone memory was changed */
+ gint ch_SM:1; /* 1 if phone SIM was changed */
+} StatusInfo;
+
+
+/* Structure to hold information for progress dialog */
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *pbarME;
+ GtkWidget *pbarSM;
+} ProgressDialog;
+
+
+/* Search type. */
+typedef enum {
+ FIND_NAME = 0,
+ FIND_NUMBER
+} FindType;
+
+
+typedef struct {
+ gchar pattern[GSM_MAX_PHONEBOOK_NAME_LENGTH + 1];
+ gint lastRow;
+ FindType type;
+} FindEntryStruct;
+
+
+typedef struct {
+ GdkPixmap *simMemPix, *phoneMemPix;
+ GdkBitmap *mask;
+} MemoryPixmaps;
+
+
+extern void GUI_CreateContactsWindow (void);
+
+extern void GUI_ShowContacts (void);
+
+/* return != 0 if user has unsaved changes in contacts memory */
+extern gint GUI_ContactsIsChanged (void);
+
+/* return TRUE if Contacts memory was read from phone or from file */
+extern bool GUI_ContactsIsIntialized (void);
+
+/* Read contacts from phone */
+extern void GUI_ReadContacts (void);
+
+/* Save contacts to phone */
+extern void GUI_SaveContacts (void);
+
+/* Create save question dialog and can end application */
+extern void GUI_QuitSaveContacts (void);
+
+extern void GUI_RefreshContacts (void);
+
+/* Function take number and return name belonged to number.
+ If no name is found, return NULL;
+ Do not modify returned name! */
+extern gchar *GUI_GetName (gchar *number);
+
+extern gchar *GUI_GetNameExact (gchar *number);
+
+extern gchar *GUI_GetNumber (gchar *name);
+/* Function show dialog with contacts and let select entries.
+ See xgnokii_contacts.c for sample of use. */
+extern SelectContactData *GUI_SelectContactDialog (void);
+
+extern void GUI_RefreshGroupMenu (void);
+
+extern PhonebookEntry *GUI_GetEntry (GSM_MemoryType, gint);
+
+void ExtPbkChanged (GtkWidget *widget, gpointer data );
+
+#endif
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_data.h"
+#include "data/virtmodem.h"
+
+static GtkWidget *GUI_DataWindow;
+bool TerminateThread = false;
+bool enabled = false;
+static GtkWidget *label = NULL;
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/data/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+static void UpdateStatus (void)
+{
+ gchar *buf;
+
+ if (!enabled)
+ buf = g_strdup_printf (_("Data calls are currently\nDisabled\n "));
+ else
+ buf = g_strdup_printf (_("Data calls are currently\nEnabled\n "));
+
+ if (label != NULL)
+ gtk_label_set_text (GTK_LABEL (label), buf);
+
+ g_free (buf);
+}
+
+
+inline void GUI_ShowData (void)
+{
+ if (GetModelFeature(FN_DATACALLS)==0)
+ return;
+
+ if (TerminateThread)
+ {
+ VM_Terminate ();
+ enabled = false;
+ TerminateThread = false;
+ }
+ UpdateStatus ();
+
+ gtk_widget_show (GUI_DataWindow);
+}
+
+
+inline void GUI_HideData(void)
+{
+ gtk_widget_hide (GUI_DataWindow);
+}
+
+static inline void DisableData (GtkWidget *widget,
+ gpointer data )
+{
+ VM_Terminate ();
+ enabled = false;
+ UpdateStatus ();
+}
+
+
+static inline void EnableData (GtkWidget *widget,
+ gpointer data)
+{
+
+ TerminateThread = false;
+ VM_Initialise (xgnokiiConfig.model, xgnokiiConfig.port,
+ 0, 0, xgnokiiConfig.bindir, false, false,
+ xgnokiiConfig.synchronizetime);
+ enabled = true;
+ UpdateStatus ();
+}
+
+
+void GUI_CreateDataWindow (void)
+{
+ GtkWidget *button, *hbox, *vbox;
+
+ GUI_DataWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_DataWindow), _("Virtual Modem"));
+ gtk_container_set_border_width (GTK_CONTAINER (GUI_DataWindow), 10);
+ gtk_signal_connect (GTK_OBJECT (GUI_DataWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_DataWindow), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ button = gtk_button_new_with_label (_("Enable"));
+ gtk_box_pack_start (GTK_BOX (hbox),
+ button, TRUE, FALSE, 5);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (EnableData), NULL);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Disable"));
+ gtk_box_pack_start (GTK_BOX (hbox),
+ button, TRUE, FALSE, 5);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (DisableData), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+}
--- /dev/null
+/*
+
+ 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
+
+
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_dtmf.h"
+#include "xpm/Send.xpm"
+#include "xpm/Delete.xpm"
+
+#define MAX_DTMF_LENGTH 50
+
+static GtkWidget *GUI_DTMFWindow;
+static GtkWidget *displayEntry;
+static ErrorDialog errorDialog = {NULL, NULL};
+static gchar *saveFileName;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/dtmf/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static inline void ButtonCB (GtkWidget *widget,
+ gpointer data )
+{
+ gchar buf[2] = " ";
+
+ *buf = GPOINTER_TO_INT (data);
+ gtk_entry_append_text (GTK_ENTRY (displayEntry), buf);
+}
+
+
+static inline void ClearCB (GtkWidget *widget,
+ gpointer data )
+{
+ gtk_entry_set_text (GTK_ENTRY (displayEntry), "");
+}
+
+
+static inline void SendCB (GtkWidget *widget,
+ gpointer data )
+{
+ PhoneEvent *e;
+ gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry)));
+
+ if (*buf == '\0')
+ {
+ g_free (buf);
+ return;
+ }
+
+ e = g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendDTMF;
+ e->data = buf;
+ GUI_InsertEvent (e);
+}
+
+
+static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ FILE *f;
+ gchar *fileName;
+ gchar line[MAX_DTMF_LENGTH + 1];
+ gchar buf[80];
+
+ fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (fileName, "r")) == NULL)
+ {
+ g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ fgets (line, MAX_DTMF_LENGTH + 1, f);
+ gtk_entry_set_text (GTK_ENTRY (displayEntry), line);
+ fclose (f);
+}
+
+
+static void LoadFileDialog ()
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Load"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+}
+
+
+static void SaveDTMF ()
+{
+ FILE *f;
+ gchar buf[80];
+
+ if ((f = fopen (saveFileName, "w")) == NULL)
+ {
+ g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f);
+ fclose (f);
+}
+
+
+static inline void YesSaveDialog (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ SaveDTMF();
+}
+
+
+static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ FILE *f;
+ static YesNoDialog dialog = { NULL, NULL};
+ gchar err[80];
+
+ saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (saveFileName, "r")) != NULL)
+ {
+ fclose (f);
+ if (dialog.dialog == NULL)
+ {
+ CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow);
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+ g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName);
+ gtk_label_set_text (GTK_LABEL(dialog.text), err);
+ }
+ gtk_widget_show (dialog.dialog);
+ }
+ else
+ SaveDTMF ();
+}
+
+
+static void SaveFileDialog ()
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Save"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+}
+
+
+static inline void CloseDTMF (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_DTMFWindow);
+}
+
+
+inline void GUI_ShowDTMF ()
+{
+ gtk_widget_show (GUI_DTMFWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>O", LoadFileDialog, 0, NULL},
+ { NULL, "<control>S", SaveFileDialog, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseDTMF, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Open"));
+ menu_items[2].path = g_strdup (_("/File/_Save"));
+ menu_items[3].path = g_strdup (_("/File/Sep1"));
+ menu_items[4].path = g_strdup (_("/File/_Close"));
+ menu_items[5].path = g_strdup (_("/_Help"));
+ menu_items[6].path = g_strdup (_("/Help/_Help"));
+ menu_items[7].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateDTMFWindow ()
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *table;
+ GtkWidget *frame;
+ GtkWidget *button;
+ GtkWidget *pixmap;
+ gchar buf[2];
+ gint i,j;
+
+
+ InitMainMenu ();
+ GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone"));
+ //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_DTMFWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ table = gtk_table_new (8, 3, TRUE);
+
+ frame = gtk_frame_new (NULL);
+ gtk_container_add (GTK_CONTAINER (frame), table);
+ gtk_container_border_width (GTK_CONTAINER (frame), 10);
+ gtk_container_border_width (GTK_CONTAINER (table), 3);
+ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
+ gtk_table_set_row_spacings (GTK_TABLE (table), 2);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 2);
+
+ displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH);
+ gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1);
+ gtk_widget_set_usize (displayEntry, 110, 22);
+
+ for (i = 0; i < 3; i++)
+ for (j = 0; j < 3; j++)
+ {
+ g_snprintf (buf, 2, "%d", j * 3 + i + 1);
+ button = gtk_button_new_with_label (buf);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf));
+ gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3);
+ }
+
+ button = gtk_button_new_with_label ("*");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*');
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
+
+ button = gtk_button_new_with_label ("0");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0');
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6);
+
+ button = gtk_button_new_with_label ("#");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#');
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6);
+
+
+ button = gtk_button_new_with_label ("Pause");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p');
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
+
+ button = gtk_button_new_with_label ("Wait");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w');
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7);
+
+ button = gtk_button_new ();
+ pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window,
+ &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
+ gtk_container_add (GTK_CONTAINER (button), pixmap);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8);
+
+ button = gtk_button_new ();
+ pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window,
+ &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
+ gtk_container_add (GTK_CONTAINER (button), pixmap);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL);
+ gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7);
+
+ gtk_widget_show_all (table);
+
+ CreateErrorDialog (&errorDialog, GUI_DTMFWindow);
+}
--- /dev/null
+/*
+
+ 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
--- /dev/null
+#include <stdlib.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "gsm-networks.h"
+#include "files/gsm-filetypes.h"
+#include "gsm-bitmaps.h"
+
+#include "xgnokii_logos.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+
+#include "xpm/Operator_logo.xpm"
+#include "xpm/Startup_logo.xpm"
+#include "xpm/Caller_logo.xpm"
+
+#include "xpm/Black_point.xpm"
+#include "xpm/Green_point.xpm"
+#include "xpm/Green_pixel.xpm"
+
+#include "xpm/New.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Read.xpm"
+
+#include "xpm/Edit_invert.xpm"
+#include "xpm/Edit_flip_horizontal.xpm"
+#include "xpm/Edit_flip_vertical.xpm"
+
+#include "xpm/Tool_brush.xpm"
+#include "xpm/Tool_line.xpm"
+#include "xpm/Tool_rectangle.xpm"
+#include "xpm/Tool_filled_rectangle.xpm"
+
+extern GSM_Network GSM_Networks[];
+
+static GtkWidget *GUI_LogosWindow;
+
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+
+/* stuff for drawingArea */
+static GtkWidget *drawingArea = NULL;
+static GdkPixmap *drawingPixmap = NULL;
+static GdkPixmap *greenPointPixmap, *blackPointPixmap;
+static int drawingAreaWidth, drawingAreaHeight; /* in pixels */
+static int mouseButtonPushed = 0;
+
+/* stuff for previewArea */
+static GtkWidget *previewArea = NULL;
+static GdkPixmap *previewPixmap = NULL;
+static GdkPixmap *greenPixelPixmap;
+static int previewPixmapWidth, previewPixmapHeight;
+static int previewAvailable = 1, showPreviewErrorDialog = 1;
+static int previewPixmapNumber = 0;
+
+static GSM_Bitmap bitmap, oldBitmap;
+static GSM_NetworkInfo networkInfo;
+
+/* widgets for toolbar - some, need global variables */
+static GtkWidget *buttonStartup, *buttonOperator, *buttonCaller, *buttonPicture;
+static GtkWidget *networkCombo, *callerCombo;
+
+static int activeTool = TOOL_BRUSH;
+static int toolStartX, toolStartY, toolLastX, toolLastY;
+
+/* tools for drawing */
+static GtkWidget *buttonBrush, *buttonLine, *buttonRectangle;
+static GtkWidget *buttonFilledRectangle;
+
+/* Contains fileName for Export dialog. */
+typedef struct {
+ gchar *fileName;
+} ExportDialogData;
+
+static ExportDialogData exportDialogData = {NULL};
+
+GtkWidget *FileSelection;
+
+static int callersGroupsInitialized = 0;
+
+/* returns lowest number from three numbers */
+int GetMinFrom3(int a, int b, int c) {
+ if (a > b) {
+ if (b > c)
+ return c;
+ else
+ return b;
+ } else {
+ if (a > c)
+ return c;
+ else
+ return a;
+ }
+}
+
+/* returns highest number from three numbers */
+int GetMaxFrom3(int a, int b, int c) {
+ if (a > b) {
+ if (c > a)
+ return c;
+ else
+ return a;
+ } else {
+ if (c > b)
+ return c;
+ else
+ return b;
+ }
+}
+
+/* load preview pixmap from file */
+GdkPixmap *GetPreviewPixmap (GtkWidget *widget) {
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+ gchar *file;
+
+ if (previewPixmapNumber == 0)
+ {
+ if (!strcmp (xgnokiiConfig.model, "6110") ||
+ !strcmp (xgnokiiConfig.model, "6120"))
+ {
+ file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6110.xpm");
+ previewPixmapNumber = 1;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "6130") ||
+ !strcmp (xgnokiiConfig.model, "6150") ||
+ !strcmp (xgnokiiConfig.model, "616x") ||
+ !strcmp (xgnokiiConfig.model, "6185") ||
+ !strcmp (xgnokiiConfig.model, "6190"))
+ {
+ file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6150.xpm");
+ previewPixmapNumber = 2;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "3210"))
+ {
+ file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_3210.xpm");
+ previewPixmapNumber = 3;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "3310") ||
+ !strcmp (xgnokiiConfig.model, "3330"))
+ {
+ file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_3310.xpm");
+ previewPixmapNumber = 4;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "5110") ||
+ !strcmp (xgnokiiConfig.model, "5130"))
+ {
+ file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_5110.xpm");
+ previewPixmapNumber = 5;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "6250"))
+ {
+ file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6250.xpm");
+ previewPixmapNumber = 6;
+ }
+ else if (!strcmp (xgnokiiConfig.model, "7110"))
+ {
+ file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_7110.xpm");
+ previewPixmapNumber = 7;
+ }
+ else
+ {
+ file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6210.xpm");
+ previewPixmapNumber = 8;
+ }
+ }
+ else
+ switch (previewPixmapNumber)
+ {
+ case 1: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6110.xpm");
+ break;
+ case 2: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6150.xpm");
+ break;
+ case 3: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_3210.xpm");
+ break;
+ case 4: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_3310.xpm");
+ break;
+ case 5: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_5110.xpm");
+ break;
+ case 6: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6250.xpm");
+ break;
+ case 7: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_7110.xpm");
+ break;
+ default: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir,
+ "/xpm/Preview_6210.xpm");
+ break;
+ }
+
+ pixmap = gdk_pixmap_create_from_xpm(widget->window,&mask,
+ &widget->style->bg[GTK_STATE_NORMAL],
+ file);
+ g_free(file);
+
+ return pixmap;
+}
+
+/* ********************************************************
+ * ** SET/CLEAR POINTS ************************************
+ * ********************************************************
+ */
+void SetPreviewPoint(GtkWidget *widget, int x, int y, int update) {
+ if (!previewAvailable) return;
+
+ /* there is difference between positiong of startupLogo and others */
+ if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+ bitmap.type != GSM_6210StartupLogo) {
+ x += PREVIEWJUMPX;
+ y += PREVIEWJUMPY;
+ }
+
+ /* draw point to pixmap */
+ if (previewPixmap)
+ gdk_draw_point(previewPixmap,widget->style->black_gc,
+ x+PREVIEWSTARTX,y+PREVIEWSTARTY);
+
+ if (update) {
+ GdkRectangle updateRect;
+
+ /* update point on screen */
+ updateRect.width = 1;
+ updateRect.height = 1;
+ updateRect.x = PREVIEWSTARTX+x;
+ updateRect.y = PREVIEWSTARTY+y;
+
+ gtk_widget_draw(previewArea,&updateRect);
+ }
+}
+
+void ClearPreviewPoint(GtkWidget *widget, int x, int y, int update) {
+ if (!previewAvailable) return;
+
+ /* there is difference between positiong of startupLogo and others */
+ if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+ bitmap.type != GSM_6210StartupLogo) {
+ x += PREVIEWJUMPX;
+ y += PREVIEWJUMPY;
+ }
+
+ /* clean point from pixmap - any idea how to draw green point without pixmap? */
+ if (previewPixmap)
+ gdk_draw_pixmap(previewPixmap,
+ widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ greenPixelPixmap,0,0,x+PREVIEWSTARTX,y+PREVIEWSTARTY,1,1);
+ if (update) {
+ GdkRectangle updateRect;
+
+ /* clean from screen too */
+ updateRect.width = 1;
+ updateRect.height = 1;
+ updateRect.x = PREVIEWSTARTX+x;
+ updateRect.y = PREVIEWSTARTY+y;
+
+ gtk_widget_draw(previewArea,&updateRect);
+ }
+}
+
+int IsPoint(int x, int y) {
+ return GSM_IsPointBitmap(&bitmap,x,y);
+}
+
+void SetPoint(GtkWidget *widget, int x, int y, int update) {
+
+ GSM_SetPointBitmap(&bitmap,x,y);
+
+ /* draw point to pixmap */
+ gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+ if (update) {
+ GdkRectangle updateRect;
+
+ /* calculate update rectangle */
+ updateRect.width = POINTSIZE+2;
+ updateRect.height = POINTSIZE+2;
+ updateRect.x = x * (POINTSIZE+1);
+ updateRect.y = y * (POINTSIZE+1);
+
+ /* update on screen */
+ gtk_widget_draw(drawingArea,&updateRect);
+ }
+
+ /* draw preview point too */
+ if (previewAvailable) SetPreviewPoint(widget,x,y,update);
+}
+
+void ClearPoint(GtkWidget *widget, int x, int y, int update) {
+
+ GSM_ClearPointBitmap(&bitmap,x,y);
+
+ /* clear point from pixmap */
+ gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+ if (update) {
+ GdkRectangle updateRect;
+
+ /* calculate update rectangle */
+ updateRect.width = POINTSIZE+2;
+ updateRect.height = POINTSIZE+2;
+ updateRect.x = x * (POINTSIZE+1);
+ updateRect.y = y * (POINTSIZE+1);
+
+ /* update on screen */
+ gtk_widget_draw(drawingArea,&updateRect);
+ }
+
+ /* clear point from previewArea too */
+ if (previewAvailable) ClearPreviewPoint(widget,x,y,update);
+}
+
+/* ****************************************************
+ * *** UPDATES - PREVIEW & DRAWING AREAS **************
+ * ****************************************************
+ */
+
+/* this redraw all logo points - preview & drawing area */
+void UpdatePointsRectangle(GtkWidget *widget, int x1, int y1, int x2, int y2) {
+ GdkRectangle updateRect;
+ int x, y, dx = 0, dy = 0;
+
+ if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+ bitmap.type != GSM_6210StartupLogo) {
+ dx = PREVIEWJUMPX;
+ dy = PREVIEWJUMPY;
+ }
+
+ if (x1 > x2) {
+ x = x1;
+ x1 = x2;
+ x2 = x;
+ }
+
+ if (y1 > y2) {
+ y = y1;
+ y1 = y2;
+ y2 = y;
+ }
+
+ for (y = y1;y <= y2;y++)
+ for (x = x1;x <= x2;x++) {
+ if (IsPoint(x,y)) {
+ /* set on drawing area */
+ gdk_draw_pixmap(drawingPixmap,
+ drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)],
+ blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+ /* set on preview */
+ if (previewAvailable && previewPixmap)
+ gdk_draw_point(previewPixmap,previewArea->style->black_gc,
+ x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy);
+ } else {
+ /* clear from drawing */
+ gdk_draw_pixmap(drawingPixmap,
+ drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)],
+ greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+ /* clear from preview */
+ if (previewAvailable && previewPixmap)
+ gdk_draw_pixmap(previewPixmap,
+ previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)],
+ greenPixelPixmap,0,0,x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy,
+ 1,1);
+ }
+ }
+
+ if (previewAvailable) {
+ updateRect.x = PREVIEWSTARTX+dx+x1;
+ updateRect.y = PREVIEWSTARTY+dy+y1;
+ updateRect.width = x2-x1+1;
+ updateRect.height = y2-y1+1;
+ gtk_widget_draw(previewArea,&updateRect);
+ }
+
+ updateRect.x = x1*(POINTSIZE+1);
+ updateRect.y = y1*(POINTSIZE+1);
+ updateRect.width = (x2-x1+1)*(POINTSIZE+1)+1;
+ updateRect.height = (y2-y1+1)*(POINTSIZE+1)+1;
+ gtk_widget_draw(drawingArea,&updateRect);
+}
+
+void UpdatePoints(GtkWidget *widget) {
+ UpdatePointsRectangle(widget,0,0,bitmap.width-1,bitmap.height-1);
+}
+
+/* this redraw all logo points in previewArea, NO DRAWING AREA */
+void UpdatePreviewPoints (void) {
+ GdkRectangle updateRect;
+ int x, y, dx = 0, dy = 0;
+
+ if (!previewPixmap || !previewAvailable) return;
+
+ if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+ bitmap.type != GSM_6210StartupLogo) {
+ dx = PREVIEWJUMPX;
+ dy = PREVIEWJUMPY;
+ }
+
+ for (y = 0;y < bitmap.height;y++)
+ for (x = 0;x < bitmap.width;x++) {
+ if (IsPoint(x,y)) {
+ gdk_draw_point(previewPixmap,previewArea->style->black_gc,
+ x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy);
+ } else {
+ gdk_draw_pixmap(previewPixmap,
+ previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)],
+ greenPixelPixmap,0,0,
+ x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy,1,1);
+ }
+ }
+
+ updateRect.x = dx;
+ updateRect.y = dy;
+ updateRect.width = bitmap.width;
+ updateRect.height = bitmap.height;
+ gtk_widget_draw(previewArea,&updateRect);
+}
+
+/* ******************************************************
+ * **** DRAWING TOOLS ***********************************
+ * ******************************************************
+ */
+
+/* TOOL - BRUSH */
+void ToolBrush(GtkWidget *widget, int column, int row, int button) {
+ /* only this tool directly update bitmap & screen */
+ if (button > 1)
+ ClearPoint(widget,column,row,1);
+ else
+ SetPoint(widget,column,row,1);
+}
+
+/* TOOL - LINE */
+/* going to rewrite to Bresenham algorithm */
+static void ToolLineUpdate(GtkWidget *widget, int column, int row) {
+ double delta, y, x;
+ int i, x1, y1, x2, y2;
+
+ if (abs(toolStartX-toolLastX) >= abs(toolStartY-toolLastY)) {
+ if (toolStartX > toolLastX) {
+ x1 = toolLastX;
+ x2 = toolStartX;
+ y1 = toolLastY;
+ y2 = toolStartY;
+ } else {
+ x1 = toolStartX;
+ x2 = toolLastX;
+ y1 = toolStartY;
+ y2 = toolLastY;
+ }
+
+ delta = ((double)(y2-y1))/((double)(x2-x1));
+ y = (double)y1;
+ for (i = x1;i <= x2;i++) {
+ if (!GSM_IsPointBitmap(&oldBitmap,i,(int)y)) ClearPoint(widget,i,(int)y,0);
+ y += delta;
+ }
+ } else {
+ if (toolStartY > toolLastY) {
+ x1 = toolLastX;
+ x2 = toolStartX;
+ y1 = toolLastY;
+ y2 = toolStartY;
+ } else {
+ x1 = toolStartX;
+ x2 = toolLastX;
+ y1 = toolStartY;
+ y2 = toolLastY;
+ }
+ delta = ((double)(x2-x1))/((double)(y2-y1));
+
+ x = (double)x1;
+ for (i = y1;i <= y2;i++) {
+ if (!GSM_IsPointBitmap(&oldBitmap,(int)x,i)) ClearPoint(widget,(int)x,i,0);
+ x += delta;
+ }
+ }
+
+ if (abs(toolStartX-column) >= abs(toolStartY-row)) {
+ if (toolStartX > column) {
+ x1 = column;
+ x2 = toolStartX;
+ y1 = row;
+ y2 = toolStartY;
+ } else {
+ x1 = toolStartX;
+ x2 = column;
+ y1 = toolStartY;
+ y2 = row;
+ }
+
+ delta = ((double)(y2-y1))/((double)(x2-x1));
+ y = (double)y1;
+ for (i = x1;i <= x2;i++) {
+ SetPoint(widget,i,(int)y,0);
+ y += delta;
+ }
+ } else {
+ if (toolStartY > row) {
+ x1 = column;
+ x2 = toolStartX;
+ y1 = row;
+ y2 = toolStartY;
+ } else {
+ x1 = toolStartX;
+ x2 = column;
+ y1 = toolStartY;
+ y2 = row;
+ }
+
+ delta = ((double)(x2-x1))/((double)(y2-y1));
+
+ x = (double)x1;
+ for (i = y1;i <= y2;i++) {
+ SetPoint(widget,(int)x,i,0);
+ x += delta;
+ }
+ }
+}
+
+/* TOOL - FILLED RECT */
+static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) {
+ int i, j, x1, y1, x2, y2;
+
+ if (toolStartX > toolLastX) {
+ x1 = toolLastX;
+ x2 = toolStartX;
+ } else {
+ x1 = toolStartX;
+ x2 = toolLastX;
+ }
+
+ if (toolStartY > toolLastY) {
+ y1 = toolLastY;
+ y2 = toolStartY;
+ } else {
+ y1 = toolStartY;
+ y2 = toolLastY;
+ }
+
+ for (j = y1;j <= y2;j++)
+ for (i = x1;i <= x2;i++)
+ if (!GSM_IsPointBitmap(&oldBitmap,i,j)) ClearPoint(widget,i,j,0);
+
+ if (toolStartX > column) {
+ x1 = column;
+ x2 = toolStartX;
+ } else {
+ x1 = toolStartX;
+ x2 = column;
+ }
+
+ if (toolStartY > row) {
+ y1 = row;
+ y2 = toolStartY;
+ } else {
+ y1 = toolStartY;
+ y2 = row;
+ }
+
+ for (j = y1;j <= y2;j++)
+ for (i = x1;i <= x2;i++)
+ SetPoint(widget,i,j,0);
+}
+
+/* TOOL - RECTANGLE */
+static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
+ int i, j, x1, y1, x2, y2;
+
+ /* clear old rectangle */
+ if (toolStartX > toolLastX) {
+ x1 = toolLastX;
+ x2 = toolStartX;
+ } else {
+ x1 = toolStartX;
+ x2 = toolLastX;
+ }
+
+ if (toolStartY > toolLastY) {
+ y1 = toolLastY;
+ y2 = toolStartY;
+ } else {
+ y1 = toolStartY;
+ y2 = toolLastY;
+ }
+
+ for (i = x1;i <= x2;i++) {
+ if (!GSM_IsPointBitmap(&oldBitmap,i,y1)) ClearPoint(widget,i,y1,0);
+ if (!GSM_IsPointBitmap(&oldBitmap,i,y2)) ClearPoint(widget,i,y2,0);
+ }
+
+ for (j = y1;j <= y2;j++) {
+ if (!GSM_IsPointBitmap(&oldBitmap,x1,j)) ClearPoint(widget,x1,j,0);
+ if (!GSM_IsPointBitmap(&oldBitmap,x2,j)) ClearPoint(widget,x2,j,0);
+ }
+
+ /* draw new rectangle */
+ if (toolStartX > column) {
+ x1 = column;
+ x2 = toolStartX;
+ } else {
+ x1 = toolStartX;
+ x2 = column;
+ }
+
+ if (toolStartY > row) {
+ y1 = row;
+ y2 = toolStartY;
+ } else {
+ y1 = toolStartY;
+ y2 = row;
+ }
+
+ for (i = x1;i <= x2;i++) {
+ if (!IsPoint(i,y1)) SetPoint(widget,i,y1,0);
+ if (!IsPoint(i,y2)) SetPoint(widget,i,y2,0);
+ }
+
+ for (j = y1;j <= y2;j++) {
+ if (!IsPoint(x1,j)) SetPoint(widget,x1,j,0);
+ if (!IsPoint(x2,j)) SetPoint(widget,x2,j,0);
+ }
+}
+
+static void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) {
+ GdkRectangle updateRect;
+
+ /* update preview area */
+ updateRect.x = PREVIEWSTARTX+x1;
+ updateRect.y = PREVIEWSTARTY+y1;
+ if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+ bitmap.type != GSM_6210StartupLogo) {
+ updateRect.x += PREVIEWJUMPX;
+ updateRect.y += PREVIEWJUMPY;
+ }
+ updateRect.width = x2-x1+1;
+ updateRect.height = y2-y1+1;
+ gtk_widget_draw(previewArea,&updateRect);
+
+ /* update drawing area */
+ updateRect.x = x1 * (POINTSIZE+1);
+ updateRect.y = y1 * (POINTSIZE+1);
+ updateRect.width = (x2-x1+1)*(POINTSIZE+2);
+ updateRect.height = (y2-y1+1)*(POINTSIZE+2);
+ gtk_widget_draw(drawingArea,&updateRect);
+}
+
+/* *************************************
+ * ** PREVIEW AREA EVENTS **************
+ * *************************************
+ */
+
+static gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+ previewPixmapNumber = (previewPixmapNumber % 8) + 1;
+
+ gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+ previewPixmapWidth,previewPixmapHeight);
+
+ return TRUE;
+}
+
+static gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+ if (previewPixmap) gdk_pixmap_unref(previewPixmap);
+ previewPixmap = GetPreviewPixmap(widget);
+
+ UpdatePreviewPoints();
+
+ return TRUE;
+}
+
+static gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+ /* got previewPixmap? */
+ if (previewPixmap)
+ /* yes - simply redraw some rectangle */
+ gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ previewPixmap,event->area.x,event->area.y,event->area.x,
+ event->area.y,event->area.width,event->area.height);
+
+ return FALSE;
+}
+
+/* ********************************
+ * ** DRAWING AREA EVENTS *********
+ * ********************************
+ */
+
+static gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+ /* got drawingPixmap? */
+ if (drawingPixmap == NULL) return TRUE;
+
+ if (!mouseButtonPushed) {
+ if ((event->button == 1 && activeTool != TOOL_BRUSH) ||
+ (activeTool == TOOL_BRUSH)) {
+ /* position from we starting drawing */
+ toolStartX = event->x / (POINTSIZE+1);
+ if (toolStartX < 0) toolStartX = 0;
+ if (toolStartX > bitmap.width-1) toolStartX = bitmap.width-1;
+
+ toolStartY = event->y / (POINTSIZE+1);
+ if (toolStartY < 0) toolStartY = 0;
+ if (toolStartY > bitmap.height-1) toolStartY = bitmap.height-1;
+
+ toolLastX = toolStartX;
+ toolLastY = toolStartY;
+
+ /* store old bitmap for drawing, resp. for moving, resizing primitive */
+ memcpy(&oldBitmap,&bitmap,sizeof(oldBitmap));
+ }
+
+ if (event->button == 1) mouseButtonPushed = 1;
+
+ switch (activeTool) {
+ case TOOL_BRUSH:
+ ToolBrush(widget,toolStartX,toolStartY,event->button);
+ break;
+ case TOOL_LINE:
+ case TOOL_RECTANGLE:
+ if (event->button == 1) ToolBrush(widget,toolStartX,toolStartY,event->button);
+ break;
+ }
+ }
+
+ /* user is drawing some tool other than TOOL_BRUSH and pushed mouse button
+ * another than first => cancel tool and redraw to oldBitmap (bitmap when
+ * user start drawing)
+ */
+ if (mouseButtonPushed && activeTool != TOOL_BRUSH && event->button != 1) {
+ int lowestX, lowestY, highestX, highestY;
+ int i, j;
+
+ lowestX = GetMinFrom3(toolStartX,toolLastX,toolLastX);
+ lowestY = GetMinFrom3(toolStartY,toolLastY,toolLastY);
+ highestX = GetMaxFrom3(toolStartX,toolLastX,toolLastX);
+ highestY = GetMaxFrom3(toolStartY,toolLastY,toolLastY);
+
+ for (j = lowestY;j <= highestY;j++)
+ for (i = lowestX;i <= highestX;i++)
+ if (GSM_IsPointBitmap(&oldBitmap,i,j))
+ SetPoint(widget,i,j,0);
+ else
+ ClearPoint(widget,i,j,0);
+ UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY);
+
+ mouseButtonPushed = 0;
+ }
+
+ return TRUE;
+}
+
+static gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) {
+ if (event->button == 1)
+ mouseButtonPushed = 0;
+
+ return TRUE;
+}
+
+static gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) {
+ int x,y;
+ GdkModifierType state;
+
+ if (!mouseButtonPushed && activeTool != TOOL_BRUSH) return TRUE;
+
+ if (event->is_hint)
+ gdk_window_get_pointer(event->window,&x,&y,&state);
+ else {
+ x = event->x;
+ y = event->y;
+ state = event->state;
+ }
+
+ x = x / (POINTSIZE+1);
+ y = y / (POINTSIZE+1);
+ if (x < 0) x = 0;
+ if (y < 0) y = 0;
+ if (x > bitmap.width-1) x = bitmap.width-1;
+ if (y > bitmap.height-1) y = bitmap.height-1;
+
+ if (y == toolLastY && x == toolLastX) return TRUE;
+
+ switch (activeTool) {
+ case TOOL_BRUSH:
+ if (state & GDK_BUTTON1_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,1);
+ if (state & GDK_BUTTON2_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,2);
+ if (state & GDK_BUTTON3_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,3);
+ break;
+ case TOOL_RECTANGLE:
+ if (drawingPixmap != NULL) ToolRectangleUpdate(widget,x,y);
+ break;
+ case TOOL_FILLED_RECTANGLE:
+ if (drawingPixmap != NULL) ToolFilledRectangleUpdate(widget,x,y);
+ break;
+ case TOOL_LINE:
+ if (drawingPixmap != NULL) ToolLineUpdate(widget,x,y);
+ break;
+ }
+
+ /* what is this?
+ * it's simple, above tools updates only bitmap in memory and this
+ * function update from bitmap to screen, it's made as non-blinking
+ * drawing functions with this, simply draw everything we need and
+ * after that, redraw to screen rectangle in which we made changes
+ * it's not redrawing pixel by pixel (blinking)
+ */
+ if (activeTool != TOOL_BRUSH) {
+ int lowestX, lowestY, highestX, highestY;
+
+ lowestX = GetMinFrom3(toolStartX,toolLastX,x);
+ lowestY = GetMinFrom3(toolStartY,toolLastY,y);
+ highestX = GetMaxFrom3(toolStartX,toolLastX,x);
+ highestY = GetMaxFrom3(toolStartY,toolLastY,y);
+
+ UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY);
+ }
+
+ toolLastX = x;
+ toolLastY = y;
+ return TRUE;
+}
+
+/* configureEvent? -> event when someone resize windows, ... */
+static gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+ int x, y;
+ /* got drawingPixmap? */
+ if (drawingPixmap) gdk_pixmap_unref(drawingPixmap); /* got, erase it */
+
+ /* make a new pixmap */
+ drawingPixmap = gdk_pixmap_new(widget->window,drawingAreaWidth,
+ drawingAreaHeight,-1);
+
+ /* draw grid into pixmap */
+ for (y = 0;y < bitmap.height;y++)
+ for (x = 0;x < bitmap.width;x++)
+ if (IsPoint(x,y))
+ gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+ else
+ gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1);
+
+ return TRUE;
+}
+
+static gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+ /* got drawingPixmap? */
+ if (drawingPixmap)
+ /* got - draw it */
+ gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ drawingPixmap,
+ event->area.x,event->area.y,event->area.x,event->area.y,
+ event->area.width,event->area.height);
+ return FALSE;
+}
+
+/* *****************************************
+ * ** TOOLBAR & MENU EVENTS ****************
+ * *****************************************
+ */
+
+static void GetNetworkInfoEvent(GtkWidget *widget) {
+ GSM_Error error;
+ PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
+ D_NetworkInfo *data = (D_NetworkInfo *)g_malloc(sizeof(D_NetworkInfo));
+
+ /* prepare data for event */
+ data->info = &networkInfo;
+ e->event = Event_GetNetworkInfo;
+ e->data = data;
+
+ /* launch event and wait for result */
+ GUI_InsertEvent(e);
+ pthread_mutex_lock(&getNetworkInfoMutex);
+ pthread_cond_wait(&getNetworkInfoCond,&getNetworkInfoMutex);
+ pthread_mutex_unlock(&getNetworkInfoMutex);
+ error = data->status;
+ g_free(data);
+
+ /* watch for errors */
+ if (error != GE_NONE) {
+ gchar *buf = g_strdup_printf(_("Error getting network info\n(error=%d)"),error);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ }
+
+ /* set new operator name to combo */
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry),
+ GSM_GetNetworkName(networkInfo.NetworkCode));
+}
+
+static void GetLogoEvent(GtkWidget *widget) {
+ int i;
+ GSM_Error error;
+ PhoneEvent *e = (PhoneEvent *) g_malloc(sizeof(PhoneEvent));
+ D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap));
+ char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry));
+
+ /* prepare data for event */
+ strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7);
+ data->bitmap = &bitmap;
+ e->event = Event_GetBitmap;
+ e->data = data;
+ if (GetModelFeature(FN_CALLERGROUPS)!=0) {
+ for (i = 0;i < 6;i++)
+ if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)),
+ xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i;
+ }
+
+ /* launch event and wait for result */
+ GUI_InsertEvent(e);
+ pthread_mutex_lock(&getBitmapMutex);
+ pthread_cond_wait(&getBitmapCond,&getBitmapMutex);
+ pthread_mutex_unlock(&getBitmapMutex);
+ error = data->status;
+ g_free(data);
+
+ /* watch for errors */
+ if (error != GE_NONE) {
+ gchar *buf = g_strdup_printf(_("Error getting bitmap\n(error=%d)"),error);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ } else {
+ /* no error, draw logo from phone */
+ UpdatePoints(drawingArea);
+ }
+}
+
+static void SetLogoEvent(GtkWidget *widget) {
+ GSM_Error error;
+ PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
+ D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap));
+ char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry));
+ int i;
+
+ /* prepare data */
+ strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7);
+
+ if (bitmap.type == GSM_CallerLogo) {
+ /* above condition must be there, because if you launch logos before
+ * callerGroups are available, you will see segfault - callerGroups not initialized
+ */
+ if (GetModelFeature(FN_CALLERGROUPS)!=0) {
+ for (i = 0;i < 6;i++)
+ if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)),
+ xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i;
+ }
+ }
+ if (bitmap.type == GSM_StartupLogo) {
+ bitmap.number=0;
+ }
+
+ data->bitmap = &bitmap;
+ e->event = Event_SetBitmap;
+ e->data = data;
+
+ /* launch event and wait for result */
+ GUI_InsertEvent(e);
+ pthread_mutex_lock(&setBitmapMutex);
+ pthread_cond_wait(&setBitmapCond,&setBitmapMutex);
+ pthread_mutex_unlock(&setBitmapMutex);
+ error = data->status;
+ g_free(data);
+
+ /* watch for errors */
+ if (error != GE_NONE) {
+ gchar *buf = g_strdup_printf(_("Error setting bitmap\n(error=%d)"),error);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ }
+}
+
+static void ClearLogoEvent(GtkWidget *widget) {
+
+ bitmap.size=bitmap.width*bitmap.height/8;
+
+ GSM_ClearBitmap(&bitmap);
+
+ UpdatePoints(widget);
+}
+
+static void InvertLogoEvent(GtkWidget *widget) {
+ int column, row;
+
+ for (column = 0;column < bitmap.width;column++)
+ for (row = 0;row < bitmap.height;row++)
+ if (IsPoint(column,row))
+ GSM_ClearPointBitmap(&bitmap,column,row);
+ else
+ GSM_SetPointBitmap(&bitmap,column,row);
+
+ UpdatePoints(widget);
+}
+
+static void UpLogoEvent(GtkWidget *widget) {
+ int column, row;
+
+ GSM_Bitmap tbitmap;
+
+ tbitmap=bitmap;
+
+ for (row = 0;row < bitmap.height-1;row++)
+ for (column = 0;column < bitmap.width;column++)
+ if (IsPoint(column,row+1))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ for (column = 0;column < bitmap.width;column++)
+ if (GSM_IsPointBitmap(&tbitmap,column,0))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ UpdatePoints(widget);
+}
+
+static void DownLogoEvent(GtkWidget *widget) {
+ int column, row;
+
+ GSM_Bitmap tbitmap;
+
+ tbitmap=bitmap;
+
+ for (row = bitmap.height-1;row > 0;row--)
+ for (column = 0;column < bitmap.width;column++)
+ if (IsPoint(column,row-1))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ for (column = 0;column < bitmap.width;column++)
+ if (GSM_IsPointBitmap(&tbitmap,column,bitmap.height-1))
+ GSM_SetPointBitmap(&bitmap,column,0);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,0);
+
+ UpdatePoints(widget);
+}
+
+static void LeftLogoEvent(GtkWidget *widget) {
+ int column, row;
+
+ GSM_Bitmap tbitmap;
+
+ tbitmap=bitmap;
+
+ for (column = 0; column < bitmap.width-1;column++)
+ for (row = 0;row < bitmap.height;row++)
+ if (IsPoint(column+1,row))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ for (row = 0;row < bitmap.height;row++)
+ if (GSM_IsPointBitmap(&tbitmap,0,row))
+ GSM_SetPointBitmap(&bitmap,bitmap.width-1,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,bitmap.width-1,row);
+
+ UpdatePoints(widget);
+}
+
+static void RightLogoEvent(GtkWidget *widget) {
+ int column, row;
+
+ GSM_Bitmap tbitmap;
+
+ tbitmap=bitmap;
+
+ for (column = bitmap.width-1;column > 0;column--)
+ for (row = 0;row < bitmap.height;row++)
+ if (IsPoint(column-1,row))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ for (row = 0;row < bitmap.height;row++)
+ if (GSM_IsPointBitmap(&tbitmap,bitmap.width-1,row))
+ GSM_SetPointBitmap(&bitmap,0,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,0,row);
+
+ UpdatePoints(widget);
+}
+
+static void FlipVerticalLogoEvent(GtkWidget *widget) {
+ int row, column, temp;
+
+ for (row = 0;row < (bitmap.height/2);row++)
+ for (column = 0;column < bitmap.width;column++) {
+ temp = IsPoint(column,row);
+ if (IsPoint(column,bitmap.height-1-row))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ if (temp)
+ GSM_SetPointBitmap(&bitmap,column,bitmap.height-1-row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1-row);
+ }
+
+ UpdatePoints(widget);
+}
+
+static void FlipHorizontalLogoEvent(GtkWidget *widget) {
+ int row, column, temp;
+
+ for (row = 0;row < bitmap.height;row++)
+ for (column = 0;column < (bitmap.width/2);column++) {
+ temp = IsPoint(column,row);
+
+ if (IsPoint(bitmap.width-1-column,row))
+ GSM_SetPointBitmap(&bitmap,column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,column,row);
+
+ if (temp)
+ GSM_SetPointBitmap(&bitmap,bitmap.width-1-column,row);
+ else
+ GSM_ClearPointBitmap(&bitmap,bitmap.width-1-column,row);
+ }
+
+ UpdatePoints(widget);
+}
+
+/* this is launched when tool was changed */
+static gint ToolTypeEvent(GtkWidget *widget) {
+ if (GTK_TOGGLE_BUTTON(buttonBrush)->active) activeTool = TOOL_BRUSH; else
+ if (GTK_TOGGLE_BUTTON(buttonLine)->active) activeTool = TOOL_LINE; else
+ if (GTK_TOGGLE_BUTTON(buttonRectangle)->active) activeTool = TOOL_RECTANGLE; else
+ if (GTK_TOGGLE_BUTTON(buttonFilledRectangle)->active)
+ activeTool = TOOL_FILLED_RECTANGLE;
+
+ return 0;
+}
+
+/* this is launched when logo type was change by buttons on toolbar */
+static gint LogoTypeEvent(GtkWidget *widget) {
+ int clear = 0;
+
+ /* is startupLogo? */
+ if (GTK_TOGGLE_BUTTON(buttonStartup)->active &&
+ bitmap.type != GSM_StartupLogo && bitmap.type != GSM_6210StartupLogo &&
+ bitmap.type != GSM_7110StartupLogo) {
+ /* look for old bitmap type, clean if another */
+ clear = 1;
+
+ if (!strcmp(xgnokiiConfig.model,"7110")) {
+ GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+ } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) {
+ GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+ } else {
+ GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+ }
+ }
+
+ /* new type is PictureImage */
+ if (GTK_TOGGLE_BUTTON(buttonPicture)->active && bitmap.type != GSM_PictureImage) {
+ /* look for old bitmap type, clean if another */
+ clear = 1;
+ GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+ }
+
+ /* new type is callerLogo */
+ if (GTK_TOGGLE_BUTTON(buttonCaller)->active && bitmap.type != GSM_CallerLogo) {
+ /* previous was startup or Picture ? clear and draw batteries, signal, ... */
+ if (bitmap.type != GSM_OperatorLogo) clear = 1;
+ GSM_ResizeBitmap(&bitmap,GSM_CallerLogo);
+ }
+
+ /* is new type operatorLogo? */
+ if (GTK_TOGGLE_BUTTON(buttonOperator)->active && bitmap.type != GSM_OperatorLogo &&
+ bitmap.type != GSM_7110OperatorLogo) {
+
+ /* previous startup or Picture ? clear and draw batteries, signal, ... */
+ if (bitmap.type != GSM_CallerLogo) clear = 1;
+
+ if (!strcmp(xgnokiiConfig.model,"7110")) {
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+ } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) {
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+ } else {
+ GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+ }
+ }
+
+ /* must clear? */
+ if (clear) {
+ if (previewAvailable) {
+ /* configure event reload pixmap from disk and redraws */
+ gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+ previewPixmapWidth,previewPixmapHeight);
+ }
+
+ /* change new drawingArea size */
+ drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1;
+ drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1;
+
+ gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea),
+ drawingAreaWidth,drawingAreaHeight);
+ }
+
+ return 0;
+}
+
+static inline void CloseLogosWindow (void) {
+ gtk_widget_hide(GUI_LogosWindow);
+}
+
+void ExportLogoFileMain(gchar *name)
+{
+ GSM_Bitmap tbitmap;
+ GSM_Error error;
+
+ tbitmap=bitmap;
+
+ strncpy(tbitmap.netcode,GSM_GetNetworkCode(networkInfo.NetworkCode),7);
+
+ error=GSM_SaveBitmapFile(name,&tbitmap);
+ if (error!=GE_NONE) {
+ gchar *buf = g_strdup_printf(_("Error saving file\n(error=%d)"),error);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ }
+}
+
+static void YesLogoFileExportDialog (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ExportLogoFileMain(exportDialogData.fileName);
+}
+
+static void ExportFileSelected (GtkWidget *w, GtkFileSelection *fs)
+{
+ static YesNoDialog dialog = { NULL, NULL};
+ FILE *f;
+ gchar err[80];
+
+ exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+ {
+ fclose (f);
+ if (dialog.dialog == NULL)
+ {
+ CreateYesNoDialog (&dialog, YesLogoFileExportDialog, CancelDialog, GUI_LogosWindow);
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+ g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName);
+ gtk_label_set_text (GTK_LABEL(dialog.text), err);
+ }
+ gtk_widget_show (dialog.dialog);
+ }
+ else
+ ExportLogoFileMain(exportDialogData.fileName);
+}
+
+void ImportFileSelected(GtkWidget *w, GtkFileSelection *fs)
+{
+ GSM_Bitmap tbitmap;
+ GSM_Error error=0;
+
+ gchar *fileName;
+ FILE *f;
+
+ fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (fileName, "r")) == NULL) {
+ gchar *buf = g_strdup_printf(_("Can't open file %s for reading !"),fileName);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ return;
+ }
+
+ error=GSM_ReadBitmapFile(fileName,&tbitmap);
+ if (error!=GE_NONE) {
+ gchar *buf = g_strdup_printf(_("Error reading file\n(error=%d)"),error);
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+ return;
+ }
+
+ exportDialogData.fileName=fileName;
+
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),false);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),false);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),false);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),false);
+
+ if (tbitmap.type==GSM_OperatorLogo || tbitmap.type==GSM_7110OperatorLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),true);
+ if (tbitmap.type==GSM_StartupLogo || tbitmap.type==GSM_7110StartupLogo || tbitmap.type==GSM_6210StartupLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),true);
+ if (tbitmap.type==GSM_CallerLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),true);
+ if (tbitmap.type==GSM_PictureImage) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),true);
+
+ memcpy(&bitmap,&tbitmap,sizeof(GSM_Bitmap));
+
+ if (!strcmp(xgnokiiConfig.model,"7110")) { //7110
+ if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_6210StartupLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+
+ if (bitmap.type==GSM_OperatorLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+
+ } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250
+ if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_7110StartupLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+
+ if (bitmap.type==GSM_OperatorLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo);
+
+ } else {
+ if (bitmap.type==GSM_6210StartupLogo || bitmap.type==GSM_7110StartupLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+ if (bitmap.type==GSM_7110OperatorLogo)
+ GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo);
+ }
+
+ UpdatePoints(drawingArea);
+}
+
+void SaveLogoAs(GtkWidget *widget)
+{
+ FileSelection=gtk_file_selection_new ("Save logo as ...");
+
+ gtk_signal_connect (
+ GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button),
+ "clicked", (GtkSignalFunc) ExportFileSelected, FileSelection);
+
+ gtk_signal_connect_object (
+ GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button),
+ "clicked", (GtkSignalFunc) gtk_widget_destroy,
+ GTK_OBJECT (FileSelection));
+
+ gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection));
+
+ gtk_widget_show(FileSelection);
+}
+
+void SaveLogo(GtkWidget *widget)
+{
+ if (exportDialogData.fileName==NULL) {
+ SaveLogoAs(widget);
+ } else {
+ ExportLogoFileMain(exportDialogData.fileName);
+ }
+}
+
+void OpenLogo(GtkWidget *widget)
+{
+ FileSelection=gtk_file_selection_new ("Open logo...");
+
+ gtk_signal_connect (
+ GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button),
+ "clicked", (GtkSignalFunc) ImportFileSelected, FileSelection);
+
+ gtk_signal_connect_object (
+ GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button),
+ "clicked", (GtkSignalFunc) gtk_widget_destroy,
+ GTK_OBJECT (FileSelection));
+
+ gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection));
+
+ gtk_widget_show(FileSelection);
+}
+
+static GtkItemFactoryEntry logosMenuItems[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>O", OpenLogo, 0, NULL},
+ { NULL, "<control>S", SaveLogo, 0, NULL},
+ { NULL, NULL, SaveLogoAs, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>G", GetNetworkInfoEvent, 0, NULL},
+ { NULL, NULL, GetLogoEvent, 0, NULL},
+ { NULL, "<control>T", SetLogoEvent, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseLogosWindow, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>C", ClearLogoEvent, 0, NULL},
+ { NULL, "<control>I", InvertLogoEvent, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>U", UpLogoEvent, 0, NULL},
+ { NULL, "<control>D", DownLogoEvent, 0, NULL},
+ { NULL, "<control>L", LeftLogoEvent, 0, NULL},
+ { NULL, "<control>R", RightLogoEvent, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>H", FlipHorizontalLogoEvent, 0, NULL},
+ { NULL, "<control>V", FlipVerticalLogoEvent, 0, NULL},
+};
+
+static void InitLogosMenu (void) {
+ logosMenuItems[0].path = g_strdup(_("/_File"));
+ logosMenuItems[1].path = g_strdup(_("/File/_Open"));
+ logosMenuItems[2].path = g_strdup(_("/File/_Save"));
+ logosMenuItems[3].path = g_strdup(_("/File/Save _as ..."));
+ logosMenuItems[4].path = g_strdup(_("/File/Sep1"));
+ logosMenuItems[5].path = g_strdup(_("/File/_Get operator"));
+ logosMenuItems[6].path = g_strdup(_("/File/Get _logo"));
+ logosMenuItems[7].path = g_strdup(_("/File/Se_t logo"));
+ logosMenuItems[8].path = g_strdup(_("/File/Sep2"));
+ logosMenuItems[9].path = g_strdup(_("/File/_Close"));
+ logosMenuItems[10].path = g_strdup(_("/_Edit"));
+ logosMenuItems[11].path = g_strdup(_("/Edit/_Clear"));
+ logosMenuItems[12].path = g_strdup(_("/Edit/_Invert"));
+ logosMenuItems[13].path = g_strdup(_("/Edit/Sep3"));
+ logosMenuItems[14].path = g_strdup(_("/Edit/_Up logo"));
+ logosMenuItems[15].path = g_strdup(_("/Edit/_Down logo"));
+ logosMenuItems[16].path = g_strdup(_("/Edit/_Left logo"));
+ logosMenuItems[17].path = g_strdup(_("/Edit/_Right logo"));
+ logosMenuItems[18].path = g_strdup(_("/Edit/Sep4"));
+ logosMenuItems[19].path = g_strdup(_("/Edit/Flip _horizontal"));
+ logosMenuItems[20].path = g_strdup(_("/Edit/Flip _vertical"));
+}
+
+void GUI_CreateLogosWindow (void) {
+ int nMenuItems = sizeof (logosMenuItems) / sizeof (logosMenuItems[0]);
+ GtkAccelGroup *accelGroup;
+ GtkItemFactory *itemFactory;
+ GtkWidget *menuBar;
+ GtkWidget *toolBar, *vertToolBar;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *drawingBox;
+ GtkWidget *separator;
+ GdkBitmap *mask;
+
+ GList *glistNetwork = NULL;
+
+ int i = 0;
+
+ previewPixmapWidth = PREVIEWWIDTH;
+ previewPixmapHeight = PREVIEWHEIGHT;
+
+ InitLogosMenu();
+
+ /* realize top level window for logos */
+ GUI_LogosWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_policy(GTK_WINDOW(GUI_LogosWindow),1,1,1);
+ gtk_window_set_title(GTK_WINDOW(GUI_LogosWindow),_("Logos"));
+ gtk_signal_connect(GTK_OBJECT(GUI_LogosWindow),"delete_event",
+ GTK_SIGNAL_FUNC(DeleteEvent),NULL);
+ gtk_widget_realize(GUI_LogosWindow);
+
+ CreateErrorDialog(&errorDialog,GUI_LogosWindow);
+ CreateInfoDialog(&infoDialog,GUI_LogosWindow);
+
+ accelGroup = gtk_accel_group_new();
+ gtk_accel_group_attach(accelGroup,GTK_OBJECT(GUI_LogosWindow));
+
+ /* create main vbox */
+ vbox = gtk_vbox_new(FALSE,1);
+ gtk_container_add(GTK_CONTAINER(GUI_LogosWindow),vbox);
+ gtk_widget_show(vbox);
+
+ itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accelGroup);
+ gtk_item_factory_create_items(itemFactory,nMenuItems,logosMenuItems,NULL);
+ menuBar = gtk_item_factory_get_widget(itemFactory,"<main>");
+
+ gtk_box_pack_start(GTK_BOX(vbox),menuBar,FALSE,FALSE,0);
+ gtk_widget_show(menuBar);
+
+ /* toolbar */
+ toolBar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolBar),GTK_RELIEF_NORMAL);
+ gtk_toolbar_set_style(GTK_TOOLBAR(toolBar),GTK_TOOLBAR_ICONS);
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Clear logo",NULL,
+ NewPixmap(New_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)ClearLogoEvent,toolBar);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Get logo",NULL,
+ NewPixmap(Read_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)GetLogoEvent,toolBar);
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Set logo",NULL,
+ NewPixmap(Send_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)SetLogoEvent,toolBar);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+
+ buttonStartup = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Startup logo",
+ "",NewPixmap(Startup_logo_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+ buttonOperator = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonStartup,NULL,"Operator logo",
+ "",NewPixmap(Operator_logo_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+ buttonCaller = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,
+ buttonOperator,
+ NULL,"Caller logo",
+ "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+ buttonPicture = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,
+ buttonOperator,
+ NULL,"Picture image",
+ "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(LogoTypeEvent),NULL);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolBar));
+
+ networkCombo = gtk_combo_new();
+ gtk_combo_set_use_arrows_always(GTK_COMBO(networkCombo),1);
+ while (strcmp(GSM_Networks[i].Name,"unknown"))
+ glistNetwork = g_list_insert_sorted(glistNetwork,GSM_Networks[i++].Name,
+ (GCompareFunc)strcmp);
+ gtk_combo_set_popdown_strings(GTK_COMBO(networkCombo),glistNetwork);
+ gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(networkCombo)->entry),FALSE);
+ gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),networkCombo,"","");
+ gtk_widget_show(networkCombo);
+ g_list_free(glistNetwork);
+
+ callerCombo = gtk_combo_new();
+ gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(callerCombo)->entry),FALSE);
+ gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),callerCombo,"","");
+ gtk_widget_show(callerCombo);
+
+ gtk_box_pack_start(GTK_BOX(vbox),toolBar,FALSE,FALSE,0);
+ gtk_widget_show(toolBar);
+
+ /* vertical separator */
+ separator = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(separator),FALSE,FALSE,0);
+
+ /* create horizontal box for preview and drawing areas */
+ hbox = gtk_hbox_new(FALSE,5);
+ gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
+ gtk_widget_show(hbox);
+
+ /* set GSM_Bitmap width,height needed for creating drawinArea
+ * we are starting, default is startupLogo
+ */
+ bitmap.type = GSM_7110StartupLogo;
+ bitmap.height = 65;
+ bitmap.width = 96;
+ bitmap.size = bitmap.height * bitmap.width / 8;
+ if (!strcmp(xgnokiiConfig.model,"7110")) { //7110
+ GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo);
+ } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250
+ GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo);
+ } else {
+ GSM_ResizeBitmap(&bitmap,GSM_StartupLogo);
+ }
+ drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1;
+ drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1;
+
+ /* previewArea */
+ previewPixmap = GetPreviewPixmap(GUI_LogosWindow);
+
+ if (previewPixmap != NULL) {
+ previewArea = gtk_drawing_area_new();
+ gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
+ previewPixmapWidth,previewPixmapHeight);
+
+ greenPixelPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+ &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],
+ Green_pixel_xpm);
+
+ gtk_signal_connect(GTK_OBJECT(previewArea),"expose_event",
+ (GtkSignalFunc)PreviewAreaExposeEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(previewArea),"configure_event",
+ (GtkSignalFunc)PreviewAreaConfigureEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(previewArea),"button_press_event",
+ (GtkSignalFunc)PreviewAreaButtonPressEvent,NULL);
+
+ gtk_widget_set_events(previewArea,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK );
+
+ gtk_box_pack_start(GTK_BOX(hbox),previewArea,FALSE,FALSE,0);
+ gtk_widget_show(previewArea);
+
+ /* clear battery, signal, menu & names from preview phone */
+ UpdatePreviewPoints ();
+
+ } else previewAvailable = 0;
+
+ /* drawingArea */
+ greenPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+ &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Green_point_xpm);
+ blackPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window,
+ &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Black_point_xpm);
+
+ drawingBox = gtk_vbox_new(FALSE,3);
+ gtk_box_pack_start(GTK_BOX(hbox),drawingBox,FALSE,FALSE,0);
+ gtk_widget_show(drawingBox);
+
+ drawingArea = gtk_drawing_area_new();
+ gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea),
+ drawingAreaWidth,drawingAreaHeight);
+
+ gtk_signal_connect(GTK_OBJECT(drawingArea),"configure_event",
+ (GtkSignalFunc)DrawingAreaConfigureEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(drawingArea),"expose_event",
+ (GtkSignalFunc)DrawingAreaExposeEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(drawingArea),"button_press_event",
+ (GtkSignalFunc)DrawingAreaButtonPressEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(drawingArea),"button_release_event",
+ (GtkSignalFunc)DrawingAreaButtonReleaseEvent,NULL);
+ gtk_signal_connect(GTK_OBJECT(drawingArea),"motion_notify_event",
+ (GtkSignalFunc)DrawingAreaMotionNotifyEvent,NULL);
+
+ gtk_widget_set_events(drawingArea,GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
+
+ gtk_box_pack_start(GTK_BOX(drawingBox),drawingArea,FALSE,FALSE,0);
+ gtk_widget_show(drawingArea);
+
+ /* vertical tool bar */
+ vertToolBar = gtk_toolbar_new(GTK_ORIENTATION_VERTICAL,GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief(GTK_TOOLBAR(vertToolBar),GTK_RELIEF_NORMAL);
+ gtk_toolbar_set_style(GTK_TOOLBAR(vertToolBar),GTK_TOOLBAR_ICONS);
+
+ buttonBrush = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Brush tool",
+ "",NewPixmap(Tool_brush_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+ buttonLine = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonBrush,NULL,"Line tool",
+ "",NewPixmap(Tool_line_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+ buttonRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonLine,NULL,"Rectangle tool",
+ "",NewPixmap(Tool_rectangle_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+ buttonFilledRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar),
+ GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonRectangle,NULL,
+ "Filled rectangle tool",
+ "",NewPixmap(Tool_filled_rectangle_xpm,
+ GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ GTK_SIGNAL_FUNC(ToolTypeEvent),NULL);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(vertToolBar));
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Invert logo",NULL,
+ NewPixmap(Edit_invert_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)InvertLogoEvent,vertToolBar);
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Horizontal flip",NULL,
+ NewPixmap(Edit_flip_horizontal_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)FlipHorizontalLogoEvent,vertToolBar);
+
+ gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Vertical flip",NULL,
+ NewPixmap(Edit_flip_vertical_xpm,GUI_LogosWindow->window,
+ &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc)FlipVerticalLogoEvent,vertToolBar);
+
+
+ gtk_box_pack_start(GTK_BOX(hbox),vertToolBar,FALSE,FALSE,0);
+ gtk_widget_show(vertToolBar);
+
+ GUIEventAdd(GUI_EVENT_CALLERS_GROUPS_CHANGED,&GUI_RefreshLogosGroupsCombo);
+}
+
+void GUI_RefreshLogosGroupsCombo (void) {
+ GList *callerList = NULL;
+ int i;
+
+ for (i = 0;i < 6;i++)
+ callerList = g_list_insert(callerList,xgnokiiConfig.callerGroups[i],i);
+
+ gtk_combo_set_popdown_strings(GTK_COMBO(callerCombo),callerList);
+ g_list_free(callerList);
+
+ if (!callersGroupsInitialized) callersGroupsInitialized = 1;
+}
+
+void GUI_ShowLogosWindow (void) {
+
+ gtk_widget_show(buttonCaller);
+ gtk_widget_show(callerCombo);
+
+ if (xgnokiiConfig.callerGroups[0] == NULL) {
+ GUI_Refresh();
+ GUI_InitCallerGroupsInf ();
+ }
+
+ if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo ();
+
+ gtk_widget_show(GUI_LogosWindow);
+
+ if (!previewAvailable && showPreviewErrorDialog) {
+ gchar *buf = g_strdup(_("Load preview pixmap error, feature disabled."));
+ gtk_label_set_text(GTK_LABEL(errorDialog.text),buf);
+ gtk_widget_show(errorDialog.dialog);
+ g_free(buf);
+
+ showPreviewErrorDialog = 0;
+ }
+}
--- /dev/null
+#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
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+#include <glib.h>
+#include "gsm-api.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+
+pthread_t monitor_th;
+PhoneMonitor phoneMonitor;
+pthread_mutex_t memoryMutex;
+pthread_cond_t memoryCond;
+pthread_mutex_t calendarMutex;
+pthread_cond_t calendarCond;
+pthread_mutex_t smsMutex;
+pthread_mutex_t sendSMSMutex;
+pthread_cond_t sendSMSCond;
+pthread_mutex_t callMutex;
+pthread_mutex_t netMonMutex;
+pthread_mutex_t speedDialMutex;
+pthread_cond_t speedDialCond;
+pthread_mutex_t callerGroupMutex;
+pthread_cond_t callerGroupCond;
+pthread_mutex_t smsCenterMutex;
+pthread_cond_t smsCenterCond;
+pthread_mutex_t alarmMutex;
+pthread_cond_t alarmCond;
+pthread_mutex_t getBitmapMutex;
+pthread_cond_t getBitmapCond;
+pthread_mutex_t setBitmapMutex;
+pthread_cond_t setBitmapCond;
+pthread_mutex_t getNetworkInfoMutex;
+pthread_cond_t getNetworkInfoCond;
+static pthread_mutex_t eventsMutex;
+static GSList *ScheduledEvents = NULL;
+
+
+inline void GUI_InsertEvent (PhoneEvent *event)
+{
+ while (phoneMonitor.working) {
+ usleep(1);
+ }
+
+# ifdef XDEBUG
+ g_print ("Inserting Event: %d\n", event->event);
+# endif
+ pthread_mutex_lock (&eventsMutex);
+ ScheduledEvents = g_slist_prepend (ScheduledEvents, event);
+ pthread_mutex_unlock (&eventsMutex);
+}
+
+
+inline static PhoneEvent *RemoveEvent (void)
+{
+ GSList *list;
+ PhoneEvent *event = NULL;
+
+ pthread_mutex_lock (&eventsMutex);
+ list = g_slist_last (ScheduledEvents);
+ if (list)
+ {
+ event = (PhoneEvent *) list->data;
+ ScheduledEvents = g_slist_remove_link (ScheduledEvents, list);
+ g_slist_free_1 (list);
+ }
+ pthread_mutex_unlock (&eventsMutex);
+
+ return (event);
+}
+
+
+static void InitModelInf (void)
+{
+ gchar buf[64];
+ GSM_Error error;
+ register gint i = 0;
+
+ while ((error = GSM->GetModel(buf)) != GE_NONE && i++ < 15)
+ sleep(1);
+
+ if (error == GE_NONE)
+ {
+ g_free (phoneMonitor.phone.model);
+ phoneMonitor.phone.version = g_strdup (buf);
+ phoneMonitor.phone.model = GetModelName (buf);
+ if (phoneMonitor.phone.model == NULL)
+ phoneMonitor.phone.model = g_strdup (_("unknown"));
+ }
+
+ i = 0;
+ while ((error = GSM->GetRevision (buf)) != GE_NONE && i++ < 5)
+ sleep(1);
+
+ if (error == GE_NONE)
+ {
+ g_free (phoneMonitor.phone.revision);
+ phoneMonitor.phone.revision = g_strdup (buf);
+ }
+
+ i = 0;
+ while ((error = GSM->GetIMEI (buf)) != GE_NONE && i++ < 5)
+ sleep(1);
+
+ if (error == GE_NONE)
+ {
+ g_free (phoneMonitor.phone.imei);
+ phoneMonitor.phone.imei = g_strdup (buf);
+ }
+
+
+#ifdef XDEBUG
+ g_print ("Version: %s\n", phoneMonitor.phone.version);
+ g_print ("Model: %s\n", phoneMonitor.phone.model);
+ g_print ("IMEI: %s\n", phoneMonitor.phone.imei);
+ g_print ("Revision: %s\n", phoneMonitor.phone.revision);
+#endif
+}
+
+static GSM_Error fbusinit(bool enable_monitoring)
+{
+ int count=0;
+ static GSM_Error error=GE_NOLINK;
+
+#ifndef WIN32
+ if (strcmp(GetMygnokiiVersion(),VERSION)!=0)
+ fprintf(stderr,_("WARNING: version of installed libmygnokii.so (%s) is different to version of xgnokii (%s)\n"),GetMygnokiiVersion(),VERSION);
+#endif
+
+ /* Initialise the code for the GSM interface. */
+ if (error == GE_NOLINK)
+ error = GSM_Initialise (xgnokiiConfig.model, xgnokiiConfig.port,
+ xgnokiiConfig.initlength,
+ GetConnectionTypeFromString(xgnokiiConfig.connection),
+ RLP_DisplayF96Frame,
+ xgnokiiConfig.synchronizetime);
+
+#ifdef XDEBUG
+ g_print ("fbusinit: error %d\n", error);
+#endif
+
+ if (error != GE_NONE) {
+ g_print (_("GSM/FBUS init failed! (Unknown model ?). Quitting.\n"));
+ /* FIXME: should popup some message... */
+ return (error);
+ }
+
+ while (count++ < 40 && *GSM_LinkOK == false)
+ usleep(50000);
+#ifdef XDEBUG
+ g_print("After usleep. GSM_LinkOK: %d\n", *GSM_LinkOK);
+#endif
+
+ if (*GSM_LinkOK == true)
+ InitModelInf ();
+
+ return *GSM_LinkOK;
+}
+
+
+void GUI_InitPhoneMonitor (void)
+{
+ phoneMonitor.phone.model = g_strdup (_("unknown"));
+ phoneMonitor.phone.version = phoneMonitor.phone.model;
+ phoneMonitor.phone.revision = g_strdup (_("unknown"));
+ phoneMonitor.phone.imei = g_strdup (_("unknown"));
+ phoneMonitor.rfLevel = phoneMonitor.batteryLevel = -1;
+ phoneMonitor.powerSource = GPS_BATTERY;
+ phoneMonitor.working = FALSE;
+ phoneMonitor.alarm = FALSE;
+ phoneMonitor.sms.unRead = phoneMonitor.sms.number = phoneMonitor.sms.number2 = 0;
+ phoneMonitor.sms.messages = NULL;
+ phoneMonitor.call.callInProgress = CS_Idle;
+ *phoneMonitor.call.callNum = '\0';
+ phoneMonitor.netmonitor.number = 0;
+ *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 =
+ *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0';
+ pthread_mutex_init (&memoryMutex, NULL);
+ pthread_cond_init (&memoryCond, NULL);
+ pthread_mutex_init (&calendarMutex, NULL);
+ pthread_cond_init (&calendarCond, NULL);
+ pthread_mutex_init (&smsMutex, NULL);
+ pthread_mutex_init (&sendSMSMutex, NULL);
+ pthread_cond_init (&sendSMSCond, NULL);
+ pthread_mutex_init (&callMutex, NULL);
+ pthread_mutex_init (&eventsMutex, NULL);
+ pthread_mutex_init (&callMutex, NULL);
+ pthread_mutex_init (&netMonMutex, NULL);
+ pthread_mutex_init (&speedDialMutex, NULL);
+ pthread_cond_init (&speedDialCond, NULL);
+ pthread_mutex_init (&callerGroupMutex, NULL);
+ pthread_cond_init (&callerGroupCond, NULL);
+ pthread_mutex_init (&smsCenterMutex, NULL);
+ pthread_cond_init (&smsCenterCond, NULL);
+ pthread_mutex_init (&getBitmapMutex, NULL);
+ pthread_cond_init (&getBitmapCond, NULL);
+ pthread_mutex_init (&setBitmapMutex, NULL);
+ pthread_cond_init (&setBitmapCond, NULL);
+ pthread_mutex_init (&getNetworkInfoMutex, NULL);
+ pthread_cond_init (&getNetworkInfoCond, NULL);
+}
+
+
+static inline void FreeElement (gpointer data, gpointer userData)
+{
+ g_free ((GSM_SMSMessage *) data);
+}
+
+
+static inline void FreeArray (GSList **array)
+{
+ if (*array)
+ {
+ g_slist_foreach (*array, FreeElement, NULL);
+ g_slist_free (*array);
+ *array = NULL;
+ }
+}
+
+
+void RefreshSMS (const gint number)
+{
+ GSM_Error error;
+ GSM_SMSMessage *msg;
+ register gint i;
+
+# ifdef XDEBUG
+ g_print ("RefreshSMS is running...\n");
+# endif
+
+ pthread_mutex_lock (&smsMutex);
+ FreeArray (&(phoneMonitor.sms.messages));
+ phoneMonitor.sms.number = 0;
+ phoneMonitor.sms.number2 = 0;
+ pthread_mutex_unlock (&smsMutex);
+
+ i = 1;
+ while (1)
+ {
+ msg = g_malloc (sizeof (GSM_SMSMessage));
+ msg->MemoryType = GMT_SM;
+ msg->Location = i;
+#ifdef XDEBUG
+ fprintf(stdout, _("test: %d %i %i %i\n"),msg->Location,phoneMonitor.sms.number,phoneMonitor.sms.number2,number);
+#endif
+ pthread_mutex_lock (&smsMutex);
+ if( GetModelFeature(FN_SMS)==F_SMS71 ) msg->Location = 0; /* read next sms for 6210/7110 */
+ error = GSM->GetSMSMessage (msg);
+ pthread_mutex_unlock (&smsMutex);
+ switch (error) {
+ case GE_NONE:
+ pthread_mutex_lock (&smsMutex);
+#ifdef XDEBUG
+ fprintf(stdout, _("Refresh SMS: g_slist_append: sms message"));
+ fprintf(stdout, _(" Location: %d"),msg->Location);
+ fprintf(stdout, _(" folder: %d"),msg->folder);
+ if ( msg-> SMSData) fprintf(stdout, _(" SMSData true\n"));
+ else fprintf(stdout, _(" SMSData false\n"));
+#endif
+ /* RTH: unread sms from folder 0 to INBOX */
+ phoneMonitor.sms.messages = g_slist_append (phoneMonitor.sms.messages, msg);
+ phoneMonitor.sms.number++;
+ phoneMonitor.sms.number2++;
+ pthread_mutex_unlock (&smsMutex);
+ if (phoneMonitor.sms.number2 == number) return;
+ break;
+ case GE_SMSTOOLONG: /* Picture Image in 7110 comp phone */
+ g_free (msg);
+ phoneMonitor.sms.number2++;
+ if (phoneMonitor.sms.number2 == number) return;
+ break;
+ default:
+ g_free (msg);
+ break;
+ }
+ i++;
+ }
+}
+
+
+static gint A_GetMemoryStatus (gpointer data)
+{
+ GSM_Error error;
+ D_MemoryStatus *ms = (D_MemoryStatus *) data;
+
+ error = ms->status = GE_UNKNOWN;
+
+ if (ms)
+ {
+ pthread_mutex_lock (&memoryMutex);
+ error = ms->status = GSM->GetMemoryStatus (&(ms->memoryStatus));
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_GetMemoryLocation (gpointer data)
+{
+ GSM_Error error;
+ D_MemoryLocation *ml = (D_MemoryLocation *) data;
+
+ error = ml->status = GE_UNKNOWN;
+
+ if (ml)
+ {
+ pthread_mutex_lock (&memoryMutex);
+ error = ml->status = GSM->GetMemoryLocation (ml->entry);
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_GetMemoryLocationAll (gpointer data)
+{
+ GSM_PhonebookEntry entry;
+ GSM_Error error;
+ D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data;
+ register gint i;
+ gint readed=0;
+
+ error = mla->status = GE_NONE;
+ entry.MemoryType = mla->type;
+
+ pthread_mutex_lock (&memoryMutex);
+ for (i = mla->min; i <= mla->max; i++)
+ {
+ entry.Location = i;
+ if (readed<mla->used) {
+ error = GSM->GetMemoryLocation (&entry);
+ if (error != GE_NONE)
+ {
+ gint err_count = 0;
+
+ while (error != GE_NONE &&
+ error != GE_INVALIDPHBOOKLOCATION && error != GE_UNKNOWN) //n7110.c
+ {
+ g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"),
+ __FILE__, __LINE__, i, entry.MemoryType, error);
+ if (err_count++ > 3)
+ {
+ mla->ReadFailed (i);
+ mla->status = error;
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ return (error);
+ }
+
+ error = GSM->GetMemoryLocation (&entry);
+ sleep (2);
+ }
+ }
+
+ if (strcmp(entry.Number, "\0") || strcmp(entry.Name, "\0"))
+ readed++;
+
+ } else {
+ entry.Number[0]='\0';
+ entry.Name[0]='\0';
+ }
+
+ error = mla->InsertEntry (&entry);
+ if (error != GE_NONE)
+ break;
+ }
+ mla->status = error;
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ return (error);
+}
+
+
+static gint A_WriteMemoryLocation (gpointer data)
+{
+ GSM_Error error;
+ D_MemoryLocation *ml = (D_MemoryLocation *) data;
+
+ error = ml->status = GE_UNKNOWN;
+
+ if (ml)
+ {
+ pthread_mutex_lock (&memoryMutex);
+ error = ml->status = GSM->WritePhonebookLocation (ml->entry);
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_WriteMemoryLocationAll (gpointer data)
+{
+/* GSM_PhonebookEntry entry; */
+ GSM_Error error;
+ D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data;
+/* register gint i;
+*/
+ error = mla->status = GE_NONE;
+/* entry.MemoryType = mla->type;
+
+ pthread_mutex_lock (&memoryMutex);
+ for (i = mla->min; i <= mla->max; i++)
+ {
+ entry.Location = i;
+ error = GSM->GetMemoryLocation (&entry);
+ if (error != GE_NONE)
+ {
+ gint err_count = 0;
+
+ while (error != GE_NONE)
+ {
+ g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"),
+ __FILE__, __LINE__, i, entry.MemoryType, error);
+ if (err_count++ > 3)
+ {
+ mla->ReadFailed (i);
+ mla->status = error;
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex);
+ return (error);
+ }
+
+ error = GSM->GetMemoryLocation (&entry);
+ sleep (2);
+ }
+ }
+ error = mla->InsertEntry (&entry);
+ if (error != GE_NONE)
+ break;
+ }
+ mla->status = error;
+ pthread_cond_signal (&memoryCond);
+ pthread_mutex_unlock (&memoryMutex); */
+ return (error);
+}
+
+
+static gint A_GetCalendarNote (gpointer data)
+{
+ GSM_Error error;
+ D_CalendarNote *cn = (D_CalendarNote *) data;
+
+ error = cn->status = GE_UNKNOWN;
+
+ if (cn)
+ {
+ pthread_mutex_lock (&calendarMutex);
+ error = cn->status = GSM->GetCalendarNote (cn->entry);
+ pthread_cond_signal (&calendarCond);
+ pthread_mutex_unlock (&calendarMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_GetCalendarNoteAll (gpointer data)
+{
+ GSM_CalendarNote entry;
+ D_CalendarNoteAll *cna = (D_CalendarNoteAll *) data;
+ GSM_Error e;
+ register gint i = 1;
+
+ pthread_mutex_lock (&calendarMutex);
+ while (1)
+ {
+ entry.Location = i++;
+
+ if ((e = GSM->GetCalendarNote (&entry)) != GE_NONE)
+ break;
+
+ if (cna->InsertEntry (&entry) != GE_NONE)
+ break;
+ }
+
+ pthread_mutex_unlock (&calendarMutex);
+ g_free (cna);
+ if (e == GE_INVALIDCALNOTELOCATION)
+ return (GE_NONE);
+ else
+ return (e);
+}
+
+static gint A_WriteCalendarNote (gpointer data)
+{
+ GSM_Error error;
+ D_CalendarNote *cn = (D_CalendarNote *) data;
+
+ error = cn->status = GE_UNKNOWN;
+
+ if (cn)
+ {
+ pthread_mutex_lock (&calendarMutex);
+ error = cn->status = GSM->WriteCalendarNote (cn->entry);
+ pthread_cond_signal (&calendarCond);
+ pthread_mutex_unlock (&calendarMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_DeleteCalendarNote (gpointer data)
+{
+ GSM_CalendarNote *note = (GSM_CalendarNote *) data;
+ GSM_Error error = GE_UNKNOWN;
+
+ if (note)
+ {
+ error = GSM->DeleteCalendarNote (note);
+ g_free (note);
+ }
+
+ return (error);
+}
+
+static gint A_GetCallerGroup (gpointer data)
+{
+ GSM_Bitmap bitmap;
+ GSM_Error error;
+ D_CallerGroup *cg = (D_CallerGroup *) data;
+
+ error = cg->status = GE_UNKNOWN;
+
+ if (cg)
+ {
+ bitmap.type = GSM_CallerLogo;
+ bitmap.number = cg->number;
+
+ pthread_mutex_lock (&callerGroupMutex);
+ error = cg->status = GSM->GetBitmap (&bitmap);
+ strncpy (cg->text, bitmap.text, 256);
+ cg->text[255] = '\0';
+ pthread_cond_signal (&callerGroupCond);
+ pthread_mutex_unlock (&callerGroupMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SendCallerGroup (gpointer data)
+{
+ GSM_Bitmap bitmap;
+ D_CallerGroup *cg = (D_CallerGroup *) data;
+ GSM_Error error;
+
+ if (!cg)
+ return (GE_UNKNOWN);
+
+ bitmap.type = GSM_CallerLogo;
+ bitmap.number = cg->number;
+ if ((error = GSM->GetBitmap (&bitmap)) != GE_NONE)
+ {
+ g_free (cg);
+ return (error);
+ }
+ strncpy (bitmap.text, cg->text, 256);
+ bitmap.text[255] = '\0';
+ g_free (cg);
+ return (GSM->SetBitmap (&bitmap));
+}
+
+
+static gint A_GetSMSCenter (gpointer data)
+{
+ D_SMSCenter *c = (D_SMSCenter *) data;
+ GSM_Error error;
+
+ error = c->status = GE_UNKNOWN;
+ if (c)
+ {
+ pthread_mutex_lock (&smsCenterMutex);
+ error = c->status = GSM->GetSMSCenter (c->center);
+ pthread_cond_signal (&smsCenterCond);
+ pthread_mutex_unlock (&smsCenterMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SetSMSCenter (gpointer data)
+{
+ D_SMSCenter *c = (D_SMSCenter *) data;
+ GSM_Error error;
+
+ error = c->status = GE_UNKNOWN;
+ if (c)
+ {
+ //pthread_mutex_lock (&smsCenterMutex);
+ error = c->status = GSM->SetSMSCenter (c->center);
+ g_free (c);
+ //pthread_cond_signal (&smsCenterCond);
+ //pthread_mutex_unlock (&smsCenterMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SendSMSMessage (gpointer data)
+{
+ D_SMSMessage *d = (D_SMSMessage *) data;
+ GSM_Error error;
+
+ error = d->status = GE_UNKNOWN;
+ if (d)
+ {
+ pthread_mutex_lock (&sendSMSMutex);
+ error = d->status = GSM->SendSMSMessage (d->sms);
+ pthread_cond_signal (&sendSMSCond);
+ pthread_mutex_unlock (&sendSMSMutex);
+ }
+
+ if (d->status == GE_SMSSENDOK)
+ return (GE_NONE);
+ else
+ return (error);
+}
+
+
+static gint A_DeleteSMSMessage (gpointer data)
+{
+ GSM_SMSMessage *sms = (GSM_SMSMessage *) data;
+ GSM_Error error = GE_UNKNOWN;
+
+ if (sms)
+ {
+ error = GSM->DeleteSMSMessage(sms);
+ g_free (sms);
+ }
+
+ return (error);
+}
+
+
+static gint A_GetSpeedDial (gpointer data)
+{
+ D_SpeedDial *d = (D_SpeedDial *) data;
+ GSM_Error error;
+
+ error = d->status = GE_UNKNOWN;
+
+ if (d)
+ {
+ pthread_mutex_lock (&speedDialMutex);
+ error = d->status = GSM->GetSpeedDial (&(d->entry));
+ pthread_cond_signal (&speedDialCond);
+ pthread_mutex_unlock (&speedDialMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SendSpeedDial (gpointer data)
+{
+ D_SpeedDial *d = (D_SpeedDial *) data;
+ GSM_Error error;
+
+ error = d->status = GE_UNKNOWN;
+
+ if (d)
+ {
+ //pthread_mutex_lock (&speedDialMutex);
+ error = d->status = GSM->SetSpeedDial (&(d->entry));
+ g_free (d);
+ //pthread_cond_signal (&speedDialCond);
+ //pthread_mutex_unlock (&speedDialMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SendDTMF (gpointer data)
+{
+ gchar *buf = (gchar *) data;
+ GSM_Error error = GE_UNKNOWN;
+
+ if (buf)
+ {
+ error = GSM->SendDTMF (buf);
+ g_free (buf);
+ }
+
+ return (error);
+}
+
+
+static gint A_NetMonOnOff (gpointer data)
+{
+ gchar screen[50];
+ gint mode = GPOINTER_TO_INT (data);
+ GSM_Error error = GE_UNKNOWN;
+
+ if (mode)
+ error = GSM->NetMonitor (0xf3, screen);
+ else
+ error = GSM->NetMonitor (0xf1, screen);
+
+ return (error);
+}
+
+
+static gint A_NetMonitor (gpointer data)
+{
+ gint number = GPOINTER_TO_INT (data);
+
+ if (data == 0)
+ phoneMonitor.netmonitor.number = 0;
+ else
+ phoneMonitor.netmonitor.number = number;
+
+ return (0);
+}
+
+
+static gint A_DialVoice (gpointer data)
+{
+ gchar *number = (gchar *) data;
+ GSM_Error error = GE_UNKNOWN;
+
+ if (number)
+ {
+ error = GSM->DialVoice (number);
+ g_free (number);
+ }
+
+ return (error);
+}
+
+
+static gint A_GetAlarm (gpointer data)
+{
+ D_Alarm *a = (D_Alarm *) data;
+ GSM_Error error;
+
+ error = a->status = GE_UNKNOWN;
+
+ if (a)
+ {
+ pthread_mutex_lock (&alarmMutex);
+ error = a->status = GSM->GetAlarm (0, &(a->time));
+ pthread_cond_signal (&alarmCond);
+ pthread_mutex_unlock (&alarmMutex);
+ }
+
+ return (error);
+}
+
+
+static gint A_SetAlarm (gpointer data)
+{
+ D_Alarm *a = (D_Alarm *) data;
+ GSM_Error error;
+
+ error = a->status = GE_UNKNOWN;
+
+ if (a)
+ {
+ error = a->status = GSM->SetAlarm (0, &(a->time));
+ g_free (a);
+ }
+
+ return (error);
+}
+
+
+static gint A_SendKeyStroke (gpointer data)
+{
+ gchar *buf = (gchar *) data;
+
+ if (buf)
+ {
+ GSM->PressKey(buf[1], buf[0]);
+ g_free (buf);
+ }
+
+ return (0);
+}
+
+static gint A_GetBitmap(gpointer data) {
+ GSM_Error error;
+ D_Bitmap *d = (D_Bitmap *)data;
+
+ pthread_mutex_lock(&getBitmapMutex);
+ error = d->status = GSM->GetBitmap(d->bitmap);
+ pthread_cond_signal(&getBitmapCond);
+ pthread_mutex_unlock(&getBitmapMutex);
+ return error;
+}
+
+static gint A_SetBitmap(gpointer data) {
+ GSM_Error error;
+ D_Bitmap *d = (D_Bitmap *)data;
+ GSM_Bitmap bitmap;
+
+ pthread_mutex_lock(&setBitmapMutex);
+ if (d->bitmap->type == GSM_CallerLogo) {
+ bitmap.type = d->bitmap->type;
+ bitmap.number = d->bitmap->number;
+ error = d->status = GSM->GetBitmap(&bitmap);
+ if (error == GE_NONE) {
+ strncpy(d->bitmap->text,bitmap.text,sizeof(bitmap.text));
+ d->bitmap->ringtone = bitmap.ringtone;
+ error = d->status = GSM->SetBitmap(d->bitmap);
+ }
+ } else {
+ error = d->status = GSM->SetBitmap(d->bitmap);
+ }
+ pthread_cond_signal(&setBitmapCond);
+ pthread_mutex_unlock(&setBitmapMutex);
+ return error;
+}
+
+static gint A_GetNetworkInfo(gpointer data) {
+ GSM_Error error;
+ D_NetworkInfo *d = (D_NetworkInfo *)data;
+
+ pthread_mutex_lock(&getNetworkInfoMutex);
+ error = d->status = GSM->GetNetworkInfo(d->info);
+ pthread_cond_signal(&getNetworkInfoCond);
+ pthread_mutex_unlock(&getNetworkInfoMutex);
+ return error;
+}
+
+static gint A_Exit (gpointer data)
+{
+ pthread_exit (0);
+ return (0); /* just to be proper */
+}
+
+
+gint (*DoAction[])(gpointer) = {
+ A_GetMemoryStatus,
+ A_GetMemoryLocation,
+ A_GetMemoryLocationAll,
+ A_WriteMemoryLocation,
+ A_WriteMemoryLocationAll,
+ A_GetCalendarNote,
+ A_GetCalendarNoteAll,
+ A_WriteCalendarNote,
+ A_DeleteCalendarNote,
+ A_GetCallerGroup,
+ A_SendCallerGroup,
+ A_GetSMSCenter,
+ A_SetSMSCenter,
+ A_SendSMSMessage,
+ A_DeleteSMSMessage,
+ A_GetSpeedDial,
+ A_SendSpeedDial,
+ A_SendDTMF,
+ A_NetMonOnOff,
+ A_NetMonitor,
+ A_DialVoice,
+ A_GetAlarm,
+ A_SetAlarm,
+ A_SendKeyStroke,
+ A_GetBitmap,
+ A_SetBitmap,
+ A_GetNetworkInfo,
+ A_Exit
+};
+
+void *GUI_Connect (void *a)
+{
+ /* Define required unit types for RF and Battery level meters. */
+ GSM_RFUnits rf_units = GRF_Arbitrary;
+ GSM_BatteryUnits batt_units = GBU_Arbitrary;
+
+ GSM_DateTime Alarm;
+ gchar number[INCALL_NUMBER_LENGTH];
+ PhoneEvent *event=NULL;
+ GSM_Error error;
+ gint status;
+
+
+# ifdef XDEBUG
+ g_print ("Initializing connection...\n");
+# endif
+
+ phoneMonitor.working = _("Connecting...");
+ while (!fbusinit (true))
+ sleep (1);
+
+# ifdef XDEBUG
+ g_print ("Phone connected. Starting monitoring...\n");
+# endif
+
+ while (1)
+ {
+ if (event != NULL) {
+ phoneMonitor.working = _("Working...");
+ } else {
+ phoneMonitor.working = NULL;
+
+ if (GSM->GetRFLevel (&rf_units, &phoneMonitor.rfLevel) != GE_NONE)
+ phoneMonitor.rfLevel = -1;
+
+ if (rf_units == GRF_Arbitrary)
+ phoneMonitor.rfLevel *= 25;
+
+ if (GSM->GetPowerSource (&phoneMonitor.powerSource) == GE_NONE
+ && phoneMonitor.powerSource == GPS_ACDC)
+ phoneMonitor.batteryLevel = ((gint) phoneMonitor.batteryLevel + 25) % 125;
+ else
+ {
+ if (GSM->GetBatteryLevel (&batt_units, &phoneMonitor.batteryLevel) != GE_NONE)
+ phoneMonitor.batteryLevel = -1;
+ if (batt_units == GBU_Arbitrary)
+ phoneMonitor.batteryLevel *= 25;
+ }
+
+ if (GSM->GetAlarm (0, &Alarm) == GE_NONE && Alarm.IsSet != 0)
+ phoneMonitor.alarm = TRUE;
+ else
+ phoneMonitor.alarm = FALSE;
+
+ if (GSM->GetIncomingCallNr (number) == GE_NONE)
+ {
+# ifdef XDEBUG
+ g_print ("Call in progress: %s\n", phoneMonitor.call.callNum);
+# endif
+
+ if (GSM->GetDisplayStatus (&status)==GE_NONE) {
+ if (status & (1<<DS_Call_In_Progress))
+ {
+ pthread_mutex_lock (&callMutex);
+ phoneMonitor.call.callInProgress = CS_InProgress;
+ pthread_mutex_unlock (&callMutex);
+ }
+ else
+ {
+ pthread_mutex_lock (&callMutex);
+ phoneMonitor.call.callInProgress = CS_Waiting;
+ strncpy (phoneMonitor.call.callNum, number, INCALL_NUMBER_LENGTH);
+ pthread_mutex_unlock (&callMutex);
+ }
+ } else {
+ pthread_mutex_lock (&callMutex);
+ phoneMonitor.call.callInProgress = CS_Idle;
+ *phoneMonitor.call.callNum = '\0';
+ pthread_mutex_unlock (&callMutex);
+ }
+ }
+ else
+ {
+ pthread_mutex_lock (&callMutex);
+ phoneMonitor.call.callInProgress = CS_Idle;
+ *phoneMonitor.call.callNum = '\0';
+ pthread_mutex_unlock (&callMutex);
+ }
+
+ pthread_mutex_lock (&netMonMutex);
+ if (phoneMonitor.netmonitor.number)
+ {
+ GSM->NetMonitor (phoneMonitor.netmonitor.number,
+ phoneMonitor.netmonitor.screen);
+ GSM->NetMonitor (3, phoneMonitor.netmonitor.screen3);
+ GSM->NetMonitor (4, phoneMonitor.netmonitor.screen4);
+ GSM->NetMonitor (5, phoneMonitor.netmonitor.screen5);
+ }
+ else
+ {
+ *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 =
+ *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0';
+ }
+ pthread_mutex_unlock (&netMonMutex);
+ }
+ while ((event = RemoveEvent ()) != NULL)
+ {
+# ifdef XDEBUG
+ g_print ("Processing Event: %d\n", event->event);
+# endif
+ phoneMonitor.working = _("Working...");
+ if (event->event <= Event_Exit)
+ if ((error = DoAction[event->event] (event->data)) != GE_NONE)
+ g_print (_("Event %d failed with return code %d!\n"), event->event, error);
+ g_free (event);
+ }
+ }
+}
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_LOWLEVEL_H
+#define XGNOKII_LOWLEVEL_H
+
+#include <pthread.h>
+#include <glib.h>
+#include "gsm-api.h"
+
+#define INCALL_NUMBER_LENGTH 20
+#define NETMON_SCREEN_LENGTH 60
+
+typedef enum {
+ CS_Idle,
+ CS_Waiting,
+ CS_InProgress
+} CallState;
+
+typedef enum {
+ Event_GetMemoryStatus,
+ Event_GetMemoryLocation,
+ Event_GetMemoryLocationAll,
+ Event_WriteMemoryLocation,
+ Event_WriteMemoryLocationAll,
+ Event_GetCalendarNote,
+ Event_GetCalendarNoteAll,
+ Event_WriteCalendarNote,
+ Event_DeleteCalendarNote,
+ Event_GetCallerGroup,
+ Event_SendCallerGroup,
+ Event_GetSMSCenter,
+ Event_SetSMSCenter,
+ Event_SendSMSMessage,
+ Event_DeleteSMSMessage,
+ Event_GetSpeedDial,
+ Event_SendSpeedDial,
+ Event_SendDTMF,
+ Event_NetMonitorOnOff,
+ Event_NetMonitor,
+ Event_DialVoice,
+ Event_GetAlarm,
+ Event_SetAlarm,
+ Event_SendKeyStroke,
+ Event_GetBitmap,
+ Event_SetBitmap,
+ Event_GetNetworkInfo,
+ Event_Exit
+} PhoneAction;
+
+typedef struct {
+ PhoneAction event;
+ gpointer data;
+} PhoneEvent;
+
+typedef struct {
+ GSM_SpeedDial entry;
+ GSM_Error status;
+} D_SpeedDial;
+
+typedef struct {
+ GSM_SMSMessage *sms;
+ GSM_Error status;
+} D_SMSMessage;
+
+typedef struct {
+ GSM_MessageCenter *center;
+ GSM_Error status;
+} D_SMSCenter;
+
+typedef struct {
+ guchar number;
+ gchar text[256];
+ gint status;
+} D_CallerGroup;
+
+typedef struct {
+ GSM_DateTime time;
+ gint status;
+} D_Alarm;
+
+typedef struct {
+ GSM_MemoryStatus memoryStatus;
+ gint status;
+} D_MemoryStatus;
+
+typedef struct {
+ GSM_PhonebookEntry *entry;
+ gint status;
+} D_MemoryLocation;
+
+typedef struct {
+ gint min;
+ gint max;
+ gint used;
+ GSM_MemoryType type;
+ gint status;
+ gint (*InsertEntry)(GSM_PhonebookEntry *);
+ gint (*ReadFailed)(gint);
+} D_MemoryLocationAll;
+
+typedef struct {
+ GSM_CalendarNote *entry;
+ gint status;
+} D_CalendarNote;
+
+typedef struct {
+ gint status;
+ gint (*InsertEntry)(GSM_CalendarNote *);
+ gint (*ReadFailed)(gint);
+} D_CalendarNoteAll;
+
+typedef struct {
+ GSM_Error status;
+ GSM_Bitmap *bitmap;
+} D_Bitmap;
+
+typedef struct {
+ GSM_Error status;
+ GSM_NetworkInfo *info;
+} D_NetworkInfo;
+
+typedef struct {
+ gfloat rfLevel;
+ gfloat batteryLevel;
+ GSM_PowerSource powerSource;
+ gchar *working;
+ bool alarm;
+ struct {
+ gchar *model;
+ gchar *imei;
+ gchar *revision;
+ gchar *version;
+ } phone;
+ struct {
+ gint unRead;
+ gint number;
+ gint number2;
+ GSList *messages;
+ } sms;
+ struct {
+ CallState callInProgress;
+ gchar callNum[INCALL_NUMBER_LENGTH];
+ } call;
+ struct {
+ gint number;
+ gchar screen[NETMON_SCREEN_LENGTH];
+ gchar screen3[NETMON_SCREEN_LENGTH];
+ gchar screen4[NETMON_SCREEN_LENGTH];
+ gchar screen5[NETMON_SCREEN_LENGTH];
+ } netmonitor;
+} PhoneMonitor;
+
+extern pthread_t monitor_th;
+extern PhoneMonitor phoneMonitor;
+extern pthread_mutex_t memoryMutex;
+extern pthread_cond_t memoryCond;
+extern pthread_mutex_t calendarMutex;
+extern pthread_cond_t calendarCond;
+extern pthread_mutex_t smsMutex;
+extern pthread_mutex_t sendSMSMutex;
+extern pthread_cond_t sendSMSCond;
+extern pthread_mutex_t callMutex;
+extern pthread_mutex_t netMonMutex;
+extern pthread_mutex_t speedDialMutex;
+extern pthread_cond_t speedDialCond;
+extern pthread_mutex_t callerGroupMutex;
+extern pthread_cond_t callerGroupCond;
+extern pthread_mutex_t smsCenterMutex;
+extern pthread_cond_t smsCenterCond;
+extern pthread_mutex_t alarmMutex;
+extern pthread_cond_t alarmCond;
+extern pthread_mutex_t getBitmapMutex;
+extern pthread_cond_t getBitmapCond;
+extern pthread_mutex_t setBitmapMutex;
+extern pthread_cond_t setBitmapCond;
+extern pthread_mutex_t getNetworkInfoMutex;
+extern pthread_cond_t getNetworkInfoCond;
+extern void GUI_InitPhoneMonitor (void);
+extern void *GUI_Connect (void *a);
+extern void GUI_InsertEvent (PhoneEvent *event);
+
+extern void RefreshSMS (const gint number);
+
+#endif
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef WIN32
+# include <unistd.h>
+#endif
+#include <pthread.h>
+#include <stdlib.h> /* for atoi */
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_netmon.h"
+#include "xpm/Display.xpm"
+
+static GtkWidget *GUI_NetmonWindow;
+static DisplayData displayData = {NULL, 0};
+static GtkWidget *tableLabels[4][7];
+static GtkWidget *tableProgress[7];
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/netmon/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static inline void CloseNetmon (GtkWidget *w, gpointer data)
+{
+ PhoneEvent *e;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_NetMonitor;
+ e->data = (gpointer) 0;
+ GUI_InsertEvent (e);
+ gtk_widget_hide (GUI_NetmonWindow);
+}
+
+
+static inline void NetmonOnOff (GtkWidget *w, gpointer data)
+{
+ PhoneEvent *e;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_NetMonitorOnOff;
+ e->data = data;
+ GUI_InsertEvent (e);
+}
+
+
+static inline void RefreshDisplay ()
+{
+ static gchar number[3];
+
+ if (!GTK_WIDGET_VISIBLE(GUI_NetmonWindow))
+ return;
+
+ g_snprintf (number, 3, "%.2d", displayData.curDisp);
+ if (displayData.number)
+ gtk_label_set_text (GTK_LABEL (displayData.number), number);
+
+ pthread_mutex_lock (&netMonMutex);
+ if (phoneMonitor.netmonitor.screen && displayData.label)
+ gtk_label_set_text (GTK_LABEL (displayData.label),
+ g_strchomp (phoneMonitor.netmonitor.screen));
+ pthread_mutex_unlock (&netMonMutex);
+}
+
+
+static void SetDisplay (GtkWidget *widget, gpointer data)
+{
+ PhoneEvent *e;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_NetMonitor;
+ e->data = data;
+ GUI_InsertEvent (e);
+ displayData.curDisp = GPOINTER_TO_INT (data);
+
+ RefreshDisplay ();
+}
+
+static void ChangedSpinner (GtkWidget *widget, GtkSpinButton *spin)
+{
+ PhoneEvent *e;
+
+ displayData.curDisp = gtk_spin_button_get_value_as_int (spin);
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_NetMonitor;
+ e->data = (gpointer) displayData.curDisp;
+ GUI_InsertEvent (e);
+
+ RefreshDisplay ();
+}
+
+
+static void ParseScreen (gchar *screen, gint i)
+{
+ gchar buf[5];
+ gchar *ptr = screen;
+
+ if (ptr == NULL || *ptr == '\0')
+ return;
+
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+ ptr += 3;
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+ ptr += 3;
+ if (*ptr != '-')
+ {
+ buf[0] = '-';
+ strncpy (buf + 1, ptr, 3);
+ buf[4] = '\0';
+ }
+ else
+ {
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ }
+ gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+ ptr += 3;
+ gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+ ptr += 4;
+
+ if (i == 6)
+ return;
+
+ i++;
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+ ptr += 3;
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+ ptr += 3;
+ if (*ptr != '-')
+ {
+ buf[0] = '-';
+ strncpy (buf + 1, ptr, 3);
+ buf[4] = '\0';
+ }
+ else
+ {
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ }
+ gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+ ptr += 3;
+ gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+ ptr += 4;
+
+ i++;
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf);
+ ptr += 3;
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf);
+ ptr += 3;
+ if (*ptr != '-')
+ {
+ buf[0] = '-';
+ strncpy (buf + 1, ptr, 3);
+ buf[4] = '\0';
+ }
+ else
+ {
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ }
+ gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf);
+ ptr += 3;
+ gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf));
+ strncpy (buf, ptr, 3);
+ buf[3] = '\0';
+ gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf);
+}
+
+
+void GUI_RefreshNetmon ()
+{
+ if (!GTK_WIDGET_VISIBLE (GUI_NetmonWindow))
+ return;
+
+ pthread_mutex_lock (&netMonMutex);
+ ParseScreen (phoneMonitor.netmonitor.screen3, 0);
+ ParseScreen (phoneMonitor.netmonitor.screen4, 3);
+ ParseScreen (phoneMonitor.netmonitor.screen5, 6);
+ pthread_mutex_unlock (&netMonMutex);
+
+ RefreshDisplay ();
+}
+
+
+void AddToBorder (GtkWidget* table, gchar *text, gint i, gint j, gint k, gint l)
+{
+ GtkWidget *label = gtk_label_new (text);
+ GtkWidget *frame = gtk_frame_new (NULL);
+
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+ gtk_container_add (GTK_CONTAINER (frame), label);
+ gtk_table_attach_defaults (GTK_TABLE (table), frame, i, j, k, l);
+}
+
+
+inline void GUI_ShowNetmon ()
+{
+ PhoneEvent *e;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_NetMonitor;
+ e->data = (gpointer) displayData.curDisp;;
+ GUI_InsertEvent (e);
+ gtk_widget_show (GUI_NetmonWindow);
+}
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>W", CloseNetmon, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, NULL, NetmonOnOff, 1, NULL},
+ { NULL, NULL, NetmonOnOff, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Close"));
+ menu_items[2].path = g_strdup (_("/_Tools"));
+ menu_items[3].path = g_strdup (_("/Tools/Net monitor o_n"));
+ menu_items[4].path = g_strdup (_("/Tools/Net monitor o_ff"));
+ menu_items[5].path = g_strdup (_("/_Help"));
+ menu_items[6].path = g_strdup (_("/Help/_Help"));
+ menu_items[7].path = g_strdup (_("/Help/_About"));
+}
+
+
+#define DISPLAY_X 12
+#define DISPLAY_Y 15
+
+static inline gint ExposeDisplay (GtkWidget *widget, GdkEventExpose *event)
+{
+ GdkRectangle rec;
+ GtkRequisition r;
+
+ gtk_widget_size_request (displayData.number, &r);
+ rec.x = DISPLAY_X;
+ rec.y = DISPLAY_Y;
+ rec.width = r.width;
+ rec.height = r.height;
+ gtk_widget_draw (displayData.number, &rec);
+
+ gtk_widget_size_request (displayData.label, &r);
+ rec.x += 3;
+ rec.y += 12;
+ rec.width = r.width;
+ rec.height = r.height;
+ gtk_widget_draw (displayData.label, &rec);
+
+ return FALSE;
+}
+
+
+void GUI_CreateNetmonWindow ()
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *hbox, *vbox;
+ GtkWidget *toolbar;
+ GtkWidget *table;
+ GtkWidget *display;
+ GtkWidget *label;
+ GtkWidget *frame;
+ GtkWidget *button;
+ GtkWidget *pixmap;
+ GtkAdjustment *adj;
+ gint i,j;
+
+
+ InitMainMenu ();
+ GUI_NetmonWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_NetmonWindow), _("Net Monitor"));
+ //gtk_widget_set_usize (GTK_WIDGET (GUI_NetmonWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (GUI_NetmonWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_NetmonWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_NetmonWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_NetmonWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ frame = gtk_frame_new (NULL);
+ gtk_container_border_width (GTK_CONTAINER (frame), 10);
+ gtk_widget_show (frame);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_border_width (GTK_CONTAINER (hbox), 3);
+ gtk_container_add (GTK_CONTAINER (frame), hbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ display = gtk_fixed_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), display, FALSE, FALSE, 10);
+ gtk_widget_show (display);
+
+ pixmap = NewPixmap (Display_xpm, GUI_NetmonWindow->window,
+ &GUI_NetmonWindow->style->bg[GTK_STATE_NORMAL]);
+
+ gtk_signal_connect_after (GTK_OBJECT (pixmap), "expose_event",
+ (GtkSignalFunc) ExposeDisplay, NULL);
+
+ gtk_fixed_put (GTK_FIXED (display), pixmap, 0 , 0);
+ gtk_widget_show (pixmap);
+
+ displayData.number = gtk_label_new ("");
+ gtk_fixed_put (GTK_FIXED (display), displayData.number, DISPLAY_X, DISPLAY_Y);
+ gtk_widget_show (displayData.number);
+ displayData.label = gtk_label_new ("");
+ gtk_fixed_put (GTK_FIXED (display), displayData.label, DISPLAY_X + 3, DISPLAY_Y + 12);
+ gtk_widget_show (displayData.label);
+ displayData.curDisp = 0x01;
+
+ vbox = gtk_vbox_new (TRUE, 0);
+
+ /* 1. line */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "1", _("Active cell"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 1);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "2", _("Active cell"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 2);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "3", _("NCELL list I"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 3);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "4", _("NCELL list II"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 4);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "5", _("NCELL list III"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 5);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "6", _("Prefered/Denied networks"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 6);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "7", _("System information bits"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 7);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "10", _("TMSI, Paging, PLU"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 10);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "11", _("Cells info"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 11);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "12", _("DTX, Cipher, Hopping"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 12);
+
+ gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ /* 2. line */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "13", _("Uplink DTX"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 13);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "17", _("BTS TEST"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 17);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "19", _("CELL BARR-Flag"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 19);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "20", _("Accumulator, Charge status"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 20);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "21", _("?Constant voltage charging display"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 21);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "22", _("?Battery full detection"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 22);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "23", _("Accumulator"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 23);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "35", _("SW-Resets"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 35);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "36", _("Reset-Counter"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 36);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "39", _("Cause codes for last connection abortion"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 39);
+
+ gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ /* 3. line */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "40", _("Reset handover counters"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 40);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "41", _("Handover Counter"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 41);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "42", _("Handover Counter (Dual)"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 42);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "43", _("L2-Timeouts"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 43);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "51", _("SIM"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 51);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "54", _("?Block display 1"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 54);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "56", NULL,
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 56);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "57", _("Memory status before reset"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 57);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "60", _("Reset Counters"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 60);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "61", _("Counter for PLMN Search and Cell reselection (Singleband)"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 61);
+
+ gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ /* 4. line */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "62", _("Neighbourhood measurement"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 62);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "63", _("Calls"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 63);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "70", _("Temporary counters of DSP"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 70);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "83", _("Control of task information displays"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 83);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "84", _("Information about task numbers 0-7"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 84);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "85", _("Information about task numbers 8-15"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 85);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "86", _("Information about task numbers 16-23"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 86);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "87", _("Information about OS_SYSTEM_STACK"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 87);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "88", _("Information about current MCU and DSP software versions"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 88);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "89", _("Hardware version"),
+ NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 89);
+
+ gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 10);
+ gtk_widget_show (vbox);
+
+ table = gtk_table_new (6, 8, FALSE);
+
+ frame = gtk_frame_new (NULL);
+ gtk_container_add (GTK_CONTAINER (frame), table);
+ gtk_container_border_width (GTK_CONTAINER (frame), 10);
+ gtk_container_border_width (GTK_CONTAINER (table), 3);
+ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
+ AddToBorder (table, "", 0, 1, 0, 1);
+ AddToBorder (table, _("Chan"), 1, 2, 0, 1);
+ AddToBorder (table, _("RxLv"), 2, 3, 0, 1);
+ AddToBorder (table, _("C1"), 3, 4, 0, 1);
+ AddToBorder (table, _("C2"), 4, 5, 0, 1);
+ AddToBorder (table, _("ACT"), 0, 1, 1, 2);
+ AddToBorder (table, _("NC2"), 0, 1, 2, 3);
+ AddToBorder (table, _("NC3"), 0, 1, 3, 4);
+ AddToBorder (table, _("NC4"), 0, 1, 4, 5);
+ AddToBorder (table, _("NC5"), 0, 1, 5, 6);
+ AddToBorder (table, _("NC6"), 0, 1, 6, 7);
+ AddToBorder (table, _("NC7"), 0, 1, 7, 8);
+
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 7; j++)
+ {
+ tableLabels[i][j] = gtk_label_new ("");
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (frame), tableLabels[i][j]);
+ gtk_table_attach_defaults (GTK_TABLE (table), frame, i + 1, i + 2, j + 1, j + 2);
+ }
+
+ for (i = 0; i < 7; i++)
+ {
+ adj = (GtkAdjustment *) gtk_adjustment_new (-114, -114, -40, 0, 0, 0);
+ tableProgress[i] = gtk_progress_bar_new_with_adjustment (adj);
+ gtk_table_attach_defaults (GTK_TABLE (table), tableProgress[i], 5, 6, i + 1, i + 2);
+ }
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_table_attach_defaults (GTK_TABLE (table), hbox, 5, 6, 0, 1);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (1, 1, 89, 1, 10, 0);
+ button = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (button), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (button), TRUE);
+ gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (button), GTK_SHADOW_OUT);
+ gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+ GTK_SIGNAL_FUNC (ChangedSpinner), (gpointer) button);
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Page:"));
+ gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 5);
+
+ gtk_table_set_col_spacing (GTK_TABLE (table), 4, 10);
+ gtk_widget_show_all (table);
+ GUIEventAdd (GUI_EVENT_NETMON_CHANGED, GUI_RefreshNetmon);
+}
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#ifndef XGNOKII_NETMON_H
+#define XGNOKII_NETMON_H
+
+#include <gtk/gtk.h>
+
+typedef struct {
+ GtkWidget *number;
+ GtkWidget *label;
+ gint curDisp;
+} DisplayData;
+
+extern void GUI_CreateNetmonWindow ();
+
+extern void GUI_ShowNetmon ();
+
+extern void GUI_RefreshNetmon ();
+
+#endif
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+#include <unistd.h>
+#include <locale.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include "misc.h"
+#include "gsm-api.h"
+#include "gsm-datetime.h"
+#include "gsm-sms.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_sms.h"
+#include "xpm/Edit.xpm"
+#include "xpm/Delete.xpm"
+#include "xpm/Forward.xpm"
+#include "xpm/Reply.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/SendSMS.xpm"
+#include "xpm/Check.xpm"
+#include "xpm/Names.xpm"
+#include "xpm/BCard.xpm"
+#include "xpm/quest.xpm"
+
+typedef struct {
+ gint count; // Messages count
+ gint number; // Number of tail in Long SMS;
+ gint *msgPtr; // Array of MessageNumber;
+ gint validity;
+ gint class;
+ gchar sender[GSM_MAX_SENDER_LENGTH + 1];
+} MessagePointers;
+
+typedef struct {
+ gchar *number;
+ gchar *name;
+ gint used:1;
+} AddressPar;
+
+typedef struct {
+ GtkWidget *smsClist;
+ GtkWidget *smsText;
+ GSList *messages;
+ GdkColor colour;
+ gint row_i;
+ gint currentBox;
+} SMSWidget;
+
+typedef struct {
+ GtkWidget *SMSSendWindow;
+ GtkWidget *smsSendText;
+ GtkWidget *addr;
+ GtkWidget *status;
+ GtkWidget *report;
+ GtkWidget *longSMS;
+ GtkWidget *class;
+ GtkWidget *smscOptionMenu;
+ GtkTooltips *addrTip;
+ gint center;
+ GSList *addressLine;
+} SendSMSWidget;
+
+int prev_num_of_folders=0;
+
+static GtkWidget *GUI_SMSWindow;
+static SMSWidget SMS = {NULL, NULL, NULL};
+static SendSMSWidget sendSMS = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL};
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static QuestMark questMark;
+static GtkWidget *treeFolderItem[MAX_SMS_FOLDERS], *subTree;
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/sms/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static inline void Help2 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/help/%s/sms_send.html", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static inline void CloseSMS (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_SMSWindow);
+}
+
+
+static inline void CloseSMSSend (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (sendSMS.SMSSendWindow);
+}
+
+
+static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+ gchar *text1 = NULL;
+ gchar *text2 = NULL;
+
+ GtkCListRow *row1 = (GtkCListRow *) ptr1;
+ GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+ switch (row1->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+ switch (row2->cell[clist->sort_column].type)
+ {
+ case GTK_CELL_TEXT:
+ text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+ break;
+ case GTK_CELL_PIXTEXT:
+ text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
+ break;
+ default:
+ break;
+ }
+
+ if (!text2)
+ return (text1 != NULL);
+
+ if (!text1)
+ return -1;
+
+ if (clist->sort_column == 1 && !SMS.currentBox)
+ {
+ struct tm bdTime;
+ time_t time1, time2;
+
+ bdTime.tm_sec = atoi (text1 + 15);
+ bdTime.tm_min = atoi (text1 + 12);
+ bdTime.tm_hour = atoi (text1 + 9);
+ bdTime.tm_mday = atoi (text1);
+ bdTime.tm_mon = atoi (text1 + 3) - 1;
+ bdTime.tm_year = atoi (text1 + 6);
+ if (bdTime.tm_year < 70)
+ bdTime.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+ if (text1[17] != '\0')
+ bdTime.tm_gmtoff = atoi (text1 + 18) * 3600;
+#endif
+ bdTime.tm_isdst = -1;
+
+ time1 = mktime (&bdTime);
+
+ bdTime.tm_sec = atoi (text2 + 15);
+ bdTime.tm_min = atoi (text2 + 12);
+ bdTime.tm_hour = atoi (text2 + 9);
+ bdTime.tm_mday = atoi (text2);
+ bdTime.tm_mon = atoi (text2 + 3) - 1;
+ bdTime.tm_year = atoi (text2 + 6);
+ if (bdTime.tm_year < 70)
+ bdTime.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+ if (text2[17] != '\0')
+ bdTime.tm_gmtoff = atoi (text2 + 18) * 3600;
+#endif
+ bdTime.tm_isdst = -1;
+
+ time2 = mktime (&bdTime);
+
+ if (time1 < time2)
+ return (1);
+ else if (time1 > time2)
+ return (-1);
+ else
+ return 0;
+ }
+
+ return (g_strcasecmp (text1, text2));
+}
+
+
+static inline void DestroyMsgPtrs (gpointer data)
+{
+ g_free (((MessagePointers *) data)->msgPtr);
+ g_free ((MessagePointers *) data);
+}
+
+
+static void InsertFolderElement (gpointer d, gpointer userData)
+{
+ GSM_SMSMessage *data = (GSM_SMSMessage *) d;
+ MessagePointers *msgPtrs;
+ GSM_DateTime *dt;
+
+ if (data->folder == SMS.currentBox)
+ {
+ gchar *row[4];
+
+ if (data->Type == GST_DR)
+ {
+ row[0] = g_strdup (_("report"));
+ dt = &(data->SMSCTime);
+ }
+ else
+ {
+ dt = &(data->Time);
+ switch (data->Status)
+ {
+ case GSS_SENTREAD:
+ if (data->folder==0) //GST_INBOX
+ row[0] = g_strdup (_("read"));
+ else
+ row[0] = g_strdup (_("sent"));
+ break;
+ case GSS_NOTSENTREAD:
+ if (data->folder==0) //GST_INBOX
+ row[0] = g_strdup (_("unread"));
+ else
+ row[0] = g_strdup (_("not sent"));
+ break;
+ case GSS_UNKNOWN:
+ row[0] = g_strdup (_("not known :-("));
+ break;
+ case GSS_TEMPLATE:
+ row[0] = g_strdup (_("template"));
+ break;
+ default:
+ row[0] = g_strdup (_("unknown"));
+ break;
+ }
+ }
+
+ if (data->SMSData) {
+ if (dt->Timezone)
+ row[1] = g_strdup_printf ("%s %02d/%02d/%02d %02d:%02d:%02d %c%02d00",
+ DayOfWeek(dt->Year, dt->Month, dt->Day),
+ dt->Day, dt->Month, dt->Year,
+ dt->Hour, dt->Minute, dt->Second,
+ dt->Timezone > 0 ? '+' : '-', abs (dt->Timezone));
+ else
+ row[1] = g_strdup_printf ("%s %02d/%02d/%02d %02d:%02d:%02d",
+ DayOfWeek(dt->Year, dt->Month, dt->Day),
+ dt->Day, dt->Month, dt->Year,
+ dt->Hour, dt->Minute, dt->Second);
+ } else {
+ row[1] = g_strdup_printf ("unknown");
+ }
+
+ row[2] = GUI_GetName (data->Sender);
+ if (row[2] == NULL || row[2][0]==0) row[2] = data->Sender;
+
+ row[3] = data->MessageText;
+
+ msgPtrs = (MessagePointers *) g_malloc (sizeof (MessagePointers));
+ msgPtrs->validity = data->Validity;
+ msgPtrs->class = data->Class;
+ strcpy (msgPtrs->sender, data->Sender);
+
+// if (data->UDHType == GSM_ConcatenatedMessages)
+// {
+// msgPtrs->count = data->UDH[5];
+// msgPtrs->number = data->UDH[4];
+// msgPtrs->msgPtr = (gint *) g_malloc (msgPtrs->count * sizeof (gint));
+// *(msgPtrs->msgPtr + msgPtrs->number - 1) = data->MessageNumber;
+// } else {
+ msgPtrs->count = msgPtrs->number = 1;
+ msgPtrs->msgPtr = (gint *) g_malloc (sizeof (gint));
+ *(msgPtrs->msgPtr) = data->MessageNumber;
+
+ gtk_clist_append (GTK_CLIST (SMS.smsClist), row);
+ gtk_clist_set_row_data_full (GTK_CLIST (SMS.smsClist), SMS.row_i++,
+ msgPtrs, DestroyMsgPtrs);
+// }
+
+ g_free (row[0]);
+ g_free (row[1]);
+ }
+}
+
+static inline void RefreshFolder (void)
+{
+ gtk_clist_freeze (GTK_CLIST (SMS.smsClist));
+
+ gtk_clist_clear (GTK_CLIST (SMS.smsClist));
+
+ SMS.row_i = 0;
+ g_slist_foreach (phoneMonitor.sms.messages, InsertFolderElement, (gpointer) NULL);
+
+ gtk_clist_sort (GTK_CLIST (SMS.smsClist));
+ gtk_clist_thaw (GTK_CLIST (SMS.smsClist));
+}
+
+
+inline void GUI_RefreshMessageWindow (void)
+{
+ if (!GTK_WIDGET_VISIBLE (GUI_SMSWindow))
+ return;
+
+ RefreshFolder();
+}
+
+
+static void SelectTreeItem (GtkWidget *item, gpointer data)
+{
+ SMS.currentBox = GPOINTER_TO_INT (data);
+ GUI_RefreshMessageWindow ();
+}
+
+
+static void ClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ gchar *buf;
+
+ /* FIXME - We must mark SMS as readed */
+ gtk_text_freeze (GTK_TEXT (SMS.smsText));
+
+ gtk_text_set_point (GTK_TEXT (SMS.smsText), 0);
+ gtk_text_forward_delete (GTK_TEXT (SMS.smsText), gtk_text_get_length (GTK_TEXT (SMS.smsText)));
+
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL,
+ _("From: "), -1);
+ gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL,
+ _("Date: "), -1);
+ gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+ buf, -1);
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+ "\n\n", -1);
+
+ gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
+ gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL,
+ buf, -1);
+
+ gtk_text_thaw (GTK_TEXT (SMS.smsText));
+}
+
+
+inline void GUI_ShowSMS (void)
+{
+ int i,j;
+
+ GUI_InitSMSFoldersInf();
+
+ for (i=1;i<folders.number+1;i++) {
+ if (i>prev_num_of_folders) {
+ treeFolderItem[i-1] = gtk_tree_item_new_with_label (_(folders.Folder[i-1].Name));
+ gtk_tree_append (GTK_TREE (subTree), treeFolderItem[i-1]);
+ gtk_signal_connect (GTK_OBJECT (treeFolderItem[i-1]), "select",
+ GTK_SIGNAL_FUNC (SelectTreeItem), GINT_TO_POINTER (i-1));
+ gtk_widget_show (treeFolderItem[i-1]);
+ } else {
+ gtk_widget_set_name(treeFolderItem[i-1],_(folders.Folder[i-1].Name));
+ }
+ }
+
+ for (j=i+1;j<prev_num_of_folders;j++)
+ gtk_widget_hide (treeFolderItem[j-1]);
+
+ prev_num_of_folders=folders.number;
+
+ gtk_widget_show (GUI_SMSWindow);
+ GUI_RefreshMessageWindow ();
+}
+
+
+static void OkDeleteSMSDialog (GtkWidget *widget, gpointer data)
+{
+ GSM_SMSMessage *message;
+ PhoneEvent *e;
+ GList *sel;
+// GSM_Error error;
+ gint row;
+ gint count;
+
+
+ sel = GTK_CLIST (SMS.smsClist)->selection;
+
+ gtk_clist_freeze (GTK_CLIST (SMS.smsClist));
+
+ while (sel != NULL)
+ {
+ row = GPOINTER_TO_INT (sel->data);
+ sel = sel->next;
+ for (count = 0; count < ((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->count; count++)
+ {
+ message = (GSM_SMSMessage *) g_malloc (sizeof (GSM_SMSMessage));
+ message->Location = *(((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->msgPtr + count);
+ if (message->Location == -1)
+ {
+ g_free (message);
+ continue;
+ }
+ message->MemoryType = GMT_SM;
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_DeleteSMSMessage;
+ e->data = message;
+ GUI_InsertEvent (e);
+
+/* error = GSM->DeleteSMSMessage(&message);
+
+ if (error != GE_NONE)
+ {
+ if (error == GE_NOTIMPLEMENTED)
+ {
+ gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Function not implemented!"));
+ gtk_widget_show(errorDialog.dialog);
+ }
+ else
+ {
+ gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Delete SMS failed!"));
+ gtk_widget_show(errorDialog.dialog);
+ }
+ }
+*/
+ }
+ }
+
+ gtk_widget_hide (GTK_WIDGET (data));
+
+ gtk_clist_thaw (GTK_CLIST (SMS.smsClist));
+}
+
+static void ReadFromPhone (void)
+{
+ GSM_SMSStatus SMSStatus;
+
+ SMSStatus.UnRead = 0;
+ SMSStatus.Number = 0;
+
+ if (GSM->GetSMSStatus (&SMSStatus) == GE_NONE) {
+ if (phoneMonitor.sms.unRead != SMSStatus.UnRead ||
+ phoneMonitor.sms.number2 != SMSStatus.Number)
+ {
+ phoneMonitor.working = _("Refreshing SMSes...");
+#ifdef XDEBUG
+ printf("Refreshing %d SMSes...\n",SMSStatus.Number);
+#endif
+ RefreshSMS (SMSStatus.Number);
+ phoneMonitor.working = NULL;
+ }
+
+ phoneMonitor.sms.unRead = SMSStatus.UnRead;
+ }
+}
+
+static void DeleteSMS (void)
+{
+ static GtkWidget *dialog = NULL;
+ GtkWidget *button, *hbox, *label, *pixmap;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_dialog_new();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Delete SMS"));
+ gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkDeleteSMSDialog), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
+ gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
+ gtk_widget_show (pixmap);
+
+ label = gtk_label_new (_("Do you want to delete selected SMS?"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
+ gtk_widget_show (label);
+ }
+
+ gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+
+static void SaveToMailbox (void)
+{
+ gchar buf[255];
+ FILE *f;
+ gint fd;
+ GList *sel;
+ struct tm t, *loctime;
+ struct flock lock;
+ time_t caltime;
+ gint row;
+ gchar *number, *text, *loc;
+
+
+ if ((f = fopen (xgnokiiConfig.mailbox, "a")) == NULL)
+ {
+ snprintf (buf, 255, _("Cannot open mailbox %s for appending!"), xgnokiiConfig.mailbox);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ fd = fileno (f);
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ if (fcntl (fd, F_GETLK, &lock) != -1 && lock.l_type != F_UNLCK)
+ {
+ snprintf (buf, 255, _("Cannot save to mailbox %s.\n\
+%s is locked for process %d!"), xgnokiiConfig.mailbox, xgnokiiConfig.mailbox,
+ lock.l_pid);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ fclose (f);
+ return;
+ }
+
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fd, F_SETLK, &lock) == -1)
+ {
+ snprintf (buf, 255, _("Cannot lock mailbox %s!"), xgnokiiConfig.mailbox);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ fclose (f);
+ return;
+ }
+
+ sel = GTK_CLIST (SMS.smsClist)->selection;
+
+ while (sel != NULL)
+ {
+ row = GPOINTER_TO_INT (sel->data);
+ sel = sel->next;
+ gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 1, &text);
+ t.tm_sec = atoi (text + 15);
+ t.tm_min = atoi (text + 12);
+ t.tm_hour = atoi (text + 9);
+ t.tm_mday = atoi (text);
+ t.tm_mon = atoi (text + 3) - 1;
+ t.tm_year = atoi (text + 6);
+ if (t.tm_year < 70)
+ t.tm_year += 100;
+#ifdef HAVE_TM_GMTON
+ if (text[17] != '\0')
+ t.tm_gmtoff = atoi (text + 18) * 3600;
+#endif
+
+ caltime = mktime (&t);
+ loctime = localtime (&caltime);
+
+ gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 2, &number);
+ gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 3, &text);
+
+ fprintf (f, "From %s@xgnokii %s", number, asctime (loctime));
+ loc = setlocale (LC_ALL, "C");
+ strftime (buf, 255, "Date: %a, %d %b %Y %H:%M:%S %z (%Z)\n", loctime);
+ setlocale (LC_ALL, loc);
+ fprintf (f, "%s", buf);
+ fprintf (f, "From: %s@xgnokii\n", number);
+ strncpy (buf, text, 20);
+ buf[20] = '\0';
+ fprintf (f, "Subject: %s\n\n", buf);
+ fprintf (f, "%s\n\n", text);
+ }
+
+ lock.l_type = F_UNLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ if (fcntl (fd, F_SETLK, &lock) == -1)
+ {
+ snprintf (buf, 255, _("Cannot unlock mailbox %s!"), xgnokiiConfig.mailbox);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ }
+
+ fclose (f);
+}
+
+
+static inline void RefreshSMSStatus (void)
+{
+ gchar *buf;
+ guint l, m;
+
+ l = gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText));
+
+ if (l <= GSM_MAX_SMS_LENGTH)
+ buf = g_strdup_printf ("%d/1", l);
+ else
+ {
+ m = l % 153;
+ buf = g_strdup_printf ("%d/%d", l > 0 && !m ? 153 : m, l == 0 ? 1 : ((l - 1) / 153) + 1);
+ }
+
+ gtk_frame_set_label (GTK_FRAME (sendSMS.status), buf);
+ g_free (buf);
+}
+
+
+static inline gint RefreshSMSLength (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer callback_data)
+{
+ RefreshSMSStatus ();
+ if (GTK_EDITABLE (widget)->editable == FALSE)
+ return (FALSE);
+ if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear ||
+ event->keyval == GDK_Insert || event->keyval == GDK_Delete ||
+ event->keyval == GDK_Home || event->keyval == GDK_End ||
+ event->keyval == GDK_Left || event->keyval == GDK_Right ||
+ event->keyval == GDK_Up || event->keyval == GDK_Down ||
+ event->keyval == GDK_Return ||
+ (event->keyval >= 0x20 && event->keyval <= 0xFF))
+ return (TRUE);
+
+ return (FALSE);
+}
+
+
+static inline void SetActiveCenter (GtkWidget *item, gpointer data)
+{
+ sendSMS.center = GPOINTER_TO_INT (data);
+}
+
+
+void GUI_RefreshSMSCenterMenu (void)
+{
+ static GtkWidget *smscMenu = NULL;
+ GtkWidget *item;
+ register gint i;
+
+ if (!sendSMS.smscOptionMenu)
+ return;
+
+ if (smscMenu)
+ {
+ gtk_option_menu_remove_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu));
+ if (GTK_IS_WIDGET (smscMenu))
+ gtk_widget_destroy (GTK_WIDGET (smscMenu));
+ smscMenu = NULL;
+ }
+
+ smscMenu = gtk_menu_new();
+
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ {
+ if (*(xgnokiiConfig.smsSetting[i].Name) == '\0')
+ {
+ gchar *buf = g_strdup_printf (_("Set %d"), i + 1);
+ item = gtk_menu_item_new_with_label (buf);
+ g_free (buf);
+ }
+ else
+ item = gtk_menu_item_new_with_label (xgnokiiConfig.smsSetting[i].Name);
+
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (SetActiveCenter),
+ (gpointer) i);
+
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (smscMenu), item);
+ }
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu), smscMenu);
+}
+
+
+static inline void InitAddressLine (gpointer d, gpointer userData)
+{
+ ((AddressPar *) d)->used = 0;
+}
+
+
+#ifdef XDEBUG
+static inline void PrintAddressLine (gpointer d, gpointer userData)
+{
+ g_print ("Name: %s\nNumber: %s\nUsed: %d\n",
+ ((AddressPar *) d)->name,
+ ((AddressPar *) d)->number,
+ ((AddressPar *) d)->used);
+}
+#endif
+
+
+static inline gint CompareAddressLineName (gconstpointer a, gconstpointer b)
+{
+ return strcmp (((AddressPar *) a)->name, ((AddressPar *) b)->name);
+}
+
+
+static inline gint CompareAddressLineUsed (gconstpointer a, gconstpointer b)
+{
+ return !(((AddressPar *) a)->used == ((AddressPar *) b)->used);
+}
+
+
+static gint CheckAddressMain (void)
+{
+ AddressPar aps;
+ GSList *r;
+ register gint i = 0;
+ gint ret = 0;
+ gchar *buf;
+ GString *tooltipBuf;
+ gchar **strings = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0);
+
+ tooltipBuf = g_string_new ("");
+ gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+ g_slist_foreach (sendSMS.addressLine, InitAddressLine, (gpointer) NULL);
+
+ while (strings[i])
+ {
+ g_strstrip (strings[i]);
+ if (*strings[i] == '\0')
+ {
+ i++;
+ continue;
+ }
+ if ((buf = GUI_GetName (strings[i])) != NULL)
+ {
+ AddressPar *ap = g_malloc (sizeof (AddressPar));
+ ap->number = g_strdup (strings[i]);
+ ap->name = g_strdup (buf);
+ ap->used = 1;
+ sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap);
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), buf);
+ g_string_append (tooltipBuf, ap->number);
+ }
+ else
+ if ((buf = GUI_GetNumber (strings[i])) != NULL)
+ {
+ aps.name = strings[i];
+ r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName);
+ if (r)
+ {
+ ((AddressPar *) r->data)->used = 1;
+ g_string_append (tooltipBuf, ((AddressPar *) r->data)->number);
+ }
+ else
+ g_string_append (tooltipBuf, buf);
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]);
+ }
+ else
+ {
+ gint len = strlen (strings[i]);
+ gint j;
+
+ for (j = 0; j < len; j++)
+ if (strings[i][j] != '*' && strings[i][j] != '#' && strings[i][j] != '+'
+ && (strings[i][j] < '0' || strings[i][j] > '9'))
+ ret = 1;
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]);
+ g_string_append (tooltipBuf, strings[i]);
+ }
+ if (strings[i + 1] != NULL)
+ {
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", ");
+ g_string_append (tooltipBuf, ", ");
+ }
+ i++;
+ }
+
+ aps.used = 0;
+ while ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineUsed)))
+ sendSMS.addressLine = g_slist_remove (sendSMS.addressLine, r->data);
+
+ if (tooltipBuf->len > 0)
+ {
+ gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, tooltipBuf->str, NULL);
+ gtk_tooltips_enable (sendSMS.addrTip);
+ }
+ else
+ gtk_tooltips_disable (sendSMS.addrTip);
+
+#ifdef XDEBUG
+ g_slist_foreach (sendSMS.addressLine, PrintAddressLine, (gpointer) NULL);
+#endif
+
+ g_strfreev (strings);
+ g_string_free (tooltipBuf, TRUE);
+
+ return ret;
+}
+
+
+static inline void CheckAddress (void)
+{
+ if (CheckAddressMain ())
+ {
+ gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!"));
+ gtk_widget_show(errorDialog.dialog);
+ }
+}
+
+
+static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (widget));
+}
+
+
+static void CancelSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+
+static void OkSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ GList *sel;
+ PhonebookEntry *pbEntry;
+
+ if ((sel = GTK_CLIST (data->clist)->selection) != NULL)
+ while (sel != NULL)
+ {
+ AddressPar *ap = g_malloc (sizeof (AddressPar));
+
+ pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist),
+ GPOINTER_TO_INT (sel->data));
+ ap->number = g_strdup (pbEntry->entry.Number);
+ ap->name = g_strdup (pbEntry->entry.Name);
+ ap->used = 1;
+ sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap);
+ if (strlen (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr))) > 0)
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", ");
+ gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ap->name);
+
+ sel = sel->next;
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+
+ CheckAddressMain ();
+}
+
+
+static void ShowSelectContactsDialog (void)
+{
+ SelectContactData *r;
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ if ((r = GUI_SelectContactDialog ()) == NULL)
+ return;
+
+ gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r);
+
+ gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked",
+ GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r);
+ gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked",
+ GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r);
+}
+
+
+static gint SendSMSCore (GSM_SMSMessage *sms)
+{
+ GSM_Error error;
+ PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ D_SMSMessage *m = (D_SMSMessage *) g_malloc (sizeof (D_SMSMessage));
+
+ m->sms = sms;
+ e->event = Event_SendSMSMessage;
+ e->data = m;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&sendSMSMutex);
+ pthread_cond_wait (&sendSMSCond, &sendSMSMutex);
+ pthread_mutex_unlock (&sendSMSMutex);
+
+#ifdef XDEBUG
+ g_print ("Address: %s\nText: %s\nDelivery report: %d\nSMS Center: %d\n",
+ sms->Destination,
+ sms->MessageText,
+ GTK_TOGGLE_BUTTON (sendSMS.report)->active,
+ sendSMS.center);
+#endif
+
+ error = m->status;
+ g_free (m);
+
+ if (error != GE_SMSSENDOK)
+ {
+ gchar *buf = g_strdup_printf (_("SMS send to %s failed\n(error=%d)"),
+ sms->Destination, error);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ g_free (buf);
+ }
+ else
+ g_print ("Message sent to: %s\n", sms->Destination);
+
+ return (error);
+}
+
+
+static void SendSMS (void)
+{
+ GSM_UDH UDHType;
+ GSM_MultiSMSMessage Multisms;
+ int chars_read;
+ AddressPar aps;
+ GSList *r;
+ gchar *text, *number;
+ gchar **addresses;
+ gchar *buf;
+ gint l;
+ gint longSMS;
+ register gint i = 0, j;
+
+ if (CheckAddressMain ())
+ {
+ gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!"));
+ gtk_widget_show(errorDialog.dialog);
+ return;
+ }
+
+ text = gtk_editable_get_chars (GTK_EDITABLE (sendSMS.smsSendText), 0, -1);
+ l = strlen (text);
+
+ addresses = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0);
+
+ longSMS = GTK_TOGGLE_BUTTON (sendSMS.longSMS)->active;
+
+ while (addresses[i])
+ {
+ g_strstrip (addresses[i]);
+ if ((number = GUI_GetNumber (addresses[i])))
+ {
+ aps.name = addresses[i];
+ if ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName)))
+ number = ((AddressPar *) r->data)->number;
+ }
+ else
+ number = addresses[i];
+
+ chars_read=strlen(text);
+ UDHType = GSM_NoUDH;
+ if (l > GSM_MAX_SMS_LENGTH && longSMS) UDHType = GSM_ConcatenatedMessages;
+ if (UDHType == GSM_NoUDH && chars_read>160) chars_read=160;
+
+ GSM_MakeMultiPartSMS2(&Multisms,text,chars_read,UDHType,GSM_Coding_Default);
+
+ for (j=0;j<Multisms.number;j++) {
+ Multisms.SMS[j].MessageCenter = xgnokiiConfig.smsSetting[sendSMS.center];
+ Multisms.SMS[j].MessageCenter.No = 0;
+
+ if (GTK_TOGGLE_BUTTON (sendSMS.report)->active) Multisms.SMS[j].Type = GST_DR;
+
+ if (GTK_TOGGLE_BUTTON (sendSMS.class)->active)\r Multisms.SMS[j].Class = 0;\r
+
+ Multisms.SMS[j].Validity = Multisms.SMS[j].MessageCenter.Validity;
+
+ strncpy (Multisms.SMS[j].Destination, number, GSM_MAX_DESTINATION_LENGTH + 1);
+ Multisms.SMS[j].Destination[GSM_MAX_DESTINATION_LENGTH] = '\0';
+
+ buf = g_strdup_printf (_("Sending SMS to %s (%d/%d) ...\n"),
+ Multisms.SMS[j].Destination, j + 1, Multisms.number);
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), buf);
+ gtk_widget_show_now (infoDialog.dialog);
+ g_free (buf);
+ GUI_Refresh ();
+
+ if (SendSMSCore (&Multisms.SMS[j]) != GE_SMSSENDOK)
+ {
+ gtk_widget_hide (infoDialog.dialog);
+ GUI_Refresh ();
+ break;
+ }
+
+ gtk_widget_hide (infoDialog.dialog);
+ GUI_Refresh ();
+
+ sleep (1);
+ }
+
+ i++;
+ }
+
+ g_strfreev (addresses);
+
+ g_free (text);
+}
+
+
+static GtkItemFactoryEntry send_menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>X", SendSMS, 0, NULL},
+ { NULL, "<control>S", NULL, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>N", CheckAddress, 0, NULL},
+ { NULL, "<control>C", ShowSelectContactsDialog, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseSMSSend, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help2, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitSendMenu (void)
+{
+ send_menu_items[0].path = g_strdup (_("/_File"));
+ send_menu_items[1].path = g_strdup (_("/File/Sen_d"));
+ send_menu_items[2].path = g_strdup (_("/File/_Save"));
+ send_menu_items[3].path = g_strdup (_("/File/Sep1"));
+ send_menu_items[4].path = g_strdup (_("/File/Check _Names"));
+ send_menu_items[5].path = g_strdup (_("/File/C_ontacts"));
+ send_menu_items[6].path = g_strdup (_("/File/Sep2"));
+ send_menu_items[7].path = g_strdup (_("/File/_Close"));
+ send_menu_items[8].path = g_strdup (_("/_Help"));
+ send_menu_items[9].path = g_strdup (_("/Help/_Help"));
+ send_menu_items[10].path = g_strdup (_("/Help/_About"));
+}
+
+
+static void CreateSMSSendWindow (void)
+{
+ int nmenu_items = sizeof (send_menu_items) / sizeof (send_menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *hbox, *vbox;
+ GtkWidget *button;
+ GtkWidget *pixmap;
+ GtkWidget *label;
+ GtkWidget *toolbar;
+ GtkWidget *scrolledWindow;
+ GtkTooltips *tooltips;
+
+ if (sendSMS.SMSSendWindow)
+ return;
+
+ InitSendMenu ();
+ sendSMS.SMSSendWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ //gtk_widget_set_usize (GTK_WIDGET (sendSMS.SMSSendWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (sendSMS.SMSSendWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (sendSMS.SMSSendWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, send_menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (sendSMS.SMSSendWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (sendSMS.SMSSendWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send message"), NULL,
+ NewPixmap(SendSMS_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) SendSMS, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save message to outbox"), NULL,
+ NewPixmap(Send_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NULL, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Check names"), NULL,
+ NewPixmap(Check_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) CheckAddress, NULL);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ /* Address line */
+ hbox = gtk_hbox_new (FALSE, 3);
+ gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 3);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("To:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 3);
+ gtk_widget_show (label);
+
+ sendSMS.addr = gtk_entry_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), sendSMS.addr, TRUE, TRUE, 1);
+
+ sendSMS.addrTip = gtk_tooltips_new ();
+ gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, "", NULL);
+ gtk_tooltips_disable (sendSMS.addrTip);
+
+ gtk_widget_show (sendSMS.addr);
+
+ button = gtk_button_new ();
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ShowSelectContactsDialog), (gpointer) NULL);
+
+ pixmap = NewPixmap(Names_xpm, sendSMS.SMSSendWindow->window,
+ &sendSMS.SMSSendWindow->style->bg[GTK_STATE_NORMAL]);
+ gtk_container_add (GTK_CONTAINER (button), pixmap);
+ gtk_widget_show (pixmap);
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 5);
+
+ tooltips = gtk_tooltips_new ();
+ gtk_tooltips_set_tip (tooltips, button, _("Select contacts"), NULL);
+
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 3);
+ gtk_box_pack_end (GTK_BOX (main_vbox), hbox, TRUE, TRUE, 3);
+ gtk_widget_show (hbox);
+
+ /* Edit SMS widget */
+ vbox = gtk_vbox_new (FALSE, 3);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 3);
+ gtk_widget_show (vbox);
+
+ sendSMS.status = gtk_frame_new ("0/1");
+ gtk_frame_set_label_align (GTK_FRAME (sendSMS.status), 1.0, 0.0);
+ gtk_frame_set_shadow_type (GTK_FRAME (sendSMS.status), GTK_SHADOW_OUT);
+
+ gtk_box_pack_end (GTK_BOX (vbox), sendSMS.status, TRUE, TRUE, 5);
+ gtk_widget_show (sendSMS.status);
+
+ sendSMS.smsSendText = gtk_text_new (NULL, NULL);
+ gtk_widget_set_usize (GTK_WIDGET (sendSMS.smsSendText), 0, 120);
+ gtk_text_set_editable (GTK_TEXT (sendSMS.smsSendText), TRUE);
+ gtk_text_set_word_wrap (GTK_TEXT (sendSMS.smsSendText), TRUE);
+ gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_set_border_width (GTK_CONTAINER (scrolledWindow), 5);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_container_add (GTK_CONTAINER (scrolledWindow), sendSMS.smsSendText);
+ gtk_container_add (GTK_CONTAINER (sendSMS.status), scrolledWindow);
+
+ gtk_widget_show (sendSMS.smsSendText);
+ gtk_widget_show (scrolledWindow);
+
+ /* Options widget */
+ vbox = gtk_vbox_new (FALSE, 3);
+ gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 5);
+ gtk_widget_show (vbox);
+
+ sendSMS.report = gtk_check_button_new_with_label (_("Delivery report"));
+ gtk_box_pack_start (GTK_BOX (vbox), sendSMS.report, FALSE, FALSE, 3);
+ gtk_widget_show (sendSMS.report);
+
+ sendSMS.longSMS = gtk_check_button_new_with_label (_("Send as Long SMS"));
+ gtk_box_pack_start (GTK_BOX (vbox), sendSMS.longSMS, FALSE, FALSE, 3);
+ gtk_widget_show (sendSMS.longSMS);
+
+ sendSMS.class = gtk_check_button_new_with_label (_("Send as Flash SMS (Class 0)"));\r
+ gtk_box_pack_start (GTK_BOX (vbox), sendSMS.class, FALSE, FALSE, 3);\r
+ gtk_widget_show (sendSMS.class);\r
+
+ label = gtk_label_new (_("SMS Center:"));
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 1);
+ gtk_widget_show (label);
+
+ GUI_InitSMSSettings ();
+ sendSMS.smscOptionMenu = gtk_option_menu_new();
+
+ GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED);
+
+ gtk_box_pack_start (GTK_BOX (vbox), sendSMS.smscOptionMenu, FALSE, FALSE, 1);
+ gtk_widget_show (sendSMS.smscOptionMenu);
+}
+
+
+static void NewSMS (void)
+{
+ if (!sendSMS.SMSSendWindow)
+ CreateSMSSendWindow ();
+
+ gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("New Message"));
+
+ gtk_tooltips_disable (sendSMS.addrTip);
+
+ gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+ gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+ gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+ gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+ gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+ RefreshSMSStatus ();
+
+ gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static void ForwardSMS (void)
+{
+ gchar *buf;
+
+ if (GTK_CLIST (SMS.smsClist)->selection == NULL)
+ return;
+
+ if (!sendSMS.SMSSendWindow)
+ CreateSMSSendWindow ();
+
+ gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Forward Message"));
+
+ gtk_tooltips_disable (sendSMS.addrTip);
+
+ gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+ gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+ gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+ gtk_clist_get_text (GTK_CLIST (SMS.smsClist),
+ GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data),
+ 3, &buf);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ buf, -1);
+
+ gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+ gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+ RefreshSMSStatus ();
+
+ gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+/*
+static inline gint CompareSMSMessageLocation (gconstpointer a, gconstpointer b)
+{
+ return !(((GSM_SMSMessage *) a)->Location == ((GSM_SMSMessage *) b)->Location);
+}
+*/
+
+
+static void ReplySMS (void)
+{
+ gchar *buf;
+// GSList *r;
+// GSM_SMSMessage msg;
+
+ if (GTK_CLIST (SMS.smsClist)->selection == NULL)
+ return;
+
+ if (!sendSMS.SMSSendWindow)
+ CreateSMSSendWindow ();
+
+ gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Reply Message"));
+
+ gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+ gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+ gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText),
+ gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+ gtk_clist_get_text (GTK_CLIST (SMS.smsClist),
+ GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data),
+ 3, &buf);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL,
+ &(sendSMS.smsSendText->style->black), NULL, buf, -1);
+
+ gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+ //msg.Location = *(((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist),
+ // GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->msgPtr);
+
+ //r = g_slist_find_custom (SMS.messages, &msg, CompareSMSMessageLocation);
+ //if (r)
+ gtk_entry_set_text (GTK_ENTRY (sendSMS.addr),
+ ((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist),
+ GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->sender);
+
+ CheckAddressMain ();
+ RefreshSMSStatus ();
+
+ gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static void NewBC (void)
+{
+ if (!sendSMS.SMSSendWindow)
+ CreateSMSSendWindow ();
+
+ gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Bussiness Card"));
+
+ gtk_tooltips_disable (sendSMS.addrTip);
+
+ gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText));
+ gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0);
+ gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)));
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+ "Business Card\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.name, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ ", ", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.title, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.company, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+ "tel ", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.telephone, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL,
+ "fax ", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.fax, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.email, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ xgnokiiConfig.user.address, -1);
+
+ gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL,
+ "\n", -1);
+
+ gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText));
+
+ gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), "");
+
+ RefreshSMSStatus ();
+
+ gtk_widget_show (sendSMS.SMSSendWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, NULL, ReadFromPhone, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>S", NULL, 0, NULL},
+ { NULL, "<control>M", SaveToMailbox, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseSMS, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>N", NewSMS, 0, NULL},
+ { NULL, "<control>F", ForwardSMS, 0, NULL},
+ { NULL, "<control>R", ReplySMS, 0, NULL},
+ { NULL, "<control>D", DeleteSMS, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>B", NewBC, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ register gint i = 0;
+
+ menu_items[i++].path = g_strdup (_("/_File"));
+ menu_items[i++].path = g_strdup (_("/File/Read from phone"));
+ menu_items[i++].path = g_strdup (_("/File/Sep0"));
+ menu_items[i++].path = g_strdup (_("/File/_Save"));
+ menu_items[i++].path = g_strdup (_("/File/Save to mailbo_x"));
+ menu_items[i++].path = g_strdup (_("/File/Sep1"));
+ menu_items[i++].path = g_strdup (_("/File/_Close"));
+ menu_items[i++].path = g_strdup (_("/_Messages"));
+ menu_items[i++].path = g_strdup (_("/_Messages/_New"));
+ menu_items[i++].path = g_strdup (_("/_Messages/_Forward"));
+ menu_items[i++].path = g_strdup (_("/_Messages/_Reply"));
+ menu_items[i++].path = g_strdup (_("/_Messages/_Delete"));
+ menu_items[i++].path = g_strdup (_("/Messages/Sep3"));
+ menu_items[i++].path = g_strdup (_("/_Messages/_Bussiness card"));
+ menu_items[i++].path = g_strdup (_("/_Help"));
+ menu_items[i++].path = g_strdup (_("/Help/_Help"));
+ menu_items[i++].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateSMSWindow (void)
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *toolbar;
+ GtkWidget *scrolledWindow;
+ GtkWidget *vpaned, *hpaned;
+ GtkWidget *tree, *treeSMSItem;
+ SortColumn *sColumn;
+ GdkColormap *cmap;
+ register gint i;
+ gchar *titles[4] = { _("Status"), _("Date / Time"), _("Sender"), _("Message")};
+
+ InitMainMenu ();
+ GUI_SMSWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_SMSWindow), _("Short Message Service"));
+ //gtk_widget_set_usize (GTK_WIDGET (GUI_SMSWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (GUI_SMSWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_SMSWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SMSWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_SMSWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New message"), NULL,
+ NewPixmap(Edit_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NewSMS, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Forward message"), NULL,
+ NewPixmap(Forward_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ForwardSMS, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Reply message"), NULL,
+ NewPixmap(Reply_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ReplySMS, NULL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Bussiness Card"), NULL,
+ NewPixmap(BCard_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) NewBC, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete message"), NULL,
+ NewPixmap(Delete_xpm, GUI_SMSWindow->window,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) DeleteSMS, NULL);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ vpaned = gtk_vpaned_new ();
+ gtk_paned_set_handle_size (GTK_PANED (vpaned), 10);
+ gtk_paned_set_gutter_size (GTK_PANED (vpaned), 15);
+ gtk_box_pack_end (GTK_BOX (main_vbox), vpaned, TRUE, TRUE, 0);
+ gtk_widget_show (vpaned);
+
+ hpaned = gtk_hpaned_new ();
+ gtk_paned_set_handle_size (GTK_PANED (hpaned), 8);
+ gtk_paned_set_gutter_size (GTK_PANED (hpaned), 10);
+ gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
+ gtk_widget_show (hpaned);
+
+ /* Navigation tree */
+ tree = gtk_tree_new ();
+ gtk_tree_set_selection_mode (GTK_TREE (tree), GTK_SELECTION_SINGLE);
+ gtk_widget_show (tree);
+
+ treeSMSItem = gtk_tree_item_new_with_label (_("SMS's"));
+ gtk_tree_append (GTK_TREE (tree), treeSMSItem);
+ gtk_widget_show (treeSMSItem);
+
+ subTree = gtk_tree_new ();
+ gtk_tree_set_selection_mode (GTK_TREE (subTree), GTK_SELECTION_SINGLE);
+ gtk_tree_set_view_mode (GTK_TREE (subTree), GTK_TREE_VIEW_ITEM);
+ gtk_tree_item_set_subtree (GTK_TREE_ITEM (treeSMSItem), subTree);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_usize (scrolledWindow, 75, 80);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
+
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledWindow),
+ tree);
+ gtk_widget_show (scrolledWindow);
+
+ /* Message viewer */
+ SMS.smsText = gtk_text_new (NULL, NULL);
+ gtk_text_set_editable (GTK_TEXT (SMS.smsText), FALSE);
+ gtk_text_set_word_wrap (GTK_TEXT (SMS.smsText), TRUE);
+ //gtk_text_set_line_wrap (GTK_TEXT (SMS.smsText), TRUE);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_paned_add2 (GTK_PANED (hpaned), scrolledWindow);
+
+ gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsText);
+ gtk_widget_show_all (scrolledWindow);
+
+ /* Messages list */
+ SMS.smsClist = gtk_clist_new_with_titles (4, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (SMS.smsClist), GTK_SHADOW_OUT);
+ gtk_clist_set_compare_func (GTK_CLIST (SMS.smsClist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (SMS.smsClist), 1);
+ gtk_clist_set_sort_type (GTK_CLIST (SMS.smsClist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (SMS.smsClist), FALSE);
+ gtk_clist_set_selection_mode (GTK_CLIST (SMS.smsClist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 0, 40);
+ gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 1, 142);
+ gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 2, 135);
+ //gtk_clist_set_column_justification (GTK_CLIST (SMS.smsClist), 2, GTK_JUSTIFY_CENTER);
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ gtk_main_quit ();
+ }
+ sColumn->clist = SMS.smsClist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (SMS.smsClist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (SMS.smsClist), "select_row",
+ GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+ scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_usize (scrolledWindow, 550, 100);
+ gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsClist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ gtk_paned_add2 (GTK_PANED (vpaned), scrolledWindow);
+
+ gtk_widget_show (SMS.smsClist);
+ gtk_widget_show (scrolledWindow);
+
+ CreateErrorDialog (&errorDialog, GUI_SMSWindow);
+ CreateInfoDialog (&infoDialog, GUI_SMSWindow);
+
+ gtk_signal_emit_by_name(GTK_OBJECT (treeSMSItem), "expand");
+
+ cmap = gdk_colormap_get_system();
+ SMS.colour.red = 0xffff;
+ SMS.colour.green = 0;
+ SMS.colour.blue = 0;
+ if (!gdk_color_alloc (cmap, &(SMS.colour)))
+ g_error (_("couldn't allocate colour"));
+
+ questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SMSWindow->window,
+ &questMark.mask,
+ &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL],
+ quest_xpm);
+
+ GUIEventAdd (GUI_EVENT_SMS_CENTERS_CHANGED, GUI_RefreshSMSCenterMenu);
+ GUIEventAdd (GUI_EVENT_SMS_NUMBER_CHANGED, GUI_RefreshMessageWindow);
+}
--- /dev/null
+/*
+
+ 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
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <gtk/gtk.h>
+#include "xgnokii_contacts.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_common.h"
+#include "xgnokii_speed.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/quest.xpm"
+
+
+static GtkWidget *GUI_SpeedDialWindow;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static ExportDialogData exportDialogData = {NULL};
+static GtkWidget *clist;
+static QuestMark questMark;
+static gint selectedKey;
+static bool speedDialInitialized;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/speeddial/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static void CloseSpeedDial (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_SpeedDialWindow);
+}
+
+
+static inline void DestroyCListData (gpointer data)
+{
+ if (data)
+ g_free ((D_SpeedDial *) data);
+}
+
+
+static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (widget));
+}
+
+
+static void CancelSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+
+static void OkSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ GList *sel;
+ PhonebookEntry *pbEntry;
+ gchar *key;
+
+ if ((sel = GTK_CLIST (data->clist)->selection) != NULL)
+ {
+ D_SpeedDial *d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial));
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+
+ pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist),
+ GPOINTER_TO_INT (sel->data));
+
+ gtk_clist_get_text (GTK_CLIST (clist), selectedKey, 0, &key);
+
+ gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 1, pbEntry->entry.Name);
+ gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 2, pbEntry->entry.Number);
+
+ d->entry.Number = *key - '0';
+ d->entry.MemoryType = pbEntry->entry.MemoryType + 2;
+ d->entry.Location = pbEntry->entry.Location;
+
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), selectedKey,
+ (gpointer) d, DestroyCListData);
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+static void ShowSelectContactsDialog (void)
+{
+ SelectContactData *r;
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ if ((r = GUI_SelectContactDialog ()) == NULL)
+ return;
+
+ gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r);
+
+ gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked",
+ GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r);
+ gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked",
+ GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r);
+}
+
+
+static inline void EditKey (void)
+{
+ GList *sel;
+
+ if ((sel = GTK_CLIST (clist)->selection) != NULL)
+ {
+ selectedKey = GPOINTER_TO_INT (sel->data);
+ ShowSelectContactsDialog ();
+ }
+}
+
+
+static inline void ClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ {
+ selectedKey = row;
+ ShowSelectContactsDialog ();
+ }
+}
+
+
+static void ReadSpeedDial (void)
+{
+ PhonebookEntry *pbEntry;
+ D_SpeedDial *d;
+ PhoneEvent *e;
+ gchar *row[3];
+ gchar buf[2] = " ";
+ gint location;
+ register gint i, row_i = 0;
+
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading data ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_clear (GTK_CLIST (clist));
+
+ for (i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ return;
+ }
+ d->entry.Number = i;
+ if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ g_free (d);
+ return;
+ }
+ e->event = Event_GetSpeedDial;
+ e->data = d;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&speedDialMutex);
+ pthread_cond_wait (&speedDialCond, &speedDialMutex);
+ pthread_mutex_unlock (&speedDialMutex);
+
+ if (d->status != GE_NONE)
+ g_print ("Cannot read speed dial key %d!\n", i);
+ else
+ {
+ if (d->entry.Location == 0)
+ location = i;
+ else
+ location = d->entry.Location;
+ if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+ {
+ g_free (d);
+ continue;
+ }
+ *buf = i + '0';
+ row[0] = buf;
+ row[1] = pbEntry->entry.Name;
+ row[2] = pbEntry->entry.Number;
+
+ gtk_clist_append (GTK_CLIST (clist), row);
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+ (gpointer) d, DestroyCListData);
+ }
+ //GUI_Refresh ();
+ gtk_widget_hide (infoDialog.dialog);
+ }
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ speedDialInitialized = TRUE;
+}
+
+
+static void SaveSpeedDial (void)
+{
+ //gchar buf[80];
+ D_SpeedDial *d;
+ PhoneEvent *e;
+ register gint i;
+
+ if (speedDialInitialized)
+ for(i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+ {
+ if (d->entry.Location == 0)
+ continue;
+ if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ return;
+ }
+ e->event = Event_SendSpeedDial;
+ e->data = d;
+ GUI_InsertEvent (e);
+/* pthread_mutex_lock (&speedDialMutex);
+ pthread_cond_wait (&speedDialCond, &speedDialMutex);
+ pthread_mutex_unlock (&speedDialMutex);
+
+ if (d->status != GE_NONE)
+ {
+ g_snprintf (buf, 80, _("Error writing speed\ndial for key %d!\n"),
+ d->entry.Number);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ } */
+ }
+// GUI_Refresh ();
+ }
+}
+
+
+static bool ParseLine (D_SpeedDial *d, gchar *buf)
+{
+ gchar **strings = g_strsplit (buf, ";", 3);
+
+ d->entry.Number = *strings[0] - '0';
+ if (d->entry.Number < 1 || d->entry.Number > 9)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ d->entry.MemoryType = *strings[1] - '0';
+ if (d->entry.MemoryType < 2 || d->entry.MemoryType > 3)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ d->entry.Location = atoi (strings[2]);
+ if (d->entry.Location == LONG_MIN || d->entry.Location == LONG_MAX ||
+ d->entry.Location < 0)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ g_strfreev (strings);
+ return TRUE;
+}
+
+
+static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ FILE *f;
+ D_SpeedDial *d;
+ PhonebookEntry *pbEntry;
+ gchar buf[IO_BUF_LEN];
+ gchar *row[3];
+ gchar *fileName;
+ gint location;
+ register gint i, row_i = 0;
+
+ fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (fileName, "r")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_clear (GTK_CLIST (clist));
+ speedDialInitialized = FALSE;
+
+ i = 0;
+ while (fgets (buf, IO_BUF_LEN, f) && i++ < 9)
+ {
+ if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!\n"));
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ if (ParseLine (d, buf))
+ {
+ if (d->entry.Number != i)
+ {
+ g_free (d);
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+ gtk_widget_show (errorDialog.dialog);
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ if (d->entry.Location == 0)
+ location = i;
+ else
+ location = d->entry.Location;
+ if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+ {
+ g_free (d);
+ continue;
+ }
+ *buf = i + '0';
+ *(buf + 1) = '\0';
+ row[0] = buf;
+ row[1] = pbEntry->entry.Name;
+ row[2] = pbEntry->entry.Number;
+ gtk_clist_append (GTK_CLIST (clist), row);
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+ (gpointer) d, DestroyCListData);
+ }
+ else
+ {
+ g_free (d);
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+ gtk_widget_show (errorDialog.dialog);
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ }
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ speedDialInitialized = TRUE;
+}
+
+
+static void ImportSpeedDial (void)
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Import"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+}
+
+
+static void ExportSpeedDialMain (gchar *name)
+{
+ FILE *f;
+ D_SpeedDial *d;
+ gchar buf[IO_BUF_LEN];
+ register gint i;
+
+ if ((f = fopen( name, "w")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ for(i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+ {
+ sprintf (buf, "%d;%d;%d;", d->entry.Number, d->entry.MemoryType, d->entry.Location);
+ fprintf (f, "%s\n", buf);
+ }
+ }
+
+ fclose(f);
+}
+
+
+static void YesExportDialog (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ExportSpeedDialMain (exportDialogData.fileName);
+}
+
+
+static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ static YesNoDialog dialog = { NULL, NULL};
+ FILE *f;
+ gchar err[80];
+
+
+ exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+ {
+ fclose (f);
+ if (dialog.dialog == NULL)
+ {
+ CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_SpeedDialWindow);
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+ g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName);
+ gtk_label_set_text (GTK_LABEL(dialog.text), err);
+ }
+ gtk_widget_show (dialog.dialog);
+ }
+ else
+ ExportSpeedDialMain (exportDialogData.fileName);
+}
+
+
+static void ExportSpeedDial (void)
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (speedDialInitialized)
+ {
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Export"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+ }
+}
+
+
+inline void GUI_ShowSpeedDial (void)
+{
+ ReadSpeedDial ();
+ gtk_widget_show (GUI_SpeedDialWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>R", ReadSpeedDial, 0, NULL},
+ { NULL, "<control>S", SaveSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>I", ImportSpeedDial, 0, NULL},
+ { NULL, "<control>E", ExportSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, NULL, EditKey, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+ menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+ menu_items[3].path = g_strdup (_("/File/Sep1"));
+ menu_items[4].path = g_strdup (_("/File/_Import from file"));
+ menu_items[5].path = g_strdup (_("/File/_Export to file"));
+ menu_items[6].path = g_strdup (_("/File/Sep2"));
+ menu_items[7].path = g_strdup (_("/File/_Close"));
+ menu_items[8].path = g_strdup (_("/_Edit"));
+ menu_items[9].path = g_strdup (_("/Edit/_Edit"));
+ menu_items[10].path = g_strdup (_("/_Help"));
+ menu_items[11].path = g_strdup (_("/Help/_Help"));
+ menu_items[12].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateSpeedDialWindow (void)
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ SortColumn *sColumn;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *toolbar;
+ GtkWidget *clistScrolledWindow;
+ register gint i;
+ gchar *titles[3] = {_("Key"), _("Name"), _("Number")};
+
+
+ InitMainMenu ();
+ GUI_SpeedDialWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_SpeedDialWindow), _("Speed Dial"));
+ gtk_widget_set_usize (GTK_WIDGET (GUI_SpeedDialWindow), 332, 220);
+ //gtk_container_set_border_width (GTK_CONTAINER (GUI_SpeedDialWindow), 10);
+ gtk_signal_connect (GTK_OBJECT (GUI_SpeedDialWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_SpeedDialWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SpeedDialWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_SpeedDialWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+ NewPixmap(Read_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ReadSpeedDial, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+ NewPixmap(Send_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) SaveSpeedDial, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+ NewPixmap(Open_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ImportSpeedDial, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+ NewPixmap(Save_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ExportSpeedDial, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL,
+ NewPixmap(Edit_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) EditKey, NULL);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ clist = gtk_clist_new_with_titles (3, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT);
+// gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (clist), 0);
+ gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE);
+ //gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST (clist), 1, 150);
+ gtk_clist_set_column_width (GTK_CLIST (clist), 2, 115);
+ gtk_clist_set_column_justification (GTK_CLIST (clist), 0, GTK_JUSTIFY_CENTER);
+// gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, xgnokiiConfig.callerGroupsSupported);
+
+ for (i = 0; i < 3; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ gtk_main_quit ();
+ }
+ sColumn->clist = clist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+ GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow,
+ TRUE, TRUE, 0);
+
+ gtk_widget_show (clist);
+ gtk_widget_show (clistScrolledWindow);
+
+ questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SpeedDialWindow->window,
+ &questMark.mask,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL],
+ quest_xpm);
+
+ CreateErrorDialog (&errorDialog, GUI_SpeedDialWindow);
+ CreateInfoDialog (&infoDialog, GUI_SpeedDialWindow);
+ speedDialInitialized = FALSE;
+}
--- /dev/null
+/*
+
+ 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
--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include "misc.h"
+#include "xgnokii_common.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_xkeyb.h"
+
+typedef struct {
+ int top_left_x, top_left_y;
+ int bottom_right_x, bottom_right_y;
+ int code;
+} ButtonT;
+
+
+static GtkWidget *GUI_XkeybWindow;
+static GtkWidget *pixArea;
+static GtkWidget *phonePixmap = NULL;
+static ErrorDialog errorDialog = {NULL, NULL};
+static ButtonT *button = NULL;
+
+static ButtonT button_6110[30] = {
+ { 103, 91, 114, 107, PHONEKEY_POWER }, /* Power */
+ { 28, 240, 54, 263, PHONEKEY_MENU }, /* Menu */
+ { 84, 240, 110, 263, PHONEKEY_NAMES }, /* Names */
+ { 58, 245, 82, 258, PHONEKEY_UP }, /* Up */
+ { 55, 263, 85, 276, PHONEKEY_DOWN }, /* Down */
+ { 22, 271, 50, 289, PHONEKEY_GREEN }, /* Green */
+ { 91, 271, 115, 289, PHONEKEY_RED }, /* Red */
+ { 18, 294, 44, 310, PHONEKEY_1 }, /* 1 */
+ { 56, 294, 85, 310, PHONEKEY_2 }, /* 2 */
+ { 98, 294, 121, 310, PHONEKEY_3 }, /* 3 */
+ { 18, 317, 44, 333, PHONEKEY_4 }, /* 4 */
+ { 56, 317, 85, 333, PHONEKEY_5 }, /* 5 */
+ { 98, 317, 121, 333, PHONEKEY_6 }, /* 6 */
+ { 18, 342, 44, 356, PHONEKEY_7 }, /* 7 */
+ { 56, 342, 85, 356, PHONEKEY_8 }, /* 8 */
+ { 98, 342, 121, 356, PHONEKEY_9 }, /* 9 */
+ { 18, 365, 44, 380, PHONEKEY_ASTERISK }, /* * */
+ { 56, 365, 85, 380, PHONEKEY_0 }, /* 0 */
+ { 98, 365, 121, 380, PHONEKEY_HASH }, /* # */
+ { 1, 138, 10, 150, PHONEKEY_INCREASEVOLUME }, /* Volume + */
+ { 1, 165, 10, 176, PHONEKEY_DECREASEVOLUME }, /* Volume - */
+ { 0, 0, 0, 0, 0x00 }
+};
+
+static ButtonT button_6150[30] = {
+ { 99, 78, 114, 93, PHONEKEY_POWER }, /* Power */
+ { 20, 223, 49, 245, PHONEKEY_MENU }, /* Menu */
+ { 90, 223, 120, 245, PHONEKEY_NAMES }, /* Names */
+ { 59, 230, 83, 247, PHONEKEY_UP }, /* Up */
+ { 56, 249, 84, 265, PHONEKEY_DOWN }, /* Down */
+ { 14, 254, 51, 273, PHONEKEY_GREEN }, /* Green */
+ { 90, 255, 126, 273, PHONEKEY_RED }, /* Red */
+ { 18, 281, 53, 299, PHONEKEY_1 }, /* 1 */
+ { 55, 280, 86, 299, PHONEKEY_2 }, /* 2 */
+ { 90, 281, 122, 299, PHONEKEY_3 }, /* 3 */
+ { 18, 303, 53, 323, PHONEKEY_4 }, /* 4 */
+ { 55, 303, 87, 323, PHONEKEY_5 }, /* 5 */
+ { 90, 303, 122, 323, PHONEKEY_6 }, /* 6 */
+ { 18, 327, 53, 346, PHONEKEY_7 }, /* 7 */
+ { 53, 327, 87, 346, PHONEKEY_8 }, /* 8 */
+ { 90, 327, 122, 346, PHONEKEY_9 }, /* 9 */
+ { 18, 349, 53, 370, PHONEKEY_ASTERISK }, /* * */
+ { 56, 349, 87, 370, PHONEKEY_0 }, /* 0 */
+ { 98, 349, 122, 370, PHONEKEY_HASH }, /* # */
+ { 2, 131, 10, 147, PHONEKEY_INCREASEVOLUME }, /* Volume + */
+ { 2, 155, 10, 173, PHONEKEY_DECREASEVOLUME }, /* Volume - */
+ { 0, 0, 0, 0, 0x00 }
+};
+
+static ButtonT button_5110[30] = {
+ { 100, 85, 114, 99, PHONEKEY_POWER }, /* Power */
+ { 50, 240, 85, 265, PHONEKEY_MENU }, /* Menu */
+ { 20, 240, 45, 260, PHONEKEY_NAMES }, /* Names */
+ { 100, 240, 117, 258, PHONEKEY_UP }, /* Up */
+ { 93, 267, 112, 287, PHONEKEY_DOWN }, /* Down */
+ { 14, 294, 44, 312, PHONEKEY_1 }, /* 1 */
+ { 54, 294, 83, 312, PHONEKEY_2 }, /* 2 */
+ { 94, 294, 122, 312, PHONEKEY_3 }, /* 3 */
+ { 14, 320, 44, 338, PHONEKEY_4 }, /* 4 */
+ { 54, 320, 83, 338, PHONEKEY_5 }, /* 5 */
+ { 94, 320, 122, 338, PHONEKEY_6 }, /* 6 */
+ { 14, 345, 44, 363, PHONEKEY_7 }, /* 7 */
+ { 54, 345, 83, 363, PHONEKEY_8 }, /* 8 */
+ { 94, 345, 122, 363, PHONEKEY_9 }, /* 9 */
+ { 18, 374, 49, 389, PHONEKEY_ASTERISK }, /* * */
+ { 53, 371, 82, 387, PHONEKEY_0 }, /* 0 */
+ { 96, 374, 119, 389, PHONEKEY_HASH }, /* # */
+ { 0, 0, 0, 0, 0x00 }
+};
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/xkeyb/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static GtkWidget *GetPixmap (void)
+{
+ GtkWidget *wpixmap;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+ gchar *file;
+
+ if (!strcmp (phoneMonitor.phone.model, "6110") ||
+ !strcmp (phoneMonitor.phone.model, "6120"))
+ {
+ button = button_6110;
+ file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6110.xpm");
+ }
+ else if (!strcmp (phoneMonitor.phone.model, "6130") ||
+ !strcmp (phoneMonitor.phone.model, "6150") ||
+ !strcmp (phoneMonitor.phone.model, "616x") ||
+ !strcmp (phoneMonitor.phone.model, "6185") ||
+ !strcmp (phoneMonitor.phone.model, "6190"))
+ {
+ button = button_6150;
+ file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6150.xpm");
+ }
+ else if (!strcmp (phoneMonitor.phone.model, "5110") ||
+ !strcmp (phoneMonitor.phone.model, "5130") ||
+ !strcmp (phoneMonitor.phone.model, "5160") ||
+ !strcmp (phoneMonitor.phone.model, "5190"))
+ {
+ button = button_5110;
+ file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/5110.xpm");
+ }
+ else
+ return NULL;
+
+ pixmap = gdk_pixmap_create_from_xpm (pixArea->window, &mask,
+ &pixArea->style->bg[GTK_STATE_NORMAL],
+ file);
+ g_free (file);
+
+ if (pixmap == NULL)
+ return NULL;
+
+ wpixmap = gtk_pixmap_new (pixmap, mask);
+
+ return wpixmap;
+}
+
+
+static inline void CloseXkeyb (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_XkeybWindow);
+}
+
+
+void GUI_ShowXkeyb (void)
+{
+ if (phonePixmap == NULL)
+ {
+ phonePixmap = GetPixmap ();
+ if (phonePixmap != NULL)
+ {
+ gtk_fixed_put (GTK_FIXED (pixArea), phonePixmap, 0 , 0);
+ gtk_widget_show (phonePixmap);
+ }
+ else
+ {
+ gtk_label_set_text (GTK_LABEL (errorDialog.text),
+ _("Cannot load background pixmap!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+ }
+ gtk_widget_show (GUI_XkeybWindow);
+}
+
+
+static gint ButtonEvent (GtkWidget *widget, GdkEventButton *event)
+{
+ unsigned char req[] = {0x00,0x00};
+ register gint i = 0;
+
+ if (button == NULL)
+ return TRUE;
+
+ if (event->button != 1)
+ return TRUE;
+
+ if (event->type == GDK_BUTTON_PRESS)
+ req[0] = PRESSPHONEKEY;
+ else if (event->type == GDK_BUTTON_RELEASE)
+ req[0] = RELEASEPHONEKEY;
+ else
+ return TRUE;
+
+// g_print ("%f %f\n", event->x, event->y);
+
+ while (button[i].top_left_x != 0) {
+ if (button[i].top_left_x <= event->x &&
+ event->x <= button[i].bottom_right_x &&
+ button[i].top_left_y <= event->y &&
+ event->y <= button[i].bottom_right_y)
+ {
+ PhoneEvent *e = g_malloc (sizeof (PhoneEvent));
+
+ req[1]=button[i].code;
+ e->event = Event_SendKeyStroke;
+ e->data = g_memdup (req, sizeof (req));
+ GUI_InsertEvent (e);
+ }
+
+ i++;
+ }
+
+ return TRUE;
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ {NULL, NULL, NULL, 0, "<Branch>"},
+ {NULL, "<control>W", CloseXkeyb, 0, NULL},
+ {NULL, NULL, NULL, 0, "<LastBranch>"},
+ {NULL, NULL, Help1, 0, NULL},
+ {NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Close"));
+ menu_items[2].path = g_strdup (_("/_Help"));
+ menu_items[3].path = g_strdup (_("/Help/_Help"));
+ menu_items[4].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateXkeybWindow (void)
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+
+ InitMainMenu ();
+ GUI_XkeybWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_XkeybWindow), _("XGnokii Keyboard"));
+ //gtk_widget_set_usize (GTK_WIDGET (GUI_XkeybWindow), 436, 220);
+ gtk_signal_connect (GTK_OBJECT (GUI_XkeybWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_XkeybWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_XkeybWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_XkeybWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ pixArea = gtk_fixed_new ();
+ gtk_signal_connect (GTK_OBJECT (pixArea), "button_press_event",
+ (GtkSignalFunc) ButtonEvent, NULL);
+ gtk_signal_connect (GTK_OBJECT (pixArea), "button_release_event",
+ (GtkSignalFunc) ButtonEvent, NULL);
+ gtk_widget_set_events (pixArea, GDK_EXPOSURE_MASK
+ | GDK_LEAVE_NOTIFY_MASK
+ | GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK
+ | GDK_POINTER_MOTION_MASK
+ | GDK_POINTER_MOTION_HINT_MASK);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), pixArea, FALSE, FALSE, 3);
+ gtk_widget_show (pixArea);
+
+ CreateErrorDialog (&errorDialog, GUI_XkeybWindow);
+}
--- /dev/null
+/*
+
+ 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
--- /dev/null
+/* 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...",
+"....#........#...."
+};
--- /dev/null
+/* 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. ",
+" ............ ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Black_point_xpm[] = {
+"7 7 3 1",
+" c None",
+". c #397939",
+"+ c #000000",
+".......",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+"......."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for CallerLogo.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Caller_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+" c None",
+"l c #ffffff",
+
+" ",
+" ",
+" ********* ",
+" *********** ",
+" ** ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ** ",
+" *********** ",
+" ********* ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* 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",
+" ",
+" ",
+" . ",
+" . ",
+" .... .....+ ",
+" .++++. ...... ",
+" .............@+ ",
+" .#$$.....+.++%+ ",
+" . $$....+@+@@@+ ",
+" .......+@%+@@@+ ",
+" ......@@@@++@+ ",
+" ......@@@@+&.+ ",
+" ......+...+@++ ",
+" ......@@+.***** ",
+" ......%++%**++ ",
+" ......%%%%+ ",
+" .... ",
+" ",
+" "};
--- /dev/null
+/* 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 ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Delete_xpm[] = {
+"16 17 4 1",
+" c None",
+". c red",
+"X c gray50",
+"o c black",
+" ",
+" . ",
+" ..X ... ",
+" ..X ..... ",
+" .......oo ",
+" .....o ",
+" ....o ",
+" ...... ",
+" ..o ... ",
+" ..o ... ",
+" .o ..X ",
+" .o .o ",
+" o o ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+/* XPM */
+static char * Dial_xpm[] = {
+"14 16 2 1",
+" c None",
+". c #0000FFFF0000",
+" .... ",
+" ....... ",
+" ......... ",
+"........... ",
+"..... ...... ",
+" ... ..... ",
+" . .....",
+" ....",
+" .....",
+" ......",
+" .... ",
+" .. ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+/* XPM */
+static char * Display_xpm[] = {
+"109 96 3 1",
+" c #000000000000",
+". c #FFFFFFFFFFFF",
+"X c #0000DF7D0000",
+" ",
+" ",
+" ",
+" ",
+" ... . .. ... .... ... ... ... ... ",
+" . .. .. . .. .. . . . . ",
+" . . .. . . . . . . . ",
+" . . . . . . . . . . ",
+" . ... . . . . . ... . . ",
+" . . . . . . . . .. . . ",
+" . . . . . . . . .. . . ",
+" . .. . .. .. .. . .. . . ",
+" .... ... . .... ... ...... ... ",
+" ",
+" ",
+" ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+static char * Duplicate_xpm[] = {
+"16 18 4 1",
+" c None",
+". c black",
+"X c gray50",
+"o c white",
+" ....... ",
+" .XXXXXX. ",
+" .......XXX. ",
+" .ooooo..XXX. ",
+" .ooooo.o.XX. ",
+" .ooooo....X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo.X. ",
+" .oooooooo... ",
+" .oooooooo. ",
+" .......... ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Edit_xpm[] = {
+"16 17 5 1",
+" c #84207BDE7BDE",
+". c None",
+"X c #FFFFFFFFFFFF",
+"o c #000000000000",
+"O c #52945294FFFF",
+" .......",
+" XXXXXXX o......",
+" X X Xo....O",
+" XXXXXXX ooo..OO",
+" X XXXXo.OOo",
+" XXXXXXXXXXoOOo.",
+" X XOOo..",
+" XXXXXXXXXOOo...",
+" X oOo....",
+" XXXXXXXoooo....",
+" X oooXo....",
+" XXXXXoXXXXo....",
+" XXXXXXXXXXo....",
+"oooooooooooo....",
+"................",
+"................",
+"................"};
--- /dev/null
+/* XPM */
+static char * Edit_flip_horizontal_xpm[] = {
+"20 19 4 1",
+" c None",
+". c #000000",
+"+ c #35773A",
+"@ c #5ACA62",
+" ",
+" ",
+" ",
+" . . ",
+" .. .. ",
+" .+. . . ",
+" .+. . . ",
+" .@+. . . ",
+" .@+. . . ",
+" .@@+. . . ",
+" .@@+. . . ",
+" .@@@+. . . ",
+" .@@@+. . . ",
+" .@@@@+. . . ",
+" ....... ....... ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Edit_flip_vertical_xpm[] = {
+"20 19 4 1",
+" c None",
+". c #000000",
+"+ c #5ACA62",
+"@ c #35773A",
+" ",
+" ",
+" .. ",
+" .+.. ",
+" .+++.. ",
+" .+++++.. ",
+" .+++++++.. ",
+" .@@@@@@@@@. ",
+" ............ ",
+" ",
+" ............ ",
+" . . ",
+" . .. ",
+" . .. ",
+" . .. ",
+" . .. ",
+" .. ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Edit_invert_xpm[] = {
+"20 19 4 1",
+" c None",
+". c #000000",
+"+ c #5ACA62",
+"@ c #35773A",
+" ",
+" ",
+" ........... .. ",
+" .+++++++++. . ",
+" .+++++++++. . ",
+" .+++@@@+++. . . . ",
+" .+++@@@+++. ... ",
+" .+++++++++. . ",
+" .+++++++++. ",
+" ................ ",
+" .@@@@@@@@@. ",
+" . .@@@@@@@@@. ",
+" ... .@@@+++@@@. ",
+" . . . .@@@+++@@@. ",
+" . .@@@@@@@@@. ",
+" . .@@@@@@@@@. ",
+" .. ........... ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Flip_xpm[] = {
+"20 18 3 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . . ",
+" .. .. ",
+" .............. ",
+" ...++++++++++... ",
+" .............. ",
+" .. .. ",
+" . . ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* 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.......",
+"................"};
--- /dev/null
+/* XPM */
+static char * Green_pixel_xpm[] = {
+"1 1 2 1",
+" c None",
+". c #5ACA62",
+"."};
--- /dev/null
+/* XPM */
+static char * Green_point_xpm[] = {
+"7 7 3 1",
+" c None",
+". c #397939",
+"+ c #5ACA62",
+".......",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+".+++++.",
+"......."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the logo of the GUI utility.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Invert_xpm[] = {
+
+"20 18 4 1",
+
+"* c #000000",
+" c None",
+"b c #dfdfdf",
+". c #ffffff",
+
+" ",
+" ******** ",
+" *......** ",
+" *......*.* ",
+" *......**** ",
+" *.........* ",
+" *.........* ",
+" *********** ",
+" *********** ",
+" *********** ",
+" *********** ",
+" *********** ",
+" *********** ",
+" *********** ",
+" ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* 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....... ",
+" .. "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for New.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *New_xpm[] = {
+
+"20 18 3 1",
+
+"* c #000000",
+" c None",
+". c #ffffff",
+
+" ",
+" ******** ",
+" *......** ",
+" *......*.* ",
+" *......**** ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *.........* ",
+" *********** ",
+" ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Open.
+
+ Last modification: Wed Jun 14 18:04:00 CEST 2000
+ Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewBD_xpm[]={
+"20 18 9 1",
+"d c #ffa858",
+"e c #c05800",
+"# c #000000",
+"g c #ff8000",
+"b c #ffff00",
+"f c #ffdca8",
+"c c #0000ff",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaabaaaaa#....",
+"...#aaabacabaaa#....",
+"...#aaacacacaaa#....",
+"...#aaacccacaaa#....",
+"...#aadcdcdceaa#....",
+"...#adfcfcfcfea#....",
+"...#aeeeeeeeeea#....",
+"...#adggdddggea#....",
+"...#adggdddggea#....",
+"...#aaeeeeeeeaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Open.
+
+ Last modification: Wed Jun 14 18:04:00 CEST 2000
+ Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewCall_xpm[]={
+"20 18 3 1",
+"# c #000000",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aa###aaaaaa#....",
+"...#a######aaaa#....",
+"...#a#######aaa#....",
+"...#aa##a####aa#....",
+"...#aaaaaa###aa#....",
+"...#aaaaaaa###a#....",
+"...#aaaaaa####a#....",
+"...#aaaaaa####a#....",
+"...#aaaaaaa##aa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Open.
+
+ Last modification: Wed Jun 14 18:04:00 CEST 2000
+ Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewMeet_xpm[]={
+"20 18 3 1",
+"# c #000000",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aa#aaaaa#aa#....",
+"...#aaa#aaa#aaa#....",
+"...#a####a####a#....",
+"...#aaa#aaa#aaa#....",
+"...#aa#aaaaa#aa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Open.
+
+ Last modification: Wed Jun 14 18:04:00 CEST 2000
+ Modified by Marcel Köppen <jojo@jojosoft.de>
+
+*/
+
+static char*NewRem_xpm[]={
+"20 18 5 1",
+"c c #c3c3c3",
+"# c #000000",
+"b c #ffff00",
+". c None",
+"a c #ffffff",
+"....................",
+"...##########.......",
+"...#aaaaaaaa##......",
+"...#aaaaaaaa#a#.....",
+"...#aaaaaaaa####....",
+"...#aaaaaaaaaaa#....",
+"...#aaaa###aaaa#....",
+"...#aaa#bbb#aaa#....",
+"...#aa#bbbbb#aa#....",
+"...#aa#bbbbb#aa#....",
+"...#aa#bbbbb#aa#....",
+"...#aaa#bbb#aaa#....",
+"...#aaa#ccc#aaa#....",
+"...#aaaa#c#aaaa#....",
+"...#aaaa###aaaa#....",
+"...#aaaaaaaaaaa#....",
+"...#############....",
+"...................."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Operator Logo.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Op_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+" c None",
+"l c #ffffff",
+
+" ",
+" ",
+" ********** ",
+" ************ ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ** ** ",
+" ************ ",
+" ********** ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Open.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Open_xpm[] = {
+
+"20 18 5 1",
+
+"* c #000000",
+". c #808000",
+"a c #ffff00",
+" c None",
+"e c #ffffff",
+
+" ",
+" *** ",
+" * * * ",
+" ** ",
+" *** *** ",
+" *eae******* ",
+" *aeaeaeaea* ",
+" *eaeaeaeae* ",
+" *aeae********** ",
+" *eae*.........* ",
+" *ae*.........* ",
+" *e*.........* ",
+" **.........* ",
+" *********** ",
+" ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* XPM */
+static char * Operator_logo_xpm[] = {
+"20 19 5 1",
+" c None",
+". c #000000",
+"+ c #808080",
+"@ c #00FF00",
+"# c #008000",
+" ",
+" ",
+" . ",
+" . ",
+" .... ",
+" .++++. ",
+" ...... ....... ",
+" .@##.. . . ",
+" . ##.. ..... ",
+" ...... . . ",
+" ...... ",
+" ...... ..... ",
+" ...... . . . ",
+" ...... ... ",
+" ...... . ",
+" ...... . ",
+" .... . ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * Read_xpm[] = {
+"13 19 7 1",
+" c None",
+". c #000000000000",
+"X c #861782078617",
+"o c #61859A694924",
+"O c #000082070000",
+"+ c #C71BC30BC71B",
+"@ c #FFFFFBEEFFFF",
+" ",
+" . ",
+" . ",
+" .... ",
+" .XXXX. ",
+" ...... ",
+" .oOO.. ",
+" .+OO.. ",
+" ...... ",
+" .X.... ",
+" . .@..... ",
+" .. .@@+.... ",
+" .@.@@+..... ",
+" .@@@+.X.... ",
+" .@@+..X.... ",
+" .++++..... ",
+" ....... ",
+" ",
+" "};
--- /dev/null
+/* 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...."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Save.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Save_xpm[] = {
+
+"20 18 3 1",
+
+"* c #000000",
+"# c #808000",
+" c None",
+
+" ",
+" ************** ",
+" *#* * * ",
+" *#* *** ",
+" *#* *#* ",
+" *#* *#* ",
+" *#* *#* ",
+" *#* *#* ",
+" *##********##* ",
+" *############* ",
+" *##*********#* ",
+" *##****** *#* ",
+" *##****** *#* ",
+" *##****** *#* ",
+" ************* ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Send.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Send_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+" c None",
+"l c #ffffff",
+
+" ",
+" * ",
+" * ",
+" **** ",
+" *iiii* ",
+" ****** ",
+" *cbb** ",
+" * bb** ",
+" ****** ",
+" *********** ",
+" *lll ***** ",
+" *ll ***** ",
+" *lll ***** ",
+" *ll * ***** ",
+" *ll * ****** ",
+" * * **** ",
+" * ",
+" ",
+" "
+};
--- /dev/null
+/* 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 ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the icon for Startup Logo.
+
+ Last modification: Sat Jul 24 14:30:37 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *Startup_xpm[] = {
+
+"20 19 7 1",
+
+"* c #000000",
+"# c #800000",
+"b c #008000",
+"c c #00ff00",
+"i c #808080",
+" c None",
+"l c #ffffff",
+
+" ",
+" ",
+" ********* ",
+" *********** ",
+" ** ** ",
+" ** ",
+" ** ",
+" * ",
+" ********** ",
+" ********** ",
+" ** ",
+" ** ",
+" ** ",
+" ** ** ",
+" *********** ",
+" ********* ",
+" ",
+" ",
+" "
+};
--- /dev/null
+/* 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",
+" ",
+" ",
+" . ",
+" . ",
+" .... ",
+" .++++. ... ",
+" ...... . ",
+" .@##.. ... ",
+" . ##.. . ",
+" ...... ",
+" ...... .......... ",
+" ...... .$$$%%%&&. ",
+" ...... .$*$%%%%&. ",
+" ...... .%*%%%%%%. ",
+" ...... .****====. ",
+" ...... .***=====. ",
+" .... .......... ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Tool_brush_xpm[] = {
+"20 19 4 1",
+" c None",
+". c #000000",
+"+ c #949194",
+"@ c #FFFFFF",
+" ",
+" ",
+" ",
+" .... ",
+" . . ",
+" . . ",
+" .. .+ ",
+" .@@...+ ",
+" .@ .++ ",
+" .@@ .+ ",
+" .@ .++ ",
+" .@@ .+ ",
+" .@ .++ ",
+" .. .+ ",
+" ....++ ",
+" ...++ ",
+" ..++ ",
+" .++ ",
+" "};
--- /dev/null
+/* XPM */
+static char * Tool_filled_rectangle_xpm[] = {
+"20 19 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" .............. ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Tool_line_xpm[] = {
+"20 19 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * Tool_rectangle_xpm[] = {
+"20 19 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" .............. ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .............. ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This icon is used for alarm notification.
+
+ Last modification: Sat Jul 10 21:30:28 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_alarm[] = {
+
+"9 9 3 1",
+
+" c None",
+"# c #000000",
+"+ c #d0dae8",
+
+"#########",
+"## # ##",
+"# # #",
+"# # #",
+"# ### #",
+"# #",
+"# #",
+"## ##",
+"#########"
+};
--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the background of the GUI.
+
+ Copyright (C) 1999 Petr Vostøel <pisi@parscom.cz>
+
+ Last modification: Sat Jun 26 07:30:06 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+/* XPM */
+static char *XPM_background[] = {
+"261 96 129 2",
+" c None",
+". c #FFFFFF",
+"+ c #FCFCFC",
+"@ c #F9F9F9",
+"# c #F9F2F2",
+"$ c #F4EAEA",
+"% c #F3F3F3",
+"& c #EEF2F7",
+"* c #EEF1F7",
+"= c #EDF1F6",
+"- c #EDEDED",
+"; c #EBEFF5",
+"> c #E8EDF4",
+", c #E8CECD",
+"' c #E6EBF3",
+") c #E6E6E6",
+"! c #DFE6EF",
+"~ c #DEDEDE",
+"{ c #DCE4EE",
+"] c #D9E1ED",
+"^ c #D7DFEB",
+"/ c #D6DEEB",
+"( c #D6D6D6",
+"_ c #D3DCE9",
+": c #D2ADAC",
+"< c #D1DBE9",
+"[ c #D0DAE8",
+"} c #CFD9E8",
+"| c #CF9A98",
+"1 c #CECECE",
+"2 c #CDD8E6",
+"3 c #CAD5E5",
+"4 c #C9C9C9",
+"5 c #C7C5C5",
+"6 c #C6D2E3",
+"7 c #C5CEDB",
+"8 c #C2CFE1",
+"9 c #C1C1C1",
+"0 c #C0C9D6",
+"a c #BFCCDF",
+"b c #BF7C7B",
+"c c #BDC6D3",
+"d c #BBC9DD",
+"e c #BABABA",
+"f c #B8C7DC",
+"g c #B8C0CB",
+"h c #B7C6DC",
+"i c #B6C6DB",
+"j c #B4C4DA",
+"k c #B3C3DA",
+"l c #B3BBC7",
+"m c #B2C2D9",
+"n c #B2B2B2",
+"o c #B10707",
+"p c #AF5F5D",
+"q c #ACB4BF",
+"r c #ABABAB",
+"s c #A5ADB8",
+"t c #A4A4A4",
+"u c #A23C3A",
+"v c #9BA3AD",
+"w c #9B9B9B",
+"x c #949494",
+"y c #939AA4",
+"z c #8C929C",
+"A c #8B8B8B",
+"B c #848383",
+"C c #7D838B",
+"D c #7B7B7B",
+"E c #786463",
+"F c #757B83",
+"G c #757575",
+"H c #725655",
+"I c #6F7070",
+"J c #6F0302",
+"K c #6A6A6A",
+"L c #686D74",
+"M c #656565",
+"N c #61666C",
+"O c #606161",
+"P c #5C5C5C",
+"Q c #575B61",
+"R c #575758",
+"S c #545454",
+"T c #505151",
+"U c #4E4F4F",
+"V c #4C4C4C",
+"W c #4B2726",
+"X c #484848",
+"Y c #446BA4",
+"Z c #444444",
+"` c #4369A1",
+" . c #41669C",
+".. c #414449",
+"+. c #404040",
+"@. c #3D6194",
+"#. c #3D3D3D",
+"$. c #393939",
+"%. c #385886",
+"&. c #37393D",
+"*. c #353535",
+"=. c #34527E",
+"-. c #344F69",
+";. c #324E78",
+">. c #303031",
+",. c #2E4970",
+"'. c #2D0201",
+"). c #2C2C2D",
+"!. c #2B4468",
+"~. c #292929",
+"{. c #273E5E",
+"]. c #252525",
+"^. c #233755",
+"/. c #212121",
+"(. c #1F314B",
+"_. c #1B2B42",
+":. c #1B1B1B",
+"<. c #162336",
+"[. c #151515",
+"}. c #0F1A29",
+"|. c #0E0E0E",
+"1. c #08121E",
+"2. c #080D14",
+"3. c #08090B",
+"4. c #040506",
+"5. c #012343",
+"6. c #000000",
+"7. c #FFFFFF",
+"8. c #000000",
+" [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.8.8.8.8. ",
+" 8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8. ",
+" 8.8.8.8.8.3.Z w e r G [.w e r 8.*.e A 8.8.S r e G [.8.w e G [.r e M A e A A e A 8.8.8.8.8.G e r Z 8.8.8.8.8.8.8.G M G M 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.8.8.8.8.8.8.r e e w *.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.[.G e r Z 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.1._.,.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.%.;.!.^._.}.2.8.8.8.8. ",
+" 8.8.8.}.(.(.2.8.G . . . . - [.. . . [.M . A 8.w . . . . e 8.. . G G . ~ [.. . G . . G 8.8.8.8.w 1 S S /.8.8.8.8.8.8.8.~ Z ~ Z 8.8.8.8.8.8.8.~ Z 8.8.8.8.8.8.8.8.8.8.8.8.8.. G Z r ~ 8.8.8.8.8.8.8.[.[.8.8.8.8.8.8.8.8.8.8.1 r Z M /.8.8.8.8.8.8.8.r S 8.[.[.8.8.8.8.8.8.1.!.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` ` .@.=.!._.}.4.8.8.8. ",
+" 8.8.2._.;. .=.1.8.Z . . G 8.[.+.[.. . . S G . G Z . . Z M . . ).. . G . . +.[.. . D . . G 8.8.8.Z - [.8.8.8.8.8.8.8.8.8.8.. *.. *.8.8.8.8.8.8.8.. *.8.8.8.8.8.8.8.8.8.8.8.8.*.. *.8.[.. Z 8.8.8.8.8.[.. [.8.8.8.8.8.8.8.8.8.*.. [.8.8.8.8.8.8.8.8.8.8.8.8.[.. [.8.8.8.8.8.8.8.1.=.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` ` =.{.<.3.8.8.8. ",
+" 8.8.2.^.=.Y Y Y (.8.8.w . ~ 8.8.8.8.+.. . . G r . Z r . 1 8.Z . . G . . - . A 8.+.. . G . . Z 8.8.8.w w 8.8.8.8.8.G - . A 8.*.. *.. 8.M 1 8.8.e M *.. 8.A - . e 8.Z . e M 8.8.8.+.. 8.8.8.. Z A - . e 8.1 - e *.A - . e 8.8.8.8.*.. I 8.8.8.M 1 8.8.e M *.. [.4 - e *.G - . A 8.8.8.(.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` =.^.1.4.8.8. ",
+" 8.3.(.=.Y Y Y Y Y 1.8.8.~ . w G . . . A . A . e e . *.- . w 8.S . . A . . . . /.8.M . . D . . /.8.8.8.~ G 8.8.8.8.G e [.*.. *.T ~ S ~ 8.G r 8.8.- Z S ~ 8./.8.S . 8.M 1 [.8.8.8.8.G 1 8.8.[.. *.:.8.S . 8.M e 8.8./.8.S . 8.8.8.8.8.M - ~ S 8.G r 8.8.- Z +.- 8.M e 8.G e [.*.. *.8.8.1.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.%.=.;.,.!.!.!.!.!.!.,.;.=.%.@.` Y Y Y Y Y Y Y Y @.!.<.3.8.8. ",
+" 8.8.}.,.` Y Y Y Y Y Y 8.8.8.. . G Z w . . G . G 1 . - . 8.. . G 8.A . . G . - . . G 8.G . . G . . 8.8.8.8.. Z 8.8.8.8.~ r I G . +.G e G e 8.r G 8.8.. [.G e *.~ . ~ 1 8.G w 8.8.8.8.8.A e 8.8.+.. *.~ . ~ 1 8.G w 8.*.~ . ~ 1 8.8.8.8.8.8.[.w . /.r G 8.8.. [.G e 8.G w 8.~ r I G . +.8.8.8.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.;.{._.}.1.2.4.8.8.8.8.8.8.8.8.4.3.1.}.<.^.,.%.` Y Y Y Y Y Y .,.<.3.8.8. ",
+" 8.8._.%.Y Y Y Y Y Y Y Y 1.8.8.- . w 8.S . - r . Z w . . ~ 8.- . A 8.~ . w r . e e . ~ 8.r . 1 r . 1 8.8.8.8.. Z 8.8.8.8.. w G G G [.w G w G 8.1 S 8.Z . 8.w G ~ w 8.G r 8.r G 8.8.8.8.8.e G 8.8.A r ~ w 8.G r 8.r G 8.~ w 8.G r 8.8.8.8.8.8.8.8.. Z 1 S 8.Z . 8.w A 8.r G 8.. w G G G [.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.!._.1.3.8.|.+.I A t r n n n n r r t x A I T ].|.4.1.<.{.%.` Y Y Y Y Y @.!.}.8.8. ",
+" 8.4.{. .Y Y Y Y Y Y Y %.{.2.8.8.w . . 1 ~ . e e . *.O . . e 8.w . - 1 . - /.e . r M . . Z e . e e . e 8.8.8.8.r r [.[.*.8.~ w [.[.:.8.e G e G 8.. S 8.G 1 8.e G . M [.r G 8.e S 8.8.8.8.8.1 G 8.S - *.. M [.r G 8.e M 8.. M [.r G 8.8.8.8.S [.[.A 1 8.. S 8.G 1 8.e G 8.e M 8.~ w [.[.:.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y ` ;.(.1.4.4.Z B n 9 9 9 9 e e e n n n r r t t t w w x x D S ].4.2._.,. .Y Y Y Y Y @.^.2.8.8. ",
+" 8.3.!.` Y Y Y Y Y Y %.^.2.8.8.8.8.[.w - . ~ w S . . 8.*.. . A 8.[.w . . r /.8.. . G [.. . w . . G . . G 8.8.8.8.*.e . ( S 8.*.( . - M 8.- Z - Z 8.A . ~ 1 e 8.- Z G . e 1 M 8.. Z 8.8.8.8.8.. . . 1 Z 8.G . e 1 M 8.r . G G . e 1 M 8.8.8.8.r . . r /.8.A . ~ 1 e 8.- Z 8.r . G *.( . - M 8.8./.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v &.}.;.` Y Y Y Y Y Y Y Y .,.<.3.8.#.A e 4 5 5 9 9 9 9 e e e n n n r r t t t w w x x A A B D V :.4.}.!.@.Y Y Y Y ` ;.<.8.8. ",
+" 8.4.!.Y Y Y Y Y Y Y !.}.8.8.].N N /.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.v > * = ' ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y ).8.}.;.` Y Y Y Y Y Y ` ;.<.4.3.P r 4 4 4 4 5 5 5 9 9 9 e e e n n n r r t t t w w x x A A B B D D P ).4.}.!. .Y Y Y Y @.(.3.[. ",
+" 8.8.{.Y Y Y Y Y Y @._.8.8./.I l [ [ v O ~.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.2.X g * & & & & & { [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.}.;.` Y Y Y Y Y Y %.(.3.4.M e 1 1 1 4 4 4 5 5 9 9 e e e n r t w w w t t t w w w x x A A B B D D G I P ~.4.<.=.Y Y Y Y ` !.1.8. ",
+" 8.8._.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m d * & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.<.%.` Y Y Y Y Y ` ,.}.8.V n 1 1 1 4 1 4 4 5 9 e n r r t t w w x x x A x w t w w w x x A A B B D D I K K M U :.2.{.@.Y Y Y Y =.}.8. ",
+" |.}.@.Y Y Y Y Y %.<.8.:.F } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < } 3 3 3 / [ [ [ [ [ < < < < < < < < < < < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m k ! & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y /.8.<.%.Y Y Y Y Y Y @.(.3.:.x 1 1 1 1 1 1 4 5 5 9 n r r t t r w x r ( ) 4 x B w w w x x x A A A B B D D I I M M P P *.3._.%.Y Y Y Y %.}.8. ",
+" 8.3.,.Y Y Y Y Y =.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < 6 m m m m m m m k 2 < [ [ ^ } [ [ [ [ [ [ [ [ [ < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 i m m m m m m m k / & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v ).8.}.%.Y Y Y Y Y Y %.<.4.S e 1 1 1 1 1 1 5 e n n r r n 4 ~ @ . w x . . . . x G A x x x A A A A B B B D D G K K O P R S X [.1.,.Y Y Y Y @.<.8. ",
+" 8._.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 d m m m m m m m m m m m h 2 _ k m m m m m m m m m m k _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8 m m m m m m m k ] & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q &.8.}.%.` Y Y Y Y Y =.}.8.D 4 1 1 1 1 1 4 5 e n r r r n . . . @ 1 A e . - I A M M D B B B B B B B B B D D D G I M O P R T V V /.2.!.Y Y Y Y @.<.8. ",
+" |.1.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < d m m m m m m m m m m m m m m j 8 j m m m m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m k ; & & & & & = [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 0 T 8.}.;.` Y Y Y Y Y ;.1.|.w 4 1 4 1 1 4 4 4 e n e ) . 9 x 4 ~ . @ O P x . . % t S X R I G G G G D D D D D D G I K K M P R T V Z +.~.3.{.Y Y Y Y @.}.8. ",
+" 8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 6 m m m m m k ] & & & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 L 8.3.!.` Y Y Y Y Y ;.1.:.t 4 4 4 4 4 5 5 9 9 r t % . ) w I O B . . O *.>.t . . . r ].~.R P P O M M K I I I I I I K K O P R T X Z #.$.).|.{.` Y Y Y =.1.|. ",
+" [.2.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 3 d m k 8 < ^ ' * & & * ' _ [ [ [ [ [ [ [ [ [ [ [ [ [ 2 z |.8.^.` Y Y Y Y Y ;.1./.r 5 4 4 4 4 9 e n r t w r . . I R S #.*.. . D [.|.|.~.9 . - 4.|.Z Z X V U S R P O M M K K K M M P R T X Z #.$.$.).|.{.Y Y Y Y !.3.8. ",
+" 8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m j h d f k m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 6 2 _ [ [ [ } ] ] } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q >.8.<. .Y Y Y Y Y =.1.:.r 5 5 5 4 4 9 n n e n x B x . . M *.)./.:.5 . n 4.4.~ w ~ . n 8.4.#.#.#.#.+.Z X V T S P P O O O O P R T X Z #.$.*.*.~.2.!.Y Y Y ` ^.8.8. ",
+" 8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m 8 3 [ < < < < 3 h m m m m m m m m m k h h d d 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 O 8.1.=.` Y Y Y Y %.}.[.t 9 5 5 5 5 9 n r 4 . @ t M S % . e /.[./.3.B . - 8./.. . . 1 >.8.[.$.$.$.#.#.#.#.Z Z X V T R R P P P R T V Z $.$.*.*.*.].2.,.Y Y Y .<.8. ",
+" |.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m k } _ [ [ [ [ [ [ [ [ 6 m m m m m m m m 6 _ < _ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] _ [ [ [ [ [ [ [ < < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] < < ] ] ] ] ] < } a d d d d 3 [ [ [ [ [ [ [ [ [ [ [ [ [ z |.4.{.` Y Y Y Y @.<.4.x 9 9 9 9 5 e n r r . . . . t $.t . . B B - [.+.- n |.8.8.>./.8.8.3.).$.$.$.$.$.$.#.#.#.+.Z X V U S S R S T V Z #.*.*.*.*.>./.1.=.Y Y Y =.1.[. ",
+" 8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ k m m m m m m 8 } [ [ [ [ [ [ [ [ [ [ ] d m m m m m m m 2 [ ] ' ; * * * * * * * * * * * * * * * & * ' ] [ [ [ [ [ < ' ; = * * * * * * * * * * * * * * & = ; ! < [ [ ] * & * & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & * * & ! < ' & * * & ] 2 k m m m m 6 [ [ [ [ [ [ [ [ [ [ [ [ c #.8.<. .Y Y Y Y ` ^.8.G 9 9 9 9 9 n r t w A ~ . ) . . e *.( . . . - /.8.8.8.4.8.8.8.8.8.3.).$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V U T T U V Z $.$.*.*.>.>.>.[.<.@.Y Y ` {.8.8. ",
+"8.4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 m m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m k _ ] * & & & & & & & & & & & & & & & & & & & & = ] [ [ [ < ; & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < h m m m m 6 [ [ [ [ [ [ [ [ [ [ [ 2 F |.3.;.` Y Y Y Y ,.3.U e e 9 9 e n r r ( w G x . % 4 . . 1 Z I 9 I |.8.4.4.4.[.*.).).).>.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.Z Z X V V V *.~./.:./.*.>.>.>.>.|.^.Y Y Y .<.8. ",
+"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] ; & & & & & & & & & & & & & & & & & & & & & & = < [ < ' & & & & & & & & & & & & & & & & & & & & & & & ! [ ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ [ l >.8._. .Y Y Y Y %.}.:.r e e e e n t t - . e P X ) . . ( . . 9 8.8.8.8.4.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z #.:.[.|.4.8.8.3.>.>.).).~.2.,.Y Y Y ;.4.8. ",
+"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 8 ' & & & & & & & & * = = = = = = = & & & & & & & & ' [ ] = & & & & & & & & = = = = = = = & & & & & & & & ; < ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ 2 F |.2.=.Y Y Y Y ` (.8.B e e e e r t w ~ . @ M X *.x . . :.Z x |.8.|.|./.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.*.|.|.|.K B P 8.8.3.>.).).).:.<.@.Y Y ` _.8. ",
+"|.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ j m m m m m 2 ' & & & & & & & ' ] ] ] ] ] ] ] ] ' = & & & & & & > [ ! & & & & & & & ; ! ] ] ] ] ] ] ] ' * & & & & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ g *.8.(. .Y Y Y Y ;.3.Z n n n e n t w ( . . . ) R /.].. . I 8.8.8.|.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.>.3.3.$.~ . . + 5 8.8.[.).).).).|.{.Y Y Y =.3.8. ",
+"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < j m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m < ' & & & & & = ] < [ [ [ [ [ [ [ [ < ] = & & & & & > [ ' & & & & & & ' < [ [ [ [ [ [ [ [ < ] ; & & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ C |.2.=.Y Y Y Y .<.4.w n n n n t w x ) ) n . . % Z |.t 1 >.8.:.:.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.4.*.- . . 1 ~ % G 8.[.).).~.~./.1.@.Y Y ` _.8. ",
+"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m d < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m k < ' & & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & & > [ ' & & & & & ; _ [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ 7 ..8._. .Y Y Y Y ;.4.R r r n n t w w x B I V B . . % M [.[.8.3.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.4.n . . M 4.|.4 V 8.[.~.).~.~.~.|.^.` Y Y =.3.8. ",
+"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ _ ' & & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ v :.4.,.Y Y Y Y ` <.4.t r r r r w x ) @ n P $.~.S % . ~ 8.3.3.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.8.. . I 4.4.8.8.8.4.4.8.].~.~.]./.1.@.Y Y .<.8. ",
+"8.@.Y Y Y Y Y 8.8.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 6 < ' & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] * & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ 2 N 8.}.@.Y Y Y Y =.3.T t t r r t x A ( . . ) D :.|.$.~ >.8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.*.>.*.>.*.>.*.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.8.8.1 . O 4.4.8.8.8.8.:.8.4.].~.].].|.{.Y Y Y !.8. ",
+"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ m m m m m m j < [ [ [ [ [ [ [ [ [ [ [ [ ^ f m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] & & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ / ; & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ g *.8.{.` Y Y Y Y (.8.x t t t w A A n w x 1 . . ( X 4.8.8.4.>.$.$.$.$.$.$.$.*.*.*.>.>.>.).).).).).).).).>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.3.8.+.. - >.4.+.I t ( 4 |.8.[.].].].:.}. .Y Y %.}.8. ",
+"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ < d m m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ y :.2.=.Y Y Y Y @.1.>.w t t t A B n . . . % . . . . T 8.3.).$.$.$.$.$.$.*.*.*.>.>.).).~.~.].].].].].~.~.).).>.>.*.*.*.$.$.$.$.$.$.$.$.).8.8.T - 9 . . + % ) ( M 8.|.].]././.3.;.Y Y ` _.8. ",
+"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < a m m m m m m m 6 2 [ [ [ [ [ [ [ 2 3 i m m m m m m m k < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; / [ [ [ [ [ [ [ [ [ [ [ < ] = & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ K 8.<.@.Y Y Y Y !.4.I w w w w A B ) . . . ) . . . 1 8.8.~.$.$.$.$.$.$.*.*.*.>.).).~.].]./././././././.].].~.).).>.*.*.*.$.$.$.$.$.$.$.$.~.8.8.w . . . ~ e ) ~ I 8.|.].]././.[.(.Y Y Y ,.8. ",
+"8.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m f 3 } 3 3 2 2 6 f m m m m m m m m m d _ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < < < < < < < < < < < ] ' & & & & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 0 +.8.^.` Y Y Y Y _.4.x w w w w B D D n . . % A $.Z >.8.3.$.$.$.$.$.$.*.*.>.>.).~.]././.:.:.:.[.[.[.:.:././.].~.).).>.*.*.$.$.$.$.$.$.$.$.$.[.8./.w T - + @ - A 8.8.|./.]././.:.}. .Y Y @.8.8. ",
+"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < i m m m m m m m m m k f k f k m m m m m m m m m m m 3 < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & = ] ^ * & & & = > ' ' ' ' ' ' ' ' ' ; * & & & & & & & & ] < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ s ].3.;.Y Y Y Y @.1.*.x x x w x D G K P P n . . - Z 8.3.>.$.$.$.$.$.$.*.*.>.).~.]./.:.:.[.[.[.:.[.:.[.[.:.:./.].~.).>.>.*.*.$.$.$.$.$.$.$.$.>.[.8.8.>.~ + @ K 8.8.8.8.[.:././.:.|.;.Y Y ` _.8. ",
+"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < } m m m m m m m m m m m m m m m m m m m m m m m m m [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ; < < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ z |.}.%.Y Y Y Y ;.3.K A x x A G G D n r x #.V 9 . /.8.).$.$.$.$.$.$.*.*.>.).~.]./.:.[.[.[.:.[.[.:.[.[.[.[.:.:./.].~.).>.*.*.$.$.$.$.$.$.$.$.$.>.4.8.~ . . P 8.8.~.S [.8.|././.:.|.^.Y Y Y {.8. ",
+" 4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m m m m m m m m m m m m m m m m k < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & & ; < [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ] [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ L 8.<.@.Y Y Y Y {.8.B A A x D I x . . . . . x [./.8.8.>.$.$.$.$.$.$.*.>.).~.]./.:.[.:.[.:.[.[.[.[.:.[.:.[.[.:./.].~.).>.*.*.$.$.$.#.$.$.$.$.$.$.4.8.B - T U w 5 1 9 R 8.|./.:.:.[.<.Y Y Y ;.4. ",
+" 8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m m m m m m m m m d d m m m m m d < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & ' < [ [ [ [ [ [ [ [ [ ] ; & & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & ; ] [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ U 8.^.` Y Y Y Y _.3.A A A A I K 1 . ~ ~ . . . x 8.8.>.$.$.$.$.$.$.*.*.>.).]./.:.[.[.[.:.[.[.:.[.:.[.[.[.:.[.:.:./.~.).>.*.*.$.$.#.#.#.$.$.$.$.$.:.4.|.~ . + % ) ( 9 M 8.|./.:.:.:.1.@.Y Y @.3.:. ",
+" 8.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 k m m m m m m m m m m k j [ ] d m m m m m 6 _ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & & ; ! ] ] ^ ^ ^ ] ] ' = & & & & & & = ] ^ * & & & = ' ' ' ' ' ' ' ' ' ' * & & & & ' ] < [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ &.8.!.Y Y Y Y @.}.>.B B B A K M - . I *.#.B . 1 8.3.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.:./.].~.).>.*.$.$.#.#.#.$.$.$.$.$.*.4.8.1 . + ( B Z 8.8.8.|./.:.:.[.|.%.Y Y Y }.[. ",
+" 8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 a k m m m m k d 8 3 _ [ ^ k m m m m m 3 [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ] = & & & & & & & & & = = = = * & & & & & & & & & ; _ ] * & & & ; < [ [ [ [ [ [ [ [ < > & & & & { [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ ).8.;.Y Y Y Y %.1.T D B B B M O 1 . . ( A B . 9 8.3.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.:.[.~.I n ~ + ~ n I ~.[.:./.].~.>.*.*.$.#.+.+.#.#.$.$.$.$.$.3.8.A . I 8.8.8.8.8.|.[.:.:.:.[.|.,.Y Y Y _.|. ",
+" 8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 } _ < 2 2 < [ [ [ < } m m m m m k < [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < < ' & & & & & & & & & & & & & & & & & & & & & & & ] [ ] * & & & ; < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ :.8.%.Y Y Y Y =.2.M D D D B K P G ) . . . . . B 8.|.$.$.$.$.$.$.*.*.>.~.].:.[.:.[.[.:.[.S e $ , : | | | , n R /.].~.).>.*.$.$.+.Z Z #.#.$.$.$.$.$.:.8.+.. w 8.8.8.8.8.8.3.[.:.[.:.|.{.Y Y Y ^.8. ",
+" 8.8.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ^ [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < [ < ' & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 2.8.%.Y Y Y Y ;.4.I G D D G P P T S x 4 9 9 B 8.8.:.$.$.$.$.$.$.*.>.).~./.:.:.[.[.:.[.S 4 , : : | b b p u b 9 P ~.).>.>.*.$.#.Z X Z +.#.$.$.$.$.$.).8.8.~ D 8.).*.>.R $.8.4.:.:.[.|.^.Y Y Y !.8. ",
+" 8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 k k 8 3 [ < [ [ [ [ [ [ [ [ [ < 2 k m m m m m m 3 [ [ [ < ' = = = = ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = = = = ; < [ [ _ ' * = = = = = = = = = = = = = = = = = ; ] < [ [ ] ; = = = ; < [ [ [ [ [ [ [ [ < ; = = = = ] [ [ [ [ [ < ' = = = = ] } d k i i i 6 [ [ [ [ [ [ [ 8.8. .Y Y Y Y ,.8.I I G G R T D I Z *./.|.[.>.8.|.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.).e , | | | | b p u u o b e #.).:.).*.).Z [.[.X Z #.$.$.$.$.$.$.4.8.r . @ - ( 9 r I 8.8.:.[.[.[._.Y Y Y ;.8. ",
+" 8.8.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m 8 6 3 3 6 6 3 3 6 k m m m m m m m f ] [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] ] [ [ [ [ [ < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y !.8.I I I G V U ~ % +.>./.3.- 9 4.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.I , | | | b b p u u o J J : B *.4.:.>.4.Z [.3.V Z #.$.$.$.$.$.$.|.8.9 . + - ( 9 r A 8.8.[.[.[.[._.Y Y Y %.8. ",
+" 8.(.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ < d m m m m m m m m m m m m m m m m m m m m m m m m < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.K K K I X X . % X ).:.[.- ~ 8.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.[.:.n : b b | # p u u , u J J p e $.4.[.].8./.|.8.U Z #.$.$.$.$.$.$.|.8.w . I x ( |.D x 8.8.[.:.[.[.<.Y Y Y %.8. ",
+" 8.8.;.Y Y Y Y Y %.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m m m m m m m m m m m m m m m m m 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.M M K K Z Z ~ . . 4 5 ~ . 9 8.4.$.$.$.$.$.$.$.*.>.).~./.:.:.[.:.[.~ b p p p b $ p , | J J J W ) T |.8.8.8.8.8.8.T Z #.$.$.$.$.$.$.[.8.B . +.G ( ).K A 8.8.:.[.[.[.<.Y Y Y .8.8.",
+" 8.}.@.Y Y Y Y Y =.<.8.:.F 2 [ [ [ [ [ [ [ [ [ [ ^ d m m m m m m m m m m m m m m m m m m m m m m m 3 _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P O O M Z #.O % . . . . . T 8.|.$.$.$.$.$.$.$.*.>.).~.]./.:.:.[.[.+ u u u u o b . : J J '.'.'.. M *.:./.>.).$.#.S X #.$.$.$.$.$.$.:.8.B ~ >./.|.8.~.].8.8.[.:.[.[.<.Y Y Y @.8.8.",
+" 8.8.(.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ 2 d m m m m m m m m m m m m m m m m m m m m m h 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P P P O P $.$.U A e 5 B /.8.8.~.$.$.$.$.$.$.$.*.>.).~.]././.:.:.:.~ u u o J u , : - u J '.'.W - G I K I I I K O S X #.$.$.$.$.$.$.:.8.+.D +.#.8.8.8.8.8.4.[.[.:.[.<.Y Y Y @.8.8.",
+" 8.8.{.Y Y Y Y Y Y %._.8.8./.I l [ [ [ [ [ [ [ < 3 3 3 8 h k m m m m m m m m m m m m m m i 2 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.R R R P P R *.>.)./.[.4.8.8.~.$.$.$.$.$.$.$.$.*.*.>.).~.]./././.:.n p J J u , | J p ' W '.'.E ( A D B B D G K O S X #.$.$.$.$.$.$.:.8.D . @ ) 1 n G O 4.8.[.[.[.[._.Y Y Y %.8.8.",
+" 8.3.!.Y Y Y Y Y Y Y !.}.8.8.].N v 2 [ [ [ [ [ [ [ [ } < [ 3 a d d d d d d d d d d d 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ,.8.R T S R P P R X $.)./.[.:.>.$.$.$.$.$.$.$.$.$.*.*.>.).~.~.].].]./.D : J J J B J '.'.H ].'.'.n 9 X [.B A B D I M S X #.$.$.$.$.$.$.:.8.>.D A r e r x D 8.8.[.:.[.[._.Y Y Y =.8.8.",
+" 8.2.!.Y Y Y Y Y Y Y %.(.1.8.8.8.>.Q C v g 7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ;.4.T V U T S R R P R T Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.>.>.).).~.~.~.~.#.9 b '.J '.'.'.'.'.'.'.G ) B 3.$.B O S G I M S X #.$.$.$.$.$.$.4.8.+.D e ) 5 r A O 8.8.[.[.:.[.(.Y Y Y !.8.8.",
+" 8.3.{.` Y Y Y Y Y Y Y %.{.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.` Y Y Y Y =.3.V Z X V U S S S S U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.>.>.~./.:.].>.M 9 b '.'.'.'.'.'.'.G ) 1 R 8.X ).8.8.~.K O S Z #.$.$.$.$.$.$.8.8.~ + % ~ A #.3.8.8.4.[.:.[.|.{.Y Y Y {.8.8.",
+" 8.8.(.%.Y Y Y Y Y Y Y Y Y =.{._.}.2.4.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.` Y Y Y Y Y %.1.+.+.Z Z X V T T T U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.*.].3.8.8.4.].$.G 4 n E W '.W M n $ ( 5 I 8.8.8.[.:.8.R P U Z #.$.$.$.$.$.*.8.8.+ @ - ( e w B *.8.3.[.[.:.|.!.Y Y Y (.8.8.",
+" 8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.}.~.#.#.+.Z X V V U V Z #.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.~.4.8.4.[.8.|.+.R G n ( & + % - ~ 1 4 5 n O *.T D ].4.R P V Z #.$.$.$.$.$.:.8.|.U V G G B G D *.8.|.[.:.[.|.=.Y Y Y <.8.8.",
+" 8.8.3.(.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` <.|.$.$.$.#.+.Z X V X Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.8.|.).$.).>.T X V I x t n e x $.].P e 9 e t t S 4.*.O R X +.#.$.$.$.$.$.4.8.A @ w X 8.8.8.8.8.8.3.[.[.:.1.@.Y Y .2.8.8.",
+" 8.8.1.^.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.^.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y %.^.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y Y Y ^.4.+.$.$.$.#.#.Z Z Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.|.8.>.+.Z V S P /.4.X x t r w :.8.8.8.S e n t w M $.M P T X #.#.$.$.$.$.).8.8.- @ - ~ t R |.8.8.3.[.:.[.[.<.` Y Y =.4.8.8.",
+" |.8.2.(.;. .Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @._.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y @._.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y Y Y Y ,.4.~.*.*.$.$.$.#.+.Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.:.8./.X U S P O |.8.M w t r I 4.#.B 8.|.A r w x B I M R V Z #.$.$.$.$.$.:.8.+.@ 5 4 ( n x G +.8.3.[.[.:.|.^.Y Y Y !.8.8.8.",
+" [.8.4.}.^.;.@. .` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ^.8.8.8.8.8.'.J o J '.8.8.8.[.. . . G 8.e . 8.~ . . . /.~ . . . ).. . . w [.. . . r e M 8.w w 8.8.8.8.8.8.8.^.Y Y Y Y Y Y ^.8.8.8.8.8.8.8.8.8.8.8.8.*.1 e e 8.[.- [.w . - M [.. *./.- 8.e . 8.8.[.- 8.8.8.8.8.'.J o J '.8.8.8.8.8.^.Y Y Y Y Y Y Y Y Y %.1.:.*.*.*.*.$.$.#.#.+.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.#.$.[.|.X S P O U 4.3.B w t r I 4.:.t >.8.O w x B G K P T X +.#.$.$.$.$.$.:.8.D @ t |.>.K D K ).8.3.[.:.[.|.,.Y Y Y _.8.8.8.",
+" 8.8.8.8.1.<.(.{.=.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.1.8.8.8.8.8.J o o o J 8.8.8.+.1 Z G w Z ~ e Z 8.G G 8.8.8.G G 8.Z 1 Z +.[.+.e 8.*.. S ~ A e 8.8.8.8.8.8.8.8.1.%.%.%.%.%.%.1.8.8.8.8.8.8.8.8.8.8.8.8.I r [.M /.+.e w x [.*.r +.. w S e Z ~ e Z 8.+.e 8.8.8.8.8.J o o o J 8.8.8.8.8.1.%.%.%.%.%.@.Y Y Y ` <.|.*.*.*.*.*.$.$.$.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.V S P M $.8.].A x w t A |.4.G K 8.X A B G K P S V Z #.#.$.$.$.$.:.8.8.>.% ) 4 K $.I M 4.8.|.[.[.:.1.@.Y Y @.1.8.8.8.",
+" 8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.o o o o o 8.8.8.G ~ e - Z e M w M 8.r S 8.8.8.r S 8.G ~ e e [.G . . ~ G 8.~ 1 [.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.[.r - G 8.G G . [.x e A G A ~ A G e M w M 8.G G 8.8.8.8.8.o o o o o 8.8.8.8.8.8.8.8.8.8.8.1.%.Y Y Y {.4.~.>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V S P O /.8.#.B A x w w #.8.:.].8.R D G K P S V Z +.#.$.$.$.$.).8.8.A P x ~ 4 r A K +.8.8.[.:.[.[._.Y Y Y ;.3.8.8.8.",
+" 8.8.1.1.1.1.1.1.1.1.1.1.1.1.8.8.8.8.8.8.J o o o J 8.8.8.r S 8.w w . . . G 8.- /.8.8.8.- /.8.r S 8.8.8.r S /.~ /.8.e S 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.G 8./.. 8.r S - *.Z r G r S w . B . . . G 8.r S 8.8.8.8.8.J o o o J 8.8.8.8.8.8.1.1.1.1.2.8.}.` Y Y %.2.:.>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z X U R T |.8.|.).I A A A B >.8.8.*.I I M P S V Z +.#.#.$.$.$.$.~.8.+.@ % R *.G A I +.4.8.3.[.[.:.|.,.Y Y Y ^.8.8.8.8.",
+" 8.8.}.5.5.5.5.5.5.5.5.5.5.5.1.8.8.8.8.8.'.J o J '.8.8.8.~ . . e ) Z 8.S r /.~ 8.8.8./.~ 8.8.~ . . ~ 8.~ /.8.G A 8.- /.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.A 1 e G 8.~ /.M - . r *.~ :.*.. ) Z 8.S r 8.~ . . w 8.8.8.'.J o J '.8.8.8.8.8.1.5.5.5.5.5.4.3.=.Y Y ` _.3.).>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V U S X >.[.3.R D D D D G K M K M P R U X Z +.#.#.$.$.$.$.~.8.8.|.5 - 1 ].8.8.8.8.8.3.[.:.[.[.1.@.Y Y @.}.8.8.8.8.",
+" 8.1.5.5.5.5.5.5.5.5.5.5.5.5.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.2.5.5.5.5.5.5.2.8.^.Y Y Y ,.4./.).).).>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V T R P O O M K K K M M P P S U V Z Z #.#.#.$.$.$.$.).8.8.U /.P ) ( r :.8.8.8.3.[.[.[.:.|.^.Y Y Y ;.4.8.8.8.8.",
+" 8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.1.3.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.3.1.5.5.5.5.5.5.5.}.8.}.@.Y Y .}.|.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z X V U T T S S T T U V X Z Z +.#.#.#.$.$.$.$.$.).4.8.+.@ % ( 4 w t D |.8.4.[.[.[.:.[.|.%.Y Y ` _.8.8.8.8.8.",
+" 8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.!.Y Y Y !.8./.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.+.+.+.+.+.+.#.#.#.#.#.#.#.$.$.$.$.$.$.).4.8.>.4 ) - ~ 4 w A I S 8.4.[.:.[.[.|.(.` Y Y %.2.8.8.8.8.8.",
+" 8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.<. .Y Y @.}.|.~.~.~.~.).).).>.>.*.*.*.$.*.|.8.8.8.8.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.4.>.) % R S A e w G M X 8.4.[.[.:.[.|.%.Y Y Y ^.8.8.8.8.8.8.",
+" 8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.4.3.,.Y Y Y !.4.:.~.~.~.~.~.).).>.>.*.*.*.|.8.8.8.8.8.8.[.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.8.8.>.) - ~ U 8.3.>.X O 4.8.4.[.[.[.|.(.` Y Y %.1.8.8.8.8.8.8.",
+" 8.8.1.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.1.8.<. .Y Y .<.3.].].].~.~.~.~.).>.>.*./.8.|.e + + A 8.8.[.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.>.) t B ~ ( e #.8.8.8.8.8.8.[.:.[.[.}.%.Y Y Y (.8.8.8.8.8.8.8.",
+" 8.4.}.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.4.4.!.Y Y Y =.2.[.].].].].].~.~.).).>.:.8.K % @ @ + w 8.8.8.~.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.|.( % - ~ ( e t D [.8.8.8.8.[.[.[.:.|.{.Y Y Y =.2.8.8.8.8.8.8.8.",
+" 8.4.}.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.}.8.}.@.Y Y ` {.4.:.].].].].].].~.~.[.4.8.G - ( |.~ - I |.8.8.4.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.$.I n e I D K O |.8.[.:.[.[.:.|.<. .Y Y ` (.8.8.8.8.8.8.8.8.",
+" 8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.^.` Y Y .<.3./././././.].].|.4.8.|.$.) - #.).>.- + U 8.8.4.|.|.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.8.P t K U M S 4.8.[.[.:.[.[.[.%.Y Y Y ,.8.8.8.8.8.8.8.8.8.",
+" 8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.2.;.Y Y Y %.1.|././././././.|.8.M n |.r ~ A 8.V % @ +.- A 8.8.8.|.|.|.|.[.].$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.].[.8.Z B M M +.4.8.4.[.:.[.[.|.!.Y Y Y %.}.8.8.8.8.8.8.8.8.8.",
+" 8.8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.1.8.}. .Y Y Y ,.2.[.:././././.|.8.U r r n 4 B 8.w - n e @ r I 9 +.8.8.8.8.8.4.].$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.>.).~.[.8.8.$.V *.8.8.4.[.[.[.:.|.{.` Y Y ` (.8.8.8.8.8.8.8.8.8.8.",
+" 8.8.8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.(.` Y Y Y !.3.[.:.:.:.:.|.8.8.V w r r :.|.( ~ 4 - % D ) @ r U 9 9 r O 8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.3.8.8.8.8.8.3.[.[.:.[.|.(. .Y Y Y !.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.8.8.4.1.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.4.3.!.Y Y Y Y {.3.[.:.:.:.:.|.8.8.3.].3.8.Z 9 4 ( ~ ~ n - ) #.@ @ + + - |.4.*.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.:.[.[.3.4.4.4.3.[.[.:.[.|._. .Y Y Y =.1.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.8.8.8.3.2.}.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.1.=.Y Y Y ` {.3.[.:.:.:.:.|.8.8.8.8.8.K t r r w 4 ( ~ I M - - /.#.P 8.4.*.$.$.$.*.*.*.*.>.>.).~.]././.:.[.[.[.:.[.[.[.[.[.[.:.[.|._. .Y Y Y @.}.8.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.%.Y Y Y ` {.3.|.[.[.[.[.[.[.[.8.8.D B A ].A r n t 8.].1 ( 4 $.8.4./.>.>.>.>.>.).).).~.].]./.:.:.[.[.:.[.:.[.[.:.[.:.[.:.[.|._. .Y Y Y ._.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.<.@.Y Y Y ` !.2.|.:.[.:.[.[.[.8.8.4.).*.|.B A x ].8.8.+.n n r [.8./.~.~.~.~.].].]././.:.:.[.:.[.[.[.[.:.[.[.:.[.[.[.:.[.|.(. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.<.@.Y Y Y Y ,.1.|.:.[.:.[.:.[.8.8.8.8.|.P I T 8.8.:./.:.A x ].8.:./././.:.:.:.:.:.[.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.[.|.^. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+" 8.<.@.Y Y Y Y =.<.3.:.[.:.[.[.[.|.|.4.8.8./.|.8.8.U K I I I [.8.[.:.:.[.[.:.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.|.[.!.` Y Y Y .(.8.8.8.8.Z G /.8.8.8.8.8.8.8.8.8.",
+" 8.}.=.Y Y Y Y @.^.3.|.:.[.:.[.[.[.[.4.8.8.8.4.8.:.X R S ].8.8.[.[.[.:.[.[.:.[.:.[.:.[.[.:.[.[.:.[.[.[.[.:.[.|._.%.Y Y Y Y @._.8.8.8.*.G . - r /.8.M A 8.8.8.8.8.",
+" 8.1.!.` Y Y Y Y ,.<.4.[.[.:.[.:.[.[.|.|.|.|.4.8.8.8.8.8.8.|.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.[.:.[.|.[.{. .Y Y Y Y =.}.8.8.8.:.r . - *.8.8./.~ [.8.[.8.8.8.",
+" |.3.^. .Y Y Y Y @.{.1.3.[.[.[.:.[.:.[.:.[.[.4.4.4.4.4.|.[.:.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.:.|.|.(.%.Y Y Y Y Y !.1.8.8.8.[.G . ~ 1 *.8.8.S . M M G 8.8.8.",
+" /.8.<.=.Y Y Y Y Y %.^.1.3.[.:.[.[.:.[.[.[.[.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.|.|.(.%.` Y Y Y Y %.(.4.8.8.8.8.w . 1 G . - *.*.- . . 1 [.8.8.8.",
+" 8.8.1.{. .Y Y Y Y ` %.{.}.3.|.[.[.:.[.:.[.:.[.:.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.:.[.[.|.1.^.%. .Y Y Y Y ` ,.}.8.8.8.8.8.8.[.1 A 8.G . - 1 . w 8.8.8.8.8.8.",
+" [.8.<.;.` Y Y Y Y Y .;.(.}.3.|.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.|.|.1._.,.@.Y Y Y Y Y ` =.(.8.8.8.8.8.8.8.8.8.|.8.8.8.w . . e 8.8.8.8.8.8.8.",
+" 8.4._.=. .Y Y Y Y Y Y .;.^.<.1.2.|.|.|.[.[.[.[.[.[.[.[.[.|.|.|.1.<.^.,.@.Y Y Y Y Y Y @.=.^.2.8.8.8.8.8.8.8.8.8.8.8.8.8.[.1 . . . M 8.8.8.8.8.8.",
+" 8.8.2._.=. .Y Y Y Y Y Y Y Y @.%.,.{.^._._.<.<.<.<._._.(.{.!.=.@.Y Y Y Y Y Y Y Y @.,.<.4.8.8.8.8.8.8.8.8.8.8.8.8.8.>.G 1 . 1 w . . M 8.8.8.8.8.",
+" 8.8.3.<.!.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y =.{.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.~ r . 1 [.8.w . . M 8.8.8.8.",
+" 8.8.8.}._.,.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{._.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.>.*.8.1 G 8.8.8.r . . Z 8.8. ",
+" 8.8.4.1._.{.;.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{.(.}.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.*.~ *.8.8.8.[.1 w 8.8.8. ",
+" 8.8.8.4.2.}._.^.!.;.%.%. .@.@.=.{.(._.}.1.3.4.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.*.:.8.8.8.8.8.[.8.8.8. ",
+" 8.8.|.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8. ",
+" 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8. "};
--- /dev/null
+/* XPM */
+static char *info_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 30 64 2 1",
+/* colors */
+". c #000000",
+"# c None",
+/* pixels */
+"##############################",
+"###############....###########",
+"###########...........########",
+"########...............#######",
+"######..................######",
+"####.....................#####",
+"###......................#####",
+"##.......................#####",
+"##.......................#####",
+"##.......................#####",
+"##......................######",
+"##.....................#######",
+"###..................#########",
+"####...............###########",
+"######.........###############",
+"##############################",
+"##############################",
+"##############################",
+"##############################",
+"#####################...######",
+"###############..........#####",
+"###########..............#####",
+"#######..................#####",
+"#####....................#####",
+"###......................#####",
+"##.......................#####",
+"#........................#####",
+"#........................#####",
+"#........................#####",
+"##.......................#####",
+"###......................#####",
+"####.....................#####",
+"#####....................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######...................#####",
+"######....................####",
+"#####.....................####",
+"#####.....................####",
+"####.......................###",
+"###.........................##",
+"##...........................#",
+"#.............................",
+"#.............................",
+"#.............................",
+"#............................#",
+"##..........................##",
+"####.......................###",
+"########...............#######",
+"##############################",
+"##############################"
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the logo of the GUI utility.
+
+ Copyright (C) 1999 FIXME: fill this in.
+
+ Last modification: Sat Jun 26 07:38:27 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_logo[] = {
+
+"207 105 238 2",
+
+".. c #040204",
+".# c #344244",
+".a c #b4c2c4",
+".b c #14221c",
+".c c #94a2a4",
+".d c #1c3224",
+".e c #dce2dc",
+".f c #3c524c",
+".g c #84928c",
+".h c #041204",
+".i c #a4b2ac",
+".j c #6c6e6c",
+".k c #141214",
+".l c #242224",
+".m c #ccd2cc",
+".n c #8c8a8c",
+".o c #5c6e6c",
+".p c #041a0c",
+".q c #444244",
+".r c #94928c",
+".s c #b4b2ac",
+".t c #a4a2a4",
+".u c #6c7a7c",
+".v c #243a34",
+".w c #c4c2bc",
+".x c #5c625c",
+".y c #848284",
+".z c #344a4c",
+".A c #b4bab5",
+".B c #142224",
+".C c #041214",
+".D c #a4aa9f",
+".E c #040a08",
+".F c #ccdadc",
+".G c #545a58",
+".H c #2c3232",
+".I c #e4eae9",
+".J c #8c9a9c",
+".K c #141a19",
+".L c #242a2a",
+".M c #343a35",
+".N c #041a1c",
+".O c #949a98",
+".P c #5c6a70",
+".Q c #74828c",
+".R c #4c524c",
+".S c #7c7a7c",
+".T c #c4cac9",
+".U c #3c4240",
+".V c #8c9291",
+".W c #647674",
+".X c #444a49",
+".Y c #bcbaba",
+".Z c #0c0a0c",
+".0 c #5c5a5c",
+".1 c #9caaab",
+".2 c #acbabb",
+".3 c #6c7677",
+".4 c #fcf6f8",
+".5 c #747a79",
+".6 c #1c2224",
+".7 c #a4aaac",
+".8 c #1c1a1c",
+".9 c #243233",
+"#. c #848a87",
+"## c #646264",
+"#a c #0c1214",
+"#b c #eceaeb",
+"#c c #2c2a2c",
+"#d c #3c3a3c",
+"#e c #9c9a9d",
+"#f c #cccacc",
+"#g c #7c827c",
+"#h c #bccacc",
+"#i c #9ca29f",
+"#j c #0c120b",
+"#k c #acb2b0",
+"#l c #d4d2cc",
+"#m c #f4f2f4",
+"#n c #0c1a08",
+"#o c #142a2c",
+"#p c #2c3a3a",
+"#q c #fcfafc",
+"#r c #dcdadc",
+"#s c #545a64",
+"#t c #8c929c",
+"#u c #4c4a4c",
+"#v c #747a84",
+"#w c #acaaac",
+"#x c #bcc2bf",
+"#y c #1c221c",
+"#z c #445251",
+"#A c #747274",
+"#B c #948e94",
+"#C c #b4b6bc",
+"#D c #5c666c",
+"#E c #4c5a5b",
+"#F c #3c4a4f",
+"#G c #040e14",
+"#H c #141e24",
+"#I c #343a44",
+"#J c #0c1a1c",
+"#K c #4c525c",
+"#L c #3c424c",
+"#M c #bcbec4",
+"#N c #848a94",
+"#O c #344645",
+"#P c #546262",
+"#Q c #e4e2e4",
+"#R c #6c727c",
+"#S c #24262c",
+"#T c #646e6c",
+"#U c #94969c",
+"#V c #b4b6b4",
+"#W c #5c6662",
+"#X c #84868c",
+"#Y c #7c828c",
+"#Z c #646e74",
+"#0 c #1c2a2c",
+"#1 c #2c363c",
+"#2 c #242e34",
+"#3 c #949aa4",
+"#4 c #c4ced4",
+"#5 c #444e54",
+"#6 c #0c0e14",
+"#7 c #eceef4",
+"#8 c #d4d6dc",
+"#9 c #44565c",
+"a. c #4c5a64",
+"a# c #f4fafa",
+"aa c #d4dada",
+"ab c #646a6f",
+"ac c #747674",
+"ad c #1c3234",
+"ae c #84929c",
+"af c #0c1a14",
+"ag c #040604",
+"ah c #748684",
+"ai c #04160c",
+"aj c #a4b6b4",
+"ak c #6c7272",
+"al c #141615",
+"am c #242623",
+"an c #ccd6d4",
+"ao c #343634",
+"ap c #545654",
+"aq c #8c8e8d",
+"ar c #ecf6f4",
+"as c #949694",
+"at c #a4a6a3",
+"au c #c4c6c4",
+"av c #848684",
+"aw c #b4beba",
+"ax c #142625",
+"ay c #041616",
+"az c #040e08",
+"aA c #545e5b",
+"aB c #2c3634",
+"aC c #e4eeec",
+"aD c #141e1a",
+"aE c #242e2c",
+"aF c #343e3c",
+"aG c #4c5652",
+"aH c #c4cecc",
+"aI c #3c4644",
+"aJ c #8c9693",
+"aK c #444e4c",
+"aL c #bcbebc",
+"aM c #0c0e0c",
+"aN c #5c5e5c",
+"aO c #747e7a",
+"aP c #1c2627",
+"aQ c #a4aeae",
+"aR c #1c1e1d",
+"aS c #243632",
+"aT c #848e8c",
+"aU c #0c1615",
+"aV c #eceeec",
+"aW c #2c2e2e",
+"aX c #9c9e9c",
+"aY c #cccecc",
+"aZ c #7c8683",
+"a0 c #9ca6a0",
+"a1 c #0c160c",
+"a2 c #acb6b4",
+"a3 c #d4d6d4",
+"a4 c #f4f6f4",
+"a5 c #2c3e3a",
+"a6 c #fdfdfd",
+"a7 c #dcdedd",
+"a8 c #acaead",
+"a9 c #bcc6c4",
+"b. c #1c261c",
+"b# c #4c5e54",
+"ba c #3c4e51",
+"bb c #0c1e1e",
+"bc c #64726a",
+"bd c #7c868e",
+"be c #647278",
+"bf c #1c2e2f",
+"bg c #14261c",
+"bh c #94a6a4",
+"bi c #444644",
+"bj c #6c7e7c",
+"bk c #8c9e9c",
+"bl c #7c7e7c",
+"bm c #646664",
+"bn c #3c3e3c",
+"bo c #545e64",
+"bp c #8c969c",
+"bq c #4c4e4c",
+"br c #747e84",
+"bs c #a4a6ac",
+"bt c #343e44",
+"bu c #4c565c",
+"bv c #3c464c",
+"bw c #848e94",
+"bx c #e4e6e4",
+"by c #949ea4",
+"bz c #748284",
+"bA c #34424c",
+"bB c #4c6264",
+"bC c #dce2e4",
+"bD c #849294",
+"bE c #04120c",
+"bF c #a4b2b4",
+"bG c #ccd2d4",
+"bH c #343234",
+"bI c #545254",
+"bJ c #ecf2f4",
+"bK c #041a14",
+"bL c #949294",
+"bM c #b4b2b4",
+"bN c #7c8a94",
+"bO c #1c2a24",
+"bP c #243a3c",
+"bQ c #c4c2c4",
+"bR c #5c6264",
+
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaF.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaFaLa6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.taFaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6#ibnaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6asaF#yavbx#ra6a6a6a6a6a6a6a6a6a6a6a6asaFaDavbx#ra6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.Uaf#AauaL#qa6a6a6a6a6a6a6a6a6a6a6.O.#.KacauaL#qa6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.MaU#WbQ.Ya#a6a6a6a6a6a6a6a6a6a6a6.O.M#jbmbQaLa#a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.VaB#jbRau.A#ma6a6a6a6a6a6a6a6a6a6a6.VaobEbRau.A#ma6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.V.May.Gau.A#ma6a6a6a6a6a6a6a6a6a6a6.V.M#aaAbQ.A#7a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#..M#6.R#x#V#7a6a6a6a6a6a6a6a6a6a6a6#.#p#j#z#x#V#ma6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aw.Y.Ia6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aL.A#b#qa6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aC.jaEagaG.A#C#Qa6a6a6a6a6a6a6a6a6a6aV.jaEag.R.A#C#Qa6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aVakaI#y#p#TaZ#ibGaaa4a6a6a6a6a6a6a6aCak.U.6#pbcaZa0aYaaa4a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl..............................bQa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4aO.x.X#paBbbaR.L.L.Ubla6a6a6a6a6a6arbl.x#F#paS.KaD.L.Lbn.ya6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y..............................aLa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#by.Pad.baPa1bEaMaz.E.Eaqa6a6a6a6a6a#by.P.9.baPaUaMazazaz.EaTa6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.1#E#JaUbO.KaM#jazagaMaKa7.4a6a6a6a6.1a.#JaU#0.K#j.k.EagazbqbC.4a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.Ta.aU.CaB#a.Eagag.....b#V#V#qa6a6a6#h.G.N.CaBaU.Eagag.....b.i#V#qa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6an#9.B#H.#ay..ag.......KbMbMbxa6a6a6.F#9.BaDbtayag.........K.DbM.Ia6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#h#p.N#0aK#Jagagag....aD#VbMaYa6a6a6a9#I.N#0#5#J...E......#ybsbMaYa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.2#1#J#pbubbag#a.......KbMbM#fa6a6a6.2#1bb#pbubbag#a.......KbybM#fa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.7btaxbabu#J#Gal.E....aU.s#k.ma6a6a6.1bt.Bbabu#J.Eal.E....#j.O.s.ma6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bD#I.N#5#E.C#a.Kag....aUbMbM#fa6a6a6.V#pbbaK#9#a#a.Kag....aU.ObM#fa6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a8.ubt.N.PaG#aalaR.E....a1bMbM#xa6a6.7.ubt.N.P#E.CalaRag....#jaq#k.Ya6a6a6",
+"a6a6a6a6a6a6a6a6a6a6bM#Abn.l.......k.qaq#Qa6a6a6a6a6bM.ybl.y.ybl.y.ybl.y.ybl.ybl#Qa6a6#Q.ybl.y.ybl.y.ybl.y.ybl.y.ybl.ybQa6a6#QbLbq.q...........q#AbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#mbQblbI.q.l.............q.qblbM#ma6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................av.sbMa6a6a6a6a6.ybl.y.ybl.y.ybl.y.ybl.y.y.ybl.y#la6a6a6a6a6a6#g#EaB.v.3#E#GalaR......#jbM#kbQa6#qbd#EaBbP.3#E.E.KaR......#jaT#V.Aa6a6a6",
+"a6a6a6a6a6a6a6#mbl.k......................bn.ta6a6bQ............................aLa6a6bQ..............................blbQ.q........................aR.ta6a6a6a6a6a6a6a6a6a6a6a6a6a6#maqbH..................................aWbL#ma6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6.t................................a7a6a6a6a6a6#7.3#OaP.faObu.E#HaRag....#jbM.s#xa6#Q.3aIax.faObu.EaR#Hag....#j.g.s.Ya6a6a6",
+"a6a6a6a6a6a6#laR............ag.Zag......ag.Zag.l#BaM........agagagagagagag.Zag.E.Y.4a4aL......agag.Zagagagagagag.Eag.Zalagag...........Z.E...........Z.ZbH#la6a6a6a6a6a6a6a6a6a6#m.yaM..............ag.E.Zag.............Z.Z.E..aM###ma6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6bn......ag.ZagagagagagagagagagagbIa4.4#qa6a6a6#Qbr.U#JbBakba#a.6aR......a1bMbMaLa6#8br.#aDbB.3ba#a.6aR......a1.VbM.Aa6a6a6",
+"a6a6a6a6a6#Q#6........ag.........................Zag............................avbMbMaL....................................ag...E.........................kaYa6a6a6a6a6a6a6a6#laR..........agag..................................agal.ya6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6#Q................................avbMbMa2a6a6a6aYbraF.B.W.u.#.Kam.K.......KbM#kaLa6#M.5aF.Bbe.3.#.KamaD.......KaJ.sawa6a6a6",
+"a6a6a6a6a6bn........ag..............................agag.........................y#VbMaL....................................ag...............................Z#fa6a6a6a6a6a6#l#6........ag..............................................bI#ma6a6a6a6a6bl....ag........................avbMbMa6a6a6.j.......E......................albM#kbM#ba6a6a6#CaO.9bObjbzaF.Kam.K.......bbMbMbQa6#w#v.9axbjbza5aDamal......#yasbMaLa6a6a6",
+"a6a6a6a6.t........ag............................................................av#kbMaL.......................................................................G.Ya6a6a6a6#l.k........ag..................................................bHa4a6a6a6a6.y....ag........................av#kbMa6a6a6.k..............................##bMbM.sa6a6a6a6bs.3aP.9ahaZa5.6aEal......aD.sbM.Ta6#iacax.9aZahaF.6.Lal......aDaJ.sawa6a6a6",
+"a6a6a6a6bq.......E...............................................................ybMbMaL.......................................................................ZbMaLa6a6a6bn........ag.......................................................0#ba6a6a6bl....ag........................avbMbMa6a6aX......ag........................atbM#k#fa6a6a6a6.O#ZaU.#bD.uaSam.Hal......aR#kbMaYbJ#U#Z#JbtbD.uaB#S.Hal......aDas#k.wa6a6a6",
+"a6a6a6a6........................................................................av#kbMaL........................................................................#ebM.4a6bM....................................................................#ea7a6a6.y....ag.........................ybMbMa6a6.q......ag.......................UbM#kbM#qa6a6a6#q.ObR#J#KbN.3#p.L.Hal......#y.sbMaY#8.ObR#J#KbN.3aB.L.HaU......#y.V.s#Ma6a6a6",
+"a6a6a6a7.......E.................................................................ybMbMaL........................................................................avbMaLa6bq.......E............................................................bqbM#qa6bl....ag........................av.sbMa6a7................................aq.sbMbMa6a6a6a6bJ#t#s#Jbubw.o#1aWaE#6....agam#kbM.T#4bp#s#Jbubw.o#paWaW#j.......L.ObM#xa6a6a6",
+"a6a6a6bQ..................................#y.l..................................avbM.s#M.........................................................................ybMbMa6..................................#c#y.................................l.s#ka6.y....ag........................av#kbMa6#A.......E......................#ybMbMbMaVa6a6a6a6.Ibw#KaUbo#N.P#p.L.H#a......aEbM#V.mawbw#K#J#sbw#D#p.LaW#6......aE#i.sbQa6a6a6",
+"a6a6a6aL................................aqbM#kaq................................av#kbMaL................................##atat##................................av#kbMaL.......E......................al#e#kbM.y................................bMbM#mbl....ag........................avbMbMa6aR...............................jbM#kbMa6a6a6a6a6a7bd#L#a#Zbw#P.9aW.LaM....agaEbM.s#8#kaZ#L.C#Zbw#P#2aW#2aM......aWa0#Va3a6a6a6",
+"a6a6a6bQ...............................UbMbM.sbMbI.Z.............................ybMbMaL..............................aobM#kbM#k#d...............................ybMbMaq..............................##.sbMbM#kbq.Z.............................ybMa3bl....ag........................avbMbMa8......ag.......................E#w.sbMa3a6a6a6a6a6aYbz#1#J#Zbda.#0aW#c#G.......L.sa2#r.7br#1aU#Zbd#E#0bH.L#6....ag.L.1bM#ra6a6a6",
+"a6a6a6aL...............................0#kbMbMa6bl..ag..........................av.sbMaL...............................GbMbM.s#qbl..ag..........................avbMbMbl..............................av#kbMaua6bl..ag..........................avbMbMbl....ag........................av#kbM.R......ag.......................qbM#kbMa6a6a6a6a6a6#M.u#2#J#R.QaG.6bH#S.E.....E.LbM#Vana0ac#2#J#R#YbuaPaW#S.E.....Eama8#Va7a6a6a6",
+"a6a6a6bQ..............................apbMbM.ea6.y....#j.........................ybM#k.w..............................apbM#k#ba6bl.....E.........................y.s#k.y....ag.........................ybM.sbJa6.y....aM........................av#kbM#g....ag.........................ybM#e................................#e#kbM.Ya6a6a6a6a6a6#k#R.6#H.3#v#5.BaW#Sag....agaEbMbM.Tby.3aP#H.u.u#5.6aWaPag....agaE#k.saaa6a6a6",
+"a6a6a6aL...............................0bMa8#ma6bl....#6........................avbMbMaL...............................0bMbMa4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................av.s.0.......E......................aWbM.sbM#ma6a6a6a6a6a6#i#RaPaP#v.u#5.6aW.6......agaB.s#V#xbybeaPaP.u#v#5.6aW.6......agao#k.s#ra6a6a6",
+"a6a6a6bQ...............................GbMbMaVa6.y....#j.........................y#kbMaL..............................apbMbMa4a6.y....ag........................av#kbM.y....ag.........................ybMbMa6a6.y.....k.........................ybM.s#g....ag.........................y#kal...............................jbM#kbMa6a6a6a6a6a6a6by.Wayadbr.3#5#SaWaR.......EaWbM#VbM.J#Ray#2br.3#5#SaW.6.......E.H.s#Va7a6a6a6",
+"a6a6a6aL...............................0.sbMaVa6bl....aM........................avbMbMaL...............................0#kbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....aM........................avbMbMbl....ag........................av.S......ag.......................ZbM.sbMa7a6a6a6a6a6a6a6#t.P.Nbfbr#R.##SaWaR......az#d#k#Ca8#t.P.Nbfbr#R#OaPaWaR.......E.MbM#V#Qa6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....aM.........................ybM#k.w..............................apbMbMa#a6.y....ag.........................y.s#k.y....ag.........................y.sbM#qa6.y....#j........................av#kbMbl....ag.........................y.M......ag.......................GbM#kbMa6a6a6a6a6a6a6.4bwbBaybfbr#Ra5#SaE.6......agbi#V#VbsbwbB.Cad.Q#Z.##S#2aR......ag#u.sa2#Qa6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0.sbM.4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#6........................avbMbMbl....ag.........................j................................#ebMbMaLa6a6a6a6a6a6a6#bbw#9.C#Fbr#Z#p.LaWal.......E.0.s#C#ibw#9.C#Fbr#Za5am.Hal.......E.0#k#V#ba6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL...............................GbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag........................aW.....Mal......................ao#kbMbMa4a6a6a6a6a6a6a6bx#N.z.Cba#v#DaS#SaWal......azbm#V#V.tbN#F.C#F.uab.9#SaWal......azbm.s.2#ma6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................GbMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag..............................aW.........................SbM.sbMa6a6a6a6a6a6a6a6#8#NbA#G#Fbe#P.9.LaW#a.......haca8#V#3#NbA#G#Fbe#P.9.LaW#a.......hac.s#V.4a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag...............................k......................albM#kbM.Ia6a6a6a6a6a6a6a6.TbdbP#Gbvabbu#2.L.L#a......azavbM.AbLbdbP#G.z#Z#K#2.L#c#a......azavbM.A#qa6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag.......................................................0#kbMbMa6a6a6a6a6a6a6a6a6#Cbd.9.E#O#D#5ax#S.L#j.Eagag#n#B.s#V#t#Y.9.EbA#D#5ax#S#SbE.Eagag#n.r#k.Aa6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag......................................................atbM.s.Ta6a6a6a6a6a6a6a6a6a8.3.9.E.z#9#O#0.l.layag..agbgat#kaQ.V.3.9.Ebv#9#O#o.l.laUag...Ebg.tbM.Aa6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.....................................................qbMbMbM.4a6a6a6a6a6a6a6a6a6.cak#2.E.##F.9ay.6b.ai.Eag.EaSa8#VaQbwbe#2ag.#.z.9aU.lb.aiazag.E.9#k#Vawa6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag....................................................av#kbM#ka6a6a6a6a6a6a6a6a6a6#3#ZaE.E#pbPaDaz.6.d.p.h.E.E#p#k#VawaTbeaEag#pbPaDaz.6.d.p.h.E.Ea5.s#V.ma6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..................................................albM#k.s#ma6a6a6a6a6a6a6a6a6a6aTab#0.EaSbfaz.Z.K.b.E.haz.Eb##Va2a9#.abaP#6aSbfaz.E.Kbg.E.hazaz.Ga2a2#ra6a6a6a6",
+"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag...................................................jbMbMbMa6a6a6a6a6a6a6a6a6a6a6braA.B.E#2ax...E#a.h...hazazbc#Va2#xbraA.Bag#2axag.EaUbE...hazaz.o.s#V.ea6a6a6a6",
+"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag...................................................ybM.s#fa6a6a6a6a6a6a6a6a6a6a4#Z.X.K.LaPay...Eazag..ag.EaDaZ#V#Va9#Z#F#J#caPbK...Eazag..ag.E#naT#V#Va4a6a6a6a6",
+"a6a6a6bQ..............................apbM.saVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag...................................................UbMbMa6a6a6a6a6a6a6a6a6a6a6bJaNbA#J.L#ybE..ag.E....ag.haG.A#V.s#xbR.##J.LaR#G..ag.E....agaiaG.A.s#V#qa6a6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag....................................................atbMa6a6a6a6a6a6a6a6a6a6a6.Ibo.U.6#0.Kag....ag...Eag#yaO#V.sau.aaAaI#H#0al.E....ag...Eag#ybla2#Vaua6a6a6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag....................................................##bMaVa6a6a6a6a6a6a6a6a6a6bCaG.9.9aP.k.E........agag#y#i.s.Aa4.Abu.9.9aPalag.........Eag#y.c.s.A#ma6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag....................................................albMbMa6a6a6a6a6a6a6a6a6a6#8aK#0#0.6aU.E.........Eagb.#i#V#xa6.2baaE#0.B.k.E.........Eag#ya0.s#xa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.......................................................5bM#qa6a6a6a6a6a6a6a6a6bG.#aDaPaDaMaMag.......Eag#y#i.s#xa6.2.UaDaPaD#6aMag.......Eag#y#i.s#xa6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag......................................................aW.s#fa6a6a6a6a6a6a6a6a6#h#paUax.K#6.E........azag#ya0.s.wa6aj#paUax.KaMaz.........Eag#y#i#V.wa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag........................................................#ebMa6a6a6a6a6a6a6a6a6aHaS#Gax.K.E.E.........Eag#y#i#VaLa6bF.H#Gax.Kag.E........azag#ya0.s#xa6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.........................................................q#k#Qa6a6a6a6a6a6a6a6a3#2#Gax#aag.E........azag#yat#V.ma6.1#2az.6aUag.E.........Eagb.at#VaYa6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................................................ZatbMa6a6a6a6a6a6a6a6bCbf.E.B#aag.E.........Eagb..D#VaYa6a0bfaz.B#a...E.........E.Eb..D#k#la6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..........................................................bmbM#ma6a6a6a6a6a6a6aa#0azaD#G...E........azagb..D#k#la6bk#0az#H#Gag.E.........Eagb..D#V.ma6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag..........................................................al.s.Ya6a6a6a6a6a6a6aa#0#a.B#6ag.E........agagaRat#V.ma6aeaPaU.Baz...E........agagaD.D#V#la6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag............................................................avbM#qa6a6a6a6a6a6#8aPaUbb#G..ag........ag..#y.D.A#la6#taPay#H#Gagag........ag..#yata2#la6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM.saVa6.y....aM.........................ybM#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag............................................................aobM.Ta6a6a6a6a6a6#8aP.C#HaMag.E........ag..#ya0a2aYa6bwaP.C#Haz...E........ag..#yata2aYa6a6a6a6a6a6",
+"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag.........................U....................................aXbMa6a6a6a6a6a6#8.6ay#H#Gagag............#y.D.s.ma6bNaP.C.B.Eagag.............bat.s#la6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag.........................S.Z..................................bqbM#ba6a6a6a6a6bG.Bay#Hazagag............aDat.saYa6bd.6.C#H#6agag............aDat#kaYa6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag........................av.U...8..............................aMatbMa6a6a6a6a6#8.BaU.B#6agag............aDaXbMaYa6#Y.BaU.B.Eagag.............KaX.s.ma6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................yaX..bHag...............................jbM#ma6a6a6a6#8#Hay.B.Eagag............a1.O#kaYa6bd.BaU.B#Gagag........ag..a1as.saYa6a6a6a6a6a6",
+"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag........................av.saW...E..............................albMaLa6a6a6a6bG.BaU#H.Eagag........ag..#j.V.s#fa6bN.BaU#H.Eagag........ag..#j.VbMaua6a6a6a6a6a6",
+"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag.........................ybM.j.....................................ybMa6a6a6a6#8aP#JaD#6agag............azava8.Ya6aTaP#J#Hazag.E............az#g.s.Ya6a6a6a6a6a6",
+"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag........................av#kbMaR...E...............................qbM#fa6a6a6a3.BaU#J.Eagag............az#g.s.Ya6bD.BaUaf#Gagag............az.y#k.Ya6a6a6a6a6a6",
+"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................ybMbM#g....................................aXbMa6a6a6aa#Jaz#JaM.Eag.............Eak.s.Aa6.J#JazaUaMagag.............Eak.s.Aa6a6a6a6a6a6",
+"a6a6a6aL...............................G.sbM#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.s#k#qa6bl....#6........................avbMbMbl....ag........................av.sbMa7....ag...............................0bMaVa6a6aaaU.Caf#Gagag.............Ebm.s.Aa6byaU.C#Jazagag.............Ebm.s.Aa6a6a6a6a6a6",
+"a6a6a6aL..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y.....E.........................ybMbMa6a6bl....aM.........................y.sbM#g....ag.........................y#kbMa6aN..ag...............................EbMbMa6a6bC#JafaD.E..ag............agaN.s#V#qbhafaUaD.Eagag............agaN.s#Va6a6a6a6a6a6",
+"a6a6a6aL...............................0bM.s#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................avbMbMa6aL.....................................jbM#qa6#bbb#J.Bagag..............ag.R#k#Va6.2bb#J.b.E................ag.RbM#V#qa6a6a6a6a6",
+"a6a6a6bQ...............................GbMbMaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag........................av.sbMaq....ag........................##bMbM#qa6bI....aM........................av#kbMbl....ag.........................ybMbMa6a6.l...E...............................l#k.Ya6a6aPaUaf.Eagag............ag.X.s#Va4anaxaUaf.Eagag............agbi.s#Va#a6a6a6a6a6",
+"a6a6a6aL..............................albMbMaVa6aW....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................av#kbMaL....ag.........................ZaqbMa6a8......#j........................atbMbMbl....ag........................av#kbMa6a6aX....................................avbMa6a6.U.Caz.E.Eag...............U.sbMa4.IaP.C#G.E.Eag...............UbM#Va4a6a6a6a6a6",
+"a6a6a6bQ.................................M.S#VbI......#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybMbMa6....ag............................#c#d........aM......................al.sbMbM#g....ag........................avbMbMa6a6#maM..ag...............................qbM#la6.5aU.E#Gagag...............H.s#VaVa6#1#aaz.Eagag...............H.s.saVa6a6a6a6a6",
+"a6a6a6aL....................................ag.........Z........................avbMbMaL...............................0#kbM#qa6bl....ag.........................y#kbMa6bq....................................ag.....Z.........................qbM#kbMbl....ag........................av.sbMa6a6a6.x....................................bsbMa6a8.BaU.Eag............ag..aW#kbMaVa6.R.6aU#Gag............ag..aW#k#VaVa6a6a6a6a6",
+"a6a6a6#l......................................aM.Z.EaM...........................ybM#k.w..............................apbM.sa4a6.y....ag........................avbM.sa6a8......................................aMaM..........................avbMbM#fbl....ag........................avbMbMa6a6a6#Q....ag...............................GbMaVa7.L.E#6ag............ag..b..tbM.ea6#X.L.Eazag............ag..b..tbMa7a6a6a6a6a6",
+"a6a6a6a6aM......................................................................av.sbMaL...............................0bM#k.4a6bl....ag........................av#kbMa6a6bn...E............................................................#c#kbMbMaVbl....ag........................av#kbMa6a6a6a6bn...Z..............................albMbM.4.#..aM.Eag...........EagaR.ObMa7a6#M.#...Z.Eag...........EagaR.ObMa7a6a6a6a6a6",
+"a6a6a6a6.y.......................................................................y#kbMaL...............................GbMbMa4a6.y....ag.........................ybMbMa6a6#l#6.............................................................E#ebM.s#ka6.y....ag.........................ybMbMa6a6a6a6.t.....................................jbMa4.3....azag........ag.E...K#..sa3a6#m#D..agaM..........agagag.K#..sa3a6a6a6a6a6",
+"a6a6a6a6aVaR....................................................................avbMbMaL...............................G.sbM#qa6bl....ag........................avbMbMa6a6a6aY.k.E.......................................................ZaqbM#kbM#Qa6.S....ag........................avbMbMa6a6a6a6a6aR...E..............................#cbM#fbF.....Z..........ag.E.E.K.5#k#la6a6#......Z..........ag.Eag.K.5.s#la6a6a6a6a6",
+"a6a6a6a6a6#l#6.Z................................................................av#kbMaL..............................apbM#ka4a6.y....ag.........................y.s#ka6a6a6a6#laRag..................................................alaqbM.sbMaLa6a6.y....ag.........................y.s#ka6a6a6a6a6bl....................................aqbMaV#a...Z.............Eaz#nbma8.Ya6a6awaU...E.............Eaz.K#Wa8aLa6a6a6a6a6",
+"a6a6a6a6a6a6aYaWag...............................................................ybMbMaL...............................0bMbM.4a6bl....ag........................avbMbMa6a6a6a6#q#mblaM..............................................bqatbM#kbMaLa6a6a6bl....ag........................avbMbMa6a6a6a6a6a7....ag...............................qbMa7aZazag.............E#j.K.G#kaLa6a6bJaKazag............az#j#naG#k.Ya6a6a6a6a6",
+"a6a6a6a6a6a6a6a6.yaM........................al.jap..............................avbM.s#M..............................apbM#ka4a6.y....ag.........................ybMbMa6a6a6a6a6a6a6#m#A#y....................................#y##atbMbMbMbM#fa6a6a6a6bl....ag.........................ybMbMa6a6a6a6a6a6##..ag................................a8bMa4.GaEaU......aU#yafalbn.5.A.Y#qa6a6#V#EaEaU......aU#yala1.Ubl.A.Y#qa6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6as.U#c..........#cao.GaqbMbMao...............................y#kbMa6a6a6a6.s#k.s#kbM#k.s#kbM#k.s#kbMbMbM.4a6a6a6a6a4bM#k.s#kbM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6.4a8.y.Gao#cal.............kaWao.0.5#ebMbMbMbM#k.s#ma6a6a6a6a6a6a6a6a4.s#kbMa8bM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6#k.s#kbM#kbM#k.s#kbM#k.s#kbMa8.sbMbMaVanaT#W.HaB.UaG.x.x.jaJ.s.Y.Ya4a6a6a6.2aT.xaBaB.UaG#PbR.j.V#V.AaLa4a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6.4aL#k.s#kbM#kbMbMbMbM.sbsaMag..ag........................aqbMbMa6a6a6a6bMbMbMbM.sbMbMbMbMbMbMbM.s#kbMa4a6a6a6a6.4bMbMbMbM.sbMbMbMa8bMbMbMbMbMbMa6a6a6a6a6a6a6a6a6a6a6#qa3bMbM#kbM#k.s#kbMa8bM.sbM#kbM.s#kbM#ka3#qa6a6a6a6a6a6a6a6a6a6#qbM#kbMbM.sbMbMbMbMbMbMbM.sbMbMa6a6a6a6a6a6a6a6a6#mbMbM.sbM.sbMbMbM.sbMbMbMbMbM#kbMbMbMa6a4a3a8aTaJas#ia8.Y#xawaL#ba6a6a6a6a6a4aaaQaq.V#e.ta8aL#x.AaL#b#qa6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6#7a7bM.sbM.sbMa7.I##.......Z........................bM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.4bx#QaubM.sbM#kbM#k#f#Q.I.4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#qaVau#faYa4a4#qa6a6a6a6a6a6a6a6a6a6#qaVau.TaYa4a4#q#qa6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#Qbq.................................EbM#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.t.qbn.q.q.q.q.qbn.q.q.q.q.qaR...........E........................aWbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y.....................................E..........................##.s#k.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl.......Z.Z.E.Z.Z.E.Z.Z.E.Z.Z.E.Zag..............................#ebMbM#Qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y....ag........................................................aRbM#kbM#qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag........................................................akbM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6.y....ag......................................................#c.s#kbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl.....E.....................................................latbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag.................................................Z.G.sbM#kbMa7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bl....ag..........................................aW#u.S#kbM#kbMbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6bQblbl.yap.0ap.G.0ap.G.0ap.G.0apap.0ap.0apav.y#e#k.s#kbM.sbMbM.Ya4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a4bMbMbMbM.sbMbM.sbMbM.sbMbM#kbMbMbMbM#kbMbMbMbMbMa7#ma6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a4a4a4a4a4a4a4a4a4a4a4a4a4#qa#a4a#a4.4a#a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6",
+"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6"
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * phone_xpm[] = {
+"18 10 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ..............",
+" ...............",
+".... .. . . . ..",
+" .. ...........",
+" .. .. . . . ..",
+" .. ...........",
+" .. .. . . . ..",
+" .. ...........",
+" ...............",
+" .............."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char *quest_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"44 66 2 1",
+" c Gray0",
+". c None",
+/* pixels */
+"................... ...............",
+".............. ...........",
+"........... ........",
+"....... .......",
+".... .....",
+"... ....... ....",
+".... ............. ...",
+".... ................ ..",
+".... .................. ..",
+".... .................... .",
+"..... ..................... .",
+"..... ...................... ",
+"..... ....................... ",
+"..... ........................ ",
+"..... ........................ ",
+"..... ....................... ",
+"...... ........................ ",
+"...... ........................ ",
+"...... ....................... .",
+"...... ....................... .",
+"...... ...................... ..",
+"....... ..................... ..",
+"....... .................... ...",
+"........................... ....",
+".......................... .....",
+"......................... ......",
+"........................ ........",
+"...................... .........",
+"..................... ...........",
+".................... .............",
+"................... ...............",
+".................. ................",
+"................. ..................",
+"................ ...................",
+"............... ....................",
+".............. .....................",
+".............. ......................",
+"............. ......................",
+"............. ......................",
+"............. .....................",
+"............. ....................",
+"............. ..................",
+".............. .................",
+".............. .......................",
+"............... ..........................",
+"............... ............................",
+"............................................",
+"............................................",
+".................. ......................",
+"................. .....................",
+"............... ....................",
+"............... ...................",
+".............. ...................",
+".............. ..................",
+".............. ..................",
+".............. ..................",
+".............. ..................",
+".............. ...................",
+"............... ...................",
+"............... ....................",
+"................ .....................",
+".................. ......................",
+"............................................",
+"............................................",
+"............................................",
+"............................................",
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char * sim_xpm[] = {
+"18 10 2 1",
+" c #000000000000",
+". c #FFFFFFFFFFFF",
+" ",
+" ................ ",
+" ................ ",
+" .. ....... ",
+" .. ....... ",
+" .. ....... ",
+" .. ...... .",
+" .............. ..",
+" ............. ...",
+" ...."};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ This is the logo of the GUI utility.
+
+ Copyright (C) 1999 Petr Vostøel <Petr.Vostrel@inet.cz>
+
+ Last modification: Sat Jun 26 07:38:27 CEST 1999
+ Modified by Pavel Janík ml. <Pavel.Janik@linux.cz>
+
+*/
+
+static char *XPM_sms[] = {
+
+"26 7 126 2",
+
+".. c None",
+".# c #161616",
+".a c #cf9a98",
+".b c #d9e1ed",
+".c c #b10707",
+".d c #ededed",
+".e c #bababa",
+".f c #ababab",
+".g c #385886",
+".h c #c2c2c2",
+".i c #9b9b9b",
+".j c #af5f5d",
+".k c #353535",
+".l c #dedede",
+".m c #8b8b8b",
+".n c #757575",
+".o c #444444",
+".p c #a4a4a4",
+".q c #393939",
+".r c #e6e6e6",
+".s c #f3f3f3",
+".t c #6f0302",
+".u c #e6ebf3",
+".v c #b2b2b2",
+".w c #545454",
+".x c #ffffff",
+".y c #848383",
+".z c #233755",
+".A c #656565",
+".B c #7b7b7b",
+".C c #949494",
+".D c #2c2c2d",
+".E c #6b6b6b",
+".F c #0f1a29",
+".G c #4c4c4c",
+".H c #cecece",
+".I c #d6d6d6",
+".J c #1f2020",
+".K c #b2c2d9",
+".L c #5c5c5c",
+".M c #d6deeb",
+".N c #2b4468",
+".O c #162336",
+".P c #0e0e0e",
+".Q c #f9f9f9",
+".R c #000000",
+".S c #e8edf4",
+".T c #3d6194",
+".U c #edf1f6",
+".V c #c9c9c9",
+".W c #41669c",
+".X c #e8cecd",
+".Y c #cad5e5",
+".Z c #bccade",
+".0 c #4369a1",
+".1 c #9ca4ae",
+".2 c #b5c5db",
+".3 c #c5d2e3",
+".4 c #324e78",
+".5 c #3d3d3d",
+".6 c #9299a3",
+".7 c #d3dce9",
+".8 c #1b2b42",
+".9 c #b4bcc8",
+"#. c #34527e",
+"## c #cdd8e7",
+"#a c #2d0201",
+"#b c #012343",
+"#c c #f4eaea",
+"#d c #08121e",
+"#e c #8a919d",
+"#f c #c2cfe1",
+"#g c #bfbfbf",
+"#h c #080d14",
+"#i c #fcfcfc",
+"#j c #c4cedb",
+"#k c #bf7c7b",
+"#l c #cfd9e8",
+"#m c #757b83",
+"#n c #b6c6db",
+"#o c #f9f2f2",
+"#p c #2e4970",
+"#q c #d2adac",
+"#r c #d7e0eb",
+"#s c #7d838b",
+"#t c #1f314b",
+"#u c #61666c",
+"#v c #686d74",
+"#w c #08090b",
+"#x c #484e56",
+"#y c #6f7071",
+"#z c #242525",
+"#A c #bfcde0",
+"#B c #c7c5c5",
+"#C c #040506",
+"#D c #303031",
+"#E c #37393d",
+"#F c #273e5e",
+"#G c #446ba4",
+"#H c #282929",
+"#I c #eef2f7",
+"#J c #344f69",
+"#K c #eef1f7",
+"#L c #d1dbe9",
+"#M c #565758",
+"#N c #a5adb8",
+"#O c #606161",
+"#P c #786463",
+"#Q c #b4c4da",
+"#R c #404040",
+"#S c #575b61",
+"#T c #858b94",
+"#U c #dde4ee",
+"#V c #ebeff5",
+"#W c #4b2726",
+"#X c #2b2e34",
+"#Y c #414449",
+"#Z c #484848",
+"#0 c #505050",
+"#1 c #725655",
+"#2 c #a23c3a",
+"#3 c #acb4bf",
+"#4 c #bdc6d3",
+"#5 c #c0c9d6",
+"#6 c #b3c3da",
+"#7 c #ffffff",
+
+"...1#S.#.R.R.R.R.R.R.R.R.R#z#x.R.R.R.R#z#x.#.##x#e..",
+".1.D.R.e.x.x.x.x.w.x.x.n#z.J.d.x.n.e.x.x.x.x.w.R#z#e",
+"#M.R.R.x.m.R.#.n.o.x.x.l#X.A.x.x.n.x.m.R.#.n.o.R.R#x",
+".#.R.R.l.x.e.e.f.#.x.f.x.o.f.f.x.n.l.x.e.e.f.#.R.R.#",
+".#.R.R#z.o.n.m.x.n.x.n.l.h.x.A.x.n#z.o.n.m.x.n.R.R.#",
+".#.R.R.x.f.o.w.x.n.x.n.n.x.d.R.x.n.x.f.o.w.x.n.R.R#M",
+".R.R.R.m.x.x.x.d.k.x.n#z.x.i.R.x.n.m.x.x.x.d.k.R.R.R"
+};
--- /dev/null
+/* XPM */
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Copyright (C) 1999 Jan Derfinak <ja@mail.upjs.sk>
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+static char *stop_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"65 65 2 1",
+" c Gray0",
+". c None",
+/* pixels */
+"................... ...................",
+".................. ..................",
+"................. .................",
+"................ ................",
+"............... ......................... ...............",
+".............. ........................... ..............",
+"............. ............................. .............",
+"............ ............................... ............",
+"........... ................................. ...........",
+".......... ................................... ..........",
+"......... ..................................... .........",
+"........ ....................................... ........",
+"....... ......................................... .......",
+"...... ........................................... ......",
+"..... ............................................. .....",
+".... ............................................... ....",
+"... ................................................. ...",
+".. ................................................... ..",
+". ..................................................... .",
+" ....................................................... ",
+" ......................................................... ",
+" ......................................................... ",
+" ...... .. .. ... ....... ",
+" ...... . . .. ...... ",
+" ..... . . .. ...... ",
+" ..... . . .. ...... ",
+" ..... ..... ..... ..... ..... .. ... ...... ",
+" ..... ..... ..... ..... ..... .. .... ...... ",
+" ..... ............ ..... ..... .. .... ...... ",
+" ..... ............ ..... ..... .. .... ...... ",
+" ..... ...... ..... ..... .. .... ...... ",
+" ..... ..... ..... ..... .. ...... ",
+" ..... ..... ..... ..... .. ...... ",
+" ...... ..... ..... ..... .. ...... ",
+" ............ ..... ..... ..... .. ....... ",
+" ............ ..... ..... ..... .. ............. ",
+" ..... ..... ..... ..... ..... .. ............. ",
+" ..... ..... ..... ..... ..... .. ............. ",
+" ..... ..... ..... .. ............. ",
+" ..... ..... ..... .. ............. ",
+" ..... ..... ..... .. ............. ",
+" ..... ...... ..... .. ............. ",
+" ...... ........ ...... ... ............. ",
+" ......................................................... ",
+" ......................................................... ",
+" ....................................................... ",
+". ..................................................... .",
+".. ................................................... ..",
+"... ................................................. ...",
+".... ............................................... ....",
+"..... ............................................. .....",
+"...... ........................................... ......",
+"....... ......................................... .......",
+"........ ....................................... ........",
+"......... ..................................... .........",
+".......... ................................... ..........",
+"........... ................................. ...........",
+"............ ............................... ............",
+"............. ............................. .............",
+".............. ........................... ..............",
+"............... ...............",
+"................ ................",
+"................. .................",
+".................. ..................",
+"................................................................."
+};