This is my list of TODOs for development of this software (not
necessarily in order of importance):

("+" = DONE)

+ handle:
  > --> AT+COPS=?
  > <-- 
  > <-- +COPS: (1,"AMENA",,"21403"),(3,"MOVISTAR",,"21407"),
  > <-- (3,"E VODAFONE",,"21401"),,(0,1),(2)
  > <-- 
  > <-- OK
  > gsmctl[ERROR]: expected comma (at position 45 of string '(1,"AMENA",,"21403"),(3,"MOVISTAR",,"21407"),')

+ extend README and web site with names of working phones (Siemens S45,...)

+ add workaround:
  > <ME0>  Manufacturer: Nokia Mobile Phones
  > <ME1>  Model: 8290
  > <ME2>  Revision: SW5.22
  > <ME3>  Serial Number: 010070303406434
  > <FUN>  Functionality Level: 1
  > gsmctl[ERROR]: expected number, got '(2)'

- add fork to gsmsmsd

+ document "on" and "off" operations of gsmctl

- Just assume full functionality and issue AT+CGMF=0 if we haven't already 
  done so for this MeTa.

+ make update po

+ add find function

+ specify exact location of manual files in /usr/man/man* in spec
  file, so that erase does not try to delete these directories

+ update PO

+ add option to gsmsendsms/gsmsmsd to request delivery reports

+ Fix CBM reception in gsmsmsd, see testcb.cc program

+ fix gsmsmsd:
  --> AT+CNMI=?
  <-- 
  <-- +CNMI: (1),(1),(0),(0),(0)
  <-- 
  <-- OK
  --> AT+CNMI=1,0,0,0,0
  <-- 
  <-- +CME ERROR: 003
  ./gsmsmsd[ERROR]: ME/TA error 'operation not allowed' (code 003)

+ Wenn ich den SMS-Speicher auslesen möchte, bricht gsmlib ab, weil der
  Speicherplatz 1 auf der SIM-Karte nicht belegt ist. Das kann z.B.
  passieren, wenn man Nachrichten im Handy löscht. Es kommt der Fehlercode
  321 (Invalid memory index). Wie wäre es, in der Leseroutine alle
  ungültigen Plätze zu ignorieren und solange zu lesen, bis die Anzahl der
   vorhandenen Nachrichten im Speicher eingelesen ist?

+ document --charset option of gsmpb

+ Problems with PDUs with alphanumeric SCA, e.g.:
  07911497941902F00414D0E474989D769F5DE4320839001040122151820000

