cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 12 Mar 2013 01:23:02 +0200
changeset 76 3c8b784f92c7
parent 75 17cd00b2e722
child 77 7197414053c9
permissions -rw-r--r--
[cmdopts,fix-memleak] Start to clean things a bit * added fix-nickcolor-memleak.diff * changes to cmdopts.diff
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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
     2
# Parent b527e88002781b92309dfd32d80f4e04170bb2cf
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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    36
diff -r b527e8800278 mcabber/doc/help/cs/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    37
--- a/mcabber/doc/help/cs/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    38
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Tue Mar 12 01:21:22 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%.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    48
diff -r b527e8800278 mcabber/doc/help/cs/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    49
--- a/mcabber/doc/help/cs/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    50
+++ b/mcabber/doc/help/cs/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    57
diff -r b527e8800278 mcabber/doc/help/cs/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    58
--- a/mcabber/doc/help/cs/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    59
+++ b/mcabber/doc/help/cs/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    68
diff -r b527e8800278 mcabber/doc/help/cs/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    69
--- a/mcabber/doc/help/cs/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    70
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    80
diff -r b527e8800278 mcabber/doc/help/de/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    81
--- a/mcabber/doc/help/de/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    82
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Tue Mar 12 01:21:22 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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    92
diff -r b527e8800278 mcabber/doc/help/de/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    93
--- a/mcabber/doc/help/de/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
    94
+++ b/mcabber/doc/help/de/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   101
diff -r b527e8800278 mcabber/doc/help/de/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   102
--- a/mcabber/doc/help/de/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   103
+++ b/mcabber/doc/help/de/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   113
diff -r b527e8800278 mcabber/doc/help/de/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   114
--- a/mcabber/doc/help/de/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   115
+++ b/mcabber/doc/help/de/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   125
diff -r b527e8800278 mcabber/doc/help/en/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   126
--- a/mcabber/doc/help/en/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   127
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Tue Mar 12 01:21:22 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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   137
diff -r b527e8800278 mcabber/doc/help/en/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   138
--- a/mcabber/doc/help/en/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   139
+++ b/mcabber/doc/help/en/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   147
diff -r b527e8800278 mcabber/doc/help/en/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   148
--- a/mcabber/doc/help/en/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   149
+++ b/mcabber/doc/help/en/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   158
diff -r b527e8800278 mcabber/doc/help/en/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   159
--- a/mcabber/doc/help/en/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   160
+++ b/mcabber/doc/help/en/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   170
diff -r b527e8800278 mcabber/doc/help/fr/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   171
--- a/mcabber/doc/help/fr/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   172
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Tue Mar 12 01:21:22 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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   182
diff -r b527e8800278 mcabber/doc/help/fr/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   183
--- a/mcabber/doc/help/fr/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   184
+++ b/mcabber/doc/help/fr/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   191
diff -r b527e8800278 mcabber/doc/help/fr/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   192
--- a/mcabber/doc/help/fr/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   193
+++ b/mcabber/doc/help/fr/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   202
diff -r b527e8800278 mcabber/doc/help/fr/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   203
--- a/mcabber/doc/help/fr/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   204
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   214
diff -r b527e8800278 mcabber/doc/help/it/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   215
--- a/mcabber/doc/help/it/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   216
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Tue Mar 12 01:21:22 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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   226
diff -r b527e8800278 mcabber/doc/help/it/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   227
--- a/mcabber/doc/help/it/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   228
+++ b/mcabber/doc/help/it/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   235
diff -r b527e8800278 mcabber/doc/help/it/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   236
--- a/mcabber/doc/help/it/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   237
+++ b/mcabber/doc/help/it/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   246
diff -r b527e8800278 mcabber/doc/help/it/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   247
--- a/mcabber/doc/help/it/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   248
+++ b/mcabber/doc/help/it/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   258
diff -r b527e8800278 mcabber/doc/help/nl/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   259
--- a/mcabber/doc/help/nl/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   260
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Tue Mar 12 01:21:22 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
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   270
diff -r b527e8800278 mcabber/doc/help/nl/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   271
--- a/mcabber/doc/help/nl/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   272
+++ b/mcabber/doc/help/nl/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   279
diff -r b527e8800278 mcabber/doc/help/nl/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   280
--- a/mcabber/doc/help/nl/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   281
+++ b/mcabber/doc/help/nl/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   290
diff -r b527e8800278 mcabber/doc/help/nl/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   291
--- a/mcabber/doc/help/nl/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   292
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   302
diff -r b527e8800278 mcabber/doc/help/pl/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   303
--- a/mcabber/doc/help/pl/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   304
+++ b/mcabber/doc/help/pl/hlp_del.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   311
diff -r b527e8800278 mcabber/doc/help/pl/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   312
--- a/mcabber/doc/help/pl/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   313
+++ b/mcabber/doc/help/pl/hlp_move.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   322
diff -r b527e8800278 mcabber/doc/help/pl/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   323
--- a/mcabber/doc/help/pl/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   324
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   334
diff -r b527e8800278 mcabber/doc/help/ru/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   335
--- a/mcabber/doc/help/ru/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   336
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Tue Mar 12 01:21:22 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 в текущем буфере (истории переписки)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   346
diff -r b527e8800278 mcabber/doc/help/ru/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   347
--- a/mcabber/doc/help/ru/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   348
+++ b/mcabber/doc/help/ru/hlp_del.txt	Tue Mar 12 01:21:22 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) из списка контактов, отключает уведомления о его статусе и отключает уведомление пользователя о вашем статусе.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   356
diff -r b527e8800278 mcabber/doc/help/ru/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   357
--- a/mcabber/doc/help/ru/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   358
+++ b/mcabber/doc/help/ru/hlp_move.txt	Tue Mar 12 01:21:22 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
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   368
diff -r b527e8800278 mcabber/doc/help/ru/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   369
--- a/mcabber/doc/help/ru/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   370
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Tue Mar 12 01:21:22 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.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   380
diff -r b527e8800278 mcabber/doc/help/uk/hlp_buffer.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   381
--- a/mcabber/doc/help/uk/hlp_buffer.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   382
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Tue Mar 12 01:21:22 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
  Перейти до вказаної у процентах позиції.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   392
