cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 13 Mar 2013 17:54:09 +0200
changeset 78 ee30584c654b
parent 77 7197414053c9
child 79 07e696e91b6f
permissions -rw-r--r--
[cmdopts,fix-xa] Gradual conversion & error elimination * add fix-set-status-rc-xa.diff * converted commands up to /group with no compiler errors
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
# HG changeset patch
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
     2
# Parent 1b0b563a81e6425da07c1da7ea4f947c4f3326cb
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     3
[work-in-progress] Unified command option parsing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     4
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     5
  * wrecking chaos all over the place
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     6
  * started integration with cmd subsystem
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     7
  * broke everything
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     8
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     9
  ** PREVIOUS ACHIEVEMENTS **
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    11
  * cmdopts_parse() & cmdopts_free() in utils.c/h
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    12
  * /roster uses parser
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    13
    * buddy_search() now expects argument in utf8
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    14
  * /say_to uses parser
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    15
  * /color uses parser
68
c2334fb31211 [cmdopts] Convert /status and /status_to
Myhailo Danylenko <isbear@ukrpost.net>
parents: 67
diff changeset
    16
  * /status and /status_to use parser
c2334fb31211 [cmdopts] Convert /status and /status_to
Myhailo Danylenko <isbear@ukrpost.net>
parents: 67
diff changeset
    17
    * cmd_setstatus() now expects separate status and message arguments
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    18
  * /add uses parser
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    19
  * /del uses parser
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    20
    * allows specifying jid, as /add does
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    21
    * -n(--dryrun) switch for debugging purposes
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
    22
  * /group uses parser
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
    23
  * /say uses parser
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    24
    * say_cmd()'s second argument is now of new type msgtype_t
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
    25
  * /msay uses parser
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
    26
    * scr_multi* now store multiline in utf8
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    27
  * /buffer uses parser
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    28
    * fix help for /buffer date
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    29
  * /rename uses parser
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    30
    * -r(--reset) instead of '-'
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    31
    * -j(--jid), -g(--group), -n(--name)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    32
  * /move uses parser
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    33
    * -j(--jid), -n(--name)
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
    34
  * /rawxml uses parser
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    35
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    36
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    37
--- a/mcabber/doc/help/cs/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    38
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    39
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    40
  Přesune se o [n] řádků nahoru (výchozí: polovina obrazovky).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    41
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    42
  Přesune se o [n] řádků dolů (výchozí: polovina obrazovky).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    43
-/buffer date [datum]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    44
+/buffer date datum
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    45
  Přesune se na první řádek po datu [datum] (formát: "RRRR-mm-dd").
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    46
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    47
  Přesune se na procentuální pozici n%.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    48
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    49
--- a/mcabber/doc/help/cs/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    50
+++ b/mcabber/doc/help/cs/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    51
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    52
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    53
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    54
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    55
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    56
 Smaže aktuální kontakt ze seznamu kontaktů (rosteru) a zruší povolení oznamování o stavu daného kontaktu (autorizaci) na obou stranách.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    57
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    58
--- a/mcabber/doc/help/cs/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    59
+++ b/mcabber/doc/help/cs/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    60
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    61
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    62
- /MOVE [skupina]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    63
+ /MOVE [-j|--jid jid] [-n|--name name] [skupina]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    64
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    65
 Přesune aktuální kontakt do požadované skupiny. Není-li skupina zadána, přesune se kontakt do výchozí skupiny. Pokud skupina neexistuje, automaticky se založí.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    66
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    67
 Tip: V módu rozhovoru lze použít "/roster alternate" pro skok na přesunutý kontakt.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    68
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    69
--- a/mcabber/doc/help/cs/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    70
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    71
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    72
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    73
- /RENAME jméno
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    74
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] jméno
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    75
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    76
-Přejmenuje aktuálního uživatele nebo skupinu na 'jméno'. Je-li 'jméno' znak '-', dané jméno se odstraní ze seznamu kontaktů (rosteru) a zobrazí se 'jid'.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    77
+Přejmenuje aktuálního uživatele nebo skupinu na 'jméno'.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    78
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    79
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    80
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    81
--- a/mcabber/doc/help/de/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    82
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    83
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    84
  Scrollt den Puffer um n Zeilen hoch. Gibt man keine Zahl an, scrollt er um einen halben Bildschirm
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    85
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    86
  Scrollt den Puffer um n Zeilen runter. Gibt man keine Zahl an, scrollt er um einen halben Bildschirm
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    87
-/buffer date [date]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    88
+/buffer date date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    89
  Springe zu der ersten Zeile nach dem Datum, welches im Format "JJJJ-mm-tt" anstatt [date] angegeben werden muss
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    90
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    91
  Springe zur Position "n" im Chatpuffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    92
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    93
--- a/mcabber/doc/help/de/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
    94
+++ b/mcabber/doc/help/de/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    95
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    96
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    97
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    98
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    99
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   100
 Löscht den gerade ausgewählten Buddy vom Roster. Außerdem werden die automatischen Presence Benachrichtigungen vom/zum Buddy gestoppt.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   101
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   102
--- a/mcabber/doc/help/de/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   103
+++ b/mcabber/doc/help/de/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   104
@@ -1,6 +1,7 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   105
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   106
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   107
+ /MOVE [-j|--jid jid] [-n|--name name] [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   108
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   109
 Verschiebt den ausgewählten Buddy zu der Gruppe "groupname". Wenn keine Gruppe angegeben wurde, wird der Buddy zur Standardgruppe verschoben. Wenn die Gruppe "groupname" nicht existiert, wird sie erst erschaffen.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   110
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   111
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   112
 Tipp: Wenn der Chatmodus aktiviert ist, kannst du "/roster alternate" benutzen um zu dem gerade bewegten Buddy zu springen.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   113
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   114
--- a/mcabber/doc/help/de/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   115
+++ b/mcabber/doc/help/de/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   116
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   117
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   118
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   119
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] newname
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   120
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   121
-Setzt den Namen des gerade ausgewählten Buddys bzw. der ausgewählten Gruppe auf "name". Wenn "name" - ist, so wird der Name vom Roster entfernt (mcabber wird in diesem Falle die JID bzw. den username anzeigen)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   122
+Setzt den Namen des gerade ausgewählten Buddys bzw. der ausgewählten Gruppe auf "name".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   123
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   124
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   125
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   126
--- a/mcabber/doc/help/en/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   127
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   128
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   129
  Scroll the buffer up [n] lines (default: half a screen)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   130
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   131
  Scroll the buffer down [n] lines (default: half a screen)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   132
-/buffer date [date]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   133
+/buffer date date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   134
  Jump to the first line after the specified [date] in the chat buffer (date format: "YYYY-mm-dd")
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   135
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   136
  Jump to position %n of the buddy chat buffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   137
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   138
--- a/mcabber/doc/help/en/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   139
+++ b/mcabber/doc/help/en/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   140
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   141
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   142
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   143
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   144
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   145
-Delete the current buddy from our roster, unsubscribe from its presence notification and unsubscribe it from ours.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   146
+Delete the current buddy or one, specified with [jid] from our roster, unsubscribe from its presence notification and unsubscribe it from ours.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   147
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   148
--- a/mcabber/doc/help/en/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   149
+++ b/mcabber/doc/help/en/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   150
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   151
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   152
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   153
+ /MOVE [-j|--jid jid] [-n|--name name] [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   154
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   155
 Move the current buddy to the requested group.  If no group is specified, then the buddy is moved to the default group.  If the group "groupname" doesn't exist, it is created.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   156
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   157
 Tip: if the chatmode is enabled, you can use "/roster alternate" to jump to the moved buddy.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   158
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   159
--- a/mcabber/doc/help/en/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   160
+++ b/mcabber/doc/help/en/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   161
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   162
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   163
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   164
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] newname
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   165
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   166
-Rename the current buddy or group to the given "name".  If "name" is -, the name is removed from the roster (and mcabber will display the JID or username).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   167
+Rename the current buddy or group to the given "newname".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   168
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   169
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   170
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   171
--- a/mcabber/doc/help/fr/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   172
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   173
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   174
  Défile vers le haut de [n] lignes (par défaut un demi écran)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   175
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   176
  Défile vers le bas de [n] lignes (par défaut un demi écran)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   177
-/buffer date [date]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   178
+/buffer date date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   179
  Va à la première ligne après la [date] dans le tampon actuel (format: "aaaa-mm-jj")
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   180
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   181
  Va à la position n% du tampon
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   182
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   183
--- a/mcabber/doc/help/fr/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   184
+++ b/mcabber/doc/help/fr/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   185
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   186
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   187
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   188
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   189
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   190
 Supprime le contact sélectionné du roster, supprime notre abonnement à ses notifications de présence et supprime son abonnement aux nôtres.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   191
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   192
--- a/mcabber/doc/help/fr/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   193
+++ b/mcabber/doc/help/fr/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   194
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   195
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   196
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   197
+ /MOVE [-j|--jid jid] [-n|--name name] [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   198
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   199
 Déplace le contact sélectionné vers le groupe spécifié. Si aucun groupe n'est donné, le contact est déplacé vers le groupe par défaut. Si le groupe "groupname" n'existe pas, il est créé.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   200
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   201
 Astuce : si le mode discussion (chatmode) est activé, vous pouvez utiliser "/roster alternate" pour vous positionner sur le contact que vous venez de déplacer.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   202
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   203
--- a/mcabber/doc/help/fr/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   204
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   205
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   206
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   207
- /RENAME nom
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   208
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] nom
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   209
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   210
-Renomme le contact/groupe sélectionné avec le "nom" spécifié. Si le nom est «-», le nom est supprimé du roster (et mcabber affichera le JID ou le nom d'utilisateur).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   211
+Renomme le contact/groupe sélectionné avec le "nom" spécifié.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   212
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   213
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   214
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   215
--- a/mcabber/doc/help/it/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   216
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   217
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   218
  Fa scorrere indietro il buffer di [n] linee (default: metà schermo)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   219
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   220
  Fa scorrere avanti il buffer di [n] linee (default: metà schermo)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   221
-/buffer date [data]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   222
+/buffer date data
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   223
  Salta alla prima linea successiva alla [data] specificata nel buffer di chat (formato della data: "YYYY-mm-dd")
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   224
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   225
  Salta alla posizione %n del buffer di chat corrente
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   226
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   227
--- a/mcabber/doc/help/it/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   228
+++ b/mcabber/doc/help/it/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   229
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   230
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   231
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   232
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   233
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   234
 Elimina il contatto corrente dal roster, cancellando la sottoscrizione alle reciproche notifiche della propria presenza.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   235
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   236
--- a/mcabber/doc/help/it/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   237
+++ b/mcabber/doc/help/it/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   238
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   239
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   240
- /MOVE [gruppo]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   241
+ /MOVE [-j|--jid jid] [-n|--name name] [grouppo]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   242
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   243
 Muove il contatto corrente nel gruppo richiesto. Se non viene specificato alcun gruppo, il contatto viene spostato nel gruppo si default. Se il gruppo "gruppo" non esiste, viene creato.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   244
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   245
 Trucco: se la modalità chat è abilitata, puoi usare "/roster alternate" per spostarti sul contatto appena mosso.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   246
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   247
--- a/mcabber/doc/help/it/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   248
+++ b/mcabber/doc/help/it/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   249
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   250
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   251
- /RENAME nome
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   252
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] nome
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   253
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   254
-Rinomina il contatto od il gruppo correnti usando "nome". Se si specifica - come "nome", il nome viene rimosso dal roster, ed al suo posto verranno visulizzati il JID o lo username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   255
+Rinomina il contatto od il gruppo correnti usando "nome".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   256
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   257
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   258
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   259
--- a/mcabber/doc/help/nl/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   260
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   261
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   262
  Scroll de buffer [n] regels omhoog (standaard: een half scherm)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   263
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   264
  Scroll de buffer [n] regels omlaag (standaard: een half scherm)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   265
-/buffer date [datum]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   266
+/buffer date datum
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   267
  Spring naar de eerste regel na de aangeduide [datum] in de chat buffer (datum formaat: "YYYY-mm-dd")
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   268
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   269
  Spring naar positie %n in de buddy chat buffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   270
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   271
--- a/mcabber/doc/help/nl/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   272
+++ b/mcabber/doc/help/nl/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   273
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   274
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   275
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   276
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   277
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   278
 Verwijder de actieve buddy uit ons roster, en zet het wederzijds toezenden van status veranderingen stop.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   279
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   280
--- a/mcabber/doc/help/nl/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   281
+++ b/mcabber/doc/help/nl/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   282
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   283
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   284
- /MOVE [groepsnaam]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   285
+ /MOVE [-j|--jid jid] [-n|--name name] [groepsnaam]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   286
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   287
 Verplaats de actieve buddy naar de aangegeven groep.  Indien geen groep werd gespecificeerd wordt buddy verplaatst naar de standaard groep.  Indien de groep "groepsnaam" niet bestaat, wordt die eerst aangemaakt.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   288
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   289
 Tip: indien chatmode actief is, kun je "/roster alternate" gebruiken om direct naar de verplaatste buddy te springen.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   290
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   291
--- a/mcabber/doc/help/nl/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   292
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   293
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   294
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   295
- /RENAME naam
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   296
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] naam
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   297
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   298
-Hernoem de actieve buddy of groep in de aangegeven "naam". Indien '-' wordt gebruikt als 'naam', wordt die uit het roster verwijderd (en mcabber zal vervolgens de JID of gebruikersnaam tonen).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   299
+Hernoem de actieve buddy of groep in de aangegeven "naam".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   300
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   301
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   302
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   303
--- a/mcabber/doc/help/pl/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   304
+++ b/mcabber/doc/help/pl/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   305
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   306
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   307
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   308
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   309
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   310
 Usuwa aktualnie zaznaczoną osobę z rostera, usuwa subskrypcję powiadomienia dostępności u danej osoby oraz u nas.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   311
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   312
--- a/mcabber/doc/help/pl/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   313
+++ b/mcabber/doc/help/pl/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   314
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   315
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   316
- /MOVE [nazwa grupy]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   317
+ /MOVE [-j|--jid jid] [-n|--name name] [nazwa grupy]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   318
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   319
 Przenosi aktualną osobę do grupy "nazwa grupy".  Jeśli nie podano nazwy grupy, wtedy osoba jest przenoszona do grupy domyślnej.  Jeśli grupa "nazwa grupy" nie istnieje, zostaje utworzona.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   320
+You can select other buddy that current using options --jid and --name.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   321
 Podpowiedź: jeśli jest włączony tryb czatu, możesz użyć "/roster alternate" aby skoczyć do przeniesionej osoby.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   322
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   323
--- a/mcabber/doc/help/pl/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   324
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   325
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   326
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   327
- /RENAME nazwa
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   328
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] nazwa
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   329
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   330
-Zmienia nazwę aktualnej osoby lub grupy na "nazwa". Jeżeli jako argument polecenia zostanie podany "-" wcześniejsza nazwa zostanie usunięta z listy kontaktów (mcabber będzie wyświetlał JID lub nazwę użytkownika). 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   331
+Zmienia nazwę aktualnej osoby lub grupy na "nazwa". 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   332
+If --reset is specified, "newname" is ignored and name will be reset to default - jid or username.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   333
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   334
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   335
--- a/mcabber/doc/help/ru/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   336
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   337
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   338
  Перемещает на [n] строк вверх в буфере (истории переписки) (по умолчанию: половина экрана)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   339
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   340
  Перемещает на [n] строк вниз в буфере (истории переписки) (по умолчанию: половина экрана)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   341
-/buffer date [date]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   342
+/buffer date date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   343
  Перемещает в первой строке после определенной даты [date] в буфере (истории переписки) (формат даты: "год-месяц-день", для примера "2006-01-01")
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   344
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   345
  Перемещает на позицию %n в текущем буфере (истории переписки)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   346
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   347
--- a/mcabber/doc/help/ru/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   348
+++ b/mcabber/doc/help/ru/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   349
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   350
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   351
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   352
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   353
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   354
-Удаляет текущего пользователя из списка контактов, отключает уведомления о его статусе и отключает уведомления пользователя о вашем статусе.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   355
+Удаляет текущего пользователя (или указанного с помощью jid) из списка контактов, отключает уведомления о его статусе и отключает уведомление пользователя о вашем статусе.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   356
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   357
--- a/mcabber/doc/help/ru/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   358
+++ b/mcabber/doc/help/ru/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   359
@@ -1,6 +1,7 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   360
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   361
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   362
+ /MOVE [-j|--jid jid] [-n|--name name] [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   363
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   364
 Перемещает пользователя в определенную группу. Если группа не указана, пользователь перещается в группу по умолчанию (default group). Если группа "groupname" не создана, она автоматически создается.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   365
+С помощью параметров --jid и --name можно перемещать контакты, отличные от текущего.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   366
 Полезно: Если включен режим чата (chatmode), Вы можете использовать "/roster alternate" для перехода к перемещенному пользователю.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   367
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   368
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   369
--- a/mcabber/doc/help/ru/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   370
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   371
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   372
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   373
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   374
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group name] [-n|--name name] newname
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   375
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   376
- Переименовывает текущего пользователя или группу в заданное имя "name". Если заданное имя имеет значение "-", то заданное ранее имя текущего пользователя или группы удаляется из списка контактов (mcabber будет отображать JID или имя пользователя по умолчанию).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   377
+Переименовывает текущего пользователя или группу в заданное имя "newname".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   378
+Если указан параметр --reset, "newname" игнорируется, а имя сбрасывается (mcabber будет отображать JID или имя пользователя по умолчанию).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   379
+Для указания обьекта, отличного от текущего, можно использовать опции --jid, --group и --name.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   380
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   381
--- a/mcabber/doc/help/uk/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   382
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   383
@@ -25,7 +25,7 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   384
  Посунути буфер вверх на n рядків (якщо не вказано - пів екрану).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   385
 /buffer down [n]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   386
  Посунути буфер вниз на n рядків (якщо не вказано - пів екрану).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   387
-/buffer date [дата]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   388
+/buffer date дата
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   389
  Перейти до першого повідомлення після дати (дата вигляду РРРР-ММ-ДД).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   390
 /buffer % процент
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   391
  Перейти до вказаної у процентах позиції.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   392
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   393
--- a/mcabber/doc/help/uk/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   394
+++ b/mcabber/doc/help/uk/hlp_del.txt	Wed Mar 13 17:51:29 2013 +0200
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   395
@@ -1,4 +1,4 @@
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   396
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   397
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   398
+ /DEL [-n|--dryrun] [jid]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   399
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   400
-Потерти поточний контакт зі списку. На додачу відписатися від його повідомлень про статус і відписати його від ваших.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   401
+Потерти поточний контакт (або контакт, що має вказаний jid) зі списку. Також відписатися від його сповіщень про статус і відписати його від ваших.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   402
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   403
--- a/mcabber/doc/help/uk/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   404
+++ b/mcabber/doc/help/uk/hlp_move.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   405
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   406
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   407
- /MOVE [група]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   408
+ /MOVE [-j|--jid jid] [-n|--name ім’я] [група]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   409
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   410
-Переносить поточний контакт до вказаної групи. Якщо групу не вказати контакт опиниться у головній групі. Якщо група не існує, її буде створено.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   411
+Переносить поточний контакт до вказаної групи. Якщо групу не вказати контакт опиниться у головній групі. Якщо групи не існує, її буде створено.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   412
+За допомогою опцій --jid та --name можна перемістити контакт, відмінний від поточного.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   413
 Примітка: в режимі розмови можна використати "/roster alternate", щоб перейти до нового місця контакту контакту.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   414
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   415
--- a/mcabber/doc/help/uk/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   416
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Wed Mar 13 17:51:29 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   417
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   418
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   419
- /RENAME ім'я
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   420
+ /RENAME [-r|--reset] [-j|--jid jid] [-g|--group ім’я] [-n|--name ім’я] нове ім’я
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   421
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   422
 Змінює прізвисько поточного контакту або назву групи.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   423