+ > 2. Ich kann mit meinem Nokia 6210 nicht den Telefon-SMS-Speicher
    auslesen. Dies liegt an der Speicherwahl, die vor dem Auslesen
    an das Telefon übermittelt wird. Von der gsmlib wird anscheinend
    immer die Anzahl der Speicher aus dem "CPMS=?"-Befehl genommen 
    (z.B. "SM","SM","SM"). Notwendig ist es aber nur, die erste
    Position (zum Lesen und Löschen) bzw. die ersten beiden 
    Positionen (zum Schreiben) zu benutzen. 
    Das Nokia 6210 unterstützt aber an der ritten Stelle nur "SM",
    nicht "ME". So kann ich die SMS im Telefon leider nicht
    auslesen :-(

- add option to gsmpb/gsmssmstore deletion to delete ALL entries

- recheck Solaris port

+ cache character set settings in MeTa

+ add documentation for new gsmctl and gsmpb charset parameters

+ support characters sets other than GSM default alphabet for phone books

+ create non-existent files (gsmpb and gsmsmsstore)

+ rename libgsm to libgsmme, new major version 1

+ document sca/setsca operations/parameters in gsmctl

+ document option to set SCA in SMS-related apps

+ implement option to set SCA in SMS-related apps

+ convert NDEBUG test output from cout to cerr

+ test new gsm_unix_serial behaviour

+ apply checks for telephone number in gsm_sorted_phonebook

+ add interrupted() checks

+ check for gcc-2.95.2 in configure

- document custom backend options of gsmpb (and gsmsmsstore)

- /var/lock/LCK..modem

+ make gsmctl all continue even if there are some failures

+ CPIN thing

+ bring German translations up-to-date

+ document -I parameter

+ make chat routines robust against TAs that insist on echoing AT commands

+ ericsson sh 888:
  <-- AT+CLCK="P2",2,,1
  <-- 
  +CME ERROR: 4
  gsmctl[ERROR]: ME/TA error 'operation not supported' (code 4)

+ put README etc. into gsmlib package (not only devel)

+ make SMS decoding routines more robust against bad SMS (especially
  premature end of PDU)

+ stop gsm_sorted_sms_store.cc from copying back SMS that came from
  the SC (SMS_DELIVER, SMS_STATUS_REPORT, SMS_SUBMIT_REPORT). Their
  message type is ambiguous and the ME may misinterpret them.

+ gsmsmsd: reinitialize modem every hour or so (signal termination implemented)

+ implement store, flush and spool options of gsmsmsd,
  document them in man pages

+ test case for COPS answer numeric operator name in quotation marks
  (testparser.cc)

+ retry when initializing TA (ATZ/ATE0 sequences)

+ correctly parse malformed SMS PDUs without SCA with Ericsson phone,
  introduce Capability object for that. Ericsson ID:
  <ME0>  Manufacturer: ERICSSON
  <ME1>  Model: 6050102
  <ME2>  Revision: 990225 1852 CXC112143
  <ME3>  Serial Number: 520001690279310

+ Determine CPMS number of parameters for CPMS command (Ericsson
  phone/GM12 GSM modem):
  AT+CPMS?                                                                     
  +CPMS: "ME",0,10,"ME",0,10         
  AT+CPMS=?                               
  +CPMS: ("ME","SM"),("ME","SM")          

+ accept string as numeric value when interpreting COPS=? response
  (Ericsson phone + GSM12 GSM module)

+ accept string as numeric value when interpreting COPS? response
  (Ericsson phone + GSM12 GSM module)

+ It would be nice if it was possible to send sms:es
  via gsmsmsd as well, via a spool directory or a socket (or stdin, in which
  case one can put another program in front of this program and then
  feed it with outgoing messages any way one wants). That way the program
  could be the gateway between programs and the sms network.  Now one has
  to stop gsmsmsd to send an sms and that's not so elegant or write
  ones own program.

+ gsmsmsd geht davon aus, das ein platz frei ist und benutzt nur diesen....
  Wenn also eine SMS kommt, dann zieht es Sie raus, und löscht den
  Speicherplatz.
  Wenn aber die Karte voll ist, passiert gar nichts. Für eine automatisierte
  umgebung ist das schlecht. besser wäre es, bei startup von gsmsmsd alle
  Speicherplätze abzufrühstücken, und die Action aufzurufen.

+ Ein RING bringt den gsmsmsd ziemlich heftig aus dem Tritt. Hab jetzt ´ne
  Rufumleitung eingebaut.

+ Links section in homepage

+ AT+CNMI=? liefert bei mir folgendes zurück:
  +CNMI: (0-3),(0-3),(0-2),0,(0-1)
  Parameter 4 (<ds>) liefert also keine Liste sondern nur ein Int zurück, du
  versuchts aber ein ( zu parsen.
  Was sagt die ETSI-spec. dazu ?? Ist das konform ??

+ give name of command at beginning of synopsis in man pages

+ list combinations of mobiles phones/GSM modems in the README

+ test ALARM in case of timeout when writing or reading to TA

+ install headers in gsmlib subdirectory

+ RPM spec file

+ test index changes for sorted phonebook -> write second test case

+ sort phone numbers the same way in gsm_sorted_sms_store and
  gsm_sorted_phonebook

+ write glossary for all these nice abbreviations (TA, ME, SC, SME, TE)

+ HAVE_VSNPRINTF instead of HAVE_VPRINTF

+ internationalization of messages with GNU gettext. Files:
  +gsm_at.cc               +gsm_parser.cc           +gsm_sorted_phonebook.cc
  +gsm_error.cc            +gsm_phonebook.cc        +gsm_sorted_sms_store.cc
  +gsm_event.cc            +gsm_sms.cc              +gsm_unix_serial.cc
  +gsm_me_ta.cc            +gsm_sms_codec.cc        +gsm_util.cc
  +gsm_nls.cc              +gsm_sms_store.cc
  +gsmctl.cc               +gsmpb.cc                +gsmsendsms.cc
  +gsmsmsd.cc              +gsmsmsstore.cc

+ implement indexed phonebook ops in gsmpb.cc

+ describe phonebook file format in gsmpb.man

+ update list of compatible hardware in README

+ all #include <gsm_config.h> must be enclosed in #ifdef's

+ check for getopt_long in configure

+ remove asserts regarding lengths of numeric data types, put them
into configure script
(string)

+ sort options in apps/*.cc alphabetically

+ in gsm_sorted_sms_store compare telephone numbers numerically

+ introduce -v option to gsmpb and gsmsmsstore to report execution
statistics (gives a nicer feeling to users)

+ test new synchronization function in gsmpb program

+ implement equality operator for SMSSToreEntry

+ test 'make install'

+ implement operations in the gsmctl program

+ test operations in the gsmctl program

+ document operations in the gsmctl program

+ rewrite test cases (compare output)

+ write gsm_sorted_sms_store module (along the lines of gsm_sorted_phonebook)

+ complete gsmsmsstore program (using abovementioned modules)

TODO low priority:

- implement SMS text mode

- The action command of gsmsmsd would be easier to make, if the program
  sent the values in environment variables instead (except the user data
  which could be sent on stdin).

+ Upgrade to latest autoheader, autoconf, libtool

- provide German translations for manual pages

- organize doc subdirectory for translated READMEs, manual pages

+ Win32 port

- test: optimization when accessing phonebooks: use size information
available via AT command to stop reading entries known to be empty (I
cannot test this with my hardware since CPBS? is not fully supported)

- make apps accept stdin or stdout

+ maybe strip leading and trailing whitespace from phonebook entries
when reading them from ME/TA or file? (not done, perhaps users want to 
achieve special effects with white space)

- support international character sets (8-bit, 16-bit) in phonebook
operations (I'd like to have input from users who need this)