diff -r b527e8800278 mcabber/doc/help/uk/hlp_del.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   393
--- a/mcabber/doc/help/uk/hlp_del.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   394
+++ b/mcabber/doc/help/uk/hlp_del.txt	Tue Mar 12 01:21:22 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) зі списку. Також відписатися від його сповіщень про статус і відписати його від ваших.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   402
diff -r b527e8800278 mcabber/doc/help/uk/hlp_move.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   403
--- a/mcabber/doc/help/uk/hlp_move.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   404
+++ b/mcabber/doc/help/uk/hlp_move.txt	Tue Mar 12 01:21:22 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", щоб перейти до нового місця контакту контакту.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   414
diff -r b527e8800278 mcabber/doc/help/uk/hlp_rename.txt
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   415
--- a/mcabber/doc/help/uk/hlp_rename.txt	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   416
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Tue Mar 12 01:21:22 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 дозволяють перейменовувати об’єкти, відмінні від поточного.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   425
diff -r b527e8800278 mcabber/mcabber/commands.c
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   426
--- a/mcabber/mcabber/commands.c	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   427
+++ b/mcabber/mcabber/commands.c	Tue Mar 12 01:21:22 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>
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   437
@@ -43,512 +43,671 @@
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,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   459
+} group_scmd_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   460
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   461
+static void group_cmd (gpointer group, group_scmd_t action);
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,
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   469
+                 def_status_to;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   470
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   471
+                 def_add,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   472
+                 def_del,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   473
+                 def_group,
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)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   558
+static gchar *do_roster    (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   559
+static gchar *do_color     (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   560
+static gchar *do_status    (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   561
+static gchar *do_status_to (cmdopts_t *command);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   562
+#if 0
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   563
+static gchar *do_add (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   564
+static gchar *do_del (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   565
+static gchar *do_group (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   566
+static gchar *do_say (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   567
+static gchar *do_msay (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   568
+static gchar *do_say_to (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   569
+static gchar *do_buffer (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   570
+static gchar *do_clear (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   571
+static gchar *do_info (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   572
+static gchar *do_rename (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   573
+static gchar *do_move (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   574
+static gchar *do_set (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   575
+static gchar *do_alias (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   576
+static gchar *do_bind (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   577
+static gchar *do_connect (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   578
+static gchar *do_disconnect (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   579
+static gchar *do_rawxml (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   580
+static gchar *do_room (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   581
+static gchar *do_authorization (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   582
+static gchar *do_version (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   583
+static gchar *do_request (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   584
+static gchar *do_event (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   585
+static gchar *do_help (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   586
+static gchar *do_pgp (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   587
+static gchar *do_iline (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   588
+static gchar *do_screen_refresh (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   589
+static gchar *do_chat_disable (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   590
+static gchar *do_source (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   591
+static gchar *do_otr (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   592
+static gchar *do_otrpolicy (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   593
+static gchar *do_echo (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   594
+static gchar *do_module (cmdopts_t *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   595
+static gchar *do_exit (cmdopts_t *command);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   596
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   597
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   598
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   599
+//  Main commands mechanics
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   600
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   601
+// Functions to parse mcabber command line and execute commands accordingly.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   602
+// Allows to define commands and remove definitions.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   603
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   604
+cmdopts_t **cmd_list  = NULL; // command structs list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   605
+gsize       cmd_count = 0;    // number of commands (one less than memory allocated)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   606
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   607
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   608
+void cmd_init (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   609
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   610
-  GSList *sl_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   611
-  if (!id) return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   612
-  for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   613
-    if (sl_cmd -> data == id) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   614
-      cmd *command = (cmd *) sl_cmd->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   615
-      gpointer userdata = command->userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   616
-      Commands = g_slist_delete_link(Commands, sl_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   617
-      compl_del_category_word(COMPL_CMD, command->name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   618
-      g_slice_free(cmd, command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   619
-      return userdata;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   620
+  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
   621
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   622
+  cmd_list[0]  = &def_roster;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   623
+  cmd_list[1]  = &def_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   624
+  cmd_list[2]  = &def_status;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   625
+  cmd_list[3]  = &def_status_to;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   626
+#if 0
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   627
+  cmd_list[4]  = def_add;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   628
+  cmd_list[5]  = def_del;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   629
+  cmd_list[6]  = def_group;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   630
+  cmd_list[7]  = def_say;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   631
+  cmd_list[8]  = def_msay;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   632
+  cmd_list[9]  = def_say_to;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   633
+  cmd_list[10] = def_buffer;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   634
+  cmd_list[11] = def_clear;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   635
+  cmd_list[12] = def_info;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   636
+  cmd_list[13] = def_rename;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   637
+  cmd_list[14] = def_move;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   638
+  cmd_list[15] = def_set;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   639
+  cmd_list[16] = def_alias;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   640
+  cmd_list[17] = def_bind;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   641
+  cmd_list[18] = def_connect;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   642
+  cmd_list[19] = def_disconnect;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   643
+  cmd_list[20] = def_rawxml;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   644
+  cmd_list[21] = def_room;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   645
+  cmd_list[22] = def_authorization;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   646
+  cmd_list[23] = def_version;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   647
+  cmd_list[24] = def_request;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   648
+  cmd_list[25] = def_event;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   649
+  cmd_list[26] = def_help;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   650
+  cmd_list[27] = def_pgp;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   651
+  cmd_list[28] = def_iline;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   652
+  cmd_list[29] = def_screen_refresh;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   653
+  cmd_list[30] = def_chat_disable;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   654
+  cmd_list[31] = def_source;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   655
+  cmd_list[32] = def_otr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   656
+  cmd_list[33] = def_otrpolicy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   657
+  cmd_list[34] = def_echo;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   658
+  cmd_list[35] = def_module;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   659
+  cmd_list[36] = def_exit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   660
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   661
+  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
   662
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   663
+  cmd_count = BUILTIN_COUNT;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   664
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   665
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   666
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   667
+void cmd_uninit (void)
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
+  g_free (cmd_list);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   670
+  cmd_list  = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   671
+  cmd_count = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   672
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   673
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   674
+// XXX:
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   675
+//  * 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
   676
+void cmd_define (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   677
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   678
+  cmdopts_t **cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   679
+  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
   680
+    if (*cmd == command)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   681
+      return;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   682
+  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
   683
+  cmd_list[cmd_count] = command;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   684
+  cmd_count ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   685
+  cmd_list[cmd_count] = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   686
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   687
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   688
+void cmd_undef (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   689
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   690
+  size_t num = 0;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   691
+  while (num < cmd_count) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   692
+    if (cmd_list[num] == command) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   693
+      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
   694
+      cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   695
+      cmd_count --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   696
+      return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   697
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   698
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   699
+    num ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   700
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   701
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   702
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   703
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   704
-//  cmd_add()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   705
-// 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
   706
-gpointer cmd_add(const char *name, const char *help, guint flags_row1,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   707
-                 guint flags_row2, void (*f)(char*), gpointer userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   708
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   709
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   710
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   711
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   712
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   713
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   714
+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
   715
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   716
-  cmd *n_cmd = g_slice_new0(cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   717
-  strncpy(n_cmd->name, name, 32-1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   718
-  n_cmd->help = help;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   719
-  n_cmd->completion_flags[0] = flags_row1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   720
-  n_cmd->completion_flags[1] = flags_row2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   721
-  n_cmd->func = f;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   722
-  n_cmd->userdata = userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   723
-  Commands = g_slist_prepend(Commands, n_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   724
-  // Add to completion CMD category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   725
-  compl_add_category_word(COMPL_CMD, name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   726
-  return n_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   727
+  gchar *p = *pr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   728
+  gchar *e = *er;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   729
+  const char *error = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   730
+  gboolean   quotes = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   731
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   732
+  if ((flags & cmdarg_catchall) && (flags & cmdarg_plain)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   733
+    *pr = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   734
+    return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   735
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   736
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   737
+  while (p <= e && error != NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   738
+    if (p == e && quotes) { // end of line in quotes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   739
+      error = "Unfinished quoted argument.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   740
+    } else if ((*p == ' ' && (!quotes) && !(flags & cmdarg_catchall)) || p == e) { // argument ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   741
+      if (*p != '\0') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   742
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   743
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   744
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   745
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   746
+    } else if (*p == '\\' && !(flags & cmdarg_plain)) { // next char escape
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   747
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   748
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   749
+      if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   750
+        error = "Escape at the end of line.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   751
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   752
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   753
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   754
+    } else if (*p == '"' && !(flags & cmdarg_plain)) { // quotation start/end
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   755
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   756
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   757
+      quotes = !quotes;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   758
+    } else { // still argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   759
+      p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   760
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   761
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   762
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   763
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   764
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   765
+  return error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   766
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   767
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   768
-//  cmd_set_safe(name, safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   769
-// Sets if command can be used in startup configuration file.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   770
-gboolean cmd_set_safe(const gchar *name, gboolean safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   771
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   772
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   773
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   774
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   775
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   776
+static gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   777
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   778
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   779
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   780
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   781
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   782
-    if (!strcmp((const char *)sel->data, name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   783
-      if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   784
-        return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   785
-      else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   786
-        g_free(sel->data);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   787
-        safe_commands = g_slist_delete_link(safe_commands, sel);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   788
+  enum {             // Parser state transitions:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   789
+    in_space,        // -> in_space, in_optstart, in_argstart
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   790
+    in_optstart,     // -> in_shortoptend, in_longoptstart, in_argstart ("-")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   791
+    in_shortoptend,  // -> in_space, in_argstart, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   792
+    in_longoptstart, // -> in_longopt, in_space, in_argstart ("---")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   793
+    in_longopt,      // -> in_longopt, in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   794
+    in_argstart,     // -> in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   795
+  } state = in_argstart;     // current parser state
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   796
+  gchar    *p        = *pr;  // current pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   797
+  gchar    *e        = *er;  // end of line pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   798
+  gchar    *s;               // start of current object pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   799
+  gboolean opts_ended = FALSE; // don't allow options any more
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   800
+  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
   801
+  size_t   argno     = 0;    // number of current positional argument
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   802
+  gchar    *error    = NULL; // error message to return
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   803
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   804
+  // general environment checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   805
+  if (command -> check) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   806
+    if ((error = command -> check (command))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   807
+      gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   808
+      error = g_strdup_printf("%s: %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   809
+      g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   810
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   811
+  }
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
+  // prepare: set default values for arguments and unset some fields
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   814
+  if (error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   815
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   816
+    if (command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   817
+      for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   818
+        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
   819
+        if (opt -> flags & cmdopt_switch) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   820
+          opt -> arg.value.swc = 0;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   821
+        } else {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   822
+          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
   823
+        }
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   824
+        opt -> arg.flags &= ~(cmdarg_ppclear);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   825
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   826
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   827
-  if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   828
-    safe_commands = g_slist_append(safe_commands, g_strdup(name));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   829
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   830
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   831
-  return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   832
+    if (command -> args) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   833
+      for (n = 0; command -> args[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   834
+        cmdarg_t *arg = command -> args[n]; 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   835
+        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
   836
+        arg -> flags  &= ~(cmdarg_ppclear);
74
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
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   839
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   840
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   841
+  // we allow parser to do one extra run on final '\0'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   842
+  while (p <= e && error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   843
+    if (state == in_space) { // space between args/options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   844
+      if (*p == ' ' || p == e) { // still space
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   845
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   846
+      } else if (*p == '-' && !opts_ended) { // option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   847
+        state = in_optstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   848
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   849
+      } else { // argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   850
+        if (!option) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   851
+          opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   852
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   853
+        s = p;
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_optstart) { // long/short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   857
+      if (*p == ' ' || p == e) { // argument '-'
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
+        s = p = p - 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   860
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   861
+      } else if (*p == '-') { // long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   862
+        state = in_longoptstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   863
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   864
+      } else { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   865
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   866
+        state = in_shortoptend;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   867
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   868
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   869
+    } else if (state == in_shortoptend) { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   870
+      if (*p == ' ' || p == e) { // option really ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   871
+        gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   872
+        for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   873
+          if (command -> opts[n] -> shortopt == *s) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   874
+            option = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   875
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   876
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   877
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   878
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   879
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   880
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   881
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   882
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   883
+            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
   884
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   885
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   886
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   887
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   888
+          error = g_strdup_printf ("%s: Unknown option -%c.", command -> name, *s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   889
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   890
+      } else { // short option not ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   891
+        // consider it argument (to allow -autojoin)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   892
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   893
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   894
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   895
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   896
+    } else if (state == in_longoptstart) { // long option initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   897
+      if (*p == ' ' || p == e) { // end of options '--'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   898
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   899
+        state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   900
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   901
+      } else if (*p == '-') { // argument, starting with '---'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   902
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   903
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   904
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   905
+      } else { // it is long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   906
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   907
+        state = in_longopt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   908
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   909
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   910
+    } else if (state == in_longopt) { // long option name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   911
+      if (*p == ' ' || p == e) { // long option ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   912
+        gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   913
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   914
+        for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   915
+          if (!g_strcmp0(command -> opts[n] -> longopt, s)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   916
+            option = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   917
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   918
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   919
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   920
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   921
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   922
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   923
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   924
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   925
+            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
   926
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   927
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   928
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   929
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   930
+          error = g_strdup_printf ("%s: Unknown option --%s.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   931
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   932
+      } else { // still long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   933
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   934
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   935
+    } 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
   936
+      const char *err;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   937
+      cmdarg_t   *arg;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   938
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   939
+      if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   940
+        arg = &(option -> arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   941
+      } else if (!command -> args || !command -> args[argno]) { // no need to parse arguments any further
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   942
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   943
+      } else { // normal aurgument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   944
+        arg = command -> args[argno];
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   947
+      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
   948
+        if (!option) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   949
+          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
   950
+        } else if (option -> shortopt) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   951
+          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
   952
+        } else {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   953
+          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
   954
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   955
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   956
+        arg -> value.arg = s;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   957
+        arg -> flags |= cmdarg_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   958
+        if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   959
+          option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   960
+        } else { // normal argument
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
   961
+          if (arg -> flags & cmdarg_subcmd) { // subcommand
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   962
+            cmdopts_t *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   963
+            gsize     n; // XXX put command list into chkdata
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   964
+            for (n = 0; command -> cmds[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   965
+              if (!strcmp (s, command -> cmds[n] -> name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   966
+                subcmd = command -> cmds[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   967
+                break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   968
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   969
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   970
+            if (subcmd != NULL) { // found subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   971
+              arg -> value.cmd = subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   972
+              if ((error = cmdopts_parse_internal (&p, &e, subcmd))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   973
+                gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   974
+                error = g_strdup_printf("%s %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   975
+                g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   976
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   977
+            } else { // wrong subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   978
+              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
   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
+          argno ++;
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
+      state = in_space;
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
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   987
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   988
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   989
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   990
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   991
+  // perform option argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   992
+  if (error == NULL && command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   993
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   994
+    for (n = 0; command -> opts[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   995
+      cmdopt_t *opt = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   996
+      if (!(opt -> flags & cmdopt_switch)) { // not a switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   997
+        // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   998
+        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
   999
+          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
  1000
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1001
+            opt -> arg.flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1002
+            if ((err = opt -> arg.type -> check (&(opt -> arg)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1003
+              if (opt -> arg.flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1004
+                if (opt -> shortopt) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1005
+                  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
  1006
+                } else {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1007
+                  error = g_strdup_printf ("%s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1008
+                }
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;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1011
+              } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1012
+                if (opt -> shortopt) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1013
+                  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
  1014
+                } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1015
+                  scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1016
+                }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1017
+                g_free (err);
74
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
+      }
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1026
+  // perform positional argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1027
+  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
  1028
+    size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1029
+    for (n = 0; command -> args[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1030
+      cmdarg_t *arg = command -> args[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1031
+      // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1032
+      if ((arg -> flags & (cmdarg_check | cmdarg_visited)) && !(arg -> flags & cmdarg_checked)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1033
+        if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1034
+          if (!arg -> value.cmd) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1035
+            if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1036
+              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
  1037
+              break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1038
+            } else { // XXX more prefixes
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1039
+              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
  1040
+            }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1041
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1042
+        } else { // normal argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1043
+          if (arg -> type && arg -> type -> check) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1044
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1045
+            arg -> flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1046
+            if ((err = arg -> type -> check (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1047
+              if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1048
+                error = g_strdup_printf ("%s: Error in argument %s (%u): %s", command -> name, arg -> name, n, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1049
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1050
+                break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1051
+              } else { // XXX more prefixes
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1052
+                scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument %s (%u): %s", command -> name, arg -> name, n, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1053
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1054
+              }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1055
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1056
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1057
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1058
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1059
+    }
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1062
+  return error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1063
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1064
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1065
-//  cmd_is_safe(name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1066
-// Returns if command is safe or not
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1067
-gboolean cmd_is_safe(const gchar *name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1068
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1069
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1070
+static void cmdopts_free(cmdopts_t *command)
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
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1073
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1074
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1075
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1076
-    if (!strcmp((const char *)sel->data, name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1077
-      return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1078
-  return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1079
+  gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1080
+  if (command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1081
+    for (n = 0; command -> opts[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1082
+      cmdopt_t *opt = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1083
+      if (!(opt -> flags & cmdopt_switch)) { // not switch
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1084
+        if (opt -> arg.flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1085
+          opt -> arg.flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1086
+          if (opt -> arg.type && opt -> arg.type -> free) { // need to free something
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1087
+            opt -> arg.type -> free (&(opt -> arg));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1088
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1089
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1090
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1091
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1092
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1093
+  if (command -> args) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1094
+    for (n = 0; command -> args[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1095
+      cmdarg_t *arg = command -> args[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1096
+      if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1097
+        if (arg -> value.cmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1098
+          cmdopts_free (arg -> value.cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1099
+          arg -> value.cmd = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1100
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1101
+      } else { // normal argument
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1102
+        if (arg -> flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1103
+          arg -> flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1104
+          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
  1105
+            arg -> type -> free (arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1106
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1107
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1108
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1109
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1110
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1111
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1112
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1113
-//  cmd_init()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1114
-// Commands table initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1115
-// !!!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1116
-// After changing commands names and it arguments names here, you must change
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1117
-// ones in init_bindings()!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1118
-//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1119
-void cmd_init(void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1120
+cmd_result_t cmd_execute_internal (gchar *commandline, cmdexe_flags_t flags)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1121
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1122
-  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
  1123
-  cmd_add("alias", "Add an alias", 0, 0, &do_alias, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1124
-  cmd_add("authorization", "Manage subscription authorizations",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1125
-          COMPL_AUTH, COMPL_JID, &do_authorization, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1126
-  cmd_add("bind", "Add an key binding", 0, 0, &do_bind, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1127
-  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1128
-          COMPL_BUFFER, 0, &do_buffer, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1129
-  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
  1130
-  cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1131
-  cmd_add("color", "Set coloring options", COMPL_COLOR, 0, &do_color, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1132
-  cmd_add("connect", "Connect to the server", 0, 0, &do_connect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1133
-  cmd_add("del", "Delete the current buddy", 0, 0, &do_del, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1134
-  cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1135
-  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
  1136
-  cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1137
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1138
-  cmd_add("exit",  "Exit mcabber", 0, 0, &do_exit, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1139
-  cmd_add("group", "Change group display settings",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1140
-          COMPL_GROUP, COMPL_GROUPNAME, &do_group, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1141
-  cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1142
-  cmd_add("iline", "Manipulate input buffer", 0, 0, &do_iline, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1143
-  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
  1144
-  cmd_add("module", "Manipulations with modules", COMPL_MODULE, 0, &do_module,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1145
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1146
-  cmd_add("move", "Move the current buddy to another group", COMPL_GROUPNAME,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1147
-          0, &do_move, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1148
-  cmd_add("msay", "Send a multi-lines message to the selected buddy",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1149
-          COMPL_MULTILINE, 0, &do_msay, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1150
-  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
  1151
-  cmd_add("otrpolicy", "Manage OTR policies", COMPL_JID, COMPL_OTRPOLICY,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1152
-          &do_otrpolicy, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1153
-  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
  1154
-  cmd_add("quit", "Exit the software", 0, 0, NULL, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1155
-  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
  1156
-  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1157
-  cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1158
-          &do_request, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1159
-  cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1160
-  cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1161
-          &do_roster, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1162
-  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
  1163
-  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
  1164
-          &do_say_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1165
-  cmd_add("screen_refresh", "Redraw mcabber screen", 0, 0, &do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1166
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1167
-  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
  1168
-  cmd_add("source", "Read a configuration file", 0, 0, &do_source, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1169
-  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
  1170
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1171
-  cmd_add("status_to", "Show or set your status for one recipient",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1172
-          COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1173
-  cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1174
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1175
-  cmd_set_safe("set", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1176
-  cmd_set_safe("bind", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1177
-  cmd_set_safe("alias", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1178
-  cmd_set_safe("pgp", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1179
-  cmd_set_safe("source", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1180
-  cmd_set_safe("status", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1181
-  cmd_set_safe("color", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1182
-  cmd_set_safe("otrpolicy", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1183
-  cmd_set_safe("module", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1184
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1185
-  // Status category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1186
-  compl_add_category_word(COMPL_STATUS, "online");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1187
-  compl_add_category_word(COMPL_STATUS, "avail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1188
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1189
-  compl_add_category_word(COMPL_STATUS, "invisible");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1190
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1191
-  compl_add_category_word(COMPL_STATUS, "free");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1192
-  compl_add_category_word(COMPL_STATUS, "dnd");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1193
-  compl_add_category_word(COMPL_STATUS, "notavail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1194
-  compl_add_category_word(COMPL_STATUS, "away");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1195
-  compl_add_category_word(COMPL_STATUS, "offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1196
-  compl_add_category_word(COMPL_STATUS, "message");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1197
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1198
-  // Roster category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1199
-  compl_add_category_word(COMPL_ROSTER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1200
-  compl_add_category_word(COMPL_ROSTER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1201
-  compl_add_category_word(COMPL_ROSTER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1202
-  compl_add_category_word(COMPL_ROSTER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1203
-  compl_add_category_word(COMPL_ROSTER, "group_prev");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1204
-  compl_add_category_word(COMPL_ROSTER, "group_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1205
-  compl_add_category_word(COMPL_ROSTER, "hide");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1206
-  compl_add_category_word(COMPL_ROSTER, "show");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1207
-  compl_add_category_word(COMPL_ROSTER, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1208
-  compl_add_category_word(COMPL_ROSTER, "display");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1209
-  compl_add_category_word(COMPL_ROSTER, "hide_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1210
-  compl_add_category_word(COMPL_ROSTER, "show_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1211
-  compl_add_category_word(COMPL_ROSTER, "toggle_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1212
-  compl_add_category_word(COMPL_ROSTER, "item_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1213
-  compl_add_category_word(COMPL_ROSTER, "item_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1214
-  compl_add_category_word(COMPL_ROSTER, "item_toggle_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1215
-  compl_add_category_word(COMPL_ROSTER, "alternate");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1216
-  compl_add_category_word(COMPL_ROSTER, "search");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1217
-  compl_add_category_word(COMPL_ROSTER, "unread_first");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1218
-  compl_add_category_word(COMPL_ROSTER, "unread_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1219
-  compl_add_category_word(COMPL_ROSTER, "note");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1220
-  compl_add_category_word(COMPL_ROSTER, "resource_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1221
-  compl_add_category_word(COMPL_ROSTER, "resource_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1222
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1223
-  // Buffer category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1224
-  compl_add_category_word(COMPL_BUFFER, "clear");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1225
-  compl_add_category_word(COMPL_BUFFER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1226
-  compl_add_category_word(COMPL_BUFFER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1227
-  compl_add_category_word(COMPL_BUFFER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1228
-  compl_add_category_word(COMPL_BUFFER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1229
-  compl_add_category_word(COMPL_BUFFER, "search_backward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1230
-  compl_add_category_word(COMPL_BUFFER, "search_forward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1231
-  compl_add_category_word(COMPL_BUFFER, "readmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1232
-  compl_add_category_word(COMPL_BUFFER, "date");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1233
-  compl_add_category_word(COMPL_BUFFER, "%");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1234
-  compl_add_category_word(COMPL_BUFFER, "purge");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1235
-  compl_add_category_word(COMPL_BUFFER, "close");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1236
-  compl_add_category_word(COMPL_BUFFER, "close_all");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1237
-  compl_add_category_word(COMPL_BUFFER, "scroll_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1238
-  compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1239
-  compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1240
-  compl_add_category_word(COMPL_BUFFER, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1241
-  compl_add_category_word(COMPL_BUFFER, "save");
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
-  // Group category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1244
-  compl_add_category_word(COMPL_GROUP, "fold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1245
-  compl_add_category_word(COMPL_GROUP, "unfold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1246
-  compl_add_category_word(COMPL_GROUP, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1247
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1248
-  // Multi-line (msay) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1249
-  compl_add_category_word(COMPL_MULTILINE, "abort");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1250
-  compl_add_category_word(COMPL_MULTILINE, "begin");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1251
-  compl_add_category_word(COMPL_MULTILINE, "send");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1252
-  compl_add_category_word(COMPL_MULTILINE, "send_to");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1253
-  compl_add_category_word(COMPL_MULTILINE, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1254
-  compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1255
-  compl_add_category_word(COMPL_MULTILINE, "verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1256
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1257
-  // Room category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1258
-  compl_add_category_word(COMPL_ROOM, "affil");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1259
-  compl_add_category_word(COMPL_ROOM, "ban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1260
-  compl_add_category_word(COMPL_ROOM, "bookmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1261
-  compl_add_category_word(COMPL_ROOM, "destroy");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1262
-  compl_add_category_word(COMPL_ROOM, "invite");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1263
-  compl_add_category_word(COMPL_ROOM, "join");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1264
-  compl_add_category_word(COMPL_ROOM, "kick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1265
-  compl_add_category_word(COMPL_ROOM, "leave");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1266
-  compl_add_category_word(COMPL_ROOM, "names");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1267
-  compl_add_category_word(COMPL_ROOM, "nick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1268
-  compl_add_category_word(COMPL_ROOM, "privmsg");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1269
-  compl_add_category_word(COMPL_ROOM, "remove");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1270
-  compl_add_category_word(COMPL_ROOM, "role");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1271
-  compl_add_category_word(COMPL_ROOM, "setopt");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1272
-  compl_add_category_word(COMPL_ROOM, "topic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1273
-  compl_add_category_word(COMPL_ROOM, "unban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1274
-  compl_add_category_word(COMPL_ROOM, "unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1275
-  compl_add_category_word(COMPL_ROOM, "whois");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1276
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1277
-  // Authorization category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1278
-  compl_add_category_word(COMPL_AUTH, "allow");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1279
-  compl_add_category_word(COMPL_AUTH, "cancel");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1280
-  compl_add_category_word(COMPL_AUTH, "request");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1281
-  compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
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
-  // Request (query) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1284
-  compl_add_category_word(COMPL_REQUEST, "last");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1285
-  compl_add_category_word(COMPL_REQUEST, "ping");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1286
-  compl_add_category_word(COMPL_REQUEST, "time");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1287
-  compl_add_category_word(COMPL_REQUEST, "vcard");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1288
-  compl_add_category_word(COMPL_REQUEST, "version");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1289
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1290
-  // Events category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1291
-  compl_add_category_word(COMPL_EVENTS, "accept");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1292
-  compl_add_category_word(COMPL_EVENTS, "ignore");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1293
-  compl_add_category_word(COMPL_EVENTS, "reject");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1294
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1295
-  // PGP category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1296
-  compl_add_category_word(COMPL_PGP, "disable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1297
-  compl_add_category_word(COMPL_PGP, "enable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1298
-  compl_add_category_word(COMPL_PGP, "force");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1299
-  compl_add_category_word(COMPL_PGP, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1300
-  compl_add_category_word(COMPL_PGP, "setkey");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1301
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1302
-  // OTR category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1303
-  compl_add_category_word(COMPL_OTR, "start");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1304
-  compl_add_category_word(COMPL_OTR, "stop");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1305
-  compl_add_category_word(COMPL_OTR, "fingerprint");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1306
-  compl_add_category_word(COMPL_OTR, "smpq");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1307
-  compl_add_category_word(COMPL_OTR, "smpr");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1308
-  compl_add_category_word(COMPL_OTR, "smpa");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1309
-  compl_add_category_word(COMPL_OTR, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1310
-  compl_add_category_word(COMPL_OTR, "key");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1311
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1312
-  // OTR Policy category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1313
-  compl_add_category_word(COMPL_OTRPOLICY, "plain");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1314
-  compl_add_category_word(COMPL_OTRPOLICY, "manual");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1315
-  compl_add_category_word(COMPL_OTRPOLICY, "opportunistic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1316
-  compl_add_category_word(COMPL_OTRPOLICY, "always");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1317
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1318
-  // Color category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1319
-  compl_add_category_word(COMPL_COLOR, "roster");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1320
-  compl_add_category_word(COMPL_COLOR, "muc");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1321
-  compl_add_category_word(COMPL_COLOR, "mucnick");
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
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1324
-  // Module category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1325
-  compl_add_category_word(COMPL_MODULE, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1326
-  compl_add_category_word(COMPL_MODULE, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1327
-  compl_add_category_word(COMPL_MODULE, "load");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1328
-  compl_add_category_word(COMPL_MODULE, "unload");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1329
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1330
+  gchar *s = commandline;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1331
+  gchar *p, *e;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1332
+  gchar *freeme = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1333
+  const char *err;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1334
+  gchar      *error;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1335
+  cmdopts_t  *command = NULL;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1336
+  const char *alias   = NULL;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1337
+  size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1338
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1339
+  // skip command indicator and spaces at the beginning
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1340
+  while (*s == COMMAND_CHAR || *s == ' ')
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1341
+    s ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1342
+  p = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1343
+  e = s + strlen (s);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1344
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1345
+  // 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
  1346
+  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
  1347
+    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
  1348
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1349
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1350
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1351
+  // check for quit command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1352
+  if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1353
+    return cmd_result_quit;
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1356
+  // 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
  1357
+  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
  1358
+    if (strcmp (s, "msay")) { // it is not msay
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1359
+      return cmd_result_verbatim;
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1363
+  // check and expand alias
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1364
+  if ((alias = settings_get (SETTINGS_TYPE_ALIAS, s))) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1365
+    freeme = s = g_strdup_printf ("%s %s", alias, p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1366
+    p = s;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1367
+    e = s + strlen (s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1368
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1369
+    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
  1370
+      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
  1371
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1372
+      return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1373
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1374
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1375
+    // check for quit command again
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1376
+    if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1377
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1378
+      return cmd_result_quit;
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1382
+  // 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
  1383
+  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
  1384
+    if (!strcmp (s, cmd_list[n] -> name)) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1385
+      command = cmd_list[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1386
+      break;
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
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1389
+  if (command == NULL) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1390
+    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
  1391
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1392
+    return cmd_result_not_found;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1393
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1394
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1395
+  // check safety
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1396
+  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
  1397
+    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
  1398
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1399
+    return cmd_result_not_found;
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1402
+  // parse command line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1403
+  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
  1404
+    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
  1405
+    g_free (error);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1406
+    cmdopts_free (command);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1407
+    g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1408
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1409
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1410
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1411
+  // execute command handler
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1412
+  if (command -> handle) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1413
+    if ((error = command -> handle (command))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1414
+      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
  1415
+      g_free (error);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1416
+      cmdopts_free (command);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1417
+      g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1418
+      return cmd_result_runtime_error;
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
+  }
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
+  // free resources
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1423
+  cmdopts_free (command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1424
+  g_free (freeme);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1425
+  return cmd_result_ok;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1426
 }
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
-//  expandalias(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1429
-// 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
  1430
-// If no alias is found, returns line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1431
-// Note: if the returned pointer is different from line, the caller should
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1432
-//       g_free() the pointer after use
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1433
-char *expandalias(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1434
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1435
+// 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
  1436
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1437
+// 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
  1438
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1439
+cmd_result_t process_line(const char *line)
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
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1442
-  char *word;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1443
-  const gchar *value;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1444
-  char *newline = (char*)line;
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
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1447
-  for (p1 = line ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1448
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1449
-  // Locate the end of the word
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1450
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
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
-  // Extract the word and look for an alias in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1453
-  word = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1454
-  value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1455
-  g_free(word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1456
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1457
-  if (value)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1458
-    newline = g_strdup_printf("%c%s%s", COMMAND_CHAR, value, p2);
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
-  return newline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1461
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1462
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1463
-//  cmd_get
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1464
-// Finds command in the command list structure.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1465
-// 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
  1466
-cmd *cmd_get(const char *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1467
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1468
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1469
-  char *com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1470
-  GSList *sl_com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1471
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1472
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1473
-  for (p1 = command ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1474
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1475
-  // Locate the end of the command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1476
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1477
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1478
-  // Copy the clean command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1479
-  com = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1480
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1481
-  // Look for command in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1482
-  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
  1483
-    if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1484
-      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1485
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1486
-  g_free(com);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1487
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1488
-  if (sl_com)       // Command has been found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1489
-    return (cmd*)sl_com->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1490
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1491
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1492
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1493
-//  process_command(line, iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1494
-// Process a command line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1495
-// 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
  1496
-// it is intended to be used for key bindings.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1497
-// 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
  1498
-int process_command(const char *line, guint iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1499
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1500
-  char *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1501
-  char *xpline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1502
-  cmd *curcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1503
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1504
-  if (!line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1505
-    return 0;
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
-  // We do alias expansion here
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1508
-  if (iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1509
-    xpline = expandalias(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1510
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1511
-    xpline = (char*)line; // No expansion in verbatim multi-line mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1512
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1513
-  // We want to use a copy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1514
-  if (xpline == line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1515
-    xpline = g_strdup(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1516
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1517
-  // Remove trailing spaces:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1518
-  for (p=xpline ; *p ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1519
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1520
-  for (p-- ; p>xpline && (*p == ' ') ; p--)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1521
-    *p = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1522
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1523
-  // Command "quit"?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1524
-  if ((iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1525
-      && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1526
-    if (!xpline[5] || xpline[5] == ' ') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1527
-      g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1528
-      return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1529
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1530
-  } else if (iscmd && !strncasecmp(xpline, "quit", 4) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1531
-             (!xpline[4] || xpline[4] == ' ')) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1532
-    // 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
  1533
-    // character (usually '/').
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1534
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1535
-    return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1536
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1537
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1538
-  // 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
  1539
-  if (!iscmd && scr_get_multimode() == 2
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1540
-      && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1541
-    // It isn't an /msay command
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1542
-    scr_append_multiline(xpline);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1543
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1544
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1545
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1546
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1547
-  // Commands handling
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1548
-  curcmd = cmd_get(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1549
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1550
-  if (!curcmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1551
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized command.  "
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1552
-                 "Please see the manual for a list of known commands.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1553
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1554
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1555
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1556
-  if (!curcmd->func) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1557
-    scr_LogPrint(LPRINT_NORMAL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1558
-                 "This functionality is not yet implemented, sorry.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1559
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1560
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1561
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1562
-  // Lets go to the command parameters
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1563
-  for (p = xpline+1; *p && (*p != ' ') ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1564
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1565
-  // Skip spaces
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1566
-  while (*p && (*p == ' '))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1567
-    p++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1568
-  // Call command-specific function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1569
-  retval_for_cmds = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1570
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1571
-  if (curcmd->userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1572
-    (*(void (*)(char *p, gpointer u))curcmd->func)(p, curcmd->userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1573
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1574
-    (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1575
-#else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1576
-  (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1577
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1578
-  g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1579
-  return retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1580
-}
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
-//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1583
-// Process a command/message line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1584
-// 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
  1585
-// currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1586
-// Return 255 if the line is the /quit command, or 0.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1587
-int process_line(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1588
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1589
+  gchar *utf8;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1590
+  int retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1591
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1592
   if (!*line) { // User only pressed enter
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1593
     if (scr_get_multimode()) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1594
       scr_append_multiline("");
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1595
@@ -556,141 +715,516 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1596
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1597
     if (current_buddy) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1598
       if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1599
-        do_group("toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1600
+        group_cmd (BUDDATA(current_buddy), scmd_group_toggle);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1601
       else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1602
         // Enter chat mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1603
         scr_set_chatmode(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1604
         scr_show_buddy_window();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1605
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1606
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1607
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1608
+    return cmd_result_input;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1609
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1610
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1611
-  if (*line != COMMAND_CHAR) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1612
-    // This isn't a command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1613
+  utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1614
+  if (*line != COMMAND_CHAR) { // input line
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1615
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1616
-      scr_append_multiline(line);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1617
+      scr_append_multiline(utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1618
     else
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1619
-      say_cmd((char*)line, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1620
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1621
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1622
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1623
-  /* It is _probably_ a command -- except for verbatim multi-line mode */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1624
-  return process_command(line, FALSE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1625
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1626
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1627
-// Helper routine for buffer item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1628
-// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1629
-static void roster_buddylock(char *bjid, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1630
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1631
-  gpointer bud = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1632
-  bool may_need_refresh = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1633
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1634
-  // Allow special jid "" or "." (current buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1635
-  if (bjid && (!*bjid || !strcmp(bjid, ".")))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1636
-    bjid = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1637
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1638
-  if (bjid) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1639
-    // The JID has been specified.  Quick check...
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1640
-    if (check_jid_syntax(bjid)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1641
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1642
-                   "<%s> is not a valid Jabber ID.", bjid);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1643
-    } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1644
-      // Find the buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1645
-      GSList *roster_elt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1646
-      roster_elt = roster_find(bjid, jidsearch,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1647
-                               ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1648
-      if (roster_elt)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1649
-        bud = roster_elt->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1650
-      else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1651
-        scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1652
-      may_need_refresh = TRUE;
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
-  } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1655
-    // Use the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1656
-    if (current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1657
-      bud = BUDDATA(current_buddy);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1658
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1659
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1660
-  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1661
-  if (bud) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1662
-    if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1663
-      lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1664
-    buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1665
-    if (may_need_refresh) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1666
-      buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1667
-      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
  1668
+      say_cmd(utf8, msgtype_not_set);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1669
+    retval = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1670
+  } else { // command or verbatim multiline message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1671
+    retval = cmd_execute_internal (utf8, cmdexe_check_verbatim);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1672
+    if (retval == cmd_result_verbatim) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1673
+      g_free(utf8); // buffer has been corrupted by parser
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1674
+      utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1675
+      scr_append_multiline(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1676
+      retval = cmd_result_input;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1677
     }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1678
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1679
+  g_free(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1680
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1681
+  return retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1682
 }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1683
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1684
-static void roster_resourcelock(char *jidres, gboolean lock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1685
-  gpointer bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1686
-  char *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1687
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1688
-  if (!jidres) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1689
-    if (lock) return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1690
-    jidres = ".";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1691
-  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1692
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1693
-  if (jidres[0] == '.' &&
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1694
-      (jidres[1] == '\0' || jidres[1] == JID_RESOURCE_SEPARATOR)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1695
-    //Special jid: . or ./resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1696
-    switch (jidres[1]) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1697
-      case JID_RESOURCE_SEPARATOR:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1698
-        resource = jidres+2;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1699
-      case '\0':
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1700
-        if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1701
-          bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1702
-    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1703
-  } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1704
-    char *tmp;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1705
-    if (!check_jid_syntax(jidres) &&
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1706
-        (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1707
-      //Any other valid full jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1708
-      *tmp = '\0'; // for roster search by bare jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1709
-      resource = tmp+1;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1710
-      GSList *roster_elt;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1711
-      roster_elt = roster_find(jidres, jidsearch,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1712
-          ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1713
-      if (roster_elt)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1714
-        bud = roster_elt->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1715
-      *tmp = JID_RESOURCE_SEPARATOR;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1716
-    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1717
-    if (!bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1718
-      //Resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1719
-      if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1720
-        bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1721
-      resource = jidres;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1722
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1723
+//  Standard types
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1724
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1725
+// This section contains standard argument type definitions, used in built-in
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1726
+// mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1727
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1728
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1729
+// TODO: (and variations with 'required')
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1730
+// + cmdarg_type_roster_bjid     - in roster, with specified types -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1731
+// + 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
  1732
+// * 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
  1733
+// * cmdarg_type_roster_jid      - in roster, with specified types, might have or not have resource -> bud + (resource)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1734
+// * cmdarg_type_bjid         - any bjid -> bjid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1735
+// + cmdarg_type_fjid         - any fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1736
+// + cmdarg_type_statusmask   - string -> string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1737
+// + cmdarg_type_uint         - string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1738
+// + cmdarg_type_nonspace     - strip, space only -> null
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1739
+// * cmdarg_type_bjidmask
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1740
+// + cmdarg_type_color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1741
+// + cmdarg_type_string2enum
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1742
+// * 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
  1743
+
75
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
+//  common methods
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1746
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1747
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1748
+void cmdarg_free_gfree (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1749
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1750
+  g_free (arg -> value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1751
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1752
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1753
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1754
+//  string -> stripspace string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1755
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1756
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1757
+// Strips leading and trailing spaces, checks if anything left.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1758
+// Replaces value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1759
+// Does not need freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1760
+// 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
  1761
+gchar *cmdarg_check_nonspace (cmdarg_t *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1762
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1763
+  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
  1764
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1765
+  if (val) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1766
+    while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1767
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1768
+    if (*val) { // valid arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1769
+      arg -> value.arg = val;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1770
+      while (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1771
+        val ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1772
+      while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1773
+        val --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1774
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1775
+      if (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1776
+        *val = '\0';
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1777
+      return NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1778
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1779
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1780
-  
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1781
-  if (bud && buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1782
-    if (lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1783
-      GSList *resources, *p_res;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1784
-      gboolean found = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1785
-      resources = buddy_getresources(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1786
-      for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1787
-        if (!g_strcmp0((char*)p_res->data, resource))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1788
-          found = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1789
-        g_free(p_res->data);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1790
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1791
+  // error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1792
+  arg -> value.arg = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1793
+  return g_strdup ("Non-space value required.");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1794
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1795
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1796
+static const cmdarg_type_t cmdarg_typedef_nonspace = {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1797
+  cmdarg_check_nonspace,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1798
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1799
+  NULL,
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1802
+const cmdarg_type_t *cmdarg_type_nonspace = &cmdarg_typedef_nonspace;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1803
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1804
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1805
+//  bjid -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1806
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1807
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1808
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1809
+// Returns buddy roster entry in value.bud.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1810
+// Recognizes as current ".", but not "" or NULL - use defvalue.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1811
+// Does not require freeing.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1812
+gchar *cmdarg_check_roster_bjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1813
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1814
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1815
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1816
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1817
+    const char *bjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1818
+    guint      types = (guint) arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1819
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1820
+    if (!strcmp(bjid, ".")) { // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1821
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1822
+        error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1823
+      else if (buddy_gettype(BUDDATA(current_buddy)) & types)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1824
+        arg -> value.bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1825
+      else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1826
+        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
  1827
+    } else if (!check_jid_syntax(bjid)) { // valid jid specified
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1828
+      GSList *found = roster_find(bjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1829
+      if (found)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1830
+        arg -> value.bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1831
+      else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1832
+        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
  1833
+    } else { // jid is invalid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1834
+      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
  1835
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1836
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1837
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1838
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1839
+    arg -> value.bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1840
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1841
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1842
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1843
+static const cmdarg_type_t cmdarg_typedef_roster_bjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1844
+  cmdarg_check_roster_bjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1845
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1846
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1847
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1848
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1849
+const cmdarg_type_t *cmdarg_type_roster_bjid = &cmdarg_typedef_roster_bjid;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1850
+
75
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
+//  fjid -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1853
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1854
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1855
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1856
+// Returns buddy roster entry in userdata.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1857
+// Returns resource string in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1858
+// Recognizes as current "./res" and "res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1859
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1860
+// 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
  1861
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1862
+//  * 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
  1863
+//  * 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
  1864
+gchar *cmdarg_check_roster_resource (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1865
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1866
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1867
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1868
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1869
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1870
+  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
  1871
+    const char *fjid = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1872
+    guint      types = (guint) arg -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1873
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1874
+    if (fjid[0] == '.' && fjid[1] == JID_RESOURCE_SEPARATOR) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1875
+      // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1876
+      resource = fjid+2;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1877
+    } 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
  1878
+      // valid jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1879
+      GSList *found;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1880
+      *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
  1881
+      found = roster_find (fjid, jidsearch, types);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1882
+      if (found) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1883
+        bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1884
+        resource ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1885
+      } else
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1886
+        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
  1887
+    } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1888
+      // jid is invalid - let's consider it resource (XXX)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1889
+      resource = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1890
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1891
+    // resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1892
+    if (error == NULL && resource) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1893
+      if (bud == NULL) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1894
+        if (!current_buddy)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1895
+          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
  1896
+        else if (buddy_gettype (BUDDATA(current_buddy)) & types)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1897
+          bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1898
+        else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1899
+          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
  1900
       }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1901
-      g_slist_free(resources);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1902
-      if (!found) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1903
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1904
-        return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1905
+      if (bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1906
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1907
+        gboolean found = FALSE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1908
+        resources = buddy_getresources (bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1909
+        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
  1910
+          if (!g_strcmp0 ((char*)p_res->data, resource))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1911
+            found = TRUE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1912
+          g_free (p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1913
+        }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1914
+        g_slist_free (resources);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1915
+        if (!found)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1916
+          error = g_strdup_printf ("No such resource <%s%c%s>...", buddy_getjid(bud), JID_RESOURCE_SEPARATOR, resource);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1917
       }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1918
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1919
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1920
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1921
+  if (error) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1922
+    arg -> userdata  = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1923
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1924
+  } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1925
+    arg -> userdata  = bud;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1926
+    arg -> value.arg = resource;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1927
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1928
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1929
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1930
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1931
+static const cmdarg_type_t cmdarg_typedef_roster_resource = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1932
+  cmdarg_check_roster_resource,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1933
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1934
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1935
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1936
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1937
+const cmdarg_type_t *cmdarg_type_roster_resource = &cmdarg_typedef_roster_resource;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1938
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1939
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1940
+//  fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1941
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1942
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1943
+// Returns corrected fjid in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1944
+// Recognizes as current "." and "./res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1945
+// Requires freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1946
+// XXX:
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1947
+//  * g_strdup jid?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1948
+gchar *cmdarg_check_fjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1949
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1950
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1951
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1952
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1953
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1954
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1955
+    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
  1956
+      const char *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1957
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1958
+        error = g_strdup_printf ("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1959
+      else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1960
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1961
+      } 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
  1962
+        arg -> value.roarg = jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1963
+      } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1964
+        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
  1965
+        arg -> flags    |= cmdarg_freeme;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1966
+      }
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1977
+static const cmdarg_type_t cmdarg_typedef_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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1983
+const cmdarg_type_t *cmdarg_type_fjid = &cmdarg_typedef_fjid;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1984
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1985
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1986
+//  string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1987
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1988
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1989
+// Returns unsigned integer in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1990
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1991
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1992
+//  * 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
  1993
+//  * 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
  1994
+gchar *cmdarg_check_uint (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1995
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1996
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1997
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1998
+  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
  1999
+    char *s = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2000
+    char *e = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2001
+    long n  = strtol(s, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2002
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2003
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2004
+    else if (n < 0)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2005
+      error = g_strdup ("Value must be greater than zero.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2006
+    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
  2007
+      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
  2008
+    else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2009
+      arg -> value.uint = (guint) n;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2010
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2011
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2012
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2013
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2014
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2015
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2016
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2017
+static const cmdarg_type_t cmdarg_typedef_uint = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2018
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2019
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2020
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2021
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2022
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2023
+const cmdarg_type_t *cmdarg_type_uint = &cmdarg_typedef_uint;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2024
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2025
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2026
+//  string -> statusmask
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2027
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2028
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2029
+// Strips/checks for any non-valid status chars in mask.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2030
+// Returns mask in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2031
+// Recognizes "*" as glob.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2032
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2033
+// No errors in default vaules - needs RW for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2034
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2035
+//  * check duplicates?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2036
+//    * string2flags?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2037
+//  * canonicize?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2038
+//    * string2enum?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2039
+//  * common strchr callback with valid chars in chkdata?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2040
+//    * 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
  2041
+gchar *cmdarg_check_statusmask (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2042
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2043
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2044
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2045
+  if (!(error = cmdarg_check_nonspace(arg)) && arg -> value.arg) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2046
+    const char *valid = "foand_?";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2047
+    if (!strcmp(arg -> value.arg, "*")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2048
+      arg -> value.arg = g_strdup (valid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2049
+      arg -> flags    |= cmdarg_freeme;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2050
     } else {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2051
-      resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2052
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2053
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2054
+      while (p < e) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2055
+        if (strchr (valid, *p)) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2056
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2057
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2058
+          // this is valid use of flag in checker
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2059
+          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
  2060
+        } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2061
+          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
  2062
+          g_memmove (p, p+1, e-p-1);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2063
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2064
+        }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2065
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2066
+      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
  2067
+        arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2068
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2069
-    buddy_setactiveresource(bud, resource);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2070
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2071
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2072
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2073
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2074
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2075
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2076
+static const cmdarg_type_t cmdarg_typedef_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2077
+  cmdarg_check_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2078
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2079
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2080
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2081
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2082
+const cmdarg_type_t *cmdarg_type_statusmask = &cmdarg_typedef_statusmask;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2083
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2084
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2085
+//  string -> enum
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2086
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2087
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2088
+// 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
  2089
+// Returns corresponding value in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2090
+// Returns 0 if not recognized and not required.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2091
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2092
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2093
+//  * 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
  2094
+//  * default value on error?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2095
+gchar *cmdarg_check_string2enum (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2096
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2097
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2098
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2099
+  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
  2100
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2101
+    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
  2102
+      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
  2103
+        arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2104
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2105
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2106
+    // not found, error
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2107
+    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
  2108
+  }
75
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
+  if (error)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2111
+    arg -> value.uint = 0;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2112
+  return error;
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2115
+static const cmdarg_type_t cmdarg_typedef_string2enum = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2116
+  cmdarg_check_string2enum,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2117
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2118
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2119
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2120
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2121
+const cmdarg_type_t *cmdarg_type_string2enum = &cmdarg_typedef_string2enum;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2122
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2123
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2124
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2125
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2126
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2127
+static const string2enum_t s2e_color[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2128
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2129
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2130
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2131
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2132
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2133
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2134
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2135
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2136
+  { NULL,      0  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2137
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2138
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2139
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2140
+// Returns color name in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2141
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2142
+// XXX
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2143
+//  * 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
  2144
+//    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
  2145
+//    * that needs access to ncurses internals, so, probably, this will
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2146
+//      be better done, when moving related command definitions to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2147
+//      corresponding subsystems.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2148
+static gchar *cmdarg_check_color (cmdarg_t *arg)
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
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2151
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2152
+  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
  2153
+    char *color = arg -> value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2154
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2155
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2156
+      return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2157
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2158
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2159
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2160
+      color += 6;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2161
+    { // check names
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2162
+      const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2163
+      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
  2164
+        if (!strcmp (list -> name, color))
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2165
+          return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2166
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2167
+    { // 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
  2168
+      char *e = color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2169
+      long n  = strtol(color, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2170
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2171
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2172
+    }
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2175
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2176
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2177
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2178
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2179
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2180
+static const cmdarg_type_t cmdarg_typedef_color = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2181
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2182
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2183
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2184
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2185
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2186
+const cmdarg_type_t *cmdarg_type_color = &cmdarg_typedef_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2187
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2188
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2189
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2190
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2191
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2192
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2193
+// you also have to add it to cmd_init().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2194
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2195
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2196
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2197
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2198
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2199
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2200
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2201
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2202
+static void roster_buddylock(gpointer bud, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2203
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2204
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2205
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2206
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2207
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2208
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2209
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2210
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2211
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2212
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2214
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
 // (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
  2217
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2218
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2219
 static void display_and_free_note(struct annotation *note, const char *winId)
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
   gchar tbuf[128];
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2222
@@ -755,41 +1289,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2223
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2224
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2225
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2226
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2227
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2228
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2229
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2233
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2234
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2235
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2236
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2237
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2238
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2239
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2240
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2241
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2242
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2243
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2244
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2245
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2246
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2247
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2248
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2249
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2250
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2253
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2254
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2255
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2256
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2257
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2258
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2259
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2260
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2261
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2262
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2268
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2269
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2270
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
       display_and_free_note(note, bjid);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2272
@@ -800,194 +1308,282 @@
74
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
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2275
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2276
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2277
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2278
-inline static void roster_updown(int updown, char *nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2279
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2280
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2281
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2282
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2285
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2286
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
+  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
  2288
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2289
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2290
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2291
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2292
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2293
+#define SCMD_ROSTER(NAME, ARGS...) \
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2294
+    { #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
  2295
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
+  "roster",
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2297
+  cmd_default, // XXX
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2298
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2300
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2301
+  {{"subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL}, NULL},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2302
+  {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2303
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2304
+    SCMD_ROSTER(top,    NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2305
+    SCMD_ROSTER(up,   {{"n", cmdarg_chreq, "1", cmdarg_type_uint}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2306
+    SCMD_ROSTER(down, {{"n", cmdarg_chreq, "1", cmdarg_type_uint}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2307
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2308
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2309
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2310
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2311
+    SCMD_ROSTER(unread_next,  NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2312
+    SCMD_ROSTER(search, {{"name", cmdarg_eol|cmdarg_required, NULL, cmdarg_type_nonspace}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2313
+    SCMD_ROSTER(display, {{"statusmask", cmdarg_check, NULL, cmdarg_type_statusmask}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2314
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2315
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2316
+    SCMD_ROSTER(toggle_offline, NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2317
+    SCMD_ROSTER(item_lock,        {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2318
+    SCMD_ROSTER(item_unlock,      {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2319
+    SCMD_ROSTER(item_toggle_lock, {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
+    { "note", NULL, NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2321
+      {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2322
+        {cmdopt_switch,  'r', "reset", {"reset", cmdarg_default, NULL, NULL, NULL}},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2323
+        {cmdopt_default, 'j', "jid",   {"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT)}},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2325
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2326
+      {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2327
+        {cmdarg_eol, NULL, cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2328
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2329
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2330
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2331
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2332
+    SCMD_ROSTER(notes, NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2333
+    SCMD_ROSTER(resource_lock,   {{"resource|fjid", cmdarg_chreq, NULL, cmdarg_type_roster_resource, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2334
+    SCMD_ROSTER(resource_unlock, {{"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
  2335
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2336
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2337
+    SCMD_ROSTER(toggle, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2338
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2339
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2341
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2342
+static gchar *do_roster(cmdopts_t *options)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2343
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2344
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2345
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2346
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2347
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2348
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2349
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2350
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2351
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2352
-    scr_roster_up_down(updown, nbitems);
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
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2355
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2356
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2357
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2358
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2359
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2361
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2362
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2363
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2364
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2365
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2366
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2367
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2368
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2369
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2370
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2371
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2372
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2373
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2374
-  if (!strcasecmp(subcmd, "top")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2375
+  scmd_roster_t subcmd = (scmd_roster_t) (options -> args[0] -> value.cmd -> userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2376
+  cmdarg_t      *arg   = NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2377
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
+  if (options -> args[0] -> value.cmd -> args)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2379
+    arg = options -> args[0] -> value.cmd -> args[0];
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2380
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2381
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2382
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2383
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2384
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2385
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2386
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2387
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2388
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2389
+  } else if (subcmd == scmd_roster_up) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2390
+    scr_roster_up_down(-1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2391
+  } else if (subcmd == scmd_roster_down) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2392
+    scr_roster_up_down(1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2393
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2394
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2395
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2396
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2397
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2398
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2399
+  } else if (subcmd == scmd_roster_unread_first) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2400
+    scr_roster_unread_message(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2401
+  } else if (subcmd == scmd_roster_unread_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2402
+    scr_roster_unread_message(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2403
+  } else if (subcmd == scmd_roster_search) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2404
+    scr_roster_search(arg -> value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2405
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2406
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2407
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2408
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2409
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2410
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2411
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2412
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2413
+  } else if (subcmd == scmd_roster_display) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2414
+    scr_roster_display(arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2415
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2416
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2417
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2418
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2419
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2420
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2421
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2422
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2423
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2424
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2425
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2426
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2427
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2428
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2429
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2430
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2431
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2432
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2433
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2434
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2435
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2436
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2437
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2438
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2439
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2440
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2441
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2442
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2443
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2444
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2445
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2446
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2447
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2448
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2449
-      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
  2450
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2451
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2452
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2453
-    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
  2454
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2455
-    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
  2456
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2457
-    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
  2458
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2459
-    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
  2460
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2461
-    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
  2462
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2463
-    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
  2464
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2465
-    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
  2466
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2467
-    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
  2468
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2469
-    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
  2470
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2471
+  } else if (subcmd == scmd_roster_item_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2472
+    roster_buddylock(arg -> value.bud, 1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2473
+  } else if (subcmd == scmd_roster_item_unlock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2474
+    roster_buddylock(arg -> value.bud, 0);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2475
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2476
+    roster_buddylock(arg -> value.bud, -1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2477
+  } else if (subcmd == scmd_roster_note) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2478
+    roster_note(options -> cmds[18] -> opts[1] -> value.bud,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2479
+                options -> cmds[18] -> opts[0] -> value.swc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2480
+                arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2481
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2482
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2483
+  } else if (subcmd == scmd_roster_resource_lock) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2484
+    buddy_setactiveresource(arg -> userdata, arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2485
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2486
+  } else if (subcmd == scmd_roster_resource_unlock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2487
+    buddy_setactiveresource(arg -> value.bud, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2488
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
+  } else if (subcmd == scmd_roster_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2490
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2491
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2492
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2493
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2494
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2495
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2496
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2497
+  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
  2498
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2499
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2500
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2501
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2502
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2503
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2504
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2505
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2506
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2507
+// statusmask + "clear"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2508
+static gchar *cmdarg_check_color_statusmask (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2509
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2510
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2511
-  char *subcmd;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2512
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2513
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2514
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2515
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2516
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2517
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2518
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2519
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2520
-    return;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2521
+  if (!g_strcmp0 (arg -> value.arg, "clear"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2522
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2523
+  else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2524
+    return cmdarg_check_statusmask (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2525
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2526
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2527
+static const cmdarg_type_t cmdarg_typedef_color_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2528
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2529
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2530
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2531
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2532
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2533
+// bjid + "*"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2534
+// Returns string, not buddy.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2535
+static gchar *cmdarg_check_color_roomjid (cmdarg_t *arg)
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
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2538
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2539
+  if (!g_strcmp0(arg -> value.arg, "*"))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2540
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2541
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2542
+  arg -> chkdata = (gpointer) ROSTER_TYPE_ROOM;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2543
+  if (!(error = cmdarg_check_roster_bjid (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2544
+    arg -> value.roarg = buddy_getjid (arg -> value.bud); // XXX strdup?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2545
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2546
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2547
-  if (!strcasecmp(subcmd, "roster")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2548
-    char *status, *wildcard, *color;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2549
-    char **arglist = split_arg(arg, 3, 0);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2550
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2551
-    status = *arglist;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2552
-    wildcard = to_utf8(arglist[1]);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2553
-    color = arglist[2];
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2554
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2555
-    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
  2556
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2557
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2558
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2559
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2560
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2561
+static const cmdarg_type_t *cmdarg_type_color_roomjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2562
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2563
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2564
+  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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2567
+// TODO: completion, that says, which roster jids do match
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2568
+static const cmdarg_type_t *cmdarg_type_bjidmask = {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2569
+  cmdarg_check_nonspace,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2570
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2571
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2572
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2573
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2574
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2575
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2576
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2577
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2578
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2579
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2580
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2581
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2582
+static const string2enum_t s2e_color_muc[] = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2583
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2584
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2585
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2586
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2587
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2588
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2589
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2590
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2591
+  "color",
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2592
+  cmd_default, // XXX
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2593
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2594
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2595
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2596
+  {{ "subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL }, NULL},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2597
+  {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2598
+    {"roster", NULL, NULL, NULL, {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2599
+        { "statusmask|clear", cmdarg_chreq, NULL, &cmdarg_type_color_statusmask },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2600
+        { "jidmask", cmdarg_default, NULL, &cmdarg_type_bjidmask         },
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2601
+        { "color|-", cmdarg_default, NULL, cmdarg_type_color            },
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2602
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2603
+      }, NULL, (gpointer)scmd_color_roster},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2604
+    {"muc", NULL, NULL, NULL, {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2605
+        { "roomjid", cmdarg_chreq, NULL, &cmdarg_type_color_roomjid },
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2606
+        { "on|off|preset|-", cmdarg_chreq, "on", cmdarg_type_string2enum, (gpointer)s2e_color_muc},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2607
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2608
+      }, NULL, (gpointer)scmd_color_muc},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2609
+    {"mucnick", NULL, NULL, NULL {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2610
+        { "nick", cmdarg_chreq, NULL, cmdarg_type_nick  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2611
+        { "color|-", cmdarg_chreq, NULL, cmdarg_type_color },
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2612
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2613
+      }, NULL, (gpointer)scmd_color_mucnick},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2614
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2615
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2616
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2617
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2618
+static gchar *do_color(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2619
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2620
+  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
  2621
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2622
+  if (subcmd == scmd_color_roster) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2623
+    const gchar *status   = options -> cmds[0] -> args[0] -> value.arg;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2624
+    const gchar *wildcard = options -> cmds[0] -> args[1] -> value.arg;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2625
+    const gchar *color    = options -> cmds[0] -> args[2] -> value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2626
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2627
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2628
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2629
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2630
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2631
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2632
+      if (!wildcard || !*wildcard || !color || !*color) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2633
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2634
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2635
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2636
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2637
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2638
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2639
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2640
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2641
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2642
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2643
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2644
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2645
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2646
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2647
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2648
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2649
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2650
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2651
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2652
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2653
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2654
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2655
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2656
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2657
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2658
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2659
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2660
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2661
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2662
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2663
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2664
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2665
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2666
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2667
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2668
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2669
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2670
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2671
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2672
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2673
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2674
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2675
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2676
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2677
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2678
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2679
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2680
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2681
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2682
+  } else if (subcmd == scmd_color_muc) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2683
+    scr_muc_color ( options -> cmds[1] -> args[0] -> value.arg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2684
+                    options -> cmds[1] -> args[1] -> value.uint );
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2685
+  } else { // scmd_color_mucnick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2686
+    scr_muc_nick_color( options -> cmds[2] -> args[0] -> value.arg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2687
+                        options -> cmds[2] -> args[1] -> value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2688
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2689
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2690
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2691
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2692
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2693
-//  cmd_setstatus(recipient, arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2694
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2695
+//  /status
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2696
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2697
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2698
+// FIXME: this should go to xmpp_iq, that uses it
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2699
+//  cmd_setstatus(recipient, status, message)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2700
 // Set your Jabber status.
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2701
-// - 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
  2702
-// - 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
  2703
-void cmd_setstatus(const char *recipient, const char *arg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2704
+// 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
  2705
+void cmd_setstatus(const char *recipient, const char *status, const char *msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2706
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2707
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2708
-  char *status;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2709
-  char *msg;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2710
   enum imstatus st;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2711
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2712
   if (!xmpp_is_online())
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2713
@@ -1000,15 +1596,15 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2714
   if (!recipient)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2715
     scr_check_auto_away(TRUE);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2716
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2717
-  paramlst = split_arg(arg, 2, 1); // status, message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2718
-  status = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2719
-  msg = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2720
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2721
   if (!status) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2722
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2723
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2724
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2725
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2726
+  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2727
+  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2728
+    msg = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2729
+  }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2730
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2731
   if      (!strcasecmp(status, IMSTATUS_OFFLINE))       st = offline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2732
   else if (!strcasecmp(status, IMSTATUS_ONLINE))        st = available;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2733
   else if (!strcasecmp(status, IMSTATUS_AVAILABLE))     st = available;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2734
@@ -1020,229 +1616,351 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2735
   else if (!strcasecmp(status, IMSTATUS_NOTAVAILABLE))  st = notavail;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2736
   else if (!strcasecmp(status, IMSTATUS_FREE4CHAT))     st = freeforchat;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2737
   else if (!strcasecmp(status, "message")) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2738
-    if (!msg || !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2739
+    if (!msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2740
       // We want a message.  If there's none, we give up.
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2741
       scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2742
-      free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2743
       return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2744
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2745
     st = xmpp_getstatus();  // Preserve current status
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2746
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2747
     scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2748
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2749
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2750
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2751
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2752
-  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2753
-  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2754
-    msg = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2755
-  }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2756
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2757
   // If a recipient is specified, let's don't use default status messages
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2758
   if (recipient && !msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2759
     msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2760
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2761
   xmpp_setstatus(st, recipient, msg, FALSE);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2762
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2763
-  free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2764
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2765
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2766
-static void do_status(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2767
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2768
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2769
+// needs corresponding s2e in chkdata
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2770
+static gchar *cmdarg_check_status_status (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2771
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2772
-  if (!*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2773
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2774
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2775
+  if (!g_strcmp0(arg, "message")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2776
+    arg -> value.uint = xmpp_getstatus(); // Preserve current status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2777
+    return 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
+  return cmdarg_check_string2enum (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2781
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2782
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2783
+static const cmdarg_type_t cmdarg_type_status_status = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2784
+  cmdarg_check_status_status,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2785
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2786
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2787
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2788
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2789
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2790
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2791
+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
  2792
+  { "away",      away        },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2793
+  { "offline",   offline     },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2794
+  { "online",    available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2795
+  { "avail",     available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2796
+  { "notavail",  notavail    },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2797
+  { "dnd",       dontdisturb },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2798
+  { "free",      freeforchat },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2799
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2800
+  { "invisible", invisible   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2801
+#endif
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2802
+  // XXX ugly
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2803
+  { "show",      imstatus_size},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2804
+  { NULL,        0           },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2805
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2806
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2807
+cmdopts_t def_status = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2808
+  "status",
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2809
+  cmd_default, // XXX
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2810
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2811
+  do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2812
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2813
+  {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2814
+    {"status",  cmdarg_chreq, "show", &cmdarg_type_status_status, (gpointer)s2e_status2},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2815
+    {"message", cmdarg_eol,   NULL,   cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2816
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2817
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2818
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2819
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2820
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2821
+static gchar *do_status(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2822
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2823
+  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
  2824
     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
  2825
     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
  2826
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2827
                  (sm ? sm : ""));
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2828
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2829
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2830
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2831
+    scr_check_auto_away(TRUE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2832
+    xmpp_setstatus(options -> args[0] -> value.uint, NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2833
+                   options -> args[1] -> value.arg, FALSE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2834
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2835
+  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2836
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2837
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2838
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2839
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2840
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2841
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2842
+// no "show" here
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2843
+static const string2enum_t s2e_status[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2844
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2845
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2846
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2847
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2848
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2849
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2850
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2851
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2852
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2853
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2854
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2855
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2856
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2857
+cmdopts_t def_status_to = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2858
+  "status_to",
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2859
+  cmd_default, // XXX
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2860
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2861
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2862
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2863
+  {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2864
+    {"jid",     cmdarg_chreq, NULL, cmdarg_type_fjid},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2865
+    {"status",  cmdarg_chreq, NULL, &cmdarg_type_status_status, (string2enum_t)s2e_status},
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2866
+    {"message", cmdarg_eol,   NULL, cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2867
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2868
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2869
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2870
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2871
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2872
+static gchar *do_status_to(cmdopts_t *options)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2873
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2874
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2875
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2876
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2877
+  fjid = options -> args[0] -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2878
+  st   = options -> args[1] -> value.uint;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2879
+  msg  = options -> args[2] -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2880
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2881
+  { // get status name
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2882
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2883
+    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
  2884
+      if (list -> value == st) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2885
+        stname = list -> name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2886
+        break;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2887
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2888
+  }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2889
+  // prevent default status message
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2890
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2891
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2892
+  scr_LogPrint(LPRINT_LOGNORM, 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2893
+               "Sending to <%s> /status %s %s", fjid, stname, msg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2894
+  if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2895
+    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2896
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2897
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2898
+  return NULL
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2899
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2900
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2901
+#if 0
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2902
+static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2903
+{
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2904
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2905
+    "add",
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2906
+    NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2907
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2908
+      // jid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2909
+      { 0,                                            { .arg = "."  } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2910
+      // rostername
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2911
+      { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2912
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2913
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2914
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2915
+  gchar *jid, *nick;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2916
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2917
+  if (!xmpp_is_online()) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2918
+    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2919
     return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2920
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2921
-  arg = to_utf8(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2922
-  cmd_setstatus(NULL, arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2923
-  g_free(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2924
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2925
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2926
-static void do_status_to(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2927
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2928
-  char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2929
-  char *fjid, *st, *msg;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2930
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2931
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2932
-  paramlst = split_arg(arg, 3, 1); // jid, status, [message]
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2933
-  fjid = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2934
-  st = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2935
-  msg = *(paramlst+2);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2936
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2937
-  if (!fjid || !st) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2938
-    scr_LogPrint(LPRINT_NORMAL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2939
-                 "Please specify both a Jabber ID and a status.");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2940
-    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
  2941
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2942
+  if (cmdopts_parse(arg, &options))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2943
     return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2944
-  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2945
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2946
-  // Allow things like /status_to "" away
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2947
-  if (!*fjid || !strcmp(fjid, "."))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2948
-    fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2949
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2950
-  if (fjid) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2951
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2952
+  jid  = options.args[0].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2953
+  nick = options.args[1].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2954
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2955
+  if (jid && (!*jid || !strcmp(jid, ".")))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2956
+    jid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2957
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2958
+  if (jid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2959
     // The JID has been specified.  Quick check...
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2960
-    if (check_jid_syntax(fjid)) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2961
-      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
  2962
-                   "<%s> is not a valid Jabber ID.", fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2963
-      fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2964
+    if (check_jid_syntax(jid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2965
+      scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", jid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2966
+      jid = NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2967
     } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2968
-      // Convert jid to lowercase
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2969
-      char *p = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2970
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2971
-        *p = tolower(*p);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2972
-      fjid = jid_utf8 = to_utf8(fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2973
+      mc_strtolower(jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2974
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2975
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2976
     // Add the current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2977
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2978
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2979
-    if (!fjid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2980
+      jid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2981
+    if (!jid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2982
       scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2983
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2984
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2985
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2986
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2987
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2988
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2989
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2990
-    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
  2991
-    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
  2992
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2993
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2994
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2995
-    g_free(jid_utf8);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2996
+  if (jid) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2997
+    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2998
+    xmpp_addbuddy(jid, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2999
+    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3000
+                 jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3001
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3002
-  free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3003
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3004
+  cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3005
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3006
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3007
-static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3008
+static void do_del(char *arg)
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3009
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3010
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3011
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3012
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3013
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3014
+    "del",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3015
+    (cmdopt_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3016
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'n', "dryrun", { .swc = 0 } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3017
+    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3018
+    (cmdarg_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3019
+      { CMDOPT_LAST, { .arg = "."  } }, // jid
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3020
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3021
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3022
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3023
+  gchar *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3024
+  gpointer buddy;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3025
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3026
   if (!xmpp_is_online()) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3027
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3028
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3029
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3030
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3031
-  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
  3032
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3033
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3034
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3035
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3036
-    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
  3037
-  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
  3038
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3039
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3040
-  if (id) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3041
+  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
  3042
+    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3043
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3044
+  jid = options.args[0].value.arg;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3045
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3046
+  if (jid && (!*jid || !strcmp(jid, ".")))
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3047
+    jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3048
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3049
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3050
     // The JID has been specified.  Quick check...
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3051
-    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
  3052
-      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
  3053
-                   "<%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
  3054
-      id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3055
+    if (check_jid_syntax(jid)) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3056
+      scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3057
+      jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3058
     } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3059
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3060
-      id = jid_utf8 = to_utf8(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3061
+      GSList *found;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3062
+      mc_strtolower(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3063
+      found = roster_find(jid, jidsearch, ROSTER_TYPE_USER |
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3064
+                          ROSTER_TYPE_AGENT | ROSTER_TYPE_GROUP);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3065
+      if (!found) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3066
+        scr_log_print(LPRINT_NORMAL, "Jabber ID <%s> is not in roster.", jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3067
+        jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3068
+      } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3069
+        buddy = found -> data;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3070
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3071
     }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3072
   } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3073
-    // Add the current buddy
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3074
+    // Use current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3075
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3076
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3077
-    if (!id)
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3078
+      jid = (char*)buddy_getjid(BUDDATA(current_buddy));
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3079
+    if (!jid)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3080
       scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3081
+    else
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3082
+      buddy = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3083
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3084
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3085
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3086
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3087
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3088
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3089
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3090
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3091
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3092
-                 id);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3093
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3094
+    if (buddy_gettype(buddy) & ROSTER_TYPE_ROOM) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3095
+      // This is a chatroom
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3096
+      if (buddy_getinsideroom(buddy)) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3097
+        scr_LogPrint(LPRINT_NORMAL, "You haven't left this room!");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3098
+        cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3099
+        return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3100
+      }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3101
+    }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3102
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3103
+    scr_LogPrint(LPRINT_LOGNORM, "Removing <%s>...", jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3104
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3105
+    if (!options.opts[0].value.swc) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3106
+      // Close the buffer
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3107
+      scr_buffer_purge(1, jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3108
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3109
+      xmpp_delbuddy(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3110
+      scr_update_buddy_window();
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3111
+    }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3112
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3113
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3114
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3115
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3116
-  free_arg_lst(paramlst);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3117
+  cmdopts_free(&options);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3118
 }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3119
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3120
-static void do_del(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3121
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3122
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3123
+static void group_cmd (gpointer group, group_scmd_t action) 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3124
 {
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
-  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3132
+  // We'll have to redraw the chat window if we're not currently on the group
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3133
+  // entry itself, because it means we'll have to leave the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3134
+  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3135
+  if (action != scmd_group_unfold &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3136
+      ((!current_buddy) ||
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3137
+       (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3138
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3139
+    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3140
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3141
+  buddy_hide_group(group, action);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3142
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3143
+  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3144
+  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3145
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3146
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3147
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3148
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3149
+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
  3150
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3151
+  scmd_group_t subcmd;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3152
+  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
  3153
+    "group",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3154
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3155
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3156
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3157
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3158
+    // all of them have one argument - group name
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3159
+#define GROUP_SUBCMD(NAME, REALNAME, FLAGS) \
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3160
+      { #NAME, NULL, (cmdarg_t[1]){ \
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3161
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } }, \
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3162
+        }, NULL, (gpointer)group_scmd_##REALNAME, FLAGS }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3163
+    (cmdopts_t[5]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3164
+      GROUP_SUBCMD(expand, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3165
+      GROUP_SUBCMD(unfold, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3166
+      GROUP_SUBCMD(shrink, fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3167
+      GROUP_SUBCMD(fold,   fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3168
+      GROUP_SUBCMD(toggle, toggle, CMDOPT_LAST),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3169
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3170
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3171
+  gchar *name;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3172
+  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
  3173
+  guint leave_buddywindow;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3174
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3175
   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
  3176
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3177
-  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
  3178
-  if (!bjid)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3179
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3180
+  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
  3181
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3182
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3183
-  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
  3184
-    // 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
  3185
-    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
  3186
-      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
  3187
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3188
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3189
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3190
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3191
-  // 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
  3192
-  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
  3193
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3194
-  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
  3195
-  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
  3196
-  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
  3197
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3198
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3199
-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
  3200
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3201
-  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
  3202
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3203
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3204
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3205
-  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
  3206
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3207
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3208
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3209
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3210
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3211
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3212
-  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
  3213
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3214
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3215
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3216
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3217
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3218
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3219
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3220
-    goto do_group_return;   // Should not happen
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
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3223
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3224
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3225
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3226
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3227
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3228
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3229
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3230
-    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
  3231
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3232
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3233
-  if (arg && *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3234
+  
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3235
+  subcmd = (enum group_scmd_t) options.args[0].value.cmd -> userdata;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3236
+  name   = 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
  3237
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3238
+  if (name && *name) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3239
     GSList *roster_elt;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3240
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3241
-    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
  3242
-    g_free(group_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3243
+    roster_elt = roster_find(name, namesearch, ROSTER_TYPE_GROUP);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3244
     if (roster_elt)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3245
       group = buddy_getgroup(roster_elt->data);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3246
   } else {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3247
@@ -1253,31 +1971,19 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3248
     goto do_group_return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3249
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3250
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3251
-  // We'll have to redraw the chat window if we're not currently on the group
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3252
-  // entry itself, because it means we'll have to leave the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3253
-  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3254
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3255
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3256
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3257
   if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3258
     scr_LogPrint(LPRINT_NORMAL, "You need to select a group.");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3259
     goto do_group_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3260
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3261
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3262
-  if (group_state != group_unfold && leave_buddywindow)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3263
-    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3264
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3265
-  buddy_hide_group(group, group_state);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3266
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3267
-  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3268
-  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3269
+  group_cmd (group, subcmd);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3270
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3271
 do_group_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3272
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3273
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3274
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3275
 
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;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3282
@@ -1285,6 +1991,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.");
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3290
@@ -1299,11 +2006,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)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3308
@@ -1354,8 +2065,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;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3318
@@ -1378,34 +2088,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();
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3355
@@ -1424,80 +2113,131 @@
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3366
 static void do_say(char *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3367
-  say_cmd(arg, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3368
+  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
  3369
+    "say",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3370
+    (cmdopt_t[2]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3371
+      { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3372
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3373
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3374
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3375
+      { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_REQUIRED | CMDOPT_LAST,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3376
+        { .arg = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3377
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3378
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3379
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3380
+  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
  3381
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3382
+  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
  3383
+    return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3384
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3385
+  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
  3386
+    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
  3387
+  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
  3388
+    msgtype = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3389
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3390
+  say_cmd(options.args[0].value.arg, msgtype);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3391
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3392
+  cmdopts_free(&options);
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3395
 static void do_msay(char *arg)
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
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3398
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3399
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3400
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3401
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3402
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3403
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3404
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3405
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3406
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3407
-    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
  3408
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3409
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3410
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3411
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3412
+  enum msay_scmd_t {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3413
+    msay_scmd_begin, msay_scmd_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3414
+    msay_scmd_send, msay_scmd_send_to,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3415
+    msay_scmd_toggle, msay_scmd_toggle_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3416
+    msay_scmd_abort,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3417
+  } subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3418
+  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
  3419
+    "msay",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3420
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3421
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3422
+      // subcommand
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3423
+      { CMDOPT_SUBCOMMAND | CMDOPT_REQUIRED | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3424
+    },
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3425
+    (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
  3426
+      { "begin", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3427
+        (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
  3428
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3429
+          { 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
  3430
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3431
+        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
  3432
+      { "verbatim", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3433
+        (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
  3434
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3435
+          { 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
  3436
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3437
+        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
  3438
+      { "send",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3439
+        (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
  3440
+          { 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
  3441
+          { 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
  3442
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3443
+        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
  3444
+      { "send_to",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3445
+        (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
  3446
+          { 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
  3447
+          { 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
  3448
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3449
+        (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
  3450
+          // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3451
+          { 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
  3452
+        }, 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3453
+        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
  3454
+      { "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
  3455
+      { "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
  3456
+        (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
  3457
+      { "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
  3458
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3459
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3460
+  const char *msg;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3461
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3462
+  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
  3463
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3464
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3465
+  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
  3466
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3467
+  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
  3468
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3469
+      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
  3470
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3471
+      subcmd = msay_scmd_begin;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3472
+  } 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
  3473
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3474
+      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
  3475
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3476
+      subcmd = msay_scmd_verbatim;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3477
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3478
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3479
-  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
  3480
-    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
  3481
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3482
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3483
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3484
-  } 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
  3485
-    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
  3486
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3487
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3488
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3489
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3490
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3491
-  if (!strcasecmp(subcmd, "abort")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3492
+  if (subcmd == msay_scmd_abort) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3493
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3494
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3495
     scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3496
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3497
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3498
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3499
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3500
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3501
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3502
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3503
-      verbat = TRUE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3504
+  } 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
  3505
+    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
  3506
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3507
+    if (subcmd == msay_scmd_verbatim) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3508
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3509
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3510
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3511
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3512
+      scr_set_multimode(1, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3513
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3514
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3515
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3516
-                 verbat ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3517
+                 subcmd == msay_scmd_verbatim ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3518
     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
  3519
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3520
-    if (verbat)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3521
+    if (subcmd == msay_scmd_verbatim)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3522
       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
  3523
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3524
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3525
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3526
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3527
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3528
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3529
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3530
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3531
-  /* send/send_to command */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3532
+  /* msay_scmd_send or msay_scmd_send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3533
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3534
   if (!scr_get_multimode()) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3535
     scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3536
@@ -1508,49 +2248,47 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3537
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3538
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3539
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3540
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3541
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3542
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3543
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3544
-    // 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
  3545
-    // 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
  3546
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3547
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3548
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3549
-      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
  3550
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3551
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3552
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3553
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3554
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3555
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3556
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3557
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3558
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3559
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3560
-    if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3561
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3562
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3563
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3564
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3565
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3566
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3567
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3568
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3569
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3570
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3571
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3572
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3573
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3574
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3575
-      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
  3576
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3577
+  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
  3578
+    msgtype_t msg_type = msgtype_not_set;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3579
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3580
+    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
  3581
+      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
  3582
+    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
  3583
+      msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3584
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3585
+    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
  3586
+      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
  3587
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3588
+      // 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
  3589
+      // 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
  3590
+      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
  3591
+                          msg_type, FALSE))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3592
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3593
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3594
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3595
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3596
+      if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3597
+        scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3598
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3599
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3600
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3601
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3602
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3603
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3604
+        scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3605
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3606
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3607
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3608
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3609
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3610
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3611
   }
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
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3614
   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
  3615
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3616
 do_msay_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3617
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3618
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3619
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3620
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3621
 //  load_message_from_file(filename)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3622
@@ -1566,7 +2304,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3623
   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
  3624
   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
  3625
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3626
-  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
  3627
+  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
  3628
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3629
   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
  3630
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3631
@@ -1634,130 +2372,103 @@
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3632
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3633
 static void do_say_to(char *arg)
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
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3636
-  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
  3637
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3638
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3639
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3640
-  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
  3641
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3642
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3643
-  bool eval = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3644
+  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
  3645
+    "say_to",
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3646
+    (cmdopt_t[5]){
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3647
+      { CMDOPT_SWITCH, 'n', "normal",   { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3648
+      { CMDOPT_SWITCH, 'h', "headline", { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3649
+      { CMDOPT_SWITCH, 'e', "escapes",  { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3650
+      { CMDOPT_SWITCH, 'q', "quiet",    { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3651
+      { CMDOPT_LAST,   'f', "file",     { .opt = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3652
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3653
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3654
+      // jid
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3655
+      { CMDOPT_REQUIRED,                              { .arg = NULL } },
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3656
+      // message
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3657
+      { CMDOPT_LAST | CMDOPT_PLAIN | CMDOPT_CATCHALL, { .arg = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3658
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3659
+    NULL,
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3660
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3661
+  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
  3662
+  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
  3663
+  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
  3664
+  msgtype_t msg_type = msgtype_not_set;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3665
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3666
   if (!xmpp_is_online()) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3667
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3668
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3669
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3670
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3671
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3672
-  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
  3673
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3674
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3675
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3676
-    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
  3677
+  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
  3678
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3679
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3680
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3681
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3682
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3683
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3684
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3685
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3686
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3687
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3688
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3689
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3690
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3691
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3692
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3693
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3694
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3695
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3696
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3697
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3698
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3699
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3700
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3701
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3702
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3703
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3704
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3705
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3706
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3707
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3708
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3709
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3710
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3711
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3712
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3713
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3714
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3715
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3716
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3717
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3718
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3719
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3720
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3721
+  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
  3722
+    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
  3723
+  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
  3724
+    msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3725
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3726
+  fjid = options.args[0].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3727
+  msg  = options.args[1].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3728
+  file = options.opts[4].value.opt;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3729
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3730
+  // ideally, this should go to commandline parsing subsystem
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3731
   if (fjid[0] == '.') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3732
     const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3733
     if (fjid[1] == '\0') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3734
-      fjid = g_strdup(cjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3735
+      fjid = (char *)cjid; // FIXME
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3736
     } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3737
       char *res_utf8 = to_utf8(fjid+2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3738
-      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
  3739
+      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
  3740
       g_free(res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3741
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3742
-      fjid = to_utf8(fjid);
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
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3746
+    }
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
+  // ditto
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3750
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3751
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3752
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3753
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3754
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3755
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3756
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3757
         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
  3758
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3759
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3760
         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
  3761
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3762
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3763
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3764
   }
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
+  // as well
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3767
   if (check_jid_syntax(fjid)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3768
     scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3769
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3770
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3771
-    g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3772
+    g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3773
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3774
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3775
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3776
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3777
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3778
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3779
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3780
+  if (file == NULL) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3781
+    if (options.opts[2].value.swc) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3782
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3783
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3784
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3785
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3786
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3787
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3788
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3789
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3790
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3791
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3792
   } else {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3793
     char *filename_xp;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3794
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3795
       scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3796
     filename_xp = expand_filename(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3797
-    msg = msg_utf8 = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3798
+    freeme2 = msg = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3799
     g_free(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3800
-    g_free(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3801
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3802
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3803
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
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
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3806
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3807
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3808
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3809
-  free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3810
+  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
  3811
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3812
+  cmdopts_free(&options);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3813
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3814
+  g_free(freeme2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3815
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3816
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3817
 //  buffer_updown(updown, nblines)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3818
@@ -1775,27 +2486,10 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3819
     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
  3820
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3821
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3822
-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
  3823
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3824
-  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
  3825
-    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
  3826
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3827
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3828
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3829
-  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
  3830
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3831
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3832
 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
  3833
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3834
   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
  3835
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3836
-  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
  3837
-    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
  3838
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3839
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3840
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3841
-  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
  3842
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3843
   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
  3844
   if (t)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3845
     scr_buffer_date(t);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3846
@@ -1804,98 +2498,156 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3847
                  "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
  3848
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3849
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3850
-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
  3851
+// 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
  3852
+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
  3853
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3854
-  // 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
  3855
-  // "%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
  3856
-  // "% 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
  3857
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3858
-  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
  3859
-    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
  3860
+  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
  3861
+    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
  3862
+    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
  3863
+    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
  3864
+    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
  3865
+    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
  3866
+    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
  3867
+    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
  3868
+    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
  3869
+    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
  3870
+  } subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3871
+  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
  3872
+    "buffer",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3873
+    NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3874
+    (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
  3875
+      { 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
  3876
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3877
+    (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
  3878
+      { "close",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3879
+        (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
  3880
+          { 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
  3881
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3882
+        (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
  3883
+          { 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
  3884
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3885
+        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
  3886
+      { "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
  3887
+      { "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
  3888
+      { "purge", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3889
+        (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
  3890
+          { 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
  3891
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3892
+        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
  3893
+      { "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
  3894
+      { "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
  3895
+      { "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
  3896
+      { "up", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3897
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3898
+          { 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
  3899
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3900
+        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
  3901
+      { "down", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3902
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3903
+          { 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
  3904
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3905
+        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
  3906
+      { "date", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3907
+        (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
  3908
+          // date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3909
+          { 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
  3910
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3911
+        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
  3912
+      { "%", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3913
+        (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
  3914
+          { 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
  3915
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3916
+        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
  3917
+      { "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
  3918
+      { "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
  3919
+        (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
  3920
+          { 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
  3921
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3922
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3923
+        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
  3924
+      { "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
  3925
+        (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
  3926
+          { 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
  3927
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3928
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3929
+        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
  3930
+      { "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
  3931
+        (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
  3932
+      { "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
  3933
+        (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
  3934
+      { "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
  3935
+        (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
  3936
+      { "save", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3937
+        (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
  3938
+          { 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
  3939
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3940
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3941
+        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
  3942
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3943
+  };
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
+  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
  3946
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3947
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3948
+  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
  3949
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3950
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3951
+  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
  3952
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3953
+  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
  3954
+    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
  3955
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3956
+  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
  3957
+      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
  3958
+    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
  3959
+    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
  3960
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3961
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3962
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3963
-  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
  3964
-    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
  3965
-    return;
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3966
+  if (subcmd == buffer_scmd_close) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3967
+    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
  3968
+  } else if (subcmd == buffer_scmd_close_all) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3969
+    scr_buffer_purge_all(1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3970
+  } else if (subcmd == buffer_scmd_clear) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3971
+    scr_buffer_clear();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3972
+  } else if (subcmd == buffer_scmd_purge) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3973
+    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
  3974
+  } else if (subcmd == buffer_scmd_list) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3975
+    scr_buffer_list();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3976
+  } 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
  3977
+    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
  3978
+  } 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
  3979
+    scr_buffer_top_bottom(1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3980
+  } else if (subcmd == buffer_scmd_up) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3981
+    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
  3982
+  } else if (subcmd == buffer_scmd_down) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3983
+    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
  3984
+  } else if (subcmd == buffer_scmd_date) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3985
+    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
  3986
+  } else if (subcmd == buffer_scmd_percent) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3987
+    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
  3988
+  } else if (subcmd == buffer_scmd_readmark) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3989
+    scr_buffer_jump_readmark();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3990
+  } else if (subcmd == buffer_scmd_search_backward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3991
+    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
  3992
+  } else if (subcmd == buffer_scmd_search_forward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3993
+    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
  3994
+  } 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
  3995
+    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
  3996
+  } 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
  3997
+    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
  3998
+  } 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
  3999
+    scr_buffer_scroll_lock(-1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4000
+  } 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
  4001
+    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
  4002
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4003
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4004
-  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
  4005
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4006
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4007
-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
  4008
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4009
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4010
-  char *subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4011
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4012
-  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
  4013
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4014
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4015
-  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
  4016
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4017
-  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
  4018
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4019
-  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
  4020
-    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
  4021
-    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
  4022
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4023
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4024
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4025
-  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
  4026
-      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
  4027
-    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
  4028
-    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
  4029
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4030
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4031
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4032
-  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
  4033
-    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
  4034
-  } 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
  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, "clear")) {
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_clear();
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, "close")) {
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_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
  4040
-  } 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
  4041
-    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
  4042
-  } 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
  4043
-    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
  4044
-  } 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
  4045
-    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
  4046
-  } 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
  4047
-    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
  4048
-  } 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
  4049
-    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
  4050
-  } 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
  4051
-    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
  4052
-  } 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
  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, "search_backward")) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4055
-    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
  4056
-    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
  4057
-  } 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
  4058
-    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
  4059
-    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
  4060
-  } 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
  4061
-    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
  4062
-  } 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
  4063
-    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
  4064
-  } 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
  4065
-    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
  4066
-  } 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
  4067
-    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
  4068
-  } 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
  4069
-    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
  4070
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4071
-    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
  4072
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4073
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4074
-  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
  4075
+  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
  4076
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4077
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4078
 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
  4079
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4080
-  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
  4081
+  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
  4082
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4083
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4084
 static void do_info(char *arg)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4085
@@ -2033,29 +2785,20 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4086
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4087
 }
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
+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
  4090
+  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
  4091
+  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
  4092
+  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
  4093
+  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
  4094
+  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
  4095
+};
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4096
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4097
 // 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
  4098
-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
  4099
+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
  4100
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4101
   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
  4102
   char *buffer;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4103
   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
  4104
-  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
  4105
-         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
  4106
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4107
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4108
-    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
  4109
-      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
  4110
-    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
  4111
-      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
  4112
-    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
  4113
-      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
  4114
-    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
  4115
-      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
  4116
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4117
-      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
  4118
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4119
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4120
-  }
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
   // 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
  4123
   scr_set_chatmode(TRUE);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4124
@@ -2075,12 +2818,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4125
     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
  4126
     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
  4127
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4128
-    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
  4129
+    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
  4130
       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
  4131
                (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
  4132
                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
  4133
       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
  4134
-    } 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
  4135
+    } 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
  4136
         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
  4137
         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
  4138
         bool showaffil = (affil != affil_none);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4139
@@ -2096,12 +2839,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4140
       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
  4141
                (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
  4142
       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
  4143
-      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
  4144
+      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
  4145
         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
  4146
         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
  4147
                                  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
  4148
       }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4149
-      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
  4150
+      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
  4151
         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
  4152
         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
  4153
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4154
@@ -2145,16 +2888,69 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4155
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4156
 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
  4157
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4158
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4159
+    "rename",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4160
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4161
+      { 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
  4162
+      { 0,             'n', "name",  { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4163
+      { 0,             'g', "group", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4164
+      { CMDOPT_LAST,   'j', "jid",   { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4165
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4166
+    (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4167
+      { 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
  4168
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4169
+    NULL,
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
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4172
   const char *bjid, *group;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4173
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4174
   char *newname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4175
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4176
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4177
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4178
+  gboolean reset;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4179
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4180
+  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
  4181
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4182
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4183
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4184
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4185
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4186
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4187
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4188
+  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
  4189
+  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
  4190
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4191
+  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
  4192
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4193
+    srchtype |= ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4194
+    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
  4195
+  } 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
  4196
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4197
+    srchtype = ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4198
+    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
  4199
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4200
+    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
  4201
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4202
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4203
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4204
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4205
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4206
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4207
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4208
+    if (srchtype == ROSTER_TYPE_GROUP)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4209
+      bud = buddy_getgroup(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4210
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4211
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4212
+    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
  4213
+      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
  4214
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4215
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4216
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4217
+    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
  4218
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4219
+      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
  4220
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4221
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4222
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4223
+    bud = found -> data;
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
+    
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4226
   bjid   = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4227
   group  = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4228
   type   = buddy_gettype(bud);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4229
@@ -2162,11 +2958,13 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4230
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4231
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4232
     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
  4233
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4234
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4235
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4236
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4237
-  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
  4238
+  if (!*newname && !reset) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4239
     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
  4240
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4241
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4242
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4243
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4244
@@ -2181,90 +2979,117 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4245
   //  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4246
   //}
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
-  newname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4249
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4250
   for (p = newname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4251
   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
  4252
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4253
-  strip_arg_special_chars(newname);
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
-  name_utf8 = to_utf8(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
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4258
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4259
-    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
  4260
+    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
  4261
     // 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
  4262
     // 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
  4263
     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
  4264
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4265
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4266
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4267
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4268
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4269
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4270
-      /* 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
  4271
-       * 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
  4272
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4273
-      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
  4274
+      // 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
  4275
+      // 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
  4276
+      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
  4277
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4278
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4279
       // 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
  4280
-      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
  4281
+      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
  4282
       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
  4283
           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
  4284
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4285
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4286
   }
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
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4289
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4290
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4291
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4292
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4293
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4294
 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
  4295
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4296
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4297
+    "move",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4298
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4299
+      { 0,           'n', "name", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4300
+      { CMDOPT_LAST, 'j', "jid",  { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4301
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4302
+    (cmdarg_t[1]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4303
+      { 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
  4304
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4305
+    NULL,
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
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4308
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4309
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4310
   char *newgroupname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4311
-  char *group_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4312
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4313
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4314
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4315
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4316
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4317
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4318
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4319
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4320
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4321
+  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
  4322
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4323
+  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
  4324
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4325
+    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
  4326
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4327
+    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
  4328
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4329
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4330
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4331
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4332
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4333
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4334
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4335
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4336
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4337
+    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
  4338
+      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
  4339
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4340
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4341
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4342
+    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
  4343
+                        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
  4344
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4345
+      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
  4346
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4347
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4348
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4349
+    bud = found -> data;
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
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4352
   bjid = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4353
   name = buddy_getname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4354
   type = buddy_gettype(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4355
   on_srv = buddy_getonserverflag(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4356
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4357
   oldgroupname = buddy_getgroupname(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
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4360
     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
  4361
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4362
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4363
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4364
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4365
     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
  4366
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4367
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4368
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4369
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4370
-  newgroupname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4371
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4372
   for (p = newgroupname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4373
   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
  4374
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4375
-  strip_arg_special_chars(newgroupname);
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
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4378
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4379
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4380
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4381
-      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
  4382
+      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
  4383
       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
  4384
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4385
-      /* 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
  4386
-       * 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
  4387
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4388
+      // 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
  4389
+      // 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
  4390
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4391
       // 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
  4392
       guint msgflag;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4393
@@ -2276,7 +3101,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4394
       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
  4395
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4396
         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
  4397
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4398
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4399
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4400
         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
  4401
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4402
@@ -2285,8 +3110,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4403
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4404
   }
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
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4407
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4408
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4409
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4410
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4411
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4412
@@ -2468,50 +3292,33 @@
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4413
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4414
 static void do_rawxml(char *arg)
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
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4417
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4418
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4419
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4420
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4421
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4422
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4423
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4424
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4425
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4426
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4427
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4428
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4429
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4430
+        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
+  };
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
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4435
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4436
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4437
   }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4438
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4439
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4440
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4441
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4442
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4443
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4444
-    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
  4445
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4446
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4447
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4448
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4449
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4450
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4451
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4452
-    gchar *buffer;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4453
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4454
-    if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4455
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4456
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4457
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4458
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4459
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4460
-    // 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
  4461
-    // 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
  4462
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4463
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4464
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4465
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4466
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4467
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4468
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4469
-      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
  4470
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4471
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4472
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4473
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4474
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4475
-  free_arg_lst(paramlst);
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
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4478
+  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
  4479
+  cmdopts_free(&options);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4480
 }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4481
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4482
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4483
@@ -2874,7 +3681,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4484
   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
  4485
   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
  4486
   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
  4487
-  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
  4488
+  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
  4489
   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
  4490
   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
  4491
   free_arg_lst(paramlst);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4492
@@ -3290,6 +4097,207 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4493
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4494
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4495
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4496
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4497
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4498
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4499
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4500
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4501
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4502
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4503
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4504
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4505
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4506
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4507
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4508
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4509
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4510
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4511
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4512
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4513
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4514
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4515
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4516
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4517
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4518
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4519
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4520
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4521
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4522
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4523
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4524
+          { CMDOPT_LAST, { .arg = NULL } }, // password
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4525
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4526
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4527
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4528
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4529
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4530
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
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
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4533
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4534
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4535
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4536
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4537
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4538
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4539
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4540
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4541
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4542
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4543
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4544
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4545
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4546
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4547
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4548
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4549
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4550
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4551
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4552
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4553
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4554
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4555
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4556
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4557
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4558
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4559
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4560
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4561
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4562
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4563
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4564
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4565
+      { "destroy", 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
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4568
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4569
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4570
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4571
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4572
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4573
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4574
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4575
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4576
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4577
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4578
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4579
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4580
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4581
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4582
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4583
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4584
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4585
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4586
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4587
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4588
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4589
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4590
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4591
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4592
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4593
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4594
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4595
+      { "kick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4596
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4597
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4598
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4599
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4600
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4601
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4602
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4603
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4604
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4605
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4606
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4607
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4608
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4609
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4610
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4611
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4612
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4613
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4614
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4615
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4616
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4617
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4618
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4619
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4620
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4621
+      // 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
  4622
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4623
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4624
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4625
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4626
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4627
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4628
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4629
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4630
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4631
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4632
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4633
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4634
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4635
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4636
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4637
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4638
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4639
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4640
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4641
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4642
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4643
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4644
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4645
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4646
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4647
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4648
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4649
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4650
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4651
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4652
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4653
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4654
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4655
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4656
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4657
+      { "bookmark", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4658
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4659
+          { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4660
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4661
+        (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4662
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4663
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4664
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4665
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4666
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4667
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4668
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4669
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4670
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4671
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4672
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4673
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4674
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4675
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4676
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4677
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4678
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4679
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4680
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4681
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4682
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4683
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4684
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4685
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4686
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4687
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4688
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4689
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4690
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4691
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4692
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4693
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4694
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4695
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4696
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4697
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4698
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4699
   gpointer bud;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4700
@@ -3347,7 +4355,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4701
       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
  4702
   } 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
  4703
     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
  4704
-      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
  4705
+      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
  4706
   } 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
  4707
     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
  4708
       room_nick(bud, arg);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4709
@@ -4162,5 +5170,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4710
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4711
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4712
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4713
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4714
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4715
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4716
diff -r b527e8800278 mcabber/mcabber/commands.h
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4717
--- a/mcabber/mcabber/commands.h	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4718
+++ b/mcabber/mcabber/commands.h	Tue Mar 12 01:21:22 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4719
@@ -5,32 +5,242 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4720
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4721
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4722
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4723
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4724
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4725
+//  TODO:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4726
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4727
+// * Clustering of options/switches
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4728
+// * Multivalue options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4729
+//   - list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4730
+//     - special checker
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4731
+//     - or run checker multiple times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4732
+//   - or run command several times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4733
+//     - what if there are several of such arguments?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4734
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4735
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4736
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4737
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4738
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4739
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4740
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4741
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4742
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4743
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4744
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4745
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4746
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4747
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4748
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4749
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4750
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4751
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4752
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4753
+//     - percent (numerical, restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4754
+//   - number (result - int)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4755
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4756
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4757
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4758
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4759
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4760
+//   - current_buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4761
+// * Subcommands with fallback to argument?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4762
+// * [+foo|-foo] support?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4763
+// * 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
  4764
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4765
+// * for now we'll do without multi-options.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4766
+// * and without clustering.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4767
+// * checks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4768
+//   - argument type == public struct with name and callbacks, simple!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4769
+//   - command checks should be just single callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4770
+// * now, what checker needs?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4771
+//   - [in] value string (current or default)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4772
+//   - [in] additional input data for some generic checkers (like string2enum wordlist)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4773
+//   - [out] replacement value (not necessary string)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4774
+//     - replacement value may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4775
+//   - [out] error string
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4776
+//     - that may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4777
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4778
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4779
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4780
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4781
+typedef struct cmdarg_type_struct  cmdarg_type_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4782
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4783
+// note, this is called before options are parsed!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4784
+typedef gchar *(*cmd_checker_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4785
+// command function itself
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4786
+typedef gchar *(*cmd_handler_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4787
+// should check arg -> val -> val.arg and replace, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4788
+typedef gchar *(*cmdarg_checker_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4789
+// free resources, used in arg -> val -> val.arg, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4790
+typedef void (*cmdarg_destructor_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4791
+// todo
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4792
+typedef void (*cmdarg_completor_t)(void); // FIXME
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4793
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4794
+typedef union {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4795
+  guint       uint;        // unsigned integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4796
+  gint        sint;        // signed integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4797
+  guint       swc;         // switch count
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4798
+  const gchar *roarg;      // default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4799
+  gchar       *arg;        // string argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4800
+  cmdopts_t   *cmd;        // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4801
+  gpointer    bud;         // buddy data (roster entry)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4802
+  gpointer    ptr;         // anything else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4803
+} cmdarg_value_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4804
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4805
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4806
+  cmd_default     = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4807
+  cmd_safe        = 1<<0,  // command is safe to use in mcabberrc
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4808
+} cmd_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4809
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4810
+  cmdopt_default  = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4811
+  cmdopt_switch   = 1<<0,  // option have no argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4812
+} cmdopt_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4813
+typedef enum {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4814
+  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
  4815
+  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
  4816
+  cmdarg_plain    = 0x0002, // u2p, quotes and escapes are not processed
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4817
+  cmdarg_subcmd   = 0x0004, // u2p, argument is subcommand
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4818
+  cmdarg_check    = 0x0008, // u2p, force checker call on argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4819
+  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
  4820
+  cmdarg_visited  = 0x0020, // p2p, marks initialized arguments
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4821
+  cmdarg_checked  = 0x0040, // p2p, marks checked argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4822
+  cmdarg_freeme   = 0x0080, // c2p, marks argument, that needs freeing
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4823
+  // convenience shortcuts
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4824
+  cmdarg_eol      = 0x0003, // catchall + plain
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4825
+  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
  4826
+  cmdarg_ppclear  = 0x00E0, // pre-parse clear = visited + checked + freeme
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4827
+} cmdarg_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4828
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4829
+struct cmdopts_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4830
+  const char    *name;     // [user,req] command name (error messages, help, subcommands)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4831
+  cmd_flags_t   flags;     // [user,req] safe
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4832
+  cmd_checker_t check;     // [user,req] checker routine
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4833
+  cmd_handler_t handle;    // [user,req] main command processing function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4834
+  cmdopt_t      **opts;    // [user,req] options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4835
+  cmdarg_t      **args;    // [user,req] arguments
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4836
+  cmdopts_t     **cmds;    // [user,req] subcommands
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4837
+  gpointer      userdata;  // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4838
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4839
+struct cmdarg_struct {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4840
+  const char     *name;    // [user,req] argument name - errors, help
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4841
+  cmdarg_flags_t flags;    // [user,req] catchall, plain, required, subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4842
+  const char     *defval;  // [user,req] default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4843
+  cmdarg_type_t  *type;    // [user,req] type cbs - checker and completor
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4844
+  gpointer       chkdata;  // [user] instance data for type checker - eg string2enum list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4845
+  gpointer       userdata; // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4846
+  cmdarg_value_t value;    // [parser,chk] current value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4847
+};
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4848
+struct cmdopt_struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4849
+  cmdopt_flags_t flags;    // [user,req] switch
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4850
+  char           shortopt; // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4851
+  const char     *longopt; // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4852
+  cmdarg_t       arg;      // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4853
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4854
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4855
+struct cmdarg_type_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4856
+  cmdarg_checker_t    check;    // [user,req] check string and set argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4857
+  cmdarg_destructor_t free;     // [user,req] free argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4858
+  cmdarg_completor_t  complete; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4859
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4860
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4861
+void cmd_define (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4862
+void cmd_undef (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4863
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4864
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4865
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4866
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4867
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4868
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4869
+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
  4870
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4871
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4872
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4873
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4874
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4875
+} cmdexe_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4876
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4877
+  cmd_result_ok   = 0,       // all is ok
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4878
+  cmd_result_syntax_error,   // syntax, environment or argument check error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4879
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4880
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4881
+  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
  4882
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4883
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4884
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4885
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4886
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4887
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4888
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4889
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4890
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4891
+// 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
  4892
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4893
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4894
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4895
+// 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
  4896
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4897
+// 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
  4898
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4899
+cmd_result_t process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4900
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4901
+//
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4902
+//  Standard types
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4903
+//
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4904
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4905
 typedef struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4906
-  char name[32];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4907
-  const char *help;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4908
-  guint completion_flags[2];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4909
-  void (*func)(char *);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4910
-  gpointer userdata;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4911
-} cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4912
+  const char *name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4913
+  guint      value;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4914
+} string2enum_t;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4915
 
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4916
-void cmd_init(void);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4917
-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
  4918
-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
  4919
-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
  4920
-char *expandalias(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4921
-#ifdef MODULES_ENABLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4922
-gpointer cmd_del(gpointer id);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4923
-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
  4924
-                 void (*f)(char*), gpointer userdata);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4925
-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
  4926
+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
  4927
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4928
+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
  4929
+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
  4930
+gchar *cmdarg_check_roster_resource (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4931
+gchar *cmdarg_check_fjid            (cmdarg_t *arg);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4932
+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
  4933
+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
  4934
+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
  4935
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4936
+const cmdarg_type_t *cmdarg_type_nonspace;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4937
+const cmdarg_type_t *cmdarg_type_roster_bjid;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4938
+const cmdarg_type_t *cmdarg_type_roster_resource;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4939
+const cmdarg_type_t *cmdarg_type_fjid;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4940
+const cmdarg_type_t *cmdarg_type_uint;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4941
+const cmdarg_type_t *cmdarg_type_statusmask;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4942
+const cmdarg_type_t *cmdarg_type_string2enum;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4943
+const cmdarg_type_t *cmdarg_type_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4944
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4945
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4946
+//  Private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4947
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4948
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4949
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4950
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4951
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4952
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4953
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4954
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4955
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4956
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4957
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4958
+gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4959
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4960
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4961
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4962
+void cmdopts_free(cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4963
 #endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4964
-gboolean cmd_is_safe(const gchar *name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4965
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4966
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4967
+  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
  4968
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4969
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4970
+} msgtype_t;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4971
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4972
 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
  4973
 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
  4974
-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
  4975
-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
  4976
+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
  4977
+                   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
  4978
+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
  4979
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4980
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4981
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4982
diff -r b527e8800278 mcabber/mcabber/roster.c
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4983
--- a/mcabber/mcabber/roster.c	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4984
+++ b/mcabber/mcabber/roster.c	Tue Mar 12 01:21:22 2013 +0200
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4985
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4986
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4987
 // 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
  4988
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4989
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4990
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4991
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4992
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4993
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4994
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4995
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4996
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4997
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4998
     char *found = NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4999
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5000
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5001
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5002
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5003
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5004
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5005
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5006
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5007
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5008
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5009
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5010
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5011
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5012
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5013
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5014
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5015
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5016
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5017
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5018
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5019
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5020
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5021
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5022
     }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5023
diff -r b527e8800278 mcabber/mcabber/screen.c
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5024
--- a/mcabber/mcabber/screen.c	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5025
+++ b/mcabber/mcabber/screen.c	Tue Mar 12 01:21:22 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5026
@@ -3630,7 +3630,7 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5027
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5028
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5029
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5030
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5031
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5032
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5033
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5034
   scr_cmdhisto_addline(inputLine);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5035
diff -r b527e8800278 mcabber/mcabber/xmpp_iq.c
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5036
--- a/mcabber/mcabber/xmpp_iq.c	Mon Mar 11 21:45:31 2013 +0200
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5037
+++ b/mcabber/mcabber/xmpp_iq.c	Tue Mar 12 01:21:22 2013 +0200
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5038
@@ -289,10 +289,7 @@
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5039
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5040
         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
  5041
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5042
-          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
  5043
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5044
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5045
-          g_free(status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5046
+          cmd_setstatus(NULL, s->status, message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5047
           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
  5048
           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
  5049
                                               "Status has been changed");