+За допомогою параметра --reset можна повернути контакту типову назву. При цьому нове ім’я (якщо вказане) ігнорується.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   424
+Опції --jid, --group та --name дозволяють перейменовувати об’єкти, відмінні від поточного.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   425
diff -r 1b0b563a81e6 mcabber/mcabber/commands.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   426
--- a/mcabber/mcabber/commands.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   427
+++ b/mcabber/mcabber/commands.c	Wed Mar 13 17:51:29 2013 +0200
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   428
@@ -19,7 +19,7 @@
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   429
  * USA
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   430
  */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   431
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   432
-#include <string.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   433
+#include <string.h> // g_memmove
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   434
 #include <stdlib.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   435
 #include <sys/types.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   436
 #include <sys/stat.h>
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   437
@@ -43,512 +43,631 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   438
 #include "xmpp.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   439
 #include "main.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   440
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   441
-#define IMSTATUS_AWAY           "away"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   442
-#define IMSTATUS_ONLINE         "online"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   443
-#define IMSTATUS_OFFLINE        "offline"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   444
-#define IMSTATUS_FREE4CHAT      "free"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   445
-#define IMSTATUS_AVAILABLE      "avail"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   446
-#define IMSTATUS_NOTAVAILABLE   "notavail"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   447
-#define IMSTATUS_DONOTDISTURB   "dnd"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   448
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   449
-# define IMSTATUS_INVISIBLE      "invisible"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   450
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   451
+//  Pre-declarations
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   452
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   453
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   454
+// for process_line()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   455
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   456
+  scmd_group_unfold = 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   457
+  scmd_group_fold   = 1,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   458
+  scmd_group_toggle = -1,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   459
+} scmd_group_t;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   460
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   461
+static void group_cmd (gpointer group, scmd_group_t action);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   462
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   463
+//static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   464
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   465
+#define BUILTIN_COUNT 4
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   466
+static cmdopts_t def_roster,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   467
+                 def_color,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   468
+                 def_status,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   469
+                 def_status_to,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   470
+                 def_add,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   471
+                 def_del,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   472
+                 def_group;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   473
+#if 0
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   474
+                 def_say,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   475
+                 def_msay,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   476
+                 def_say_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   477
+                 def_buffer,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   478
+                 def_clear,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   479
+                 def_info,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   480
+                 def_rename,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   481
+                 def_move,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   482
+                 def_set,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   483
+                 def_alias,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   484
+                 def_bind,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   485
+                 def_connect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   486
+                 def_disconnect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   487
+                 def_rawxml,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   488
+                 def_room,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   489
+                 def_authorization,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   490
+                 def_version,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   491
+                 def_request,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   492
+                 def_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   493
+                 def_help,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   494
+                 def_pgp,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   495
+                 def_iline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   496
+                 def_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   497
+                 def_chat_disable,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   498
+                 def_source,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   499
+                 def_otr,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   500
+                 def_otrpolicy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   501
+                 def_echo,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   502
+                 def_module,
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   503
+                 def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   504
 #endif
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   505
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   506
-// Return value container for the following functions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   507
-static int retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   508
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   509
-// Commands callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   510
-static void do_roster(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   511
-static void do_status(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   512
-static void do_status_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   513
-static void do_add(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   514
-static void do_del(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   515
-static void do_group(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   516
-static void do_say(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   517
-static void do_msay(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   518
-static void do_say_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   519
-static void do_buffer(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   520
-static void do_clear(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   521
-static void do_info(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   522
-static void do_rename(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   523
-static void do_move(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   524
-static void do_set(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   525
-static void do_alias(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   526
-static void do_bind(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   527
-static void do_connect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   528
-static void do_disconnect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   529
-static void do_rawxml(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   530
-static void do_room(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   531
-static void do_authorization(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   532
-static void do_version(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   533
-static void do_request(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   534
-static void do_event(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   535
-static void do_help(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   536
-static void do_pgp(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   537
-static void do_iline(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   538
-static void do_screen_refresh(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   539
-static void do_chat_disable(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   540
-static void do_source(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   541
-static void do_color(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   542
-static void do_otr(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   543
-static void do_otrpolicy(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   544
-static void do_echo(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   545
-static void do_module(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   546
-static void do_exit(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   547
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   548
-static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   549
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   550
-// Global variable for the commands list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   551
-static GSList *Commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   552
-static GSList *safe_commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   553
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   554
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   555
-#include "modules.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   556
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   557
-gpointer cmd_del(gpointer id)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   558
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   559
+//  Main commands mechanics
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   560
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   561
+// Functions to parse mcabber command line and execute commands accordingly.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   562
+// Allows to define commands and remove definitions.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   563
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   564
+cmdopts_t **cmd_list  = NULL; // command structs list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   565
+gsize       cmd_count = 0;    // number of commands (one less than memory allocated)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   566
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   567
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   568
+void cmd_init (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   569
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   570
-  GSList *sl_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   571
-  if (!id) return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   572
-  for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   573
-    if (sl_cmd -> data == id) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   574
-      cmd *command = (cmd *) sl_cmd->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   575
-      gpointer userdata = command->userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   576
-      Commands = g_slist_delete_link(Commands, sl_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   577
-      compl_del_category_word(COMPL_CMD, command->name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   578
-      g_slice_free(cmd, command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   579
-      return userdata;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   580
+  cmd_list = g_new (cmdopts_t *, BUILTIN_COUNT+1);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   581
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   582
+  cmd_list[0]  = &def_roster;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   583
+  cmd_list[1]  = &def_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   584
+  cmd_list[2]  = &def_status;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   585
+  cmd_list[3]  = &def_status_to;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   586
+  cmd_list[4]  = &def_add;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   587
+  cmd_list[5]  = &def_del;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   588
+  cmd_list[6]  = &def_group;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   589
+#if 0
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   590
+  cmd_list[7]  = &def_say;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   591
+  cmd_list[8]  = &def_msay;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   592
+  cmd_list[9]  = &def_say_to;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   593
+  cmd_list[10] = &def_buffer;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   594
+  cmd_list[11] = &def_clear;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   595
+  cmd_list[12] = &def_info;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   596
+  cmd_list[13] = &def_rename;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   597
+  cmd_list[14] = &def_move;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   598
+  cmd_list[15] = &def_set;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   599
+  cmd_list[16] = &def_alias;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   600
+  cmd_list[17] = &def_bind;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   601
+  cmd_list[18] = &def_connect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   602
+  cmd_list[19] = &def_disconnect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   603
+  cmd_list[20] = &def_rawxml;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   604
+  cmd_list[21] = &def_room;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   605
+  cmd_list[22] = &def_authorization;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   606
+  cmd_list[23] = &def_version;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   607
+  cmd_list[24] = &def_request;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   608
+  cmd_list[25] = &def_event;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   609
+  cmd_list[26] = &def_help;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   610
+  cmd_list[27] = &def_pgp;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   611
+  cmd_list[28] = &def_iline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   612
+  cmd_list[29] = &def_screen_refresh;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   613
+  cmd_list[30] = &def_chat_disable;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   614
+  cmd_list[31] = &def_source;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   615
+  cmd_list[32] = &def_otr;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   616
+  cmd_list[33] = &def_otrpolicy;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   617
+  cmd_list[34] = &def_echo;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   618
+  cmd_list[35] = &def_module;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
   619
+  cmd_list[36] = &def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   620
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   621
+  cmd_list[BUILTIN_COUNT] = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   622
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   623
+  cmd_count = BUILTIN_COUNT;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   624
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   625
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   626
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   627
+void cmd_uninit (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   628
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   629
+  g_free (cmd_list);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   630
+  cmd_list  = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   631
+  cmd_count = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   632
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   633
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   634
+// XXX:
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   635
+//  * if command is found, maybe still put it at the start of queue?
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   636
+void cmd_define (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   637
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   638
+  cmdopts_t **cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   639
+  for (cmd = cmd_list; *cmd != NULL; cmd ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   640
+    if (*cmd == command)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   641
+      return;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   642
+  cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count+2);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   643
+  cmd_list[cmd_count] = command;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   644
+  cmd_count ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   645
+  cmd_list[cmd_count] = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   646
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   647
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   648
+void cmd_undef (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   649
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   650
+  size_t num = 0;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   651
+  while (num < cmd_count) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   652
+    if (cmd_list[num] == command) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   653
+      g_memmove (cmd_list+num, cmd_list+num+1, sizeof(cmdopts_t *) * (cmd_count-num));
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   654
+      cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   655
+      cmd_count --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   656
+      return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   657
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   658
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   659
+    num ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   660
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   661
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   662
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   663
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   664
-//  cmd_add()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   665
-// Adds a command to the commands list and to the CMD completion list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   666
-gpointer cmd_add(const char *name, const char *help, guint flags_row1,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   667
-                 guint flags_row2, void (*f)(char*), gpointer userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   668
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   669
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   670
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   671
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   672
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   673
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   674
+const char *cmdopts_parse_argument(gchar **pr, gchar **er, cmdarg_flags_t flags)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   675
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   676
-  cmd *n_cmd = g_slice_new0(cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   677
-  strncpy(n_cmd->name, name, 32-1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   678
-  n_cmd->help = help;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   679
-  n_cmd->completion_flags[0] = flags_row1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   680
-  n_cmd->completion_flags[1] = flags_row2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   681
-  n_cmd->func = f;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   682
-  n_cmd->userdata = userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   683
-  Commands = g_slist_prepend(Commands, n_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   684
-  // Add to completion CMD category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   685
-  compl_add_category_word(COMPL_CMD, name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   686
-  return n_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   687
+  gchar *p = *pr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   688
+  gchar *e = *er;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   689
+  const char *error = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   690
+  gboolean   quotes = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   691
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   692
+  if ((flags & cmdarg_catchall) && (flags & cmdarg_plain)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   693
+    *pr = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   694
+    return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   695
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   696
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   697
+  while (p <= e && error != NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   698
+    if (p == e && quotes) { // end of line in quotes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   699
+      error = "Unfinished quoted argument.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   700
+    } else if ((*p == ' ' && (!quotes) && !(flags & cmdarg_catchall)) || p == e) { // argument ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   701
+      if (*p != '\0') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   702
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   703
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   704
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   705
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   706
+    } else if (*p == '\\' && !(flags & cmdarg_plain)) { // next char escape
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   707
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   708
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   709
+      if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   710
+        error = "Escape at the end of line.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   711
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   712
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   713
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   714
+    } else if (*p == '"' && !(flags & cmdarg_plain)) { // quotation start/end
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   715
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   716
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   717
+      quotes = !quotes;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   718
+    } else { // still argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   719
+      p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   720
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   721
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   722
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   723
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   724
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   725
+  return error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   726
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   727
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   728
-//  cmd_set_safe(name, safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   729
-// Sets if command can be used in startup configuration file.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   730
-gboolean cmd_set_safe(const gchar *name, gboolean safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   731
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   732
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   733
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   734
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   735
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   736
+static gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   737
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   738
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   739
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   740
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   741
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   742
-    if (!strcmp((const char *)sel->data, name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   743
-      if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   744
-        return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   745
-      else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   746
-        g_free(sel->data);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   747
-        safe_commands = g_slist_delete_link(safe_commands, sel);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   748
+  enum {             // Parser state transitions:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   749
+    in_space,        // -> in_space, in_optstart, in_argstart
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   750
+    in_optstart,     // -> in_shortoptend, in_longoptstart, in_argstart ("-")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   751
+    in_shortoptend,  // -> in_space, in_argstart, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   752
+    in_longoptstart, // -> in_longopt, in_space, in_argstart ("---")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   753
+    in_longopt,      // -> in_longopt, in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   754
+    in_argstart,     // -> in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   755
+  } state = in_argstart;     // current parser state
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   756
+  gchar    *p        = *pr;  // current pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   757
+  gchar    *e        = *er;  // end of line pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   758
+  gchar    *s;               // start of current object pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   759
+  gboolean opts_ended = FALSE; // don't allow options any more
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   760
+  cmdopt_t *option   = NULL; // option, for which argument is currently parsed
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   761
+  size_t   argno     = 0;    // number of current positional argument
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   762
+  gchar    *error    = NULL; // error message to return
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   763
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   764
+  // general environment checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   765
+  if (command -> check) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   766
+    if ((error = command -> check (command))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   767
+      gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   768
+      error = g_strdup_printf("%s: %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   769
+      g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   770
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   771
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   772
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   773
+  // prepare: set default values for arguments and unset some fields
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   774
+  if (error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   775
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   776
+    if (command -> opts) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   777
+      for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   778
+        cmdopt_t *opt = command -> opts + n;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   779
+        if (opt -> flags & cmdopt_switch) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   780
+          opt -> arg.value.swc = 0;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   781
+        } else {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   782
+          opt -> arg.value.roarg = opt -> arg.defval;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   783
+        }
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   784
+        opt -> arg.flags &= ~(cmdarg_ppclear);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   785
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   786
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   787
-  if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   788
-    safe_commands = g_slist_append(safe_commands, g_strdup(name));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   789
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   790
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   791
-  return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   792
+    if (command -> args) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   793
+      for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   794
+        cmdarg_t *arg = command -> args + n; 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   795
+        arg -> value.roarg = arg -> defval;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   796
+        arg -> flags  &= ~(cmdarg_ppclear);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   797
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   798
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   799
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   800
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   801
+  // we allow parser to do one extra run on final '\0'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   802
+  while (p <= e && error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   803
+    if (state == in_space) { // space between args/options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   804
+      if (*p == ' ' || p == e) { // still space
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   805
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   806
+      } else if (*p == '-' && !opts_ended) { // option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   807
+        state = in_optstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   808
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   809
+      } else { // argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   810
+        if (!option) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   811
+          opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   812
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   813
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   814
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   815
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   816
+    } else if (state == in_optstart) { // long/short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   817
+      if (*p == ' ' || p == e) { // argument '-'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   818
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   819
+        s = p = p - 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   820
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   821
+      } else if (*p == '-') { // long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   822
+        state = in_longoptstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   823
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   824
+      } else { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   825
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   826
+        state = in_shortoptend;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   827
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   828
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   829
+    } else if (state == in_shortoptend) { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   830
+      if (*p == ' ' || p == e) { // option really ended
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   831
+        size_t n;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   832
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   833
+          if (command -> opts[n].shortopt == *s) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   834
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   835
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   836
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   837
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   838
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   839
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   840
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   841
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   842
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   843
+            error = g_strdup_printf ("%s: Option -%c needs an argument.", command -> name, option -> shortopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   844
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   845
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   846
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   847
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   848
+          error = g_strdup_printf ("%s: Unknown option -%c.", command -> name, *s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   849
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   850
+      } else { // short option not ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   851
+        // consider it argument (to allow -autojoin)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   852
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   853
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   854
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   855
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   856
+    } else if (state == in_longoptstart) { // long option initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   857
+      if (*p == ' ' || p == e) { // end of options '--'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   858
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   859
+        state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   860
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   861
+      } else if (*p == '-') { // argument, starting with '---'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   862
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   863
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   864
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   865
+      } else { // it is long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   866
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   867
+        state = in_longopt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   868
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   869
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   870
+    } else if (state == in_longopt) { // long option name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   871
+      if (*p == ' ' || p == e) { // long option ended
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   872
+        size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   873
+        *p = '\0';
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   874
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   875
+          if (!g_strcmp0(command -> opts[n].longopt, s)) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   876
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   877
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   878
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   879
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   880
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   881
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   882
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   883
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   884
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   885
+            error = g_strdup_printf ("%s: Option --%s needs an argument.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   886
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   887
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   888
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   889
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   890
+          error = g_strdup_printf ("%s: Unknown option --%s.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   891
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   892
+      } else { // still long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   893
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   894
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   895
+    } else if (state == in_argstart) { // option/command argument initialization
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   896
+      const char *err;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   897
+      cmdarg_t   *arg;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   898
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   899
+      if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   900
+        arg = &(option -> arg);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   901
+      } else if (!command -> args || !command -> args[argno].name) { // no need to parse arguments any further
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   902
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   903
+      } else { // normal aurgument
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   904
+        arg = command -> args + argno;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   905
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   906
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   907
+      if ((err = cmdopts_parse_argument(&p, &e, arg -> flags))) { // get argument value
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   908
+        if (!option) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   909
+          error = g_strdup_printf ("%s: Can't parse argument %s (%lu): %s", command -> name, arg -> name, argno + 1, err);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   910
+        } else if (option -> shortopt) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   911
+          error = g_strdup_printf ("%s: Can't parse argument for option -%c: %s", command -> name, option -> shortopt, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   912
+        } else {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   913
+          error = g_strdup_printf ("%s: Can't parse argument for option --%s: %s", command -> name, option -> longopt, err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   914
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   915
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   916
+        arg -> value.arg = s;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   917
+        arg -> flags |= cmdarg_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   918
+        if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   919
+          option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   920
+        } else { // normal argument
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   921
+          if (arg -> flags & cmdarg_subcmd) { // subcommand
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   922
+            cmdopts_t *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   923
+            gsize     n; // XXX put command list into chkdata
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   924
+            for (n = 0; command -> cmds[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   925
+              if (!strcmp (s, command -> cmds[n].name)) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   926
+                subcmd = command -> cmds + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   927
+                break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   928
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   929
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   930
+            if (subcmd != NULL) { // found subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   931
+              arg -> value.cmd = subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   932
+              if ((error = cmdopts_parse_internal (&p, &e, subcmd))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   933
+                gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   934
+                error = g_strdup_printf("%s %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   935
+                g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   936
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   937
+            } else { // wrong subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   938
+              error = g_strdup_printf("%s: Unable to find subcommand \"%s\".", command -> name, s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   939
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   940
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   941
+          argno ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   942
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   943
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   944
+      state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   945
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   946
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   947
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   948
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   949
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   950
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   951
+  // perform option argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   952
+  if (error == NULL && command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   953
+    gsize n;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   954
+    for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   955
+      cmdopt_t *opt = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   956
+      if (!(opt -> flags & cmdopt_switch)) { // not a switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   957
+        // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   958
+        if ((opt -> arg.flags & (cmdarg_check | cmdarg_visited)) && !(opt -> arg.flags & cmdarg_checked)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   959
+          if (opt -> arg.type && opt -> arg.type -> check) { // checker is present
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   960
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   961
+            opt -> arg.flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   962
+            if ((err = opt -> arg.type -> check (&(opt -> arg)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   963
+              if (opt -> arg.flags & cmdarg_required) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   964
+                if (opt -> longopt) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   965
+                  error = g_strdup_printf ("%s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   966
+                } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   967
+                  error = g_strdup_printf ("%s: Error in argument for option -%c: %s", command -> name, opt -> shortopt, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   968
+                }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   969
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   970
+                break;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   971
+              } else {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   972
+                if (opt -> longopt) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   973
+                  scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   974
+                } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   975
+                  scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument for option -%c: %s", command -> name, opt -> shortopt, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   976
+                }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   977
+                g_free (err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   978
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   979
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   980
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   981
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   982
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   983
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   984
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   985
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   986
+  // perform positional argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   987
+  if (error == NULL && command -> args) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   988
+    size_t n;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   989
+    for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   990
+      cmdarg_t *arg = command -> args + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   991
+      // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   992
+      if ((arg -> flags & (cmdarg_check | cmdarg_visited)) && !(arg -> flags & cmdarg_checked)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   993
+        if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   994
+          if (!arg -> value.cmd) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   995
+            if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   996
+              error = g_strdup_printf ("%s: No %s specified.", command -> name, arg -> name);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   997
+              break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   998
+            } else { // XXX more prefixes
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   999
+              scr_log_print (LPRINT_NORMAL, "Warning: %s: No %s specified.", command -> name, arg -> name);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1000
+            }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1001
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1002
+        } else { // normal argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1003
+          if (arg -> type && arg -> type -> check) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1004
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1005
+            arg -> flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1006
+            if ((err = arg -> type -> check (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1007
+              if (arg -> flags & cmdarg_required) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1008
+                error = g_strdup_printf ("%s: Error in argument %s (%lu): %s", command -> name, arg -> name, n, err);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1009
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1010
+                break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1011
+              } else { // XXX more prefixes
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1012
+                scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument %s (%lu): %s", command -> name, arg -> name, n, err);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1013
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1014
+              }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1015
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1016
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1017
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1018
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1019
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1020
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1021
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1022
+  return error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1023
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1024
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1025
-//  cmd_is_safe(name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1026
-// Returns if command is safe or not
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1027
-gboolean cmd_is_safe(const gchar *name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1028
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1029
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1030
+static void cmdopts_free(cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1031
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1032
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1033
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1034
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1035
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1036
-    if (!strcmp((const char *)sel->data, name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1037
-      return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1038
-  return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1039
+  gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1040
+  if (command -> opts) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1041
+    for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1042
+      cmdopt_t *opt = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1043
+      if (!(opt -> flags & cmdopt_switch)) { // not switch
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1044
+        if (opt -> arg.flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1045
+          opt -> arg.flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1046
+          if (opt -> arg.type && opt -> arg.type -> free) { // need to free something
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1047
+            opt -> arg.type -> free (&(opt -> arg));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1048
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1049
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1050
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1051
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1052
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1053
+  if (command -> args) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1054
+    for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1055
+      cmdarg_t *arg = command -> args + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1056
+      if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1057
+        if (arg -> value.cmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1058
+          cmdopts_free (arg -> value.cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1059
+          arg -> value.cmd = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1060
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1061
+      } else { // normal argument
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1062
+        if (arg -> flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1063
+          arg -> flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1064
+          if (arg -> type && arg -> type -> free) { // need to free something
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1065
+            arg -> type -> free (arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1066
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1067
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1068
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1069
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1070
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1071
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1072
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1073
-//  cmd_init()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1074
-// Commands table initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1075
-// !!!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1076
-// After changing commands names and it arguments names here, you must change
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1077
-// ones in init_bindings()!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1078
-//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1079
-void cmd_init(void)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1080
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1081
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1082
-  cmd_add("add", "Add a jabber user", COMPL_JID, 0, &do_add, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1083
-  cmd_add("alias", "Add an alias", 0, 0, &do_alias, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1084
-  cmd_add("authorization", "Manage subscription authorizations",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1085
-          COMPL_AUTH, COMPL_JID, &do_authorization, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1086
-  cmd_add("bind", "Add an key binding", 0, 0, &do_bind, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1087
-  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1088
-          COMPL_BUFFER, 0, &do_buffer, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1089
-  cmd_add("chat_disable", "Disable chat mode", 0, 0, &do_chat_disable, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1090
-  cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1091
-  cmd_add("color", "Set coloring options", COMPL_COLOR, 0, &do_color, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1092
-  cmd_add("connect", "Connect to the server", 0, 0, &do_connect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1093
-  cmd_add("del", "Delete the current buddy", 0, 0, &do_del, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1094
-  cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1095
-  cmd_add("echo", "Display a string in the log window", 0, 0, &do_echo, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1096
-  cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1097
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1098
-  cmd_add("exit",  "Exit mcabber", 0, 0, &do_exit, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1099
-  cmd_add("group", "Change group display settings",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1100
-          COMPL_GROUP, COMPL_GROUPNAME, &do_group, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1101
-  cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1102
-  cmd_add("iline", "Manipulate input buffer", 0, 0, &do_iline, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1103
-  cmd_add("info", "Show basic info on current buddy", 0, 0, &do_info, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1104
-  cmd_add("module", "Manipulations with modules", COMPL_MODULE, 0, &do_module,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1105
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1106
-  cmd_add("move", "Move the current buddy to another group", COMPL_GROUPNAME,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1107
-          0, &do_move, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1108
-  cmd_add("msay", "Send a multi-lines message to the selected buddy",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1109
-          COMPL_MULTILINE, 0, &do_msay, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1110
-  cmd_add("otr", "Manage OTR settings", COMPL_OTR, COMPL_JID, &do_otr, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1111
-  cmd_add("otrpolicy", "Manage OTR policies", COMPL_JID, COMPL_OTRPOLICY,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1112
-          &do_otrpolicy, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1113
-  cmd_add("pgp", "Manage PGP settings", COMPL_PGP, COMPL_JID, &do_pgp, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1114
-  cmd_add("quit", "Exit the software", 0, 0, NULL, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1115
-  cmd_add("rawxml", "Send a raw XML string", 0, 0, &do_rawxml, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1116
-  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1117
-  cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1118
-          &do_request, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1119
-  cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1120
-  cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1121
-          &do_roster, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1122
-  cmd_add("say", "Say something to the selected buddy", 0, 0, &do_say, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1123
-  cmd_add("say_to", "Say something to a specific buddy", COMPL_JID, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1124
-          &do_say_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1125
-  cmd_add("screen_refresh", "Redraw mcabber screen", 0, 0, &do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1126
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1127
-  cmd_add("set", "Set/query an option value", 0, 0, &do_set, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1128
-  cmd_add("source", "Read a configuration file", 0, 0, &do_source, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1129
-  cmd_add("status", "Show or set your status", COMPL_STATUS, 0, &do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1130
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1131
-  cmd_add("status_to", "Show or set your status for one recipient",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1132
-          COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1133
-  cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1134
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1135
-  cmd_set_safe("set", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1136
-  cmd_set_safe("bind", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1137
-  cmd_set_safe("alias", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1138
-  cmd_set_safe("pgp", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1139
-  cmd_set_safe("source", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1140
-  cmd_set_safe("status", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1141
-  cmd_set_safe("color", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1142
-  cmd_set_safe("otrpolicy", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1143
-  cmd_set_safe("module", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1144
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1145
-  // Status category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1146
-  compl_add_category_word(COMPL_STATUS, "online");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1147
-  compl_add_category_word(COMPL_STATUS, "avail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1148
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1149
-  compl_add_category_word(COMPL_STATUS, "invisible");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1150
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1151
-  compl_add_category_word(COMPL_STATUS, "free");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1152
-  compl_add_category_word(COMPL_STATUS, "dnd");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1153
-  compl_add_category_word(COMPL_STATUS, "notavail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1154
-  compl_add_category_word(COMPL_STATUS, "away");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1155
-  compl_add_category_word(COMPL_STATUS, "offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1156
-  compl_add_category_word(COMPL_STATUS, "message");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1157
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1158
-  // Roster category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1159
-  compl_add_category_word(COMPL_ROSTER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1160
-  compl_add_category_word(COMPL_ROSTER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1161
-  compl_add_category_word(COMPL_ROSTER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1162
-  compl_add_category_word(COMPL_ROSTER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1163
-  compl_add_category_word(COMPL_ROSTER, "group_prev");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1164
-  compl_add_category_word(COMPL_ROSTER, "group_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1165
-  compl_add_category_word(COMPL_ROSTER, "hide");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1166
-  compl_add_category_word(COMPL_ROSTER, "show");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1167
-  compl_add_category_word(COMPL_ROSTER, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1168
-  compl_add_category_word(COMPL_ROSTER, "display");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1169
-  compl_add_category_word(COMPL_ROSTER, "hide_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1170
-  compl_add_category_word(COMPL_ROSTER, "show_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1171
-  compl_add_category_word(COMPL_ROSTER, "toggle_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1172
-  compl_add_category_word(COMPL_ROSTER, "item_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1173
-  compl_add_category_word(COMPL_ROSTER, "item_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1174
-  compl_add_category_word(COMPL_ROSTER, "item_toggle_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1175
-  compl_add_category_word(COMPL_ROSTER, "alternate");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1176
-  compl_add_category_word(COMPL_ROSTER, "search");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1177
-  compl_add_category_word(COMPL_ROSTER, "unread_first");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1178
-  compl_add_category_word(COMPL_ROSTER, "unread_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1179
-  compl_add_category_word(COMPL_ROSTER, "note");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1180
-  compl_add_category_word(COMPL_ROSTER, "resource_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1181
-  compl_add_category_word(COMPL_ROSTER, "resource_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1182
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1183
-  // Buffer category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1184
-  compl_add_category_word(COMPL_BUFFER, "clear");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1185
-  compl_add_category_word(COMPL_BUFFER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1186
-  compl_add_category_word(COMPL_BUFFER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1187
-  compl_add_category_word(COMPL_BUFFER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1188
-  compl_add_category_word(COMPL_BUFFER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1189
-  compl_add_category_word(COMPL_BUFFER, "search_backward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1190
-  compl_add_category_word(COMPL_BUFFER, "search_forward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1191
-  compl_add_category_word(COMPL_BUFFER, "readmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1192
-  compl_add_category_word(COMPL_BUFFER, "date");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1193
-  compl_add_category_word(COMPL_BUFFER, "%");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1194
-  compl_add_category_word(COMPL_BUFFER, "purge");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1195
-  compl_add_category_word(COMPL_BUFFER, "close");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1196
-  compl_add_category_word(COMPL_BUFFER, "close_all");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1197
-  compl_add_category_word(COMPL_BUFFER, "scroll_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1198
-  compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1199
-  compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1200
-  compl_add_category_word(COMPL_BUFFER, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1201
-  compl_add_category_word(COMPL_BUFFER, "save");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1202
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1203
-  // Group category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1204
-  compl_add_category_word(COMPL_GROUP, "fold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1205
-  compl_add_category_word(COMPL_GROUP, "unfold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1206
-  compl_add_category_word(COMPL_GROUP, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1207
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1208
-  // Multi-line (msay) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1209
-  compl_add_category_word(COMPL_MULTILINE, "abort");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1210
-  compl_add_category_word(COMPL_MULTILINE, "begin");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1211
-  compl_add_category_word(COMPL_MULTILINE, "send");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1212
-  compl_add_category_word(COMPL_MULTILINE, "send_to");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1213
-  compl_add_category_word(COMPL_MULTILINE, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1214
-  compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1215
-  compl_add_category_word(COMPL_MULTILINE, "verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1216
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1217
-  // Room category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1218
-  compl_add_category_word(COMPL_ROOM, "affil");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1219
-  compl_add_category_word(COMPL_ROOM, "ban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1220
-  compl_add_category_word(COMPL_ROOM, "bookmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1221
-  compl_add_category_word(COMPL_ROOM, "destroy");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1222
-  compl_add_category_word(COMPL_ROOM, "invite");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1223
-  compl_add_category_word(COMPL_ROOM, "join");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1224
-  compl_add_category_word(COMPL_ROOM, "kick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1225
-  compl_add_category_word(COMPL_ROOM, "leave");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1226
-  compl_add_category_word(COMPL_ROOM, "names");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1227
-  compl_add_category_word(COMPL_ROOM, "nick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1228
-  compl_add_category_word(COMPL_ROOM, "privmsg");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1229
-  compl_add_category_word(COMPL_ROOM, "remove");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1230
-  compl_add_category_word(COMPL_ROOM, "role");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1231
-  compl_add_category_word(COMPL_ROOM, "setopt");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1232
-  compl_add_category_word(COMPL_ROOM, "topic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1233
-  compl_add_category_word(COMPL_ROOM, "unban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1234
-  compl_add_category_word(COMPL_ROOM, "unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1235
-  compl_add_category_word(COMPL_ROOM, "whois");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1236
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1237
-  // Authorization category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1238
-  compl_add_category_word(COMPL_AUTH, "allow");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1239
-  compl_add_category_word(COMPL_AUTH, "cancel");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1240
-  compl_add_category_word(COMPL_AUTH, "request");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1241
-  compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1242
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1243
-  // Request (query) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1244
-  compl_add_category_word(COMPL_REQUEST, "last");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1245
-  compl_add_category_word(COMPL_REQUEST, "ping");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1246
-  compl_add_category_word(COMPL_REQUEST, "time");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1247
-  compl_add_category_word(COMPL_REQUEST, "vcard");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1248
-  compl_add_category_word(COMPL_REQUEST, "version");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1249
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1250
-  // Events category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1251
-  compl_add_category_word(COMPL_EVENTS, "accept");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1252
-  compl_add_category_word(COMPL_EVENTS, "ignore");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1253
-  compl_add_category_word(COMPL_EVENTS, "reject");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1254
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1255
-  // PGP category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1256
-  compl_add_category_word(COMPL_PGP, "disable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1257
-  compl_add_category_word(COMPL_PGP, "enable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1258
-  compl_add_category_word(COMPL_PGP, "force");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1259
-  compl_add_category_word(COMPL_PGP, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1260
-  compl_add_category_word(COMPL_PGP, "setkey");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1261
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1262
-  // OTR category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1263
-  compl_add_category_word(COMPL_OTR, "start");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1264
-  compl_add_category_word(COMPL_OTR, "stop");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1265
-  compl_add_category_word(COMPL_OTR, "fingerprint");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1266
-  compl_add_category_word(COMPL_OTR, "smpq");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1267
-  compl_add_category_word(COMPL_OTR, "smpr");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1268
-  compl_add_category_word(COMPL_OTR, "smpa");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1269
-  compl_add_category_word(COMPL_OTR, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1270
-  compl_add_category_word(COMPL_OTR, "key");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1271
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1272
-  // OTR Policy category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1273
-  compl_add_category_word(COMPL_OTRPOLICY, "plain");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1274
-  compl_add_category_word(COMPL_OTRPOLICY, "manual");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1275
-  compl_add_category_word(COMPL_OTRPOLICY, "opportunistic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1276
-  compl_add_category_word(COMPL_OTRPOLICY, "always");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1277
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1278
-  // Color category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1279
-  compl_add_category_word(COMPL_COLOR, "roster");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1280
-  compl_add_category_word(COMPL_COLOR, "muc");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1281
-  compl_add_category_word(COMPL_COLOR, "mucnick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1282
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1283
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1284
-  // Module category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1285
-  compl_add_category_word(COMPL_MODULE, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1286
-  compl_add_category_word(COMPL_MODULE, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1287
-  compl_add_category_word(COMPL_MODULE, "load");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1288
-  compl_add_category_word(COMPL_MODULE, "unload");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1289
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1290
+  gchar *s = commandline;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1291
+  gchar *p, *e;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1292
+  gchar *freeme = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1293
+  const char *err;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1294
+  gchar      *error;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1295
+  cmdopts_t  *command = NULL;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1296
+  const char *alias   = NULL;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1297
+  size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1298
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1299
+  // skip command indicator and spaces at the beginning
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1300
+  while (*s == COMMAND_CHAR || *s == ' ')
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1301
+    s ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1302
+  p = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1303
+  e = s + strlen (s);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1304
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1305
+  // separate first word - command name
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1306
+  if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1307
+    scr_log_print (LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1308
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1309
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1310
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1311
+  // check for quit command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1312
+  if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1313
+    return cmd_result_quit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1314
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1315
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1316
+  // check if we're in verbatim mode
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1317
+  if ((flags & cmdexe_check_verbatim) && scr_get_multimode () == 2) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1318
+    if (strcmp (s, "msay")) { // it is not msay
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1319
+      return cmd_result_verbatim;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1320
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1321
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1322
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1323
+  // check and expand alias
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1324
+  if ((alias = settings_get (SETTINGS_TYPE_ALIAS, s))) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1325
+    freeme = s = g_strdup_printf ("%s %s", alias, p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1326
+    p = s;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1327
+    e = s + strlen (s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1328
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1329
+    if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1330
+      scr_log_print (LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1331
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1332
+      return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1333
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1334
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1335
+    // check for quit command again
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1336
+    if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1337
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1338
+      return cmd_result_quit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1339
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1340
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1341
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1342
+  // find command with this name (reverse - see cmd_define())
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1343
+  for (n = cmd_count - 1; n >= 0; n --) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1344
+    if (!strcmp (s, cmd_list[n] -> name)) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1345
+      command = cmd_list[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1346
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1347
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1348
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1349
+  if (command == NULL) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1350
+    scr_log_print (LPRINT_NORMAL, "error: Unable to find command \"%s\".", s);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1351
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1352
+    return cmd_result_not_found;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1353
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1354
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1355
+  // check safety
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1356
+  if ((flags & cmdexe_check_safe) && !(command -> flags & cmd_safe)) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1357
+    scr_log_print (LPRINT_NORMAL, "error: Command \"%s\" is not safe to execute here.", command -> name);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1358
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1359
+    return cmd_result_not_found;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1360
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1361
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1362
+  // parse command line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1363
+  if ((error = cmdopts_parse_internal (&p, &e, command))) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1364
+    scr_log_print (LPRINT_NORMAL, "%s", error);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1365
+    g_free (error);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1366
+    cmdopts_free (command);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1367
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1368
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1369
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1370
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1371
+  // execute command handler
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1372
+  if (command -> handle) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1373
+    if ((error = command -> handle (command))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1374
+      scr_log_print (LPRINT_NORMAL, "%s: %s", command -> name, error);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1375
+      g_free (error);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1376
+      cmdopts_free (command);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1377
+      g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1378
+      return cmd_result_runtime_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1379
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1380
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1381
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1382
+  // free resources
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1383
+  cmdopts_free (command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1384
+  g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1385
+  return cmd_result_ok;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1386
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1387
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1388
-//  expandalias(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1389
-// If there is one, expand the alias in line and returns a new allocated line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1390
-// If no alias is found, returns line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1391
-// Note: if the returned pointer is different from line, the caller should
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1392
-//       g_free() the pointer after use
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1393
-char *expandalias(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1394
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1395
+// Process a command/message line. If this isn't a command, this is a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1396
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1397
+// Returns 255 if the line is the /quit command, 0 on success and some other
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1398
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1399
+cmd_result_t process_line(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1400
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1401
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1402
-  char *word;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1403
-  const gchar *value;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1404
-  char *newline = (char*)line;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1405
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1406
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1407
-  for (p1 = line ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1408
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1409
-  // Locate the end of the word
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1410
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1411
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1412
-  // Extract the word and look for an alias in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1413
-  word = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1414
-  value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1415
-  g_free(word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1416
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1417
-  if (value)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1418
-    newline = g_strdup_printf("%c%s%s", COMMAND_CHAR, value, p2);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1419
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1420
-  return newline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1421
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1422
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1423
-//  cmd_get
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1424
-// Finds command in the command list structure.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1425
-// Returns a pointer to the cmd entry, or NULL if command not found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1426
-cmd *cmd_get(const char *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1427
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1428
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1429
-  char *com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1430
-  GSList *sl_com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1431
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1432
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1433
-  for (p1 = command ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1434
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1435
-  // Locate the end of the command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1436
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1437
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1438
-  // Copy the clean command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1439
-  com = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1440
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1441
-  // Look for command in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1442
-  for (sl_com=Commands; sl_com; sl_com = g_slist_next(sl_com)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1443
-    if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1444
-      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1445
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1446
-  g_free(com);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1447
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1448
-  if (sl_com)       // Command has been found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1449
-    return (cmd*)sl_com->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1450
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1451
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1452
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1453
-//  process_command(line, iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1454
-// Process a command line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1455
-// If iscmd is TRUE, process the command even if verbatim mmode is set;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1456
-// it is intended to be used for key bindings.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1457
-// Return 255 if this is the /quit command, and 0 for the other commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1458
-int process_command(const char *line, guint iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1459
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1460
-  char *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1461
-  char *xpline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1462
-  cmd *curcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1463
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1464
-  if (!line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1465
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1466
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1467
-  // We do alias expansion here
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1468
-  if (iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1469
-    xpline = expandalias(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1470
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1471
-    xpline = (char*)line; // No expansion in verbatim multi-line mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1472
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1473
-  // We want to use a copy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1474
-  if (xpline == line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1475
-    xpline = g_strdup(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1476
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1477
-  // Remove trailing spaces:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1478
-  for (p=xpline ; *p ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1479
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1480
-  for (p-- ; p>xpline && (*p == ' ') ; p--)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1481
-    *p = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1482
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1483
-  // Command "quit"?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1484
-  if ((iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1485
-      && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1486
-    if (!xpline[5] || xpline[5] == ' ') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1487
-      g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1488
-      return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1489
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1490
-  } else if (iscmd && !strncasecmp(xpline, "quit", 4) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1491
-             (!xpline[4] || xpline[4] == ' ')) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1492
-    // If iscmd is true we can have the command without the command prefix
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1493
-    // character (usually '/').
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1494
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1495
-    return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1496
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1497
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1498
-  // If verbatim multi-line mode, we check if another /msay command is typed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1499
-  if (!iscmd && scr_get_multimode() == 2
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1500
-      && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1501
-    // It isn't an /msay command
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1502
-    scr_append_multiline(xpline);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1503
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1504
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1505
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1506
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1507
-  // Commands handling
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1508
-  curcmd = cmd_get(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1509
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1510
-  if (!curcmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1511
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized command.  "
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1512
-                 "Please see the manual for a list of known commands.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1513
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1514
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1515
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1516
-  if (!curcmd->func) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1517
-    scr_LogPrint(LPRINT_NORMAL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1518
-                 "This functionality is not yet implemented, sorry.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1519
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1520
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1521
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1522
-  // Lets go to the command parameters
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1523
-  for (p = xpline+1; *p && (*p != ' ') ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1524
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1525
-  // Skip spaces
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1526
-  while (*p && (*p == ' '))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1527
-    p++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1528
-  // Call command-specific function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1529
-  retval_for_cmds = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1530
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1531
-  if (curcmd->userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1532
-    (*(void (*)(char *p, gpointer u))curcmd->func)(p, curcmd->userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1533
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1534
-    (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1535
-#else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1536
-  (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1537
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1538
-  g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1539
-  return retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1540
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1541
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1542
-//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1543
-// Process a command/message line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1544
-// If this isn't a command, this is a message and it is sent to the
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1545
-// currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1546
-// Return 255 if the line is the /quit command, or 0.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1547
-int process_line(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1548
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1549
+  gchar *utf8;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1550
+  int retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1551
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1552
   if (!*line) { // User only pressed enter
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1553
     if (scr_get_multimode()) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1554
       scr_append_multiline("");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1555
@@ -556,141 +675,584 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1556
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1557
     if (current_buddy) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1558
       if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1559
-        do_group("toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1560
+        group_cmd (BUDDATA(current_buddy), scmd_group_toggle);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1561
       else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1562
         // Enter chat mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1563
         scr_set_chatmode(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1564
         scr_show_buddy_window();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1565
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1566
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1567
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1568
+    return cmd_result_input;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1569
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1570
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1571
-  if (*line != COMMAND_CHAR) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1572
-    // This isn't a command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1573
+  utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1574
+  if (*line != COMMAND_CHAR) { // input line
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1575
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1576
-      scr_append_multiline(line);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1577
+      scr_append_multiline(utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1578
     else
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1579
-      say_cmd((char*)line, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1580
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1581
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1582
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1583
-  /* It is _probably_ a command -- except for verbatim multi-line mode */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1584
-  return process_command(line, FALSE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1585
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1586
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1587
-// Helper routine for buffer item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1588
-// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1589
-static void roster_buddylock(char *bjid, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1590
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1591
-  gpointer bud = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1592
-  bool may_need_refresh = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1593
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1594
-  // Allow special jid "" or "." (current buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1595
-  if (bjid && (!*bjid || !strcmp(bjid, ".")))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1596
-    bjid = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1597
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1598
-  if (bjid) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1599
-    // The JID has been specified.  Quick check...
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1600
-    if (check_jid_syntax(bjid)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1601
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1602
-                   "<%s> is not a valid Jabber ID.", bjid);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1603
-    } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1604
-      // Find the buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1605
-      GSList *roster_elt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1606
-      roster_elt = roster_find(bjid, jidsearch,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1607
-                               ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1608
-      if (roster_elt)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1609
-        bud = roster_elt->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1610
-      else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1611
-        scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1612
-      may_need_refresh = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1613
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1614
-  } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1615
-    // Use the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1616
-    if (current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1617
-      bud = BUDDATA(current_buddy);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1618
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1619
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1620
-  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1621
-  if (bud) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1622
-    if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1623
-      lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1624
-    buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1625
-    if (may_need_refresh) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1626
-      buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1627
-      update_roster = TRUE;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1628
+      say_cmd(utf8, msgtype_not_set);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1629
+    retval = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1630
+  } else { // command or verbatim multiline message
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1631
+    retval = cmd_execute (utf8, cmdexe_check_verbatim);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1632
+    if (retval == cmd_result_verbatim) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1633
+      g_free(utf8); // buffer has been corrupted by parser
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1634
+      utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1635
+      scr_append_multiline(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1636
+      retval = cmd_result_input;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1637
     }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1638
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1639
+  g_free(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1640
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1641
+  return retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1642
 }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1643
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1644
-static void roster_resourcelock(char *jidres, gboolean lock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1645
-  gpointer bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1646
-  char *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1647
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1648
-  if (!jidres) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1649
-    if (lock) return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1650
-    jidres = ".";
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1651
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1652
+//  Standard types
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1653
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1654
+// This section contains standard argument type definitions, used in built-in
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1655
+// mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1656
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1657
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1658
+// TODO: move to separate file? (and variations with 'required')
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1659
+// + cmdarg_type_roster_bjid     - in roster, with specified types -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1660
+// + cmdarg_type_roster_resource - in roster, with specified types, have resource -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1661
+// * cmdarg_type_roster_fjid     - in roster, with specified types, might have non-existing resource -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1662
+// * cmdarg_type_roster_jid      - in roster, with specified types, might have or not have resource -> bud + (resource)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1663
+// * cmdarg_type_roster_group    - in roster, on '.' select group of current buddy -> bud
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1664
+// + cmdarg_type_bjid         - any bjid -> bjid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1665
+// + cmdarg_type_fjid         - any fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1666
+// + cmdarg_type_statusmask   - string -> string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1667
+// + cmdarg_type_uint         - string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1668
+// + cmdarg_type_nonspace     - strip, space only -> null
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1669
+// * cmdarg_type_bjidmask
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1670
+// + cmdarg_type_color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1671
+// + cmdarg_type_string2enum
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1672
+// * cmdarg_type_nick        - provide completions first from current room, then from all other, nonspace, do not restrict
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1673
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1674
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1675
+//  generic destructors
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1676
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1677
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1678
+void cmdarg_free_gfree (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1679
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1680
+  g_free (arg -> value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1681
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1682
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1683
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1684
+//  command environment checkers
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1685
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1686
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1687
+gchar *cmd_check_online (cmdopts_t *command)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1688
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1689
+  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1690
+    return g_strdup ("You are not connected!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1691
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1692
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1693
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1694
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1695
+//  string -> stripspace string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1696
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1697
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1698
+// Strips leading and trailing spaces, checks if anything left.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1699
+// Replaces value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1700
+// Does not need freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1701
+// No trailing spaces in defvalue - needs RW access for that.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1702
+gchar *cmdarg_check_nonspace (cmdarg_t *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1703
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1704
+  gchar *val = arg -> value.arg;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1705
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1706
+  if (val) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1707
+    while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1708
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1709
+    if (*val) { // valid arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1710
+      arg -> value.arg = val;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1711
+      while (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1712
+        val ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1713
+      while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1714
+        val --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1715
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1716
+      if (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1717
+        *val = '\0';
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1718
+      return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1719
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1720
   }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1721
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1722
-  if (jidres[0] == '.' &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1723
-      (jidres[1] == '\0' || jidres[1] == JID_RESOURCE_SEPARATOR)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1724
-    //Special jid: . or ./resource
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1725
-    switch (jidres[1]) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1726
-      case JID_RESOURCE_SEPARATOR:
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1727
-        resource = jidres+2;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1728
-      case '\0':
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1729
-        if (current_buddy)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1730
+  // error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1731
+  arg -> value.arg = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1732
+  return g_strdup ("Non-space value required.");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1733
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1734
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1735
+const cmdarg_type_t cmdarg_type_nonspace = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1736
+  cmdarg_check_nonspace,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1737
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1738
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1739
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1740
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1741
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1742
+//  bjid -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1743
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1744
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1745
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1746
+// Returns buddy roster entry in value.bud.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1747
+// Recognizes as current ".", but not "" or NULL - use defvalue.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1748
+// Does not require freeing.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1749
+gchar *cmdarg_check_roster_bjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1750
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1751
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1752
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1753
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1754
+    const char *bjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1755
+    guint      types = (guint) arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1756
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1757
+    if (!strcmp(bjid, ".")) { // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1758
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1759
+        error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1760
+      else if (buddy_gettype(BUDDATA(current_buddy)) & types)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1761
+        arg -> value.bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1762
+      else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1763
+        error = g_strdup_printf("Currently selected buddy is of wrong type.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1764
+    } else if (!check_jid_syntax(bjid)) { // valid jid specified
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1765
+      GSList *found = roster_find(bjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1766
+      if (found)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1767
+        arg -> value.bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1768
+      else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1769
+        error = g_strdup_printf("Jid <%s> is not in the roster.", bjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1770
+    } else { // jid is invalid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1771
+      error =  g_strdup_printf("<%s> is not a valid Jabber ID.", bjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1772
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1773
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1774
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1775
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1776
+    arg -> value.bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1777
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1778
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1779
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1780
+const cmdarg_type_t cmdarg_type_roster_bjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1781
+  cmdarg_check_roster_bjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1782
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1783
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1784
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1785
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1786
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1787
+//  fjid -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1788
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1789
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1790
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1791
+// Returns buddy roster entry in userdata.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1792
+// Returns resource string in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1793
+// Recognizes as current "./res" and "res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1794
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1795
+// No full "jid/resource" syntax in defvalue - needs rw for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1796
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1797
+//  * make return value a custom struct { .bud, .res } instead of using userdata
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1798
+//  * merge with roster_bjid and use own flags in chkdata to signify types and resource allowed/required conditions
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1799
+gchar *cmdarg_check_roster_resource (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1800
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1801
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1802
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1803
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1804
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1805
+  if (!(error = cmdarg_check_nonspace(arg))) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1806
+    char  *fjid = arg -> value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1807
+    guint types = (guint) arg -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1808
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1809
+    if (fjid[0] == '.' && fjid[1] == JID_RESOURCE_SEPARATOR) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1810
+      // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1811
+      resource = fjid+2;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1812
+    } else if (!check_jid_syntax (fjid) && (resource = strchr (fjid, JID_RESOURCE_SEPARATOR))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1813
+      // valid jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1814
+      GSList *found;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1815
+      *resource = '\0'; // XXX needs rw
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1816
+      found = roster_find (fjid, jidsearch, types);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1817
+      if (found) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1818
+        bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1819
+        resource ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1820
+      } else
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1821
+        error = g_strdup_printf ("Jid <%s> is not in the roster.", fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1822
+    } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1823
+      // jid is invalid - let's consider it resource (XXX)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1824
+      resource = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1825
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1826
+    // resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1827
+    if (error == NULL && resource) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1828
+      if (bud == NULL) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1829
+        if (!current_buddy)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1830
+          error = g_strdup ("No buddy selected.");
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1831
+        else if (buddy_gettype (BUDDATA(current_buddy)) & types)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1832
           bud = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1833
+        else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1834
+          error = g_strdup_printf("Currently selected buddy is of wrong type.");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1835
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1836
+      if (bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1837
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1838
+        gboolean found = FALSE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1839
+        resources = buddy_getresources (bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1840
+        for (p_res = resources; p_res; p_res = g_slist_next(p_res)) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1841
+          if (!g_strcmp0 ((char*)p_res->data, resource))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1842
+            found = TRUE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1843
+          g_free (p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1844
+        }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1845
+        g_slist_free (resources);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1846
+        if (!found)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1847
+          error = g_strdup_printf ("No such resource <%s%c%s>...", buddy_getjid(bud), JID_RESOURCE_SEPARATOR, resource);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1848
+      }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1849
     }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1850
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1851
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1852
+  if (error) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1853
+    arg -> userdata  = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1854
+    arg -> value.arg = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1855
   } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1856
-    char *tmp;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1857
-    if (!check_jid_syntax(jidres) &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1858
-        (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1859
-      //Any other valid full jid
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1860
-      *tmp = '\0'; // for roster search by bare jid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1861
-      resource = tmp+1;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1862
-      GSList *roster_elt;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1863
-      roster_elt = roster_find(jidres, jidsearch,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1864
-          ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1865
+    arg -> userdata  = bud;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1866
+    arg -> value.arg = resource;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1867
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1868
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1869
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1870
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1871
+const cmdarg_type_t cmdarg_type_roster_resource = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1872
+  cmdarg_check_roster_resource,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1873
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1874
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1875
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1876
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1877
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1878
+//  name -> group bud
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1879
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1880
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1881
+// Returns buddy roster entry in value.bud.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1882
+// Recognizes as current ".".
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1883
+// Does not require freeing.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1884
+// XXX:
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1885
+//  * group, named "."?
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1886
+gchar *cmdarg_check_roster_group (cmdarg_t *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1887
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1888
+  gchar    *error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1889
+  gpointer group  = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1890
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1891
+  if (!(error = cmdarg_check_nonspace(arg))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1892
+    const char *name = arg -> value.arg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1893
+    if (!strcmp (name, ".")) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1894
+      if (current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1895
+        group = buddy_getgroup(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1896
+      else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1897
+        error = g_strdup("Unable to determine current group: "
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1898
+                         "no buddy selected.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1899
+    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1900
+      GSList *roster_elt = roster_find (name, namesearch, ROSTER_TYPE_GROUP);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1901
       if (roster_elt)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1902
-        bud = roster_elt->data;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1903
-      *tmp = JID_RESOURCE_SEPARATOR;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1904
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1905
-    if (!bud) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1906
-      //Resource for current buddy
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1907
-      if (current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1908
-        bud = BUDDATA(current_buddy);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1909
-      resource = jidres;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1910
+        group = buddy_getgroup(roster_elt->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1911
+      else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1912
+        error = g_strdup_printf("Group \"%s\" not found.", name);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1913
     }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1914
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1915
   
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1916
-  if (bud && buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1917
-    if (lock) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1918
-      GSList *resources, *p_res;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1919
-      gboolean found = FALSE;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1920
-      resources = buddy_getresources(bud);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1921
-      for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1922
-        if (!g_strcmp0((char*)p_res->data, resource))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1923
-          found = TRUE;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1924
-        g_free(p_res->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1925
+  arg -> value.bud = group;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1926
+  return error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1927
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1928
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1929
+const cmdarg_type_t cmdarg_type_roster_group = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1930
+  cmdarg_check_roster_group,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1931
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1932
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1933
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1934
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1935
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1936
+//  fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1937
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1938
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1939
+// Returns corrected fjid in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1940
+// Recognizes as current "." and "./res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1941
+// Requires freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1942
+// XXX:
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1943
+//  * g_strdup jid?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1944
+gchar *cmdarg_check_fjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1945
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1946
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1947
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1948
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1949
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1950
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1951
+    if (fjid[0] == '.' && (fjid[1] == JID_RESOURCE_SEPARATOR || fjid[1] == '\0')) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1952
+      const char *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1953
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1954
+        error = g_strdup_printf ("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1955
+      else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1956
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1957
+      } else if (fjid[1] == '\0') {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1958
+        arg -> value.roarg = jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1959
+      } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1960
+        arg -> value.arg = g_strdup_printf ("%s%c%s", jid, JID_RESOURCE_SEPARATOR, fjid + 2);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1961
+        arg -> flags    |= cmdarg_freeme;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1962
       }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1963
-      g_slist_free(resources);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1964
-      if (!found) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1965
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1966
-        return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1967
+    } else if (check_jid_syntax(fjid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1968
+      error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1969
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1970
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1971
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1972
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1973
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1974
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1975
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1976
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1977
+const cmdarg_type_t cmdarg_type_fjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1978
+  cmdarg_check_fjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1979
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1980
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1981
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1982
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1983
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1984
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1985
+//  fjid -> bjid
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1986
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1987
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1988
+// Returns corrected bjid in value.arg.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1989
+// Recognizes as current "." and "./res" (but still removes resource).
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1990
+// Needs RW access to trim the resource - no resources in default values!
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1991
+// Requires freeing (as fjid).
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1992
+gchar *cmdarg_check_bjid (cmdarg_t *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1993
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1994
+  gchar *error = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1995
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1996
+  if (!(error = cmdarg_check_fjid(arg))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1997
+    gchar *res = strchr (arg -> value.arg, JID_RESOURCE_SEPARATOR);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1998
+    if (res != NULL)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1999
+      *res = '\0';
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2000
+  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2001
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2002
+  if (error)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2003
+    arg -> value.arg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2004
+  return error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2005
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2006
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2007
+const cmdarg_type_t cmdarg_type_bjid = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2008
+  cmdarg_check_bjid,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2009
+  cmdarg_free_gfree,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2010
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2011
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2012
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2013
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2014
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2015
+//  string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2016
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2017
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2018
+// Returns unsigned integer in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2019
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2020
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2021
+//  * use gulong? (strtoul allows to check conversion errors, while atoi - not)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2022
+//  * use flags in chkdata to specify signedness - it only affects two checks
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2023
+gchar *cmdarg_check_uint (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2024
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2025
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2026
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2027
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2028
+    char *s = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2029
+    char *e = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2030
+    long n  = strtol(s, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2031
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2032
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2033
+    else if (n < 0)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2034
+      error = g_strdup ("Value must be greater than zero.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2035
+    else if (n > G_MAXUINT)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2036
+      error = g_strdup_printf ("Value %ld is too big.", n);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2037
+    else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2038
+      arg -> value.uint = (guint) n;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2039
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2040
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2041
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2042
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2043
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2044
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2045
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2046
+const cmdarg_type_t cmdarg_type_uint = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2047
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2048
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2049
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2050
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2051
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2052
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2053
+//  string -> statusmask
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2054
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2055
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2056
+// Strips/checks for any non-valid status chars in mask.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2057
+// Returns mask in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2058
+// Recognizes "*" as glob.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2059
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2060
+// No errors in default vaules - needs RW for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2061
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2062
+//  * check duplicates?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2063
+//    * string2flags?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2064
+//  * canonicize?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2065
+//    * string2enum?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2066
+//  * common strchr callback with valid chars in chkdata?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2067
+//    * Then argument name should go into cmdarg struct - message would be too generic
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2068
+gchar *cmdarg_check_statusmask (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2069
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2070
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2071
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2072
+  if (!(error = cmdarg_check_nonspace(arg)) && arg -> value.arg) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2073
+    const char *valid = "foand_?";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2074
+    if (!strcmp(arg -> value.arg, "*")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2075
+      arg -> value.arg = g_strdup (valid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2076
+      arg -> flags    |= cmdarg_freeme;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2077
+    } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2078
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2079
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2080
+      while (p < e) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2081
+        if (strchr (valid, *p)) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2082
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2083
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2084
+          // this is valid use of flag in checker
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2085
+          return g_strdup_printf ("%s can only contain characters [%s].", arg -> name, valid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2086
+        } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2087
+          scr_log_print (LPRINT_NORMAL, "Warning: Wrong %s character [%c]", arg -> name, *p);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2088
+          g_memmove (p, p+1, e-p-1);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2089
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2090
+        }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2091
       }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2092
-    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2093
-      resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2094
+      if (arg -> value.arg == e) // arg is not required and we deleted all string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2095
+        arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2096
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2097
-    buddy_setactiveresource(bud, resource);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2098
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2099
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2100
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2101
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2102
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2103
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2104
+const cmdarg_type_t cmdarg_type_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2105
+  cmdarg_check_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2106
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2107
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2108
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2109
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2110
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2111
+//  string -> enum
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2112
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2113
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2114
+// Uses chkdata as a pointer to continuous array of string2enum_t structs.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2115
+// Returns corresponding value in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2116
+// Returns 0 if not recognized and not required.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2117
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2118
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2119
+//  * also, print list of possible values on error?
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2120
+//  * default value on error?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2121
+gchar *cmdarg_check_string2enum (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2122
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2123
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2124
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2125
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2126
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2127
+    for (list = arg -> chkdata; list -> name != NULL; list ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2128
+      if (!strcmp(list -> name, arg -> value.arg)) { // found
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2129
+        arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2130
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2131
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2132
+    // not found, error
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2133
+    error = g_strdup_printf ("Value \"%s\" is invalid for %s.", arg -> value.arg, arg -> name);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2134
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2135
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2136
+  if (error)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2137
+    arg -> value.uint = 0;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2138
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2139
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2140
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2141
+const cmdarg_type_t cmdarg_type_string2enum = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2142
+  cmdarg_check_string2enum,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2143
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2144
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2145
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2146
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2147
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2148
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2149
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2150
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2151
+static const string2enum_t s2e_color[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2152
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2153
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2154
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2155
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2156
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2157
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2158
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2159
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2160
+  { NULL,      0  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2161
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2162
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2163
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2164
+// Returns color name in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2165
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2166
+// XXX
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2167
+//  * in fact, we can straight away do color parsing & allocate ccolor,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2168
+//    but to not break too much things, for now we'll wait with that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2169
+//    * that needs access to ncurses internals, so, probably, this will
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2170
+//      be better done, when moving related command definitions to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2171
+//      corresponding subsystems.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2172
+static gchar *cmdarg_check_color (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2173
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2174
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2175
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2176
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2177
+    char *color = arg -> value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2178
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2179
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2180
+      return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2181
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2182
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2183
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2184
+      color += 6;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2185
+    { // check names
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2186
+      const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2187
+      for (list = s2e_color; list -> name != NULL; list ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2188
+        if (!strcmp (list -> name, color))
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2189
+          return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2190
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2191
+    { // not found, check for numerical value
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2192
+      char *e = color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2193
+      long n  = strtol(color, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2194
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2195
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2196
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2197
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2198
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2199
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2200
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2201
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2202
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2203
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2204
+const cmdarg_type_t cmdarg_type_color = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2205
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2206
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2207
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2208
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2209
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2210
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2211
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2212
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2214
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
+// you also have to add it to cmd_init().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2217
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2218
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2219
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2220
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2221
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2222
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2223
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2224
+static void roster_buddylock(gpointer bud, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2225
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2226
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2227
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2228
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2229
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2233
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2234
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2235
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2236
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2237
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2238
 // (winId is a bare jid or NULL for the status window, in which case we
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2239
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2240
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2241
 static void display_and_free_note(struct annotation *note, const char *winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2242
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2243
   gchar tbuf[128];
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2244
@@ -755,41 +1317,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2245
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2246
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2247
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2248
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2249
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2250
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2253
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2254
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2255
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2256
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2257
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2258
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2259
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2260
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2261
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2262
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2268
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2269
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2270
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2272
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2273
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2274
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2275
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2276
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2277
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2278
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2279
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2280
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2281
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2282
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2285
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2286
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2288
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2289
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2290
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2291
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2292
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2293
       display_and_free_note(note, bjid);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2294
@@ -800,484 +1336,568 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2295
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2297
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2298
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2300
-inline static void roster_updown(int updown, char *nitems)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2301
+static gchar *do_roster (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2302
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2303
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2304
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2305
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2306
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2307
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2308
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2309
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2310
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2311
+  scmd_roster_item_lock, scmd_roster_item_unlock, scmd_roster_item_toggle_lock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2312
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2313
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2314
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2315
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2316
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2317
+#define SCMD_ROSTER(NAME, ARGS...) \
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2318
+    { #NAME, cmd_default, NULL, NULL, NULL, ARGS, NULL, (gpointer)scmd_roster_##NAME }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2319
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
+  "roster",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2321
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2322
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2323
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2325
+  (cmdarg_t[2]){{"subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL},{NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2326
+  (cmdopts_t[25]){
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2327
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2328
+    SCMD_ROSTER(top,    NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2329
+    SCMD_ROSTER(up,   (cmdarg_t[2]){{"n", cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2330
+    SCMD_ROSTER(down, (cmdarg_t[2]){{"n", cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2331
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2332
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2333
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2334
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2335
+    SCMD_ROSTER(unread_next,  NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2336
+    SCMD_ROSTER(search, (cmdarg_t[2]){{"name", cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_nonspace},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2337
+    SCMD_ROSTER(display, (cmdarg_t[2]){{"statusmask", cmdarg_check, NULL, &cmdarg_type_statusmask},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2338
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2339
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
+    SCMD_ROSTER(toggle_offline, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2341
+    SCMD_ROSTER(item_lock,        (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2342
+    SCMD_ROSTER(item_unlock,      (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2343
+    SCMD_ROSTER(item_toggle_lock, (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2344
+    { "note", cmd_default, NULL, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2345
+      (cmdopt_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2346
+        {'r', "reset", cmdopt_switch, {"reset", cmdarg_default, NULL, NULL, NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2347
+        {'j', "jid",  cmdopt_default, {"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT)}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2348
+        {0}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2349
+      },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2350
+      (cmdarg_t[2]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2351
+        {"text", cmdarg_eol, NULL, &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2352
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2353
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2354
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2355
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2356
+    SCMD_ROSTER(notes, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2357
+    SCMD_ROSTER(resource_lock,   (cmdarg_t[2]){{"resource|fjid", cmdarg_chreq, NULL, &cmdarg_type_roster_resource, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2358
+    SCMD_ROSTER(resource_unlock, (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2359
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2361
+    SCMD_ROSTER(toggle, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2362
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2363
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2364
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2365
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2366
+static gchar *do_roster(cmdopts_t *options)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2367
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2368
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2369
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2370
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2371
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2372
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2373
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2374
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2375
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2376
-    scr_roster_up_down(updown, nbitems);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2377
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2379
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2380
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2381
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2382
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2383
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2384
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2385
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2386
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2387
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2388
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2389
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2390
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2391
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2392
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2393
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2394
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2395
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2396
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2397
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2398
-  if (!strcasecmp(subcmd, "top")) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2399
+  scmd_roster_t subcmd = (scmd_roster_t) (options -> args[0].value.cmd -> userdata);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2400
+  cmdarg_t      *arg   = NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2401
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2402
+  if (options -> args[0].value.cmd -> args[0].name)
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2403
+    arg = options -> args[0].value.cmd -> args;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2404
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2405
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2406
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2407
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2408
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2409
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2410
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2411
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2412
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2413
+  } else if (subcmd == scmd_roster_up) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2414
+    scr_roster_up_down(-1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2415
+  } else if (subcmd == scmd_roster_down) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2416
+    scr_roster_up_down(1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2417
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2418
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2419
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2420
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2421
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2422
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2423
+  } else if (subcmd == scmd_roster_unread_first) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2424
+    scr_roster_unread_message(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2425
+  } else if (subcmd == scmd_roster_unread_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2426
+    scr_roster_unread_message(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2427
+  } else if (subcmd == scmd_roster_search) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2428
+    scr_roster_search(arg -> value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2429
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2430
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2431
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2432
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2433
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2434
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2435
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2436
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2437
+  } else if (subcmd == scmd_roster_display) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2438
+    scr_roster_display(arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2439
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2440
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2441
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2442
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2443
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2444
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2445
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2446
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2447
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2448
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2449
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2450
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2451
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2452
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2453
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2454
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2455
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2456
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2457
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2458
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2459
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2460
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2461
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2462
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2463
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2464
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2465
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2466
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2467
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2468
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2469
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2470
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2471
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2472
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2473
-      free_arg_lst(paramlst);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2474
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2475
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2476
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2477
-    update_roster = TRUE;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2478
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2479
-    roster_updown(-1, arg);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2480
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2481
-    roster_updown(1, arg);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2482
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2483
-    scr_roster_prev_group();
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2484
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2485
-    scr_roster_next_group();
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2486
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2487
-    roster_note(arg);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2488
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
-    roster_resourcelock(arg, TRUE);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2490
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2491
-    roster_resourcelock(arg, FALSE);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2492
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2493
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2494
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2495
+  } else if (subcmd == scmd_roster_item_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2496
+    roster_buddylock(arg -> value.bud, 1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2497
+  } else if (subcmd == scmd_roster_item_unlock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2498
+    roster_buddylock(arg -> value.bud, 0);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2499
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2500
+    roster_buddylock(arg -> value.bud, -1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2501
+  } else if (subcmd == scmd_roster_note) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2502
+    roster_note(options -> cmds[18].opts[1].arg.value.bud,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2503
+                options -> cmds[18].opts[0].arg.value.swc,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2504
+                arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2505
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2506
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2507
+  } else if (subcmd == scmd_roster_resource_lock) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2508
+    buddy_setactiveresource(arg -> userdata, arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2509
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2510
+  } else if (subcmd == scmd_roster_resource_unlock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2511
+    buddy_setactiveresource(arg -> value.bud, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2512
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2513
+  } else if (subcmd == scmd_roster_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2514
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2515
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2516
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2517
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2518
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2519
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2520
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2521
+  return NULL;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2522
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2523
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2524
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2525
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2526
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2527
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2528
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2529
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2530
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2531
+// statusmask + "clear"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2532
+static gchar *cmdarg_check_color_statusmask (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2533
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2534
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2535
-  char *subcmd;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2536
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2537
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2538
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2539
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2540
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2541
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2542
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2543
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2544
-    return;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2545
+  if (!g_strcmp0 (arg -> value.arg, "clear"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2546
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2547
+  else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2548
+    return cmdarg_check_statusmask (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2549
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2550
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2551
+static const cmdarg_type_t cmdarg_type_color_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2552
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2553
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2554
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2555
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2556
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2557
+// bjid + "*"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2558
+// Returns string, not buddy.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2559
+static gchar *cmdarg_check_color_roomjid (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2560
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2561
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2562
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2563
+  if (!g_strcmp0(arg -> value.arg, "*"))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2564
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2565
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2566
+  arg -> chkdata = (gpointer) ROSTER_TYPE_ROOM;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2567
+  if (!(error = cmdarg_check_roster_bjid (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2568
+    arg -> value.roarg = buddy_getjid (arg -> value.bud); // XXX strdup?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2569
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2570
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2571
-  if (!strcasecmp(subcmd, "roster")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2572
-    char *status, *wildcard, *color;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2573
-    char **arglist = split_arg(arg, 3, 0);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2574
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2575
-    status = *arglist;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2576
-    wildcard = to_utf8(arglist[1]);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2577
-    color = arglist[2];
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2578
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2579
-    if (status && !strcmp(status, "clear")) { // Not a color command, clear all
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2580
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2581
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2582
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2583
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2584
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2585
+static const cmdarg_type_t cmdarg_type_color_roomjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2586
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2587
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2588
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2589
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2590
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2591
+// TODO: completion, that says, which roster jids do match
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2592
+static const cmdarg_type_t cmdarg_type_bjidmask = {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2593
+  cmdarg_check_nonspace,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2594
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2595
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2596
+};
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2597
+
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2598
+// TODO: completion, based on current room nicks
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2599
+static const cmdarg_type_t cmdarg_type_nick = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2600
+  cmdarg_check_nonspace,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2601
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2602
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2603
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2604
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2605
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2606
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2607
+static gchar *do_color (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2608
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2609
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2610
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2611
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2612
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2613
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2614
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2615
+static const string2enum_t s2e_color_muc[] = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2616
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2617
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2618
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2619
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2620
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2621
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2622
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2623
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2624
+  "color",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2625
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2626
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2627
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2628
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2629
+  (cmdarg_t[2]){{ "subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL },{NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2630
+  (cmdopts_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2631
+    {"roster", cmd_default, NULL, NULL, NULL, (cmdarg_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2632
+        { "statusmask|clear", cmdarg_chreq,   NULL, &cmdarg_type_color_statusmask },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2633
+        { "jidmask",          cmdarg_default, NULL, &cmdarg_type_bjidmask         },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2634
+        { "color|-",          cmdarg_default, NULL, &cmdarg_type_color            },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2635
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2636
+      }, NULL, (gpointer)scmd_color_roster},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2637
+    {"muc", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2638
+        { "roomjid",         cmdarg_chreq, NULL, &cmdarg_type_color_roomjid },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2639
+        { "on|off|preset|-", cmdarg_chreq, "on", &cmdarg_type_string2enum, (gpointer)s2e_color_muc},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2640
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2641
+      }, NULL, (gpointer)scmd_color_muc},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2642
+    {"mucnick", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2643
+        { "nick",    cmdarg_chreq, NULL, &cmdarg_type_nick  },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2644
+        { "color|-", cmdarg_chreq, NULL, &cmdarg_type_color },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2645
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2646
+      }, NULL, (gpointer)scmd_color_mucnick},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2647
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2648
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2649
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2650
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2651
+static gchar *do_color (cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2652
+{
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2653
+  scmd_color_t subcmd = (scmd_color_t) options -> args[0].value.cmd -> userdata;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2654
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2655
+  if (subcmd == scmd_color_roster) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2656
+    const gchar *status   = options -> cmds[0].args[0].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2657
+    const gchar *wildcard = options -> cmds[0].args[1].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2658
+    const gchar *color    = options -> cmds[0].args[2].value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2659
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2660
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2661
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2662
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2663
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2664
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2665
+      if (!wildcard || !*wildcard || !color || !*color) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2666
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2667
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2668
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2669
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2670
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2671
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2672
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2673
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2674
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2675
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2676
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2677
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2678
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2679
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2680
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2681
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2682
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2683
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2684
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2685
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2686
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2687
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2688
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2689
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2690
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2691
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2692
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2693
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2694
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2695
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2696
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2697
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2698
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2699
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2700
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2701
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2702
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2703
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2704
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2705
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2706
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2707
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2708
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2709
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2710
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2711
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2712
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2713
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2714
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2715
+  } else if (subcmd == scmd_color_muc) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2716
+    scr_muc_color ( options -> cmds[1].args[0].value.arg,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2717
+                    options -> cmds[1].args[1].value.uint );
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2718
+  } else { // scmd_color_mucnick
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2719
+    scr_muc_nick_color( options -> cmds[2].args[0].value.arg,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2720
+                        options -> cmds[2].args[1].value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2721
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2722
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2723
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2724
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2725
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2726
-//  cmd_setstatus(recipient, arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2727
-// Set your Jabber status.
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2728
-// - if recipient is not NULL, the status is sent to this contact only
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2729
-// - arg must be "status message" (message is optional)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2730
-void cmd_setstatus(const char *recipient, const char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2731
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2732
+//  /status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2733
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2734
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2735
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2736
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2737
+// needs corresponding s2e in chkdata
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2738
+static gchar *cmdarg_check_status_status (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2739
 {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2740
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2741
-  char *status;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2742
-  char *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2743
-  enum imstatus st;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2744
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2745
-  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2746
-    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2747
-  // We do not return now, so that the status is memorized and used later...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2748
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2749
-  // It makes sense to reset autoaway before changing the status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2750
-  // (esp. for FIFO or remote commands) or the behaviour could be
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2751
-  // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2752
-  if (!recipient)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2753
-    scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2754
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2755
-  paramlst = split_arg(arg, 2, 1); // status, message
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2756
-  status = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2757
-  msg = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2758
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2759
-  if (!status) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2760
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2761
-    return;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2762
+  if (!g_strcmp0(arg -> value.arg, "message")) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2763
+    arg -> value.uint = xmpp_getstatus(); // Preserve current status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2764
+    return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2765
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2766
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2767
-  if      (!strcasecmp(status, IMSTATUS_OFFLINE))       st = offline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2768
-  else if (!strcasecmp(status, IMSTATUS_ONLINE))        st = available;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2769
-  else if (!strcasecmp(status, IMSTATUS_AVAILABLE))     st = available;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2770
-  else if (!strcasecmp(status, IMSTATUS_AWAY))          st = away;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2771
+  return cmdarg_check_string2enum (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2772
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2773
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2774
+static const cmdarg_type_t cmdarg_type_status_status = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2775
+  cmdarg_check_status_status,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2776
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2777
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2778
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2779
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2780
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2781
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2782
+static gchar *do_status (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2783
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2784
+static const string2enum_t s2e_status2[] = {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2785
+  { "away",      away        },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2786
+  { "offline",   offline     },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2787
+  { "online",    available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2788
+  { "avail",     available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2789
+  { "notavail",  notavail    },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2790
+  { "dnd",       dontdisturb },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2791
+  { "free",      freeforchat },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2792
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2793
-  else if (!strcasecmp(status, IMSTATUS_INVISIBLE))     st = invisible;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2794
+  { "invisible", invisible   },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2795
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2796
-  else if (!strcasecmp(status, IMSTATUS_DONOTDISTURB))  st = dontdisturb;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2797
-  else if (!strcasecmp(status, IMSTATUS_NOTAVAILABLE))  st = notavail;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2798
-  else if (!strcasecmp(status, IMSTATUS_FREE4CHAT))     st = freeforchat;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2799
-  else if (!strcasecmp(status, "message")) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2800
-    if (!msg || !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2801
-      // We want a message.  If there's none, we give up.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2802
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2803
-      free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2804
-      return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2805
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2806
-    st = xmpp_getstatus();  // Preserve current status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2807
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2808
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2809
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2810
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2811
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2812
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2813
-  // Use provided message
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2814
-  if (msg && !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2815
-    msg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2816
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2817
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2818
-  // If a recipient is specified, let's don't use default status messages
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2819
-  if (recipient && !msg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2820
-    msg = "";
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2821
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2822
-  xmpp_setstatus(st, recipient, msg, FALSE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2823
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2824
-  free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2825
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2826
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2827
-static void do_status(char *arg)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2828
+  // XXX ugly
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2829
+  { "show",      imstatus_size},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2830
+  { NULL,        0           },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2831
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2832
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2833
+static cmdopts_t def_status = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2834
+  "status",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2835
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2836
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2837
+  do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2838
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2839
+  (cmdarg_t[3]){
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2840
+    {"status",  cmdarg_chreq, "show", &cmdarg_type_status_status, (gpointer)s2e_status2},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2841
+    {"message", cmdarg_eol,   NULL,   &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2842
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2843
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2844
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2845
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2846
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2847
+static gchar *do_status (cmdopts_t *options)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2848
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2849
-  if (!*arg) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2850
+  if (options -> args[0].value.uint == imstatus_size) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2851
     const char *sm = xmpp_getstatusmsg();
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2852
     scr_LogPrint(LPRINT_NORMAL, "Your status is: [%c] %s",
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2853
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2854
                  (sm ? sm : ""));
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2855
-    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2856
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2857
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2858
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2859
+    scr_check_auto_away(TRUE);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2860
+    xmpp_setstatus(options -> args[0].value.uint, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2861
+                   options -> args[1].value.arg, FALSE);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2862
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2863
-  arg = to_utf8(arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2864
-  cmd_setstatus(NULL, arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2865
-  g_free(arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2866
+  return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2867
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2868
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2869
-static void do_status_to(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2870
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2871
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2872
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2873
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2874
+static gchar *do_status_to (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2875
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2876
+// no "show" here
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2877
+static const string2enum_t s2e_status[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2878
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2879
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2880
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2881
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2882
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2883
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2884
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2885
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2886
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2887
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2888
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2889
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2890
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2891
+static cmdopts_t def_status_to = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2892
+  "status_to",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2893
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2894
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2895
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2896
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2897
+  (cmdarg_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2898
+    {"jid",     cmdarg_chreq, NULL, &cmdarg_type_fjid},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2899
+    {"status",  cmdarg_chreq, NULL, &cmdarg_type_status_status, (gpointer)s2e_status},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2900
+    {"message", cmdarg_eol,   NULL, &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2901
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2902
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2903
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2904
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2905
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2906
+static gchar *do_status_to (cmdopts_t *options)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2907
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2908
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2909
-  char *fjid, *st, *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2910
-  char *jid_utf8 = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2911
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2912
-  paramlst = split_arg(arg, 3, 1); // jid, status, [message]
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2913
-  fjid = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2914
-  st = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2915
-  msg = *(paramlst+2);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2916
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2917
-  if (!fjid || !st) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2918
-    scr_LogPrint(LPRINT_NORMAL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2919
-                 "Please specify both a Jabber ID and a status.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2920
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2921
-    return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2922
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2923
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2924
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2925
+  fjid = options -> args[0].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2926
+  st   = options -> args[1].value.uint;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2927
+  msg  = options -> args[2].value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2928
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2929
+  { // get status name
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2930
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2931
+    for (list = s2e_status; list -> name != NULL; list ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2932
+      if (list -> value == st) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2933
+        stname = list -> name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2934
+        break;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2935
+      }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2936
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2937
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2938
-  // Allow things like /status_to "" away
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2939
-  if (!*fjid || !strcmp(fjid, "."))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2940
-    fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2941
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2942
-  if (fjid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2943
-    // The JID has been specified.  Quick check...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2944
-    if (check_jid_syntax(fjid)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2945
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2946
-                   "<%s> is not a valid Jabber ID.", fjid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2947
-      fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2948
-    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2949
-      // Convert jid to lowercase
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2950
-      char *p = fjid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2951
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2952
-        *p = tolower(*p);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2953
-      fjid = jid_utf8 = to_utf8(fjid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2954
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2955
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2956
-    // Add the current buddy
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2957
-    if (current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2958
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2959
-    if (!fjid)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2960
-      scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2961
+  // prevent default status message
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2962
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2963
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2964
+  scr_LogPrint(LPRINT_LOGNORM, 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2965
+               "Sending to <%s> /status %s %s", fjid, stname, msg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2966
+  if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2967
+    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2968
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2969
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2970
+  return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2971
+}
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2972
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2973
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2974
+//  /add
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2975
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2976
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2977
+static gchar *do_add (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2978
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2979
+static cmdopts_t def_add = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2980
+  "add",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2981
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2982
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2983
+  do_add,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2984
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2985
+  (cmdarg_t[3]){
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2986
+    {"jid",  cmdarg_chreq,   ".",  &cmdarg_type_bjid},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2987
+    {"name", cmdarg_default, NULL, &cmdarg_type_nonspace},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2988
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2989
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2990
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2991
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2992
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2993
+static gchar *do_add (cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2994
+{
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2995
+  gchar *jid = options -> args[0].value.arg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2996
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2997
+  // XXX
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2998
+  //mc_strtolower(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2999
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3000
+  xmpp_addbuddy(jid, options -> args[1].value.arg, NULL);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3001
+  scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3002
+               jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3003
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3004
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3005
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3006
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3007
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3008
+//  /del
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3009
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3010
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3011
+static gchar *do_del (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3012
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3013
+static cmdopts_t def_del = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3014
+  "del",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3015
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3016
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3017
+  do_del,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3018
+  (cmdopt_t[2]){
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3019
+    {'n', "dryrun", cmdopt_switch, {"dryrun", cmdarg_default, NULL, NULL}},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3020
+    {0}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3021
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3022
+  (cmdarg_t[2]){
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3023
+    {"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_GROUP)},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3024
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3025
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3026
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3027
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3028
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3029
+static gchar *do_del (cmdopts_t *options)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3030
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3031
+  gpointer   buddy = options -> args[0].value.bud;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3032
+  const char *jid  = buddy_getjid (buddy);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3033
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3034
+  if (buddy_gettype(buddy) & ROSTER_TYPE_ROOM)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3035
+    // This is a chatroom
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3036
+    if (buddy_getinsideroom(buddy))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3037
+      return g_strdup ("You haven't left this room!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3038
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3039
+  scr_LogPrint(LPRINT_LOGNORM, "Removing <%s>...", jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3040
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3041
+  if (!(options -> opts[0].arg.value.swc)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3042
+    // Close the buffer
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3043
+    scr_buffer_purge(1, jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3044
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3045
+    xmpp_delbuddy(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3046
+    scr_update_buddy_window();
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3047
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3048
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3049
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3050
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3051
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3052
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3053
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3054
-    cmdline = g_strdup_printf("%s %s", st, msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3055
-    scr_LogPrint(LPRINT_LOGNORM, "Sending to <%s> /status %s", fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3056
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3057
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3058
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3059
-    g_free(jid_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3060
-  }
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3061
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3062
+  return NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3063
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3064
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3065
-static void do_add(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3066
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3067
+//  /group
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3068
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3069
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3070
+static void group_cmd (gpointer group, scmd_group_t action) 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3071
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3072
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3073
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3074
-  char *jid_utf8 = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3075
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3076
-  if (!xmpp_is_online()) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3077
-    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3078
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3079
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3080
-
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3081
-  paramlst = split_arg(arg, 2, 0); // jid, [nickname]
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3082
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3083
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3084
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3085
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3086
-    nick = NULL; // Allow things like: /add "" nick
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3087
-  else if (!*id || !strcmp(id, "."))
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3088
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3089
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3090
-  if (id) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3091
-    // The JID has been specified.  Quick check...
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3092
-    if (check_jid_syntax(id)) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3093
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3094
-                   "<%s> is not a valid Jabber ID.", id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3095
-      id = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3096
-    } else {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3097
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3098
-      id = jid_utf8 = to_utf8(id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3099
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3100
-  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3101
-    // Add the current buddy
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3102
-    if (current_buddy)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3103
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3104
-    if (!id)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3105
-      scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3106
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3107
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3108
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3109
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3110
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3111
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3112
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3113
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3114
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3115
-                 id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3116
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3117
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3118
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3119
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3120
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3121
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3122
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3123
-static void do_del(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3124
-{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3125
-  const char *bjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3126
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3127
-  if (*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3128
-    scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter; "
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3129
-                 "the currently-selected buddy will be deleted.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3130
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3131
-  }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3132
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3133
-  if (!current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3134
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3135
-  bjid = buddy_getjid(BUDDATA(current_buddy));
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3136
-  if (!bjid)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3137
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3138
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3139
-  if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_ROOM) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3140
-    // This is a chatroom
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3141
-    if (buddy_getinsideroom(BUDDATA(current_buddy))) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3142
-      scr_LogPrint(LPRINT_NORMAL, "You haven't left this room!");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3143
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3144
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3145
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3146
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3147
-  // Close the buffer
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3148
-  scr_buffer_purge(1, NULL);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3149
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3150
-  scr_LogPrint(LPRINT_LOGNORM, "Removing <%s>...", bjid);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3151
-  xmpp_delbuddy(bjid);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3152
-  scr_update_buddy_window();
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3153
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3154
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3155
-static void do_group(char *arg)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3156
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3157
-  gpointer group = NULL;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3158
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3159
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3160
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3161
-  enum { group_toggle = -1, group_unfold = 0, group_fold = 1 } group_state = 0;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3162
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3163
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3164
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3165
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3166
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3167
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3168
-  if (!current_buddy)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3169
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3170
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3171
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3172
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3173
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3174
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3175
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3176
-    goto do_group_return;   // Should not happen
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3177
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3178
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3179
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3180
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3181
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3182
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3183
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3184
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3185
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3186
-    goto do_group_return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3187
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3188
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3189
-  if (arg && *arg) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3190
-    GSList *roster_elt;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3191
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3192
-    roster_elt = roster_find(group_utf8, namesearch, ROSTER_TYPE_GROUP);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3193
-    g_free(group_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3194
-    if (roster_elt)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3195
-      group = buddy_getgroup(roster_elt->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3196
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3197
-    group = buddy_getgroup(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3198
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3199
-  if (!group) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3200
-    scr_LogPrint(LPRINT_NORMAL, "Group not found.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3201
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3202
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3203
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3204
   // We'll have to redraw the chat window if we're not currently on the group
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3205
   // entry itself, because it means we'll have to leave the current buddy
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3206
   // chat window.
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3207
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3208
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3209
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3210
-  if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3211
-    scr_LogPrint(LPRINT_NORMAL, "You need to select a group.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3212
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3213
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3214
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3215
-  if (group_state != group_unfold && leave_buddywindow)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3216
+  if (action != scmd_group_unfold &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3217
+      ((!current_buddy) ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3218
+       (group != BUDDATA(current_buddy) &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3219
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3220
     scr_roster_prev_group();
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3221
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3222
-  buddy_hide_group(group, group_state);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3223
+  buddy_hide_group(group, action);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3224
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3225
   buddylist_build();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3226
   update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3227
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3228
-do_group_return:
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3229
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3230
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3231
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3232
+static gchar *do_group (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3233
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3234
+static const string2enum_t s2e_group_scmd[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3235
+  {"expand", scmd_group_unfold},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3236
+  {"unfold", scmd_group_unfold},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3237
+  {"shrink", scmd_group_fold  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3238
+  {"fold",   scmd_group_fold  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3239
+  {"toggle", scmd_group_toggle},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3240
+  {NULL,     0                },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3241
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3242
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3243
+#define SCMD_GROUP(NAME, REALNAME) \
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3244
+    { #NAME, cmd_default, NULL, NULL, NULL, NULL, NULL, \
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3245
+      (gpointer)scmd_group_##REALNAME}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3246
+static cmdopts_t def_group = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3247
+  "group",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3248
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3249
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3250
+  do_group,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3251
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3252
+  (cmdarg_t[3]){
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3253
+    {"subcommand", cmdarg_chreq,            NULL, &cmdarg_type_string2enum,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3254
+                                                  (gpointer)s2e_group_scmd},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3255
+    {"group",      cmdarg_chreq|cmdarg_eol, ".",  &cmdarg_type_roster_group},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3256
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3257
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3258
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3259
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3260
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3261
+static gchar *do_group(cmdopts_t *options)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3262
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3263
+  //if (!current_buddy) // XXX do we need this still?
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3264
+  //  return g_strdup("Command needs selected buddy.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3265
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3266
+  group_cmd (options -> args[0].value.bud,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3267
+             options -> args[1].value.uint);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3268
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3269
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3270
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3271
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3272
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3273
+//  /say
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3274
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3275
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3276
 static int send_message_to(const char *fjid, const char *msg, const char *subj,
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3277
-                           LmMessageSubType type_overwrite, bool quiet)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3278
+                           msgtype_t msg_type, bool quiet)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3279
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3280
   char *bare_jid, *rp;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3281
   char *hmsg;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3282
@@ -1285,6 +1905,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3283
   gint retval = 0;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3284
   int isroom;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3285
   gpointer xep184 = NULL;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3286
+  LmMessageSubType type_overwrite = LM_MESSAGE_SUB_TYPE_NOT_SET;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3287
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3288
   if (!xmpp_is_online()) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3289
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3290
@@ -1299,11 +1920,15 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3291
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3292
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3293
   if (check_jid_syntax((char*)fjid)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3294
-    scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3295
-                 "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3296
+    scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3297
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3298
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3299
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3300
+  if (msg_type == msgtype_normal)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3301
+    type_overwrite = LM_MESSAGE_SUB_TYPE_NORMAL;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3302
+  else if (msg_type == msgtype_headline)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3303
+    type_overwrite = LM_MESSAGE_SUB_TYPE_HEADLINE;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3304
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3305
   // We must use the bare jid in hk_message_out()
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3306
   rp = strchr(fjid, JID_RESOURCE_SEPARATOR);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3307
   if (rp)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3308
@@ -1354,8 +1979,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3309
 //  send_message(msg, subj, type_overwrite)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3310
 // Write the message in the buddy's window and send the message on
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3311
 // the network.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3312
-static void send_message(const char *msg, const char *subj,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3313
-                         LmMessageSubType type_overwrite)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3314
+static void send_message(const char *msg, const char *subj, msgtype_t msgtype)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3315
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3316
   const char *bjid;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3317
   char *jid;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3318
@@ -1378,34 +2002,13 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3319
   else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3320
     jid = g_strdup(bjid);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3321
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3322
-  send_message_to(jid, msg, subj, type_overwrite, FALSE);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3323
+  send_message_to(jid, msg, subj, msgtype, FALSE);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3324
   g_free(jid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3325
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3326
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3327
-static LmMessageSubType scan_mtype(char **arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3328
-{
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3329
-  // Try splitting it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3330
-  char **parlist = split_arg(*arg, 2, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3331
-  LmMessageSubType result = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3332
-  // Is it a good parameter?
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3333
-  if (parlist && *parlist) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3334
-    if (!strcmp("-n", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3335
-      result = LM_MESSAGE_SUB_TYPE_NORMAL;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3336
-    } else if (!strcmp("-h", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3337
-      result = LM_MESSAGE_SUB_TYPE_HEADLINE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3338
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3339
-    if (result != LM_MESSAGE_SUB_TYPE_NOT_SET || (!strcmp("--", *parlist)))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3340
-      *arg += strlen(*arg) - (parlist[1] ? strlen(parlist[1]) : 0);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3341
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3342
-  // Anything found? -> skip it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3343
-  free_arg_lst(parlist);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3344
-  return result;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3345
-}
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3346
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3347
-void say_cmd(char *arg, int parse_flags)
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3348
+void say_cmd(char *arg, msgtype_t msgtype)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3349
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3350
   gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3351
-  LmMessageSubType msgtype = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3352
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3353
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3354
   scr_show_buddy_window();
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3355
@@ -1424,80 +2027,133 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3356
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3357
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3358
   buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3359
-  if (parse_flags)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3360
-    msgtype = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3361
-  arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3362
   send_message(arg, NULL, msgtype);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3363
-  g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3364
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3365
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3366
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3367
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3368
 static void do_say(char *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3369
-  say_cmd(arg, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3370
+  cmdopts_t options = {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3371
+    "say",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3372
+    (cmdopt_t[2]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3373
+      { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3374
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3375
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3376
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3377
+      { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_REQUIRED | CMDOPT_LAST,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3378
+        { .arg = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3379
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3380
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3381
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3382
+  msgtype_t msgtype = msgtype_not_set;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3383
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3384
+  if (cmdopts_parse(arg, &options))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3385
+    return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3386
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3387
+  if (options.opts[0].value.swc)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3388
+    msgtype = msgtype_normal;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3389
+  else if (options.opts[1].value.swc)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3390
+    msgtype = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3391
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3392
+  say_cmd(options.args[0].value.arg, msgtype);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3393
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3394
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3395
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3396
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3397
 static void do_msay(char *arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3398
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3399
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3400
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3401
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3402
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3403
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3404
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3405
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3406
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3407
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3408
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3409
-    scr_LogPrint(LPRINT_NORMAL, "Please read the manual before using "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3410
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3411
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3412
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3413
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3414
+  enum msay_scmd_t {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3415
+    msay_scmd_begin, msay_scmd_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3416
+    msay_scmd_send, msay_scmd_send_to,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3417
+    msay_scmd_toggle, msay_scmd_toggle_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3418
+    msay_scmd_abort,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3419
+  } subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3420
+  cmdopts_t options = {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3421
+    "msay",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3422
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3423
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3424
+      // subcommand
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3425
+      { CMDOPT_SUBCOMMAND | CMDOPT_REQUIRED | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3426
+    },
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3427
+    (cmdopts_t[7]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3428
+      { "begin", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3429
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3430
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3431
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3432
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3433
+        NULL, (gpointer)msay_scmd_begin, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3434
+      { "verbatim", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3435
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3436
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3437
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3438
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3439
+        NULL, (gpointer)msay_scmd_verbatim, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3440
+      { "send",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3441
+        (cmdopt_t[2]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3442
+          { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3443
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3444
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3445
+        NULL, NULL, (gpointer)msay_scmd_send, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3446
+      { "send_to",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3447
+        (cmdopt_t[2]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3448
+          { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3449
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3450
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3451
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3452
+          // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3453
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3454
+        }, 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3455
+        NULL, (gpointer)msay_scmd_send_to, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3456
+      { "toggle", NULL, NULL, NULL, (gpointer)msay_scmd_toggle, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3457
+      { "toggle_verbatim", NULL, NULL, NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3458
+        (gpointer)msay_scmd_toggle_verbatim, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3459
+      { "abort", NULL, NULL, NULL, (gpointer)msay_scmd_abort, CMDOPT_LAST },
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3460
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3461
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3462
+  const char *msg;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3463
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3464
+  if (cmdopts_parse(arg, &options))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3465
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3466
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3467
+  subcmd = (enum msay_scmd_t) options.args[0].value.cmd -> userdata;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3468
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3469
+  if (subcmd == msay_scmd_toggle) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3470
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3471
+      subcmd = msay_scmd_send;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3472
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3473
+      subcmd = msay_scmd_begin;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3474
+  } else if (subcmd == msay_scmd_toggle_verbatim) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3475
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3476
+      subcmd = msay_scmd_send;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3477
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3478
+      subcmd = msay_scmd_verbatim;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3479
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3480
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3481
-  if (!strcasecmp(subcmd, "toggle")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3482
-    if (scr_get_multimode())
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3483
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3484
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3485
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3486
-  } else if (!strcasecmp(subcmd, "toggle_verbatim")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3487
-    if (scr_get_multimode())
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3488
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3489
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3490
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3491
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3492
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3493
-  if (!strcasecmp(subcmd, "abort")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3494
+  if (subcmd == msay_scmd_abort) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3495
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3496
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3497
     scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3498
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3499
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3500
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3501
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3502
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3503
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3504
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3505
-      verbat = TRUE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3506
+  } else if (subcmd == msay_scmd_begin || subcmd == msay_scmd_verbatim) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3507
+    gchar *subject = options.args[0].value.cmd -> args[0].value.arg;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3508
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3509
+    if (subcmd == msay_scmd_verbatim) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3510
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3511
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3512
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3513
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3514
+      scr_set_multimode(1, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3515
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3516
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3517
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3518
-                 verbat ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3519
+                 subcmd == msay_scmd_verbatim ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3520
     scr_LogPrint(LPRINT_NORMAL, "Select a buddy and use \"%s send\" "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3521
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3522
-    if (verbat)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3523
+    if (subcmd == msay_scmd_verbatim)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3524
       scr_LogPrint(LPRINT_NORMAL, "Use \"%s abort\" to abort this mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3525
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3526
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3527
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3528
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3529
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3530
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3531
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3532
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3533
-  /* send/send_to command */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3534
+  /* msay_scmd_send or msay_scmd_send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3535
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3536
   if (!scr_get_multimode()) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3537
     scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3538
@@ -1508,49 +2164,47 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3539
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3540
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3541
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3542
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3543
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3544
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3545
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3546
-    // Let's send to the specified JID.  We leave now if there
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3547
-    // has been an error (so we don't leave multi-line mode).
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3548
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3549
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3550
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3551
-      err = send_message_to(arg, msg_utf8, scr_get_multimode_subj(), msg_type,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3552
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3553
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3554
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3555
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3556
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3557
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3558
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3559
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3560
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3561
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3562
-    if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3563
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3564
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3565
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3566
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3567
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3568
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3569
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3570
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3571
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3572
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3573
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3574
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3575
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3576
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3577
-      send_message(msg_utf8, scr_get_multimode_subj(), scan_mtype(&arg));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3578
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3579
+  if ((msg = scr_get_multiline())) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3580
+    msgtype_t msg_type = msgtype_not_set;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3581
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3582
+    if (options.args[0].value.cmd -> opts[0].value.swc) // n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3583
+      msg_type = msgtype_normal;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3584
+    else if (options.args[0].value.cmd -> opts[1].value.swc) // h
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3585
+      msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3586
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3587
+    if (subcmd == msay_scmd_send_to) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3588
+      const char *jid = options.cmds[3].args[0].value.arg;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3589
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3590
+      // Let's send to the specified JID.  We leave now if there
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3591
+      // has been an error (so we don't leave multi-line mode).
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3592
+      if (send_message_to(jid, msg, scr_get_multimode_subj(),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3593
+                          msg_type, FALSE))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3594
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3595
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3596
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3597
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3598
+      if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3599
+        scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3600
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3601
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3602
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3603
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3604
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3605
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3606
+        scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3607
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3608
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3609
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3610
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3611
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3612
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3613
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3614
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3615
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3616
   scr_LogPrint(LPRINT_NORMAL, "You have left multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3617
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3618
 do_msay_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3619
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3620
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3621
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3622
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3623
 //  load_message_from_file(filename)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3624
@@ -1566,7 +2220,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3625
   char *next_utf8_char;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3626
   size_t len;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3627
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3628
-  fd = fopen(filename, "r");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3629
+  fd = fopen(filename, "r"); // FIXME g_from_utf8
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3630
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3631
   if (!fd || fstat(fileno(fd), &buf)) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3632
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3633
@@ -1634,130 +2288,103 @@
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3634
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3635
 static void do_say_to(char *arg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3636
 {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3637
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3638
-  char *fjid, *msg_utf8;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3639
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3640
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3641
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3642
-  char *file = NULL;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3643
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3644
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3645
-  bool eval = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3646
+  cmdopts_t options = {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3647
+    "say_to",
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3648
+    (cmdopt_t[5]){
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3649
+      { CMDOPT_SWITCH, 'n', "normal",   { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3650
+      { CMDOPT_SWITCH, 'h', "headline", { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3651
+      { CMDOPT_SWITCH, 'e', "escapes",  { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3652
+      { CMDOPT_SWITCH, 'q', "quiet",    { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3653
+      { CMDOPT_LAST,   'f', "file",     { .opt = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3654
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3655
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3656
+      // jid
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3657
+      { CMDOPT_REQUIRED,                              { .arg = NULL } },
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3658
+      // message
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3659
+      { CMDOPT_LAST | CMDOPT_PLAIN | CMDOPT_CATCHALL, { .arg = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3660
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3661
+    NULL,
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3662
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3663
+  char *fjid, *msg, *file;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3664
+  gchar *freeme  = NULL; // fjid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3665
+  gchar *freeme2 = NULL; // msg
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3666
+  msgtype_t msg_type = msgtype_not_set;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3667
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3668
   if (!xmpp_is_online()) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3669
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3670
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3671
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3672
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3673
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3674
-  paramlst = split_arg(arg, 2, 1); // jid, message (or option, jid, message)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3675
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3676
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3677
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3678
-    free_arg_lst(paramlst);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3679
+  if (cmdopts_parse(arg, &options))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3680
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3681
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3682
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3683
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3684
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3685
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3686
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3687
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3688
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3689
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3690
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3691
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3692
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3693
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3694
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3695
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3696
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3697
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3698
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3699
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3700
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3701
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3702
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3703
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3704
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3705
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3706
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3707
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3708
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3709
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3710
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3711
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3712
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3713
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3714
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3715
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3716
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3717
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3718
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3719
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3720
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3721
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3722
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3723
+  if (options.opts[0].value.swc) // n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3724
+    msg_type = msgtype_normal;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3725
+  else if (options.opts[1].value.swc) // h
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3726
+    msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3727
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3728
+  fjid = options.args[0].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3729
+  msg  = options.args[1].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3730
+  file = options.opts[4].value.opt;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3731
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3732
+  // ideally, this should go to commandline parsing subsystem
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3733
   if (fjid[0] == '.') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3734
     const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3735
     if (fjid[1] == '\0') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3736
-      fjid = g_strdup(cjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3737
+      fjid = (char *)cjid; // FIXME
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3738
     } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3739
       char *res_utf8 = to_utf8(fjid+2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3740
-      fjid = g_strdup_printf("%s%c%s", cjid, JID_RESOURCE_SEPARATOR, res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3741
+      freeme = fjid = g_strdup_printf("%s%c%s", cjid, JID_RESOURCE_SEPARATOR, res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3742
       g_free(res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3743
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3744
-      fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3745
-  } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3746
-    fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3747
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3748
+    }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3749
+  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3750
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3751
+  // ditto
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3752
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3753
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3754
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3755
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3756
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3757
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3758
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3759
         fjid = g_strdup_printf("%s%c%s%c%s", fjid, JID_DOMAIN_SEPARATOR, append_server,
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3760
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3761
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3762
         fjid = g_strdup_printf("%s%c%s", fjid, JID_DOMAIN_SEPARATOR, append_server);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3763
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3764
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3765
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3766
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3767
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3768
+  // as well
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3769
   if (check_jid_syntax(fjid)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3770
     scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3771
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3772
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3773
-    g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3774
+    g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3775
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3776
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3777
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3778
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3779
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3780
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3781
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3782
+  if (file == NULL) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3783
+    if (options.opts[2].value.swc) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3784
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3785
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3786
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3787
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3788
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3789
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3790
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3791
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3792
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3793
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3794
   } else {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3795
     char *filename_xp;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3796
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3797
       scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3798
     filename_xp = expand_filename(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3799
-    msg = msg_utf8 = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3800
+    freeme2 = msg = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3801
     g_free(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3802
-    g_free(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3803
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3804
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3805
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3806
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3807
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3808
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3809
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3810
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3811
-  free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3812
+  send_message_to(fjid, msg, NULL, msg_type, options.opts[3].value.swc);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3813
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3814
+  cmdopts_free(&options);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3815
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3816
+  g_free(freeme2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3817
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3818
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3819
 //  buffer_updown(updown, nblines)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3820
@@ -1775,27 +2402,10 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3821
     scr_buffer_scroll_up_down(updown, nblines);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3822
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3823
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3824
-static void buffer_search(int direction, char *arg)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3825
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3826
-  if (!arg || !*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3827
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3828
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3829
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3830
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3831
-  scr_buffer_search(direction, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3832
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3833
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3834
 static void buffer_date(char *date)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3835
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3836
   time_t t;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3837
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3838
-  if (!date || !*date) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3839
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3840
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3841
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3842
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3843
-  strip_arg_special_chars(date);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3844
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3845
   t = from_iso8601(date, 0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3846
   if (t)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3847
     scr_buffer_date(t);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3848
@@ -1804,98 +2414,156 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3849
                  "not correctly formatted or invalid.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3850
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3851
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3852
-static void buffer_percent(char *arg1, char *arg2)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3853
+// XXX % command before was able to handle %50
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3854
+static void do_buffer(char *arg)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3855
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3856
-  // Basically, user has typed "%arg1 arg2"
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3857
-  // "%50"  -> arg1 = 50, arg2 null pointer
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3858
-  // "% 50" -> arg1 = \0, arg2 = 50
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3859
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3860
-  if (!*arg1 && (!arg2 || !*arg2)) { // No value
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3861
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3862
+  enum buffer_scmd_t {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3863
+    buffer_scmd_close, buffer_scmd_close_all,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3864
+    buffer_scmd_clear, buffer_scmd_purge,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3865
+    buffer_scmd_list,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3866
+    buffer_scmd_top, buffer_scmd_bottom, buffer_scmd_up, buffer_scmd_down,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3867
+    buffer_scmd_date, buffer_scmd_percent, buffer_scmd_readmark,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3868
+    buffer_scmd_search_backward, buffer_scmd_search_forward,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3869
+    buffer_scmd_scroll_lock, buffer_scmd_scroll_unlock,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3870
+    buffer_scmd_scroll_toggle,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3871
+    buffer_scmd_save,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3872
+  } subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3873
+  cmdopts_t options = {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3874
+    "buffer",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3875
+    NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3876
+    (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3877
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3878
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3879
+    (cmdopts_t[18]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3880
+      { "close",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3881
+        (cmdopt_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3882
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'a', "all", { .swc = 0 } }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3883
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3884
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3885
+          { CMDOPT_LAST, { .cmd = NULL } } // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3886
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3887
+        NULL, (gpointer)buffer_scmd_close, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3888
+      { "close_all", NULL, NULL, NULL, (gpointer)buffer_scmd_close_all, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3889
+      { "clear", NULL, NULL, NULL, (gpointer)buffer_scmd_clear, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3890
+      { "purge", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3891
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3892
+          { CMDOPT_LAST, { .arg = NULL } }, // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3893
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3894
+        NULL, (gpointer)buffer_scmd_purge, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3895
+      { "list", NULL, NULL, NULL, (gpointer)buffer_scmd_list, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3896
+      { "top", NULL, NULL, NULL, (gpointer)buffer_scmd_top, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3897
+      { "bottom", NULL, NULL, NULL, (gpointer)buffer_scmd_bottom, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3898
+      { "up", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3899
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3900
+          { CMDOPT_LAST, { .arg = NULL } }, // lines
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3901
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3902
+        NULL, (gpointer)buffer_scmd_up, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3903
+      { "down", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3904
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3905
+          { CMDOPT_LAST, { .arg = NULL } }, // lines
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3906
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3907
+        NULL, (gpointer)buffer_scmd_down, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3908
+      { "date", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3909
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3910
+          // date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3911
+          { CMDOPT_CATCHALL | CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = "1" } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3912
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3913
+        NULL, (gpointer)buffer_scmd_date, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3914
+      { "%", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3915
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3916
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = "100" } }, // percent
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3917
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3918
+        NULL, (gpointer)buffer_scmd_percent, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3919
+      { "readmark", NULL, NULL, NULL, (gpointer)buffer_scmd_readmark, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3920
+      { "search_backward", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3921
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3922
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_LAST,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3923
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3924
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3925
+        NULL, (gpointer)buffer_scmd_search_backward, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3926
+      { "search_forward", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3927
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3928
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_LAST,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3929
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3930
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3931
+        NULL, (gpointer)buffer_scmd_search_forward, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3932
+      { "scroll_lock", NULL, NULL, NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3933
+        (gpointer)buffer_scmd_scroll_lock, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3934
+      { "scroll_unlock", NULL, NULL, NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3935
+        (gpointer)buffer_scmd_scroll_unlock, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3936
+      { "scroll_toggle", NULL, NULL, NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3937
+        (gpointer)buffer_scmd_scroll_toggle, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3938
+      { "save", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3939
+        (cmdarg_t[1]){
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3940
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3941
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3942
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3943
+        NULL, (gpointer)buffer_scmd_save, CMDOPT_LAST },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3944
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3945
+  };
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3946
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3947
+  if (!current_buddy)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3948
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3949
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3950
+  if (cmdopts_parse(arg, &options))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3951
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3952
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3953
+  subcmd = (enum buffer_scmd_t) options.args[0].value.cmd -> userdata;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3954
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3955
+  if (subcmd == buffer_scmd_close && options.cmds[0].opts[0].value.swc)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3956
+    subcmd = buffer_scmd_close_all;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3957
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3958
+  if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP &&
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3959
+      subcmd != buffer_scmd_close_all) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3960
+    scr_LogPrint(LPRINT_NORMAL, "Groups have no buffer.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3961
+    cmdopts_free(&options);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3962
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3963
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3964
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3965
-  if (*arg1 && arg2 && *arg2) {     // Two values
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3966
-    scr_LogPrint(LPRINT_NORMAL, "Wrong parameters.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3967
-    return;
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3968
+  if (subcmd == buffer_scmd_close) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3969
+    scr_buffer_purge(1, options.cmds[0].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3970
+  } else if (subcmd == buffer_scmd_close_all) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3971
+    scr_buffer_purge_all(1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3972
+  } else if (subcmd == buffer_scmd_clear) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3973
+    scr_buffer_clear();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3974
+  } else if (subcmd == buffer_scmd_purge) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3975
+    scr_buffer_purge(0, options.cmds[3].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3976
+  } else if (subcmd == buffer_scmd_list) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3977
+    scr_buffer_list();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3978
+  } else if (subcmd == buffer_scmd_top) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3979
+    scr_buffer_top_bottom(-1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3980
+  } else if (subcmd == buffer_scmd_bottom) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3981
+    scr_buffer_top_bottom(1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3982
+  } else if (subcmd == buffer_scmd_up) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3983
+    buffer_updown(-1, options.cmds[7].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3984
+  } else if (subcmd == buffer_scmd_down) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3985
+    buffer_updown(1, options.cmds[8].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3986
+  } else if (subcmd == buffer_scmd_date) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3987
+    buffer_date(options.cmds[9].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3988
+  } else if (subcmd == buffer_scmd_percent) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3989
+    scr_buffer_percent(atoi(options.cmds[10].args[0].value.arg));
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3990
+  } else if (subcmd == buffer_scmd_readmark) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3991
+    scr_buffer_jump_readmark();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3992
+  } else if (subcmd == buffer_scmd_search_backward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3993
+    scr_buffer_search(-1, options.cmds[12].args[0].value.arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3994
+  } else if (subcmd == buffer_scmd_search_forward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3995
+    scr_buffer_search(1, options.cmds[13].args[0].value.arg);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3996
+  } else if (subcmd == buffer_scmd_scroll_lock) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3997
+    scr_buffer_scroll_lock(1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3998
+  } else if (subcmd == buffer_scmd_scroll_unlock) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3999
+    scr_buffer_scroll_lock(0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4000
+  } else if (subcmd == buffer_scmd_scroll_toggle) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4001
+    scr_buffer_scroll_lock(-1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4002
+  } else { // buffer_scmd_save
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4003
+    scr_buffer_dump(options.cmds[17].args[0].value.arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4004
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4005
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4006
-  scr_buffer_percent(atoi((*arg1 ? arg1 : arg2)));
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4007
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4008
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4009
-static void do_buffer(char *arg)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4010
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4011
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4012
-  char *subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4013
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4014
-  if (!current_buddy)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4015
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4016
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4017
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4018
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4019
-  arg = *(paramlst+1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4020
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4021
-  if (!subcmd || !*subcmd) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4022
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4023
-    free_arg_lst(paramlst);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4024
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4025
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4026
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4027
-  if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP &&
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4028
-      strcasecmp(subcmd, "close_all")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4029
-    scr_LogPrint(LPRINT_NORMAL, "Groups have no buffer.");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4030
-    free_arg_lst(paramlst);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4031
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4032
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4033
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4034
-  if (!strcasecmp(subcmd, "top")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4035
-    scr_buffer_top_bottom(-1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4036
-  } else if (!strcasecmp(subcmd, "bottom")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4037
-    scr_buffer_top_bottom(1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4038
-  } else if (!strcasecmp(subcmd, "clear")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4039
-    scr_buffer_clear();
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4040
-  } else if (!strcasecmp(subcmd, "close")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4041
-    scr_buffer_purge(1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4042
-  } else if (!strcasecmp(subcmd, "close_all")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4043
-    scr_buffer_purge_all(1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4044
-  } else if (!strcasecmp(subcmd, "purge")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4045
-    scr_buffer_purge(0, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4046
-  } else if (!strcasecmp(subcmd, "scroll_lock")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4047
-    scr_buffer_scroll_lock(1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4048
-  } else if (!strcasecmp(subcmd, "scroll_unlock")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4049
-    scr_buffer_scroll_lock(0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4050
-  } else if (!strcasecmp(subcmd, "scroll_toggle")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4051
-    scr_buffer_scroll_lock(-1);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4052
-  } else if (!strcasecmp(subcmd, "up")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4053
-    buffer_updown(-1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4054
-  } else if (!strcasecmp(subcmd, "down")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4055
-    buffer_updown(1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4056
-  } else if (!strcasecmp(subcmd, "search_backward")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4057
-    strip_arg_special_chars(arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4058
-    buffer_search(-1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4059
-  } else if (!strcasecmp(subcmd, "search_forward")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4060
-    strip_arg_special_chars(arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4061
-    buffer_search(1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4062
-  } else if (!strcasecmp(subcmd, "date")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4063
-    buffer_date(arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4064
-  } else if (*subcmd == '%') {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4065
-    buffer_percent(subcmd+1, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4066
-  } else if (!strcasecmp(subcmd, "save")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4067
-    scr_buffer_dump(arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4068
-  } else if (!strcasecmp(subcmd, "list")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4069
-    scr_buffer_list();
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4070
-  } else if (!strcasecmp(subcmd, "readmark")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4071
-    scr_buffer_jump_readmark();
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4072
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4073
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4074
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4075
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4076
-  free_arg_lst(paramlst);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4077
+  cmdopts_free(&options);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4078
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4079
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4080
 static void do_clear(char *arg)    // Alias for "buffer clear"
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4081
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4082
-  do_buffer("clear");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4083
+  scr_buffer_clear();
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4084
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4085
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4086
 static void do_info(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4087
@@ -2033,29 +2701,20 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4088
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4089
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4090
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4091
+enum room_names_style_t {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4092
+  room_names_style_normal = 0,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4093
+  room_names_style_detail,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4094
+  room_names_style_short,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4095
+  room_names_style_quiet,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4096
+  room_names_style_compact,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4097
+};
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4098
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4099
 // room_names() is a variation of do_info(), for chatrooms only
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4100
-static void room_names(gpointer bud, char *arg)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4101
+static void room_names(gpointer bud, enum room_names_style_t style)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4102
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4103
   const char *bjid;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4104
   char *buffer;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4105
   GSList *resources, *p_res;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4106
-  enum { style_normal = 0, style_detail, style_short,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4107
-         style_quiet, style_compact } style = 0;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4108
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4109
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4110
-    if (!strcasecmp(arg, "--short"))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4111
-      style = style_short;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4112
-    else if (!strcasecmp(arg, "--quiet"))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4113
-      style = style_quiet;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4114
-    else if (!strcasecmp(arg, "--detail"))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4115
-      style = style_detail;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4116
-    else if (!strcasecmp(arg, "--compact"))
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4117
-      style = style_compact;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4118
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4119
-      scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4120
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4121
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4122
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4123
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4124
   // Enter chat mode
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4125
   scr_set_chatmode(TRUE);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4126
@@ -2075,12 +2734,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4127
     rstatus = buddy_getstatus(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4128
     rst_msg = buddy_getstatusmsg(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4129
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4130
-    if (style == style_short) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4131
+    if (style == room_names_style_short) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4132
       snprintf(buffer, 4095, "[%c] %s%s%s", imstatus2char[rstatus],
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4133
                (char*)p_res->data,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4134
                rst_msg ? " -- " : "", rst_msg ? rst_msg : "");
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4135
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4136
-    } else if (style == style_compact) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4137
+    } else if (style == room_names_style_compact) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4138
         enum imrole role = buddy_getrole(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4139
         enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4140
         bool showaffil = (affil != affil_none);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4141
@@ -2096,12 +2755,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4142
       snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4143
                (char*)p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4144
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4145
-      if (rst_msg && style != style_quiet) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4146
+      if (rst_msg && style != room_names_style_quiet) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4147
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4148
         scr_WriteIncomingMessage(bjid, buffer,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4149
                                  0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4150
       }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4151
-      if (style == style_detail) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4152
+      if (style == room_names_style_detail) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4153
         enum imrole role = buddy_getrole(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4154
         enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4155
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4156
@@ -2145,16 +2804,69 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4157
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4158
 static void do_rename(char *arg)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4159
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4160
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4161
+    "rename",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4162
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4163
+      { CMDOPT_SWITCH, 'r', "reset", { .swc = 0 } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4164
+      { 0,             'n', "name",  { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4165
+      { 0,             'g', "group", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4166
+      { CMDOPT_LAST,   'j', "jid",   { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4167
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4168
+    (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4169
+      { CMDOPT_CATCHALL | CMDOPT_LAST, { .arg = "" } }, // new name
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4170
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4171
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4172
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4173
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4174
   const char *bjid, *group;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4175
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4176
   char *newname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4177
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4178
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4179
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4180
+  gboolean reset;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4181
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4182
+  guint         srchtype = ROSTER_TYPE_USER | ROSTER_TYPE_ROOM | ROSTER_TYPE_AGENT;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4183
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4184
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4185
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4186
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4187
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4188
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4189
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4190
+  reset   = options.opts[0].value.swc;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4191
+  newname = options.args[0].value.arg;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4192
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4193
+  if (options.opts[1].value.opt) { // n
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4194
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4195
+    srchtype |= ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4196
+    srchterm = options.opts[1].value.opt;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4197
+  } else if (options.opts[2].value.opt) { // g
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4198
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4199
+    srchtype = ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4200
+    srchterm = options.opts[2].value.opt;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4201
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4202
+    srchterm = options.opts[3].value.opt;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4203
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4204
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4205
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4206
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4207
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4208
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4209
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4210
+    if (srchtype == ROSTER_TYPE_GROUP)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4211
+      bud = buddy_getgroup(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4212
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4213
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4214
+    if (srchwhat == jidsearch && check_jid_syntax(srchterm)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4215
+      scr_log_print(LPRINT_NORMAL, "You must specify a valid jid!");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4216
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4217
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4218
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4219
+    found = roster_find(srchterm, srchwhat, srchtype);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4220
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4221
+      scr_log_print(LPRINT_NORMAL, "Can't find <%s>!", srchterm);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4222
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4223
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4224
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4225
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4226
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4227
+    
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4228
   bjid   = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4229
   group  = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4230
   type   = buddy_gettype(bud);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4231
@@ -2162,11 +2874,13 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4232
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4233
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4234
     scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4235
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4236
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4237
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4238
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4239
-  if (!*arg && !(type & ROSTER_TYPE_GROUP)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4240
+  if (!*newname && !reset) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4241
     scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4242
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4243
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4244
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4245
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4246
@@ -2181,90 +2895,117 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4247
   //  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4248
   //}
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4249
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4250
-  newname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4251
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4252
   for (p = newname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4253
   while (p > newname && *p == ' ') *p = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4254
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4255
-  strip_arg_special_chars(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4256
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4257
-  name_utf8 = to_utf8(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4258
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4259
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4260
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4261
-    foreach_group_member(bud, &move_group_member, name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4262
+    foreach_group_member(bud, &move_group_member, newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4263
     // Let's jump to the previous buddy, because this group name should
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4264
     // disappear when we receive the server answer.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4265
     scr_roster_up_down(-1, 1);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4266
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4267
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4268
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4269
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4270
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4271
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4272
-      /* We do not rename the buddy right now because the server could reject
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4273
-       * the request.  Let's wait for the server answer.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4274
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4275
-      xmpp_updatebuddy(bjid, (del_name ? NULL : name_utf8),
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4276
+      // We do not rename the buddy right now because the server could reject
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4277
+      // the request.  Let's wait for the server answer.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4278
+      xmpp_updatebuddy(bjid, (reset ? NULL : newname),
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4279
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4280
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4281
       // This is a local item, we rename it without adding to roster.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4282
-      buddy_setname(bud, (del_name ? (char*)bjid : name_utf8));
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4283
+      buddy_setname(bud, (reset ? (char*)bjid : newname));
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4284
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4285
           settings_opt_get_int("muc_bookmark_autoupdate"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4286
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4287
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4288
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4289
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4290
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4291
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4292
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4293
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4294
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4295
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4296
 static void do_move(char *arg)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4297
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4298
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4299
+    "move",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4300
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4301
+      { 0,           'n', "name", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4302
+      { CMDOPT_LAST, 'j', "jid",  { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4303
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4304
+    (cmdarg_t[1]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4305
+      { CMDOPT_CATCHALL | CMDOPT_LAST, { .arg = "" } }, // new group name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4306
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4307
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4308
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4309
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4310
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4311
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4312
   char *newgroupname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4313
-  char *group_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4314
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4315
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4316
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4317
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4318
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4319
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4320
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4321
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4322
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4323
+  newgroupname = options.args[0].value.arg;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4324
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4325
+  if (options.opts[0].value.opt) { // n
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4326
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4327
+    srchterm = options.opts[0].value.opt;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4328
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4329
+    srchterm = options.opts[1].value.opt;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4330
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4331
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4332
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4333
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4334
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4335
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4336
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4337
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4338
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4339
+    if (srchwhat == jidsearch && check_jid_syntax(srchterm)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4340
+      scr_log_print(LPRINT_NORMAL, "You must specify a valid jid!");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4341
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4342
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4343
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4344
+    found = roster_find(srchterm, srchwhat, ROSTER_TYPE_USER |
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4345
+                        ROSTER_TYPE_ROOM | ROSTER_TYPE_AGENT);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4346
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4347
+      scr_log_print(LPRINT_NORMAL, "Can't find <%s>!", srchterm);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4348
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4349
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4350
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4351
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4352
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4353
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4354
   bjid = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4355
   name = buddy_getname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4356
   type = buddy_gettype(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4357
   on_srv = buddy_getonserverflag(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4358
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4359
   oldgroupname = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4360
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4361
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4362
     scr_LogPrint(LPRINT_NORMAL, "You can't move groups!");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4363
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4364
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4365
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4366
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4367
     scr_LogPrint(LPRINT_NORMAL, "You can't move this item.");
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4368
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4369
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4370
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4371
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4372
-  newgroupname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4373
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4374
   for (p = newgroupname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4375
   while (p > newgroupname && *p == ' ') *p-- = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4376
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4377
-  strip_arg_special_chars(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4378
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4379
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4380
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4381
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4382
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4383
-      xmpp_updatebuddy(bjid, name, *group_utf8 ? group_utf8 : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4384
+      xmpp_updatebuddy(bjid, name, *newgroupname ? newgroupname : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4385
       scr_roster_up_down(-1, 1);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4386
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4387
-      /* We do not move the buddy right now because the server could reject
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4388
-       * the request.  Let's wait for the server answer.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4389
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4390
+      // We do not move the buddy right now because the server could reject
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4391
+      // the request.  Let's wait for the server answer.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4392
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4393
       // This is a local item, we move it without adding to roster.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4394
       guint msgflag;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4395
@@ -2276,7 +3017,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4396
       msgflag = buddy_getflags(bud) & ROSTER_FLAG_MSG;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4397
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4398
         roster_msg_setflag(bjid, FALSE, FALSE);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4399
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4400
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4401
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4402
         roster_msg_setflag(bjid, FALSE, TRUE);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4403
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4404
@@ -2285,8 +3026,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4405
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4406
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4407
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4408
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4409
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4410
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4411
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4412
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4413
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4414
@@ -2468,50 +3208,33 @@
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4415
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4416
 static void do_rawxml(char *arg)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4417
 {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4418
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4419
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4420
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4421
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4422
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4423
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4424
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4425
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4426
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4427
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4428
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4429
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4430
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4431
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4432
+        NULL },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4433
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4434
+  };
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4435
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4436
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4437
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4438
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4439
   }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4440
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4441
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4442
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4443
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4444
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4445
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4446
-    scr_LogPrint(LPRINT_NORMAL, "Please read the manual page"
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4447
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4448
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4449
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4450
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4451
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4452
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4453
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4454
-    gchar *buffer;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4455
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4456
-    if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4457
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4458
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4459
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4460
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4461
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4462
-    // We don't strip_arg_special_chars() here, because it would be a pain for
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4463
-    // the user to escape quotes in a XML stream...
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4464
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4465
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4466
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4467
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4468
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4469
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4470
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4471
-      scr_LogPrint(LPRINT_NORMAL, "Conversion error in XML string.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4472
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4473
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4474
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4475
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4476
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4477
-  free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4478
+
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4479
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4480
+  lm_connection_send_raw(lconnection, options.cmds[0].args[0].value.arg, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4481
+  cmdopts_free(&options);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4482
 }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4483
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4484
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4485
@@ -2815,6 +3538,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4486
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4487
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4488
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4489
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4490
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4491
 void cmd_room_leave(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4492
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4493
   gchar *roomid, *desc;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4494
@@ -2833,6 +3558,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4495
   g_free(roomid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4496
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4497
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4498
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4499
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4500
 static void room_nick(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4501
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4502
   if (!buddy_getinsideroom(bud)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4503
@@ -2874,7 +3601,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4504
   fjid_utf8 = g_strdup_printf("%s/%s", buddy_getjid(bud), nick_utf8);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4505
   g_free (nick_utf8);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4506
   msg = to_utf8(arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4507
-  send_message_to(fjid_utf8, msg, NULL, LM_MESSAGE_SUB_TYPE_NOT_SET, FALSE);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4508
+  send_message_to(fjid_utf8, msg, NULL, msgtype_not_set, FALSE);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4509
   g_free(fjid_utf8);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4510
   g_free(msg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4511
   free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4512
@@ -3052,6 +3779,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4513
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4514
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4515
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4516
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4517
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4518
 //  cmd_room_whois(..)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4519
 // If interactive is TRUE, chatmode can be enabled.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4520
 // Please note that usernick is expected in UTF-8 locale iff interactive is
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4521
@@ -3146,6 +3875,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4522
     free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4523
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4524
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4525
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4526
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4527
 static void room_bookmark(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4528
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4529
   const char *roomid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4530
@@ -3290,6 +4021,207 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4531
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4532
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4533
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4534
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4535
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4536
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4537
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4538
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4539
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4540
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4541
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4542
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4543
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4544
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4545
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4546
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4547
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4548
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4549
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4550
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4551
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4552
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4553
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4554
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4555
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4556
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4557
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4558
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4559
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4560
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4561
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4562
+          { CMDOPT_LAST, { .arg = NULL } }, // password
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4563
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4564
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4565
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4566
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4567
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4568
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4569
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4570
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4571
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4572
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4573
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4574
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4575
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4576
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4577
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4578
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4579
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4580
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4581
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4582
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4583
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4584
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4585
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4586
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4587
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4588
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4589
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4590
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4591
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4592
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4593
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4594
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4595
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4596
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4597
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4598
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4599
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4600
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4601
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4602
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4603
+      { "destroy", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4604
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4605
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4606
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4607
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4608
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4609
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4610
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4611
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4612
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4613
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4614
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4615
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4616
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4617
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4618
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4619
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4620
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4621
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4622
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4623
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4624
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4625
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4626
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4627
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4628
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4629
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4630
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4631
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4632
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4633
+      { "kick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4634
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4635
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4636
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4637
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4638
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4639
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4640
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4641
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4642
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4643
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4644
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4645
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4646
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4647
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4648
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4649
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4650
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4651
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4652
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4653
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4654
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4655
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4656
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4657
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4658
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4659
+      // XXX below goes some crazy subcommands stuff, that should be rather static lists
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4660
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4661
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4662
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4663
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4664
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4665
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4666
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4667
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4668
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4669
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4670
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4671
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4672
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4673
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4674
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4675
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4676
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4677
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4678
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4679
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4680
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4681
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4682
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4683
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4684
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4685
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4686
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4687
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4688
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4689
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4690
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4691
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4692
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4693
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4694
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4695
+      { "bookmark", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4696
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4697
+          { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4698
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4699
+        (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4700
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4701
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4702
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4703
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4704
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4705
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4706
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4707
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4708
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4709
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4710
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4711
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4712
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4713
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4714
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4715
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4716
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4717
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4718
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4719
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4720
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4721
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4722
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4723
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4724
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4725
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4726
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4727
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4728
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4729
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4730
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4731
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4732
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4733
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4734
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4735
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4736
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4737
   gpointer bud;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4738
@@ -3347,7 +4279,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4739
       cmd_room_leave(bud, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4740
   } else if (!strcasecmp(subcmd, "names"))  {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4741
     if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4742
-      room_names(bud, arg);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4743
+      room_names(bud, room_names_style_normal); // FIXME
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4744
   } else if (!strcasecmp(subcmd, "nick"))  {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4745
     if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4746
       room_nick(bud, arg);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4747
@@ -4162,5 +5094,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4748
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4749
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4750
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4751
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4752
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4753
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4754
diff -r 1b0b563a81e6 mcabber/mcabber/commands.h
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4755
--- a/mcabber/mcabber/commands.h	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4756
+++ b/mcabber/mcabber/commands.h	Wed Mar 13 17:51:29 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4757
@@ -5,32 +5,246 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4758
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4759
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4760
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4761
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4762
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4763
+//  TODO:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4764
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4765
+// * Clustering of options/switches
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4766
+// * Multivalue options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4767
+//   - list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4768
+//     - special checker
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4769
+//     - or run checker multiple times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4770
+//   - or run command several times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4771
+//     - what if there are several of such arguments?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4772
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4773
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4774
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4775
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4776
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4777
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4778
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4779
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4780
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4781
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4782
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4783
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4784
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4785
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4786
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4787
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4788
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4789
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4790
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4791
+//     - percent (numerical, restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4792
+//   - number (result - int)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4793
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4794
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4795
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4796
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4797
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4798
+//   - current_buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4799
+// * Subcommands with fallback to argument?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4800
+// * [+foo|-foo] support?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4801
+// * Usable subsystem for completion, based on user-supplied completors
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4802
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4803
+// * for now we'll do without multi-options.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4804
+// * and without clustering.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4805
+// * checks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4806
+//   - argument type == public struct with name and callbacks, simple!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4807
+//   - command checks should be just single callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4808
+// * now, what checker needs?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4809
+//   - [in] value string (current or default)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4810
+//   - [in] additional input data for some generic checkers (like string2enum wordlist)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4811
+//   - [out] replacement value (not necessary string)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4812
+//     - replacement value may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4813
+//   - [out] error string
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4814
+//     - that may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4815
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4816
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4817
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4818
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4819
+typedef struct cmdarg_type_struct  cmdarg_type_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4820
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4821
+// note, this is called before options are parsed!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4822
+typedef gchar *(*cmd_checker_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4823
+// command function itself
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4824
+typedef gchar *(*cmd_handler_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4825
+// should check arg -> val -> val.arg and replace, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4826
+typedef gchar *(*cmdarg_checker_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4827
+// free resources, used in arg -> val -> val.arg, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4828
+typedef void (*cmdarg_destructor_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4829
+// todo
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4830
+typedef void (*cmdarg_completor_t)(void); // FIXME
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4831
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4832
+typedef union {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4833
+  guint       uint;        // unsigned integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4834
+  gint        sint;        // signed integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4835
+  guint       swc;         // switch count
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4836
+  const gchar *roarg;      // default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4837
+  gchar       *arg;        // string argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4838
+  cmdopts_t   *cmd;        // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4839
+  gpointer    bud;         // buddy data (roster entry)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4840
+  gpointer    ptr;         // anything else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4841
+} cmdarg_value_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4842
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4843
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4844
+  cmd_default     = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4845
+  cmd_safe        = 1<<0,  // command is safe to use in mcabberrc
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4846
+} cmd_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4847
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4848
+  cmdopt_default  = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4849
+  cmdopt_switch   = 1<<0,  // option have no argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4850
+} cmdopt_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4851
+typedef enum {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4852
+  cmdarg_default  = 0x0000, // no flags ['u' - user, 'p' - parser, 'c' - checker]
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4853
+  cmdarg_catchall = 0x0001, // u2p, argument consumes the end of command line
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4854
+  cmdarg_plain    = 0x0002, // u2p, quotes and escapes are not processed
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4855
+  cmdarg_subcmd   = 0x0004, // u2p, argument is subcommand
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4856
+  cmdarg_check    = 0x0008, // u2p, force checker call on argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4857
+  cmdarg_required = 0x0010, // u2p[c], treat checker errors as errors or warnings (may be used by checker too)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4858
+  cmdarg_visited  = 0x0020, // p2p, marks initialized arguments
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4859
+  cmdarg_checked  = 0x0040, // p2p, marks checked argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4860
+  cmdarg_freeme   = 0x0080, // c2p, marks argument, that needs freeing
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4861
+  // convenience shortcuts
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4862
+  cmdarg_eol      = 0x0003, // catchall + plain
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4863
+  cmdarg_chreq    = 0x0018, // check + required
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4864
+  cmdarg_ppclear  = 0x00E0, // pre-parse clear = visited + checked + freeme
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4865
+} cmdarg_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4866
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4867
+struct cmdopts_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4868
+  const char    *name;     // [user,req] command name (error messages, help, subcommands)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4869
+  cmd_flags_t   flags;     // [user,req] safe
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4870
+  cmd_checker_t check;     // [user,req] checker routine
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4871
+  cmd_handler_t handle;    // [user,req] main command processing function
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4872
+  cmdopt_t      *opts;     // [user,req] options
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4873
+  cmdarg_t      *args;     // [user,req] arguments
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4874
+  cmdopts_t     *cmds;     // [user,req] subcommands
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4875
+  gpointer      userdata;  // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4876
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4877
+struct cmdarg_struct {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4878
+  const char     *name;    // [user,req] argument name - errors, help
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4879
+  cmdarg_flags_t flags;    // [user,req] catchall, plain, required, subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4880
+  const char     *defval;  // [user,req] default value
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4881
+  const cmdarg_type_t *type; // [user,req] type cbs - checker and completor
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4882
+  gpointer       chkdata;  // [user] instance data for type checker - eg string2enum list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4883
+  gpointer       userdata; // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4884
+  cmdarg_value_t value;    // [parser,chk] current value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4885
+};
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4886
+struct cmdopt_struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4887
+  char           shortopt; // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4888
+  const char     *longopt; // [user,req]
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4889
+  cmdopt_flags_t flags;    // [user,req] switch
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4890
+  cmdarg_t       arg;      // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4891
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4892
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4893
+struct cmdarg_type_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4894
+  cmdarg_checker_t    check;    // [user,req] check string and set argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4895
+  cmdarg_destructor_t free;     // [user,req] free argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4896
+  cmdarg_completor_t  complete; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4897
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4898
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4899
+void cmd_define (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4900
+void cmd_undef (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4901
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4902
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4903
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4904
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4905
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4906
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4907
+const char *cmdopts_parse_argument(gchar **pr, gchar **er, cmdarg_flags_t flags);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4908
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4909
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4910
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4911
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4912
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4913
+} cmdexe_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4914
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4915
+  cmd_result_ok   = 0,       // all is ok
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4916
+  cmd_result_syntax_error,   // syntax, environment or argument check error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4917
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4918
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4919
+  cmd_result_verbatim,       // we're in verbatim mode and this is not "msay"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4920
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4921
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4922
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4923
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4924
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4925
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4926
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4927
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4928
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4929
+// One special value is cmd_result_quit (255) - if it is "quit" command.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4930
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4931
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4932
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4933
+// Process a command/message line. If this isn't a command, this is a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4934
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4935
+// Returns 255 if the line is the /quit command, 0 on success and some other
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4936
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4937
+cmd_result_t process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4938
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4939
+//
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4940
+//  Standard types
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4941
+//
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4942
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4943
 typedef struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4944
-  char name[32];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4945
-  const char *help;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4946
-  guint completion_flags[2];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4947
-  void (*func)(char *);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4948
-  gpointer userdata;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4949
-} cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4950
+  const char *name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4951
+  guint      value;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4952
+} string2enum_t;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4953
 
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4954
-void cmd_init(void);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4955
-cmd *cmd_get(const char *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4956
-int  process_line(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4957
-int  process_command(const char *line, guint iscmd);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4958
-char *expandalias(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4959
-#ifdef MODULES_ENABLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4960
-gpointer cmd_del(gpointer id);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4961
-gpointer cmd_add(const char *name, const char *help, guint flags1, guint flags2,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4962
-                 void (*f)(char*), gpointer userdata);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4963
-gboolean cmd_set_safe(const gchar *name, gboolean safe);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4964
+void cmdarg_free_gfree (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4965
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4966
+gchar *cmdarg_check_nonspace        (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4967
+gchar *cmdarg_check_roster_bjid     (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4968
+gchar *cmdarg_check_roster_resource (cmdarg_t *arg);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4969
+gchar *cmdarg_check_roster_group    (cmdarg_t *arg);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4970
+gchar *cmdarg_check_fjid            (cmdarg_t *arg);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4971
+gchar *cmdarg_check_bjid            (cmdarg_t *arg);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4972
+gchar *cmdarg_check_uint            (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4973
+gchar *cmdarg_check_statusmask      (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4974
+gchar *cmdarg_check_string2enum     (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4975
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4976
+const cmdarg_type_t cmdarg_type_nonspace;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4977
+const cmdarg_type_t cmdarg_type_roster_bjid;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4978
+const cmdarg_type_t cmdarg_type_roster_resource;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4979
+const cmdarg_type_t cmdarg_type_roster_group;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4980
+const cmdarg_type_t cmdarg_type_fjid;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4981
+const cmdarg_type_t cmdarg_type_bjid;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4982
+const cmdarg_type_t cmdarg_type_uint;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4983
+const cmdarg_type_t cmdarg_type_statusmask;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4984
+const cmdarg_type_t cmdarg_type_string2enum;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4985
+const cmdarg_type_t cmdarg_type_color;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4986
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4987
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4988
+//  Private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4989
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4990
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4991
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4992
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4993
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4994
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4995
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4996
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4997
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4998
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4999
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5000
+gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5001
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5002
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5003
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5004
+void cmdopts_free(cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5005
 #endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5006
-gboolean cmd_is_safe(const gchar *name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5007
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5008
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5009
+  msgtype_not_set,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5010
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5011
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5012
+} msgtype_t;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5013
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5014
 void cmd_room_whois(gpointer bud, const char *nick, guint interactive);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5015
 void cmd_room_leave(gpointer bud, char *arg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5016
-void cmd_setstatus(const char *recipient, const char *arg);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  5017
-void say_cmd(char *arg, int parse_flags);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5018
+void cmd_setstatus(const char *recipient,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5019
+                   const char *status, const char *message);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5020
+void say_cmd(char *arg, msgtype_t msgtype);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5021
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5022
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  5023
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5024
diff -r 1b0b563a81e6 mcabber/mcabber/hooks.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5025
--- a/mcabber/mcabber/hooks.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5026
+++ b/mcabber/mcabber/hooks.c	Wed Mar 13 17:51:29 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5027
@@ -638,10 +638,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5028
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5029
   scr_LogPrint(LPRINT_LOGNORM, "Running hook-post-connect...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5030
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5031
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5032
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5033
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5034
+  if (cmd_execute(cmdline, cmd_default) == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5035
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5036
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5037
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5038
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5039
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5040
@@ -665,10 +664,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5041
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5042
   scr_LogPrint(LPRINT_LOGNORM, "Running hook-pre-disconnect...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5043
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5044
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5045
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5046
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5047
+  if (cmd_execute(cmdline, cmd_default) == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5048
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5049
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5050
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5051
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5052
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5053
diff -r 1b0b563a81e6 mcabber/mcabber/roster.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5054
--- a/mcabber/mcabber/roster.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5055
+++ b/mcabber/mcabber/roster.c	Wed Mar 13 17:51:29 2013 +0200
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5056
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5057
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5058
 // Search begins at current_buddy; if no match is found in the the buddylist,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5059
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5060
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5061
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5062
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5063
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5064
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5065
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5066
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5067
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5068
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5069
     char *found = NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5070
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5071
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5072
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5073
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5074
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5075
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5076
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5077
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5078
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5079
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5080
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5081
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5082
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5083
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5084
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5085
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5086
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5087
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5088
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5089
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5090
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5091
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5092
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5093
     }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5094
diff -r 1b0b563a81e6 mcabber/mcabber/screen.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5095
--- a/mcabber/mcabber/screen.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5096
+++ b/mcabber/mcabber/screen.c	Wed Mar 13 17:51:29 2013 +0200
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5097
@@ -3630,7 +3630,7 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5098
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5099
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5100
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5101
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5102
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5103
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5104
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5105
   scr_cmdhisto_addline(inputLine);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5106
@@ -3802,8 +3802,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5107
 void readline_send_multiline(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5108
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5109
   // Validate current multi-line
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5110
-  if (multimode)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5111
-    process_command(mkcmdstr("msay send"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5112
+  if (multimode) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5113
+    // FIXME - do it without parsing
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5114
+    gchar *cmdline = g_strdup("msay send");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5115
+    cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5116
+    g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5117
+  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5118
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5119
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5120
 void readline_insert(const char *toinsert)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5121
@@ -3883,6 +3887,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5122
 // Initiate or continue a completion...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5123
 static void scr_handle_tab(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5124
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5125
+// FIXME completion
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5126
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5127
   int nrow;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5128
   const char *row;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5129
   const char *cchar;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5130
@@ -3978,6 +3984,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5131
     if (cchar)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5132
       scr_insert_text(cchar);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5133
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5134
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5135
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5136
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5137
 static void scr_cancel_current_completion(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5138
@@ -4098,7 +4105,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5139
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5140
   if (!Curses) return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5141
   // Leave multi-line mode
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5142
-  process_command(mkcmdstr("msay abort"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5143
+  gchar *cmdline = g_strdup("msay abort");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5144
+  cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5145
+  g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5146
   // Same as Ctrl-g, now
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5147
   scr_cancel_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5148
   scr_end_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5149
@@ -4302,10 +4311,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5150
   boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5151
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5152
   if (boundcmd) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5153
-    gchar *cmdline = from_utf8(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5154
+    gchar *cmdline = g_strdup(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5155
     scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5156
-    if (process_command(cmdline, TRUE))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5157
+    if (cmd_execute(cmdline, cmdexe_default) == cmd_result_quit) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5158
+      g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5159
       return 255; // Quit
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5160
+    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5161
     g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5162
     return 0;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5163
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5164
diff -r 1b0b563a81e6 mcabber/mcabber/settings.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5165
--- a/mcabber/mcabber/settings.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5166
+++ b/mcabber/mcabber/settings.c	Wed Mar 13 17:51:29 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5167
@@ -183,28 +183,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5168
     if ((*line == '\n') || (*line == '\0') || (*line == '#'))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5169
       continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5170
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5171
-    // If we aren't in runtime (i.e. startup) we'll only accept "safe" commands
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5172
-    if (!runtime) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5173
-      const gchar *cmdend = strchr(line, ' ');
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5174
-      gchar *cmdname = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5175
-      gboolean safe;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5176
-      if (cmdend)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5177
-        cmdname = g_strndup(line, cmdend - line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5178
-      safe = cmd_is_safe(cmdname ? cmdname : line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5179
-      g_free(cmdname);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5180
-      if (!safe) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5181
-        scr_log_print(LPRINT_LOGNORM, "Error in configuration file (l. %d): "
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5182
-                      "this command can't be used here", ln);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5183
-        err++;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5184
-        continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5185
-      }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5186
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5187
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5188
-    // Set the leading COMMAND_CHAR to build a command line
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5189
-    // and process the command
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5190
-    *(--line) = COMMAND_CHAR;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5191
-    if (process_command(line, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5192
+    // FIXME: in-buffer conversion? some glib iochannel stuff?
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5193
+    gchar *utf8 = to_utf8(line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5194
+    if (cmd_execute(utf8, runtime ? cmdexe_default : cmdexe_check_safe)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5195
+        == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5196
       mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5197
+    g_free(utf8);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5198
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5199
   g_free(buf);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5200
   fclose(fp);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5201
diff -r 1b0b563a81e6 mcabber/mcabber/xmpp_iq.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5202
--- a/mcabber/mcabber/xmpp_iq.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5203
+++ b/mcabber/mcabber/xmpp_iq.c	Wed Mar 13 17:51:29 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5204
@@ -71,20 +71,20 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5205
 struct adhoc_status {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5206
   char *name;   // the name used by adhoc
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5207
   char *description;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5208
-  char *status; // the string, used by setstus
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5209
+  enum imstatus status; // corresponding imstatus value
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5210
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5211
 // It has to match imstatus of roster.h!
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5212
 const struct adhoc_status adhoc_status_list[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5213
-  {"offline", "Offline", "offline"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5214
-  {"online", "Online", "avail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5215
-  {"chat", "Chat", "free"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5216
-  {"dnd", "Do not disturb", "dnd"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5217
-  {"xa", "Extended away", "notavail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5218
-  {"away", "Away", "away"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5219
+  {"offline", "Offline", offline},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5220
+  {"online", "Online", available},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5221
+  {"chat", "Chat", freeforchat},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5222
+  {"dnd", "Do not disturb", dontdisturb},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5223
+  {"xa", "Extended away", notavail},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5224
+  {"away", "Away", away},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5225
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5226
-  {"invisible", "Invisible", "invisible"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5227
+  {"invisible", "Invisible", invisible},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5228
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5229
-  {NULL, NULL, NULL},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5230
+  {NULL, NULL, imstatus_size},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5231
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5232
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5233
 static char *generate_session_id(char *prefix)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5234
@@ -289,10 +289,11 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5235
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5236
         for (s = adhoc_status_list; !s->name || strcmp(s->name, value); s++);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5237
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5238
-          char *status = g_strdup_printf("%s %s", s->status,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5239
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5240
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5241
-          g_free(status);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5242
+          // It makes sense to reset autoaway before changing the status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5243
+          // (esp. for FIFO or remote commands) or the behaviour could be
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5244
+          // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5245
+          scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5246
+          xmpp_setstatus(s->status, NULL, message ? message : "", FALSE);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5247
           lm_message_node_set_attribute(command, "status", "completed");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5248
           lm_message_node_add_dataform_result(command,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5249
                                               "Status has been changed");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5250
diff -r 1b0b563a81e6 mcabber/modules/beep/beep.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5251
--- a/mcabber/modules/beep/beep.c	Wed Mar 13 16:11:16 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5252
+++ b/mcabber/modules/beep/beep.c	Wed Mar 13 17:51:29 2013 +0200
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5253
@@ -31,6 +31,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5254
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5255
 static void beep_init   (void);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5256
 static void beep_uninit (void);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5257
+static gchar *do_beep (cmdopts_t *command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5258
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5259
 /* Module description */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5260
 module_info_t info_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5261
@@ -46,9 +47,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5262
         .next            = NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5263
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5264
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5265
-static guint    beep_cid  = 0;  /* Command completion category id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5266
-static gpointer beep_cmid = 0;  /* Command id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5267
-static guint    beep_hid  = 0;  /* Hook handler id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5268
+static guint beep_hid  = 0;  /* Hook handler id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5269
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5270
 /* Event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5271
 static guint beep_hh(const gchar *hookname, hk_arg_t *args, gpointer userdata)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5272
@@ -61,20 +60,38 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5273
   return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5274
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5275
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5276
+static const string2enum_t s2e_onoff[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5277
+  { "on",      1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5278
+  { "off",     0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5279
+  { "enable",  1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5280
+  { "disable", 0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5281
+  { "1",       1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5282
+  { "0",       0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5283
+  { "show",    2  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5284
+  { NULL,      0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5285
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5286
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5287
+static cmdopts_t def_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5288
+  "beep",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5289
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5290
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5291
+  do_beep,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5292
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5293
+  (cmdarg_t[2]){
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5294
+    {"on|off", cmdarg_chreq, "show", &cmdarg_type_string2enum, (gpointer)s2e_onoff},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5295
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5296
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5297
+  NULL
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5298
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5299
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5300
 /* beep command handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5301
-static void do_beep(char *args)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5302
+static gchar *do_beep(cmdopts_t *command)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5303
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5304
   /* Check arguments, and if recognized,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5305
    * set mcabber option accordingly */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5306
-  if (!strcmp(args, "enable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5307
-      !strcmp(args, "on") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5308
-      !strcmp(args, "yes") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5309
-      !strcmp(args, "1"))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5310
+  if (command -> args[0].value.uint == 1)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5311
     settings_set(SETTINGS_TYPE_OPTION, "beep_enable", "1");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5312
-  else if (!strcmp(args, "disable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5313
-           !strcmp(args, "off") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5314
-           !strcmp(args, "no") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5315
-           !strcmp(args, "0"))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5316
+  else if (command -> args[0].value.uint == 0)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5317
     settings_set(SETTINGS_TYPE_OPTION, "beep_enable", "0");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5318
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5319
   /* Output current state, either if state is
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5320
@@ -83,19 +100,14 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5321
     scr_log_print(LPRINT_NORMAL, "Beep on messages is enabled");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5322
   else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5323
     scr_log_print(LPRINT_NORMAL, "Beep on messages is disabled");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5324
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5325
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5326
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5327
 /* Initialization */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5328
 static void beep_init(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5329
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5330
-  /* Create completions */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5331
-  beep_cid = compl_new_category(COMPL_FLAGS_SORT);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5332
-  if (beep_cid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5333
-    compl_add_category_word(beep_cid, "enable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5334
-    compl_add_category_word(beep_cid, "disable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5335
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5336
   /* Add command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5337
-  beep_cmid = cmd_add("beep", "", beep_cid, 0, do_beep, NULL);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5338
+  cmd_define(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5339
   /* Add handler
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5340
    * We are only interested in incoming message events
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5341
    */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5342
@@ -109,11 +121,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5343
   /* Unregister event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5344
   hk_del_handler(HOOK_POST_MESSAGE_IN, beep_hid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5345
   /* Unregister command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5346
-  cmd_del(beep_cmid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5347
-  /* Give back completion handle */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5348
-  if (beep_cid)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5349
-    compl_del_category(beep_cid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5350
+  cmd_undef(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5351
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5352
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5353
-/* The End */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5354
 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2:  For Vim users... */