cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 13 Mar 2013 03:23:11 +0200
changeset 77 7197414053c9
parent 76 3c8b784f92c7
child 78 ee30584c654b
permissions -rw-r--r--
[cmdopts] Roll some things back, fix errors Bloody C structure initializer syntax - had to switch back to contiguous struct list instead of addresses.
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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    38
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    50
+++ b/mcabber/doc/help/cs/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    59
+++ b/mcabber/doc/help/cs/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    70
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    82
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
    94
+++ b/mcabber/doc/help/de/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   103
+++ b/mcabber/doc/help/de/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   115
+++ b/mcabber/doc/help/de/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   127
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   139
+++ b/mcabber/doc/help/en/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   149
+++ b/mcabber/doc/help/en/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   160
+++ b/mcabber/doc/help/en/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   172
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   184
+++ b/mcabber/doc/help/fr/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   193
+++ b/mcabber/doc/help/fr/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   204
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   216
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   228
+++ b/mcabber/doc/help/it/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   237
+++ b/mcabber/doc/help/it/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   248
+++ b/mcabber/doc/help/it/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   260
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   272
+++ b/mcabber/doc/help/nl/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   281
+++ b/mcabber/doc/help/nl/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   292
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   304
+++ b/mcabber/doc/help/pl/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   313
+++ b/mcabber/doc/help/pl/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   324
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   336
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   348
+++ b/mcabber/doc/help/ru/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   358
+++ b/mcabber/doc/help/ru/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   370
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   382
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   394
+++ b/mcabber/doc/help/uk/hlp_del.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   404
+++ b/mcabber/doc/help/uk/hlp_move.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   416
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Wed Mar 13 03:21:24 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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   427
+++ b/mcabber/mcabber/commands.c	Wed Mar 13 03:21:24 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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   817
+      for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   833
+      for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   834
+        cmdarg_t *arg = command -> args + n; 
74
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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   871
+        size_t n;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   872
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   873
+          if (command -> opts[n].shortopt == *s) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   874
+            option = command -> opts + n;
74
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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   912
+        size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   913
+        *p = '\0';
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   914
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   915
+          if (!g_strcmp0(command -> opts[n].longopt, s)) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   916
+            option = command -> opts + n;
74
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);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   941
+      } else if (!command -> args || !command -> args[argno].name) { // no need to parse arguments any further
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   942
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   943
+      } else { // normal aurgument
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   944
+        arg = command -> args + argno;
74
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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   964
+            for (n = 0; command -> cmds[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   965
+              if (!strcmp (s, command -> cmds[n].name)) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   966
+                subcmd = command -> cmds + n;
74
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;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   994
+    for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
   995
+      cmdopt_t *opt = command -> opts + n;
74
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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1004
+                if (opt -> longopt) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1005
+                  error = g_strdup_printf ("%s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1006
+                } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1007
+                  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
  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 {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1012
+                if (opt -> longopt) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1013
+                  scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1014
+                } else {
75
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 -%c: %s", command -> name, opt -> shortopt, 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;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1029
+    for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1030
+      cmdarg_t *arg = command -> args + n;
74
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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1048
+                error = g_strdup_printf ("%s: Error in argument %s (%lu): %s", command -> name, arg -> name, n, err);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  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
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1052
+                scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument %s (%lu): %s", command -> name, arg -> name, n, err);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1081
+    for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1082
+      cmdopt_t *opt = command -> opts + n;
74
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) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1094
+    for (n = 0; command -> args[n].name != NULL; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1095
+      cmdarg_t *arg = command -> args + n;
74
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("");
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1595
@@ -556,141 +715,500 @@
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
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1796
+const cmdarg_type_t cmdarg_type_nonspace = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1802
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1803
+//  bjid -> bud
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1806
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1807
+// Returns buddy roster entry in value.bud.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1808
+// Recognizes as current ".", but not "" or NULL - use defvalue.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1809
+// Does not require freeing.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1810
+gchar *cmdarg_check_roster_bjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1811
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1812
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1813
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1814
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1815
+    const char *bjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1816
+    guint      types = (guint) arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1817
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1818
+    if (!strcmp(bjid, ".")) { // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1819
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1820
+        error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1821
+      else if (buddy_gettype(BUDDATA(current_buddy)) & types)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1822
+        arg -> value.bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1823
+      else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1824
+        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
  1825
+    } else if (!check_jid_syntax(bjid)) { // valid jid specified
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1826
+      GSList *found = roster_find(bjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1827
+      if (found)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1828
+        arg -> value.bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1829
+      else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1830
+        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
  1831
+    } else { // jid is invalid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1832
+      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
  1833
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1834
+  }
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
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1837
+    arg -> value.bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1838
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1839
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1840
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1841
+const cmdarg_type_t cmdarg_type_roster_bjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1842
+  cmdarg_check_roster_bjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1843
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1844
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1845
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1846
+
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
+//  fjid -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1849
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1850
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1851
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1852
+// Returns buddy roster entry in userdata.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1853
+// Returns resource string in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1854
+// Recognizes as current "./res" and "res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1855
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1856
+// 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
  1857
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1858
+//  * 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
  1859
+//  * 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
  1860
+gchar *cmdarg_check_roster_resource (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1861
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1862
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1863
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1864
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1865
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1866
+  if (!(error = cmdarg_check_nonspace(arg))) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1867
+    char  *fjid = arg -> value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1868
+    guint types = (guint) arg -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1869
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1870
+    if (fjid[0] == '.' && fjid[1] == JID_RESOURCE_SEPARATOR) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1871
+      // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1872
+      resource = fjid+2;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1873
+    } 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
  1874
+      // valid jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1875
+      GSList *found;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1876
+      *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
  1877
+      found = roster_find (fjid, jidsearch, types);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1878
+      if (found) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1879
+        bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1880
+        resource ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1881
+      } else
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1882
+        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
  1883
+    } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1884
+      // jid is invalid - let's consider it resource (XXX)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1885
+      resource = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1886
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1887
+    // resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1888
+    if (error == NULL && resource) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1889
+      if (bud == NULL) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1890
+        if (!current_buddy)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1891
+          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
  1892
+        else if (buddy_gettype (BUDDATA(current_buddy)) & types)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1893
+          bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1894
+        else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1895
+          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
  1896
       }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1897
-      g_slist_free(resources);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1898
-      if (!found) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1899
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1900
-        return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1901
+      if (bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1902
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1903
+        gboolean found = FALSE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1904
+        resources = buddy_getresources (bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1905
+        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
  1906
+          if (!g_strcmp0 ((char*)p_res->data, resource))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1907
+            found = TRUE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1908
+          g_free (p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1909
+        }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1910
+        g_slist_free (resources);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1911
+        if (!found)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1912
+          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
  1913
       }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1914
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1915
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1916
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1917
+  if (error) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1918
+    arg -> userdata  = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1919
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1920
+  } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1921
+    arg -> userdata  = bud;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1922
+    arg -> value.arg = resource;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1923
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1924
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1925
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1926
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1927
+const cmdarg_type_t cmdarg_type_roster_resource = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1928
+  cmdarg_check_roster_resource,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1929
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1930
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1931
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1932
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1933
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1934
+//  fjid -> fjid
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1937
+// Returns corrected fjid in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1938
+// Recognizes as current "." and "./res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1939
+// Requires freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1940
+// XXX:
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1941
+//  * g_strdup jid?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1942
+gchar *cmdarg_check_fjid (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1943
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1944
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1945
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1946
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1947
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1948
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1949
+    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
  1950
+      const char *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1951
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1952
+        error = g_strdup_printf ("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1953
+      else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1954
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1955
+      } 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
  1956
+        arg -> value.roarg = jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1957
+      } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1958
+        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
  1959
+        arg -> flags    |= cmdarg_freeme;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1960
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1961
+    } else if (check_jid_syntax(fjid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1962
+      error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1963
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1964
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1965
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1966
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1967
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1968
+  return error;
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
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1971
+const cmdarg_type_t cmdarg_type_fjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1972
+  cmdarg_check_fjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1973
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1974
+  NULL,
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1977
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1978
+//  string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1979
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1980
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1981
+// Returns unsigned integer in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1982
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1983
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1984
+//  * 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
  1985
+//  * 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
  1986
+gchar *cmdarg_check_uint (cmdarg_t *arg)
75
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
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1989
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1990
+  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
  1991
+    char *s = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1992
+    char *e = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1993
+    long n  = strtol(s, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1994
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1995
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1996
+    else if (n < 0)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1997
+      error = g_strdup ("Value must be greater than zero.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1998
+    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
  1999
+      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
  2000
+    else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2001
+      arg -> value.uint = (guint) n;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2002
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2003
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2004
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2005
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2006
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2007
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2008
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2009
+const cmdarg_type_t cmdarg_type_uint = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2010
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2011
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2012
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2013
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2014
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2015
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2016
+//  string -> statusmask
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2017
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2018
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2019
+// Strips/checks for any non-valid status chars in mask.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2020
+// Returns mask in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2021
+// Recognizes "*" as glob.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2022
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2023
+// No errors in default vaules - needs RW for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2024
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2025
+//  * check duplicates?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2026
+//    * string2flags?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2027
+//  * canonicize?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2028
+//    * string2enum?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2029
+//  * common strchr callback with valid chars in chkdata?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2030
+//    * 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
  2031
+gchar *cmdarg_check_statusmask (cmdarg_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2032
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2033
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2034
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2035
+  if (!(error = cmdarg_check_nonspace(arg)) && arg -> value.arg) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2036
+    const char *valid = "foand_?";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2037
+    if (!strcmp(arg -> value.arg, "*")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2038
+      arg -> value.arg = g_strdup (valid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2039
+      arg -> flags    |= cmdarg_freeme;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2040
     } else {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2041
-      resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2042
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2043
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2044
+      while (p < e) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2045
+        if (strchr (valid, *p)) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2046
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2047
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2048
+          // this is valid use of flag in checker
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2049
+          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
  2050
+        } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2051
+          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
  2052
+          g_memmove (p, p+1, e-p-1);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2053
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2054
+        }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2055
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2056
+      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
  2057
+        arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2058
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2059
-    buddy_setactiveresource(bud, resource);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2060
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2061
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2062
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2063
+  return error;
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
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2066
+const cmdarg_type_t cmdarg_type_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2067
+  cmdarg_check_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2068
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2069
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2070
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2071
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2072
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2073
+//  string -> enum
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2076
+// 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
  2077
+// Returns corresponding value in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2078
+// Returns 0 if not recognized and not required.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2079
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2080
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2081
+//  * 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
  2082
+//  * default value on error?
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2083
+gchar *cmdarg_check_string2enum (cmdarg_t *arg)
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
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2086
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2087
+  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
  2088
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2089
+    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
  2090
+      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
  2091
+        arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2092
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2093
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2094
+    // not found, error
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2095
+    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
  2096
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2097
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2098
+  if (error)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2099
+    arg -> value.uint = 0;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2100
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2101
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2102
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2103
+const cmdarg_type_t cmdarg_type_string2enum = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2104
+  cmdarg_check_string2enum,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2105
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2106
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2107
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2108
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2109
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2110
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2111
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2112
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2113
+static const string2enum_t s2e_color[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2114
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2115
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2116
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2117
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2118
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2119
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2120
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2121
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2122
+  { NULL,      0  },
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2125
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2126
+// Returns color name in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2127
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2128
+// XXX
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2129
+//  * 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
  2130
+//    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
  2131
+//    * that needs access to ncurses internals, so, probably, this will
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2132
+//      be better done, when moving related command definitions to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2133
+//      corresponding subsystems.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2134
+static gchar *cmdarg_check_color (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2135
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2136
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2137
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2138
+  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
  2139
+    char *color = arg -> value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2140
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2141
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2142
+      return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2143
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2144
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2145
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2146
+      color += 6;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2147
+    { // check names
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2148
+      const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2149
+      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
  2150
+        if (!strcmp (list -> name, color))
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2151
+          return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2152
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2153
+    { // 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
  2154
+      char *e = color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2155
+      long n  = strtol(color, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2156
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2157
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2158
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2159
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2160
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2161
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2162
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2163
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2164
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2165
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2166
+const cmdarg_type_t cmdarg_type_color = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2167
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2168
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2169
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2170
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2171
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2172
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2173
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2174
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2175
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2176
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2177
+// you also have to add it to cmd_init().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2178
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2179
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2180
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2181
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2182
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2183
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2184
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2185
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2186
+static void roster_buddylock(gpointer bud, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2187
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2188
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2189
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2190
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2191
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2192
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2193
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2194
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2195
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2196
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2197
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2198
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2199
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2200
 // (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
  2201
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2202
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2203
 static void display_and_free_note(struct annotation *note, const char *winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2204
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2205
   gchar tbuf[128];
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2206
@@ -755,41 +1273,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2207
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2208
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2209
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2210
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2211
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2212
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2214
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2217
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2218
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2219
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2220
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2221
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2222
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2223
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2224
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2225
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2226
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2227
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2228
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2229
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
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
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2236
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2237
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2238
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2239
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2240
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2241
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2242
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2243
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2244
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2245
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2246
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2247
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2248
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2249
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2250
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2253
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2254
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2255
       display_and_free_note(note, bjid);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2256
@@ -800,194 +1292,293 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2257
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2258
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2259
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2260
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2261
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2262
-inline static void roster_updown(int updown, char *nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2268
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2269
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2270
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
+  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
  2272
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2273
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2274
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2275
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2276
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2277
+#define SCMD_ROSTER(NAME, ARGS...) \
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2278
+    { #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
  2279
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2280
+  "roster",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2281
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2282
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2285
+  (cmdarg_t[2]){{"subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL},{NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2286
+  (cmdopts_t[25]){
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2288
+    SCMD_ROSTER(top,    NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2289
+    SCMD_ROSTER(up,   (cmdarg_t[2]){{"n", cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2290
+//    { "up", NULL, NULL, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2291
+//      (cmdarg_t[2]){{"n", cmdarg_chreq, "1", cmdarg_type_uint},{NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2292
+//      NULL, (gpointer)scmd_roster_up
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2293
+//    }
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2294
+    SCMD_ROSTER(down, (cmdarg_t[2]){{"n", cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2295
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2297
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2298
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
+    SCMD_ROSTER(unread_next,  NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2300
+    SCMD_ROSTER(search, (cmdarg_t[2]){{"name", cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_nonspace},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2301
+    SCMD_ROSTER(display, (cmdarg_t[2]){{"statusmask", cmdarg_check, NULL, &cmdarg_type_statusmask},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2302
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2303
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2304
+    SCMD_ROSTER(toggle_offline, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2305
+    SCMD_ROSTER(item_lock,        (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2306
+    SCMD_ROSTER(item_unlock,      (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2307
+    SCMD_ROSTER(item_toggle_lock, (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2308
+    { "note", cmd_default, NULL, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2309
+      (cmdopt_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2310
+        {'r', "reset", cmdopt_switch, {"reset", cmdarg_default, NULL, NULL, NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2311
+        {'j', "jid",  cmdopt_default, {"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT)}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2312
+        {0}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2313
+      },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2314
+      (cmdarg_t[2]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2315
+        {"text", cmdarg_eol, NULL, &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2316
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2317
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2318
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2319
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
+    SCMD_ROSTER(notes, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2321
+    SCMD_ROSTER(resource_lock,   (cmdarg_t[2]){{"resource|fjid", cmdarg_chreq, NULL, &cmdarg_type_roster_resource, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)},{NULL}}),
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2322
+    SCMD_ROSTER(resource_unlock, (cmdarg_t[2]){{"jid", cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2323
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2325
+    SCMD_ROSTER(toggle, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2326
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2327
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2328
+};
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
+static gchar *do_roster(cmdopts_t *options)
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
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2333
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2334
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2335
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2336
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2337
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2338
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2339
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
-    scr_roster_up_down(updown, nbitems);
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
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2343
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2344
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2345
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2346
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2347
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2348
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2349
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2350
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2351
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2352
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2353
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2354
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2355
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2356
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2357
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2358
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2359
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2361
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2362
-  if (!strcasecmp(subcmd, "top")) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2363
+  scmd_roster_t subcmd = (scmd_roster_t) (options -> args[0].value.cmd -> userdata);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2364
+  cmdarg_t      *arg   = NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2365
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2366
+  if (options -> args[0].value.cmd -> args[0].name)
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2367
+    arg = options -> args[0].value.cmd -> args;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2368
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2369
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2370
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2371
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2372
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2373
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2374
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2375
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2376
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2377
+  } else if (subcmd == scmd_roster_up) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
+    scr_roster_up_down(-1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2379
+  } else if (subcmd == scmd_roster_down) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2380
+    scr_roster_up_down(1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2381
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2382
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2383
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2384
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2385
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2386
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2387
+  } else if (subcmd == scmd_roster_unread_first) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2388
+    scr_roster_unread_message(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2389
+  } else if (subcmd == scmd_roster_unread_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2390
+    scr_roster_unread_message(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2391
+  } else if (subcmd == scmd_roster_search) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2392
+    scr_roster_search(arg -> value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2393
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2394
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2395
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2396
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2397
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2398
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2399
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2400
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2401
+  } else if (subcmd == scmd_roster_display) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2402
+    scr_roster_display(arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2403
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2404
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2405
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2406
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2407
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2408
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2409
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2410
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2411
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2412
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2413
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2414
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2415
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2416
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2417
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2418
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2419
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2420
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2421
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2422
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2423
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2424
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2425
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2426
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2427
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2428
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2429
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2430
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2431
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2432
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2433
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2434
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2435
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2436
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2437
-      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
  2438
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2439
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2440
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2441
-    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
  2442
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2443
-    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
  2444
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2445
-    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
  2446
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2447
-    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
  2448
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2449
-    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
  2450
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2451
-    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
  2452
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2453
-    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
  2454
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2455
-    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
  2456
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2457
-    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
  2458
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2459
+  } else if (subcmd == scmd_roster_item_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2460
+    roster_buddylock(arg -> value.bud, 1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2461
+  } else if (subcmd == scmd_roster_item_unlock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2462
+    roster_buddylock(arg -> value.bud, 0);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2463
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2464
+    roster_buddylock(arg -> value.bud, -1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2465
+  } else if (subcmd == scmd_roster_note) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2466
+    roster_note(options -> cmds[18].opts[1].arg.value.bud,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2467
+                options -> cmds[18].opts[0].arg.value.swc,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2468
+                arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2469
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2470
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2471
+  } else if (subcmd == scmd_roster_resource_lock) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2472
+    buddy_setactiveresource(arg -> userdata, arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2473
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2474
+  } else if (subcmd == scmd_roster_resource_unlock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2475
+    buddy_setactiveresource(arg -> value.bud, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2476
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2477
+  } else if (subcmd == scmd_roster_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2478
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2479
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2480
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2481
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2482
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2483
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2484
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2485
+  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
  2486
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2487
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2488
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2490
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2491
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2492
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2493
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2494
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2495
+// statusmask + "clear"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2496
+static gchar *cmdarg_check_color_statusmask (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2497
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2498
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2499
-  char *subcmd;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2500
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2501
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2502
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2503
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2504
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2505
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2506
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2507
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2508
-    return;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2509
+  if (!g_strcmp0 (arg -> value.arg, "clear"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2510
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2511
+  else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2512
+    return cmdarg_check_statusmask (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2513
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2514
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2515
+static const cmdarg_type_t cmdarg_type_color_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2516
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2517
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2518
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2519
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2520
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2521
+// bjid + "*"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2522
+// Returns string, not buddy.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2523
+static gchar *cmdarg_check_color_roomjid (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2524
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2525
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2526
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2527
+  if (!g_strcmp0(arg -> value.arg, "*"))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2528
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2529
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2530
+  arg -> chkdata = (gpointer) ROSTER_TYPE_ROOM;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2531
+  if (!(error = cmdarg_check_roster_bjid (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2532
+    arg -> value.roarg = buddy_getjid (arg -> value.bud); // XXX strdup?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2533
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2534
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2535
-  if (!strcasecmp(subcmd, "roster")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2536
-    char *status, *wildcard, *color;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2537
-    char **arglist = split_arg(arg, 3, 0);
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
-    status = *arglist;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2540
-    wildcard = to_utf8(arglist[1]);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2541
-    color = arglist[2];
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2542
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2543
-    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
  2544
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2545
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2546
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2547
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2548
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2549
+static const cmdarg_type_t cmdarg_type_color_roomjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2550
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2551
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2552
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2553
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2554
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2555
+// TODO: completion, that says, which roster jids do match
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2556
+static const cmdarg_type_t cmdarg_type_bjidmask = {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2557
+  cmdarg_check_nonspace,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2558
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2559
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2560
+};
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2561
+
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2562
+// TODO: completion, based on current room nicks
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2563
+static const cmdarg_type_t cmdarg_type_nick = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2564
+  cmdarg_check_nonspace,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2565
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2566
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2567
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2568
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2569
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2570
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2571
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2572
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2573
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2574
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2575
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2576
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2577
+static const string2enum_t s2e_color_muc[] = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2578
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2579
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2580
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2581
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2582
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2583
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2584
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2585
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2586
+  "color",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2587
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2588
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2589
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2590
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2591
+  (cmdarg_t[2]){{ "subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL },{NULL}},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2592
+  (cmdopts_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2593
+    {"roster", cmd_default, NULL, NULL, NULL, (cmdarg_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2594
+        { "statusmask|clear", cmdarg_chreq,   NULL, &cmdarg_type_color_statusmask },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2595
+        { "jidmask",          cmdarg_default, NULL, &cmdarg_type_bjidmask         },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2596
+        { "color|-",          cmdarg_default, NULL, &cmdarg_type_color            },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2597
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2598
+      }, NULL, (gpointer)scmd_color_roster},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2599
+    {"muc", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2600
+        { "roomjid",         cmdarg_chreq, NULL, &cmdarg_type_color_roomjid },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2601
+        { "on|off|preset|-", cmdarg_chreq, "on", &cmdarg_type_string2enum, (gpointer)s2e_color_muc},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2602
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2603
+      }, NULL, (gpointer)scmd_color_muc},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2604
+    {"mucnick", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2605
+        { "nick",    cmdarg_chreq, NULL, &cmdarg_type_nick  },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2606
+        { "color|-", cmdarg_chreq, NULL, &cmdarg_type_color },
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2607
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2608
+      }, NULL, (gpointer)scmd_color_mucnick},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2609
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2610
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2611
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2612
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2613
+static gchar *do_color(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2614
+{
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2615
+  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
  2616
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2617
+  if (subcmd == scmd_color_roster) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2618
+    const gchar *status   = options -> cmds[0].args[0].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2619
+    const gchar *wildcard = options -> cmds[0].args[1].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2620
+    const gchar *color    = options -> cmds[0].args[2].value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2621
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2622
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2623
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2624
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2625
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2626
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2627
+      if (!wildcard || !*wildcard || !color || !*color) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2628
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2629
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2630
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2631
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2632
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2633
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2634
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2635
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2636
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2637
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2638
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2639
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2640
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2641
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2642
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2643
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2644
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2645
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2646
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2647
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2648
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2649
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2650
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2651
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2652
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2653
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2654
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2655
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2656
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2657
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2658
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2659
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2660
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2661
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2662
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2663
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2664
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2665
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2666
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2667
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2668
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2669
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2670
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2671
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2672
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2673
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2674
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2675
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2676
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2677
+  } else if (subcmd == scmd_color_muc) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2678
+    scr_muc_color ( options -> cmds[1].args[0].value.arg,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2679
+                    options -> cmds[1].args[1].value.uint );
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2680
+  } else { // scmd_color_mucnick
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2681
+    scr_muc_nick_color( options -> cmds[2].args[0].value.arg,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2682
+                        options -> cmds[2].args[1].value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2683
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2684
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2685
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2686
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2687
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2688
-//  cmd_setstatus(recipient, arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2689
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2690
+//  /status
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2691
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2692
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2693
+// 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
  2694
+//  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
  2695
 // Set your Jabber status.
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2696
-// - 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
  2697
-// - 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
  2698
-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
  2699
+// 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
  2700
+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
  2701
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2702
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2703
-  char *status;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2704
-  char *msg;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2705
   enum imstatus st;
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
   if (!xmpp_is_online())
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2708
@@ -1000,15 +1591,15 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2709
   if (!recipient)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2710
     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
  2711
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2712
-  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
  2713
-  status = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2714
-  msg = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2715
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2716
   if (!status) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2717
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2718
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2719
   }
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
+  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2722
+  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2723
+    msg = NULL;
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
   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
  2727
   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
  2728
   else if (!strcasecmp(status, IMSTATUS_AVAILABLE))     st = available;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2729
@@ -1020,229 +1611,349 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2730
   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
  2731
   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
  2732
   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
  2733
-    if (!msg || !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2734
+    if (!msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2735
       // 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
  2736
       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
  2737
-      free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2738
       return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2739
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2740
     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
  2741
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2742
     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
  2743
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2744
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2745
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2746
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2747
-  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2748
-  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2749
-    msg = NULL;
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
   // 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
  2753
   if (recipient && !msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2754
     msg = "";
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
   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
  2757
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2758
-  free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2759
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2760
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2761
-static void do_status(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2762
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2763
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2764
+// needs corresponding s2e in chkdata
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2765
+static gchar *cmdarg_check_status_status (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2766
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2767
-  if (!*arg) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2768
+  if (!g_strcmp0(arg -> value.arg, "message")) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2769
+    arg -> value.uint = xmpp_getstatus(); // Preserve current status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2770
+    return NULL;
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2773
+  return cmdarg_check_string2enum (arg);
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
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2776
+static const cmdarg_type_t cmdarg_type_status_status = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2777
+  cmdarg_check_status_status,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2778
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2779
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2780
+};
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
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2783
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2784
+static const string2enum_t s2e_status2[] = {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2785
+  { "away",      away        },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2786
+  { "offline",   offline     },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2787
+  { "online",    available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2788
+  { "avail",     available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2789
+  { "notavail",  notavail    },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2790
+  { "dnd",       dontdisturb },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2791
+  { "free",      freeforchat },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2792
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2793
+  { "invisible", invisible   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2794
+#endif
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2795
+  // XXX ugly
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2796
+  { "show",      imstatus_size},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2797
+  { NULL,        0           },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2798
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2799
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2800
+static cmdopts_t def_status = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2801
+  "status",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2802
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2803
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2804
+  do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2805
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2806
+  (cmdarg_t[3]){
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2807
+    {"status",  cmdarg_chreq, "show", &cmdarg_type_status_status, (gpointer)s2e_status2},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2808
+    {"message", cmdarg_eol,   NULL,   &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2809
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2810
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2811
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2812
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2813
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2814
+static gchar *do_status(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2815
+{
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2816
+  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
  2817
     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
  2818
     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
  2819
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2820
                  (sm ? sm : ""));
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2821
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2822
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2823
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2824
+    scr_check_auto_away(TRUE);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2825
+    xmpp_setstatus(options -> args[0].value.uint, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2826
+                   options -> args[1].value.arg, FALSE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2827
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2828
+  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2829
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2830
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2831
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2832
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2833
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2834
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2835
+// no "show" here
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2836
+static const string2enum_t s2e_status[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2837
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2838
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2839
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2840
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2841
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2842
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2843
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2844
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2845
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2846
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2847
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2848
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2849
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2850
+static cmdopts_t def_status_to = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2851
+  "status_to",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2852
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2853
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2854
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2855
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2856
+  (cmdarg_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2857
+    {"jid",     cmdarg_chreq, NULL, &cmdarg_type_fjid},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2858
+    {"status",  cmdarg_chreq, NULL, &cmdarg_type_status_status, (gpointer)s2e_status},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2859
+    {"message", cmdarg_eol,   NULL, &cmdarg_type_nonspace},
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2860
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2861
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2862
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2863
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2864
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2865
+static gchar *do_status_to(cmdopts_t *options)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2866
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2867
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2868
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2869
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2870
+  fjid = options -> args[0].value.arg;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2871
+  st   = options -> args[1].value.uint;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2872
+  msg  = options -> args[2].value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2873
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2874
+  { // get status name
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2875
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2876
+    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
  2877
+      if (list -> value == st) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2878
+        stname = list -> name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2879
+        break;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2880
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2881
+  }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2882
+  // prevent default status message
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2883
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2884
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2885
+  scr_LogPrint(LPRINT_LOGNORM, 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2886
+               "Sending to <%s> /status %s %s", fjid, stname, msg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2887
+  if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2888
+    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2889
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2890
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2891
+  return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2892
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2893
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2894
+#if 0
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2895
+static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2896
+{
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2897
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2898
+    "add",
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2899
+    NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2900
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2901
+      // jid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2902
+      { 0,                                            { .arg = "."  } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2903
+      // rostername
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2904
+      { 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
  2905
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2906
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2907
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2908
+  gchar *jid, *nick;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2909
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2910
+  if (!xmpp_is_online()) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2911
+    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2912
     return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2913
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2914
-  arg = to_utf8(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2915
-  cmd_setstatus(NULL, arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2916
-  g_free(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2917
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2918
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2919
-static void do_status_to(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2920
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2921
-  char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2922
-  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
  2923
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2924
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2925
-  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
  2926
-  fjid = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2927
-  st = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2928
-  msg = *(paramlst+2);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2929
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2930
-  if (!fjid || !st) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2931
-    scr_LogPrint(LPRINT_NORMAL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2932
-                 "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
  2933
-    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
  2934
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2935
+  if (cmdopts_parse(arg, &options))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2936
     return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2937
-  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2938
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2939
-  // Allow things like /status_to "" away
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2940
-  if (!*fjid || !strcmp(fjid, "."))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2941
-    fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2942
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2943
-  if (fjid) {
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
+  jid  = options.args[0].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2946
+  nick = options.args[1].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2947
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2948
+  if (jid && (!*jid || !strcmp(jid, ".")))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2949
+    jid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2950
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2951
+  if (jid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2952
     // The JID has been specified.  Quick check...
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2953
-    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
  2954
-      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
  2955
-                   "<%s> is not a valid Jabber ID.", fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2956
-      fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2957
+    if (check_jid_syntax(jid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2958
+      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
  2959
+      jid = NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2960
     } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2961
-      // Convert jid to lowercase
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2962
-      char *p = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2963
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2964
-        *p = tolower(*p);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2965
-      fjid = jid_utf8 = to_utf8(fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2966
+      mc_strtolower(jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2967
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2968
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2969
     // Add the current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2970
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2971
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2972
-    if (!fjid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2973
+      jid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2974
+    if (!jid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2975
       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
  2976
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2977
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2978
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2979
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2980
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2981
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2982
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2983
-    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
  2984
-    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
  2985
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2986
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2987
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2988
-    g_free(jid_utf8);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2989
+  if (jid) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2990
+    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2991
+    xmpp_addbuddy(jid, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2992
+    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2993
+                 jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2994
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2995
-  free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2996
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2997
+  cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2998
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2999
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3000
-static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3001
+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
  3002
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3003
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3004
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3005
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3006
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3007
+    "del",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3008
+    (cmdopt_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3009
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'n', "dryrun", { .swc = 0 } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3010
+    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3011
+    (cmdarg_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3012
+      { 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
  3013
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3014
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3015
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3016
+  gchar *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3017
+  gpointer buddy;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3018
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3019
   if (!xmpp_is_online()) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3020
     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
  3021
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3022
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3023
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3024
-  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
  3025
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3026
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3027
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3028
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3029
-    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
  3030
-  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
  3031
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3032
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3033
-  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
  3034
+  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
  3035
+    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3036
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3037
+  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
  3038
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3039
+  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
  3040
+    jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3041
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3042
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3043
     // 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
  3044
-    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
  3045
-      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
  3046
-                   "<%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
  3047
-      id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3048
+    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
  3049
+      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
  3050
+      jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3051
     } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3052
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3053
-      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
  3054
+      GSList *found;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3055
+      mc_strtolower(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3056
+      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
  3057
+                          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
  3058
+      if (!found) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3059
+        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
  3060
+        jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3061
+      } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3062
+        buddy = found -> data;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3063
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3064
     }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3065
   } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3066
-    // 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
  3067
+    // Use current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3068
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3069
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3070
-    if (!id)
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3071
+      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
  3072
+    if (!jid)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3073
       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
  3074
+    else
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3075
+      buddy = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3076
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3077
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3078
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3079
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3080
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3081
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3082
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3083
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3084
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3085
-                 id);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3086
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3087
+    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
  3088
+      // This is a chatroom
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3089
+      if (buddy_getinsideroom(buddy)) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3090
+        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
  3091
+        cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3092
+        return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3093
+      }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3094
+    }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3095
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3096
+    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
  3097
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3098
+    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
  3099
+      // Close the buffer
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3100
+      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
  3101
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3102
+      xmpp_delbuddy(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3103
+      scr_update_buddy_window();
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3104
+    }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3105
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3106
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3107
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3108
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3109
-  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
  3110
+  cmdopts_free(&options);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3111
 }
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
-static void do_del(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3114
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3115
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3116
+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
  3117
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3118
-  const char *bjid;
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
-  if (*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3121
-    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
  3122
-                 "the currently-selected buddy will be deleted.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3123
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3124
-  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3125
+  // 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
  3126
+  // 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
  3127
+  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3128
+  if (action != scmd_group_unfold &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3129
+      ((!current_buddy) ||
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3130
+       (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3131
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3132
+    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3133
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3134
+  buddy_hide_group(group, action);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3135
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3136
+  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3137
+  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3138
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3139
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3140
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3141
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3142
+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
  3143
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3144
+  scmd_group_t subcmd;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3145
+  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
  3146
+    "group",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3147
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3148
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3149
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3150
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3151
+    // all of them have one argument - group name
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3152
+#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
  3153
+      { #NAME, NULL, (cmdarg_t[1]){ \
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3154
+          { 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
  3155
+        }, 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
  3156
+    (cmdopts_t[5]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3157
+      GROUP_SUBCMD(expand, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3158
+      GROUP_SUBCMD(unfold, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3159
+      GROUP_SUBCMD(shrink, fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3160
+      GROUP_SUBCMD(fold,   fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3161
+      GROUP_SUBCMD(toggle, toggle, CMDOPT_LAST),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3162
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3163
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3164
+  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
  3165
+  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
  3166
+  guint leave_buddywindow;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3167
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3168
   if (!current_buddy)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3169
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3170
-  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
  3171
-  if (!bjid)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3172
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3173
+  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
  3174
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3175
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3176
-  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
  3177
-    // 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
  3178
-    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
  3179
-      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
  3180
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3181
-    }
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
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3184
-  // 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
  3185
-  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
  3186
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3187
-  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
  3188
-  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
  3189
-  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
  3190
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3191
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3192
-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
  3193
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3194
-  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
  3195
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3196
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3197
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3198
-  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
  3199
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3200
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3201
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3202
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3203
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3204
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3205
-  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
  3206
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3207
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3208
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3209
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3210
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3211
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3212
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3213
-    goto do_group_return;   // Should not happen
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3214
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3215
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3216
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3217
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3218
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3219
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3220
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3221
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3222
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3223
-    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
  3224
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3225
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3226
-  if (arg && *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3227
+  
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3228
+  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
  3229
+  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
  3230
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3231
+  if (name && *name) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3232
     GSList *roster_elt;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3233
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3234
-    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
  3235
-    g_free(group_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3236
+    roster_elt = roster_find(name, namesearch, ROSTER_TYPE_GROUP);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3237
     if (roster_elt)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3238
       group = buddy_getgroup(roster_elt->data);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3239
   } else {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3240
@@ -1253,31 +1964,19 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3241
     goto do_group_return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3242
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3243
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3244
-  // 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
  3245
-  // 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
  3246
-  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3247
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3248
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
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
   if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3251
     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
  3252
     goto do_group_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3253
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3254
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3255
-  if (group_state != group_unfold && leave_buddywindow)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3256
-    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3257
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3258
-  buddy_hide_group(group, group_state);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3259
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3260
-  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3261
-  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3262
+  group_cmd (group, subcmd);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3263
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3264
 do_group_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3265
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3266
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3267
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3268
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3269
 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
  3270
-                           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
  3271
+                           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
  3272
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3273
   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
  3274
   char *hmsg;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3275
@@ -1285,6 +1984,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3276
   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
  3277
   int isroom;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3278
   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
  3279
+  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
  3280
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3281
   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
  3282
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3283
@@ -1299,11 +1999,15 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3284
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3285
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3286
   if (check_jid_syntax((char*)fjid)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3287
-    scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3288
-                 "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3289
+    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
  3290
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3291
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3292
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3293
+  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
  3294
+    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
  3295
+  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
  3296
+    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
  3297
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3298
   // 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
  3299
   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
  3300
   if (rp)
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3301
@@ -1354,8 +2058,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3302
 //  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
  3303
 // 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
  3304
 // the network.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3305
-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
  3306
-                         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
  3307
+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
  3308
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3309
   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
  3310
   char *jid;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3311
@@ -1378,34 +2081,13 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3312
   else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3313
     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
  3314
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3315
-  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
  3316
+  send_message_to(jid, msg, subj, msgtype, FALSE);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3317
   g_free(jid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3318
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3319
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3320
-static LmMessageSubType scan_mtype(char **arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3321
-{
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3322
-  // Try splitting it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3323
-  char **parlist = split_arg(*arg, 2, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3324
-  LmMessageSubType result = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3325
-  // Is it a good parameter?
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3326
-  if (parlist && *parlist) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3327
-    if (!strcmp("-n", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3328
-      result = LM_MESSAGE_SUB_TYPE_NORMAL;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3329
-    } else if (!strcmp("-h", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3330
-      result = LM_MESSAGE_SUB_TYPE_HEADLINE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3331
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3332
-    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
  3333
-      *arg += strlen(*arg) - (parlist[1] ? strlen(parlist[1]) : 0);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3334
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3335
-  // Anything found? -> skip it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3336
-  free_arg_lst(parlist);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3337
-  return result;
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
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3340
-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
  3341
+void say_cmd(char *arg, msgtype_t msgtype)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3342
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3343
   gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3344
-  LmMessageSubType msgtype = LM_MESSAGE_SUB_TYPE_NOT_SET;
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
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3347
   scr_show_buddy_window();
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3348
@@ -1424,80 +2106,131 @@
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3351
   buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3352
-  if (parse_flags)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3353
-    msgtype = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3354
-  arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3355
   send_message(arg, NULL, msgtype);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3356
-  g_free(arg);
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3359
 static void do_say(char *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3360
-  say_cmd(arg, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3361
+  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
  3362
+    "say",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3363
+    (cmdopt_t[2]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3364
+      { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3365
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3366
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3367
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3368
+      { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_REQUIRED | CMDOPT_LAST,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3369
+        { .arg = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3370
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3371
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3372
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3373
+  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
  3374
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3375
+  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
  3376
+    return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3377
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3378
+  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
  3379
+    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
  3380
+  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
  3381
+    msgtype = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3382
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3383
+  say_cmd(options.args[0].value.arg, msgtype);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3384
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3385
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3386
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3387
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3388
 static void do_msay(char *arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3389
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3390
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3391
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3392
-  char *subcmd;
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
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3395
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3396
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3397
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3398
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3399
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3400
-    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
  3401
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3402
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3403
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3404
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3405
+  enum msay_scmd_t {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3406
+    msay_scmd_begin, msay_scmd_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3407
+    msay_scmd_send, msay_scmd_send_to,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3408
+    msay_scmd_toggle, msay_scmd_toggle_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3409
+    msay_scmd_abort,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3410
+  } subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3411
+  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
  3412
+    "msay",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3413
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3414
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3415
+      // subcommand
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3416
+      { CMDOPT_SUBCOMMAND | CMDOPT_REQUIRED | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3417
+    },
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3418
+    (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
  3419
+      { "begin", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3420
+        (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
  3421
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3422
+          { 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
  3423
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3424
+        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
  3425
+      { "verbatim", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3426
+        (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
  3427
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3428
+          { 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
  3429
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3430
+        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
  3431
+      { "send",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3432
+        (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
  3433
+          { 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
  3434
+          { 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
  3435
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3436
+        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
  3437
+      { "send_to",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3438
+        (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
  3439
+          { 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
  3440
+          { 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
  3441
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3442
+        (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
  3443
+          // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3444
+          { 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
  3445
+        }, 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3446
+        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
  3447
+      { "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
  3448
+      { "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
  3449
+        (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
  3450
+      { "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
  3451
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3452
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3453
+  const char *msg;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3454
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3455
+  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
  3456
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3457
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3458
+  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
  3459
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3460
+  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
  3461
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3462
+      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
  3463
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3464
+      subcmd = msay_scmd_begin;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3465
+  } 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
  3466
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3467
+      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
  3468
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3469
+      subcmd = msay_scmd_verbatim;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3470
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3471
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3472
-  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
  3473
-    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
  3474
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3475
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3476
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3477
-  } 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
  3478
-    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
  3479
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3480
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3481
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3482
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3483
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3484
-  if (!strcasecmp(subcmd, "abort")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3485
+  if (subcmd == msay_scmd_abort) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3486
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3487
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3488
     scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3489
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3490
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3491
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3492
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3493
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3494
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3495
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3496
-      verbat = TRUE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3497
+  } 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
  3498
+    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
  3499
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3500
+    if (subcmd == msay_scmd_verbatim) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3501
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3502
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3503
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3504
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3505
+      scr_set_multimode(1, subject);
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3508
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3509
-                 verbat ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3510
+                 subcmd == msay_scmd_verbatim ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3511
     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
  3512
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3513
-    if (verbat)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3514
+    if (subcmd == msay_scmd_verbatim)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3515
       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
  3516
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3517
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3518
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3519
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3520
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3521
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3522
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3523
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3524
-  /* send/send_to command */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3525
+  /* msay_scmd_send or msay_scmd_send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3526
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3527
   if (!scr_get_multimode()) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3528
     scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3529
@@ -1508,49 +2241,47 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3530
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3531
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3532
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3533
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3534
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3535
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3536
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3537
-    // 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
  3538
-    // 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
  3539
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3540
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3541
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3542
-      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
  3543
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3544
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3545
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3546
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3547
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3548
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3549
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3550
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3551
-    gchar *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
-    if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3554
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
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
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3557
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3558
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3559
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3560
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3561
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
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
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3566
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3567
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3568
-      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
  3569
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3570
+  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
  3571
+    msgtype_t msg_type = msgtype_not_set;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3572
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3573
+    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
  3574
+      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
  3575
+    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
  3576
+      msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3577
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3578
+    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
  3579
+      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
  3580
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3581
+      // 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
  3582
+      // 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
  3583
+      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
  3584
+                          msg_type, FALSE))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3585
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3586
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3587
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3588
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3589
+      if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3590
+        scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3591
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3592
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3593
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3594
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3595
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3596
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3597
+        scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
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
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3602
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3603
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3604
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3605
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3606
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3607
   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
  3608
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3609
 do_msay_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3610
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3611
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3612
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3613
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3614
 //  load_message_from_file(filename)
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3615
@@ -1566,7 +2297,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3616
   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
  3617
   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
  3618
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3619
-  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
  3620
+  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
  3621
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3622
   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
  3623
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3624
@@ -1634,130 +2365,103 @@
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3625
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3626
 static void do_say_to(char *arg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3627
 {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3628
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3629
-  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
  3630
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3631
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3632
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3633
-  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
  3634
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3635
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3636
-  bool eval = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3637
+  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
  3638
+    "say_to",
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3639
+    (cmdopt_t[5]){
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3640
+      { CMDOPT_SWITCH, 'n', "normal",   { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3641
+      { CMDOPT_SWITCH, 'h', "headline", { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3642
+      { CMDOPT_SWITCH, 'e', "escapes",  { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3643
+      { CMDOPT_SWITCH, 'q', "quiet",    { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3644
+      { CMDOPT_LAST,   'f', "file",     { .opt = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3645
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3646
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3647
+      // jid
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3648
+      { CMDOPT_REQUIRED,                              { .arg = NULL } },
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3649
+      // message
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3650
+      { CMDOPT_LAST | CMDOPT_PLAIN | CMDOPT_CATCHALL, { .arg = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3651
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3652
+    NULL,
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3653
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3654
+  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
  3655
+  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
  3656
+  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
  3657
+  msgtype_t msg_type = msgtype_not_set;
65
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
   if (!xmpp_is_online()) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3660
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3661
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3662
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3663
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3664
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3665
-  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
  3666
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3667
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3668
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3669
-    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
  3670
+  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
  3671
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3672
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3673
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3674
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3675
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3676
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3677
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3678
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3679
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3680
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3681
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3682
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3683
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3684
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3685
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3686
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3687
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3688
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3689
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3690
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3691
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3692
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3693
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3694
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3695
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3696
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3697
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3698
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3699
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3700
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3701
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3702
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3703
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3704
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3705
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3706
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3707
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3708
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3709
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3710
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3711
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3712
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3713
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3714
+  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
  3715
+    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
  3716
+  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
  3717
+    msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3718
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3719
+  fjid = options.args[0].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3720
+  msg  = options.args[1].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3721
+  file = options.opts[4].value.opt;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3722
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3723
+  // ideally, this should go to commandline parsing subsystem
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3724
   if (fjid[0] == '.') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3725
     const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3726
     if (fjid[1] == '\0') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3727
-      fjid = g_strdup(cjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3728
+      fjid = (char *)cjid; // FIXME
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3729
     } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3730
       char *res_utf8 = to_utf8(fjid+2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3731
-      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
  3732
+      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
  3733
       g_free(res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3734
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3735
-      fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3736
-  } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3737
-    fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3738
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3739
+    }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3740
+  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3741
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3742
+  // ditto
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3743
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3744
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3745
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3746
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3747
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3748
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3749
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3750
         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
  3751
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3752
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3753
         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
  3754
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3755
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3756
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3757
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3758
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3759
+  // as well
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3760
   if (check_jid_syntax(fjid)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3761
     scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3762
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3763
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3764
-    g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3765
+    g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3766
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3767
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3768
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3769
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3770
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3771
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3772
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3773
+  if (file == NULL) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3774
+    if (options.opts[2].value.swc) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3775
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3776
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3777
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3778
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3779
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3780
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3781
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3782
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3783
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3784
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3785
   } else {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3786
     char *filename_xp;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3787
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3788
       scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3789
     filename_xp = expand_filename(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3790
-    msg = msg_utf8 = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3791
+    freeme2 = msg = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3792
     g_free(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3793
-    g_free(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3794
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3795
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3796
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3797
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3798
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3799
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3800
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3801
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3802
-  free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3803
+  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
  3804
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3805
+  cmdopts_free(&options);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3806
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3807
+  g_free(freeme2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3808
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3809
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3810
 //  buffer_updown(updown, nblines)
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3811
@@ -1775,27 +2479,10 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3812
     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
  3813
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3814
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3815
-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
  3816
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3817
-  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
  3818
-    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
  3819
-    return;
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
-  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
  3823
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3824
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3825
 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
  3826
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3827
   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
  3828
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3829
-  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
  3830
-    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
  3831
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3832
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3833
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3834
-  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
  3835
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3836
   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
  3837
   if (t)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3838
     scr_buffer_date(t);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3839
@@ -1804,98 +2491,156 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3840
                  "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
  3841
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3842
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3843
-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
  3844
+// 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
  3845
+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
  3846
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3847
-  // 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
  3848
-  // "%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
  3849
-  // "% 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
  3850
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3851
-  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
  3852
-    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
  3853
+  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
  3854
+    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
  3855
+    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
  3856
+    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
  3857
+    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
  3858
+    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
  3859
+    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
  3860
+    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
  3861
+    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
  3862
+    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
  3863
+  } subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3864
+  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
  3865
+    "buffer",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3866
+    NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3867
+    (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
  3868
+      { 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
  3869
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3870
+    (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
  3871
+      { "close",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3872
+        (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
  3873
+          { 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
  3874
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3875
+        (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
  3876
+          { 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
  3877
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3878
+        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
  3879
+      { "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
  3880
+      { "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
  3881
+      { "purge", NULL,
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, { .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
  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_purge, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3886
+      { "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
  3887
+      { "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
  3888
+      { "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
  3889
+      { "up", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3890
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3891
+          { 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
  3892
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3893
+        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
  3894
+      { "down", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3895
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3896
+          { 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
  3897
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3898
+        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
  3899
+      { "date", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3900
+        (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
  3901
+          // date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3902
+          { 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
  3903
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3904
+        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
  3905
+      { "%", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3906
+        (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
  3907
+          { 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
  3908
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3909
+        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
  3910
+      { "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
  3911
+      { "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
  3912
+        (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
  3913
+          { 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
  3914
+            { .arg = NULL } },
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_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
  3917
+      { "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
  3918
+        (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
  3919
+          { 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
  3920
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3921
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3922
+        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
  3923
+      { "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
  3924
+        (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
  3925
+      { "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
  3926
+        (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
  3927
+      { "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
  3928
+        (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
  3929
+      { "save", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3930
+        (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
  3931
+          { 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
  3932
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3933
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3934
+        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
  3935
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3936
+  };
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3937
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3938
+  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
  3939
+    return;
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
+  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
  3942
+    return;
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
+  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
  3945
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3946
+  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
  3947
+    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
  3948
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3949
+  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
  3950
+      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
  3951
+    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
  3952
+    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
  3953
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3954
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3955
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3956
-  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
  3957
-    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
  3958
-    return;
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3959
+  if (subcmd == buffer_scmd_close) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3960
+    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
  3961
+  } else if (subcmd == buffer_scmd_close_all) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3962
+    scr_buffer_purge_all(1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3963
+  } else if (subcmd == buffer_scmd_clear) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3964
+    scr_buffer_clear();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3965
+  } else if (subcmd == buffer_scmd_purge) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3966
+    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
  3967
+  } else if (subcmd == buffer_scmd_list) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3968
+    scr_buffer_list();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3969
+  } 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
  3970
+    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
  3971
+  } 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
  3972
+    scr_buffer_top_bottom(1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3973
+  } else if (subcmd == buffer_scmd_up) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3974
+    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
  3975
+  } else if (subcmd == buffer_scmd_down) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3976
+    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
  3977
+  } else if (subcmd == buffer_scmd_date) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3978
+    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
  3979
+  } else if (subcmd == buffer_scmd_percent) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3980
+    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
  3981
+  } else if (subcmd == buffer_scmd_readmark) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3982
+    scr_buffer_jump_readmark();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3983
+  } else if (subcmd == buffer_scmd_search_backward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3984
+    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
  3985
+  } else if (subcmd == buffer_scmd_search_forward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3986
+    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
  3987
+  } 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
  3988
+    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
  3989
+  } 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
  3990
+    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
  3991
+  } 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
  3992
+    scr_buffer_scroll_lock(-1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3993
+  } 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
  3994
+    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
  3995
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3996
 
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_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
  3998
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3999
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4000
-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
  4001
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4002
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4003
-  char *subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4004
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4005
-  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
  4006
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4007
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4008
-  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
  4009
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4010
-  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
  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 (!subcmd || !*subcmd) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4013
-    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
  4014
-    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
  4015
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4016
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4017
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4018
-  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
  4019
-      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
  4020
-    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
  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 (!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
  4026
-    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
  4027
-  } 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
  4028
-    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
  4029
-  } 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
  4030
-    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
  4031
-  } 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
  4032
-    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
  4033
-  } 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
  4034
-    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
  4035
-  } 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
  4036
-    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
  4037
-  } 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
  4038
-    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
  4039
-  } 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
  4040
-    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
  4041
-  } 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
  4042
-    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
  4043
-  } 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
  4044
-    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
  4045
-  } 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
  4046
-    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
  4047
-  } 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
  4048
-    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
  4049
-    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
  4050
-  } 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
  4051
-    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
  4052
-    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
  4053
-  } 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
  4054
-    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
  4055
-  } 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
  4056
-    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
  4057
-  } 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
  4058
-    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
  4059
-  } 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
  4060
-    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
  4061
-  } 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
  4062
-    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
  4063
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4064
-    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
  4065
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4066
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4067
-  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
  4068
+  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
  4069
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4070
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4071
 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
  4072
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4073
-  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
  4074
+  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
  4075
 }
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
 static void do_info(char *arg)
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4078
@@ -2033,29 +2778,20 @@
71
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
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4081
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4082
+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
  4083
+  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
  4084
+  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
  4085
+  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
  4086
+  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
  4087
+  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
  4088
+};
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4089
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4090
 // 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
  4091
-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
  4092
+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
  4093
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4094
   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
  4095
   char *buffer;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4096
   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
  4097
-  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
  4098
-         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
  4099
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4100
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4101
-    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
  4102
-      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
  4103
-    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
  4104
-      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
  4105
-    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
  4106
-      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
  4107
-    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
  4108
-      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
  4109
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4110
-      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
  4111
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4112
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4113
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4114
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4115
   // 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
  4116
   scr_set_chatmode(TRUE);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4117
@@ -2075,12 +2811,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4118
     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
  4119
     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
  4120
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4121
-    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
  4122
+    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
  4123
       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
  4124
                (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
  4125
                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
  4126
       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
  4127
-    } 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
  4128
+    } 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
  4129
         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
  4130
         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
  4131
         bool showaffil = (affil != affil_none);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4132
@@ -2096,12 +2832,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4133
       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
  4134
                (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
  4135
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4136
-      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
  4137
+      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
  4138
         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
  4139
         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
  4140
                                  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
  4141
       }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4142
-      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
  4143
+      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
  4144
         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
  4145
         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
  4146
 
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4147
@@ -2145,16 +2881,69 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4148
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4149
 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
  4150
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4151
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4152
+    "rename",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4153
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4154
+      { 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
  4155
+      { 0,             'n', "name",  { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4156
+      { 0,             'g', "group", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4157
+      { CMDOPT_LAST,   'j', "jid",   { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4158
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4159
+    (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4160
+      { 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
  4161
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4162
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4163
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4164
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4165
   const char *bjid, *group;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4166
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4167
   char *newname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4168
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4169
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4170
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4171
+  gboolean reset;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4172
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4173
+  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
  4174
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4175
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4176
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4177
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4178
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4179
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4180
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4181
+  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
  4182
+  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
  4183
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4184
+  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
  4185
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4186
+    srchtype |= ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4187
+    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
  4188
+  } 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
  4189
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4190
+    srchtype = ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4191
+    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
  4192
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4193
+    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
  4194
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4195
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4196
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4197
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4198
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4199
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4200
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4201
+    if (srchtype == ROSTER_TYPE_GROUP)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4202
+      bud = buddy_getgroup(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4203
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4204
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4205
+    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
  4206
+      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
  4207
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4208
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4209
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4210
+    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
  4211
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4212
+      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
  4213
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4214
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4215
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4216
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4217
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4218
+    
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4219
   bjid   = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4220
   group  = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4221
   type   = buddy_gettype(bud);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4222
@@ -2162,11 +2951,13 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4223
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4224
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4225
     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
  4226
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4227
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4228
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4229
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4230
-  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
  4231
+  if (!*newname && !reset) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4232
     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
  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
 
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4237
@@ -2181,90 +2972,117 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4238
   //  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4239
   //}
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4240
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4241
-  newname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4242
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4243
   for (p = newname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4244
   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
  4245
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4246
-  strip_arg_special_chars(newname);
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
-  name_utf8 = to_utf8(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4249
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4250
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4251
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4252
-    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
  4253
+    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
  4254
     // 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
  4255
     // 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
  4256
     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
  4257
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4258
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4259
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4260
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4261
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4262
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4263
-      /* 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
  4264
-       * 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
  4265
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4266
-      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
  4267
+      // 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
  4268
+      // 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
  4269
+      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
  4270
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4271
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4272
       // 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
  4273
-      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
  4274
+      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
  4275
       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
  4276
           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
  4277
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4278
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4279
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4280
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4281
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4282
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4283
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4284
   update_roster = TRUE;
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
 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
  4288
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4289
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4290
+    "move",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4291
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4292
+      { 0,           'n', "name", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4293
+      { CMDOPT_LAST, 'j', "jid",  { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4294
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4295
+    (cmdarg_t[1]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4296
+      { 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
  4297
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4298
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4299
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4300
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4301
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4302
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4303
   char *newgroupname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4304
-  char *group_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4305
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4306
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4307
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4308
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4309
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4310
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4311
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4312
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4313
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4314
+  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
  4315
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4316
+  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
  4317
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4318
+    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
  4319
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4320
+    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
  4321
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4322
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4323
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4324
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4325
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4326
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4327
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4328
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4329
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4330
+    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
  4331
+      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
  4332
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4333
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4334
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4335
+    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
  4336
+                        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
  4337
+    if (!found) {
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, "Can't find <%s>!", srchterm);
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
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4343
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4344
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4345
   bjid = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4346
   name = buddy_getname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4347
   type = buddy_gettype(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4348
   on_srv = buddy_getonserverflag(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4349
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4350
   oldgroupname = buddy_getgroupname(bud);
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
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4353
     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
  4354
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4355
     return;
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
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4358
     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
  4359
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4360
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4361
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4362
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4363
-  newgroupname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4364
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4365
   for (p = newgroupname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4366
   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
  4367
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4368
-  strip_arg_special_chars(newgroupname);
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
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4371
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4372
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4373
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4374
-      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
  4375
+      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
  4376
       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
  4377
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4378
-      /* 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
  4379
-       * 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
  4380
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4381
+      // 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
  4382
+      // 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
  4383
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4384
       // 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
  4385
       guint msgflag;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4386
@@ -2276,7 +3094,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4387
       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
  4388
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4389
         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
  4390
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4391
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4392
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4393
         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
  4394
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4395
@@ -2285,8 +3103,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4396
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4397
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4398
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4399
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4400
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4401
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4402
   update_roster = TRUE;
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
 
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4405
@@ -2468,50 +3285,33 @@
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4406
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4407
 static void do_rawxml(char *arg)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4408
 {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4409
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4410
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4411
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4412
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4413
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4414
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4415
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4416
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4417
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4418
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4419
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4420
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4421
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4422
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4423
+        NULL },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4424
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4425
+  };
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4426
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4427
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4428
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4429
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4430
   }
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
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4433
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4434
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4435
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4436
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4437
-    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
  4438
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4439
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4440
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4441
     return;
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
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4444
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4445
-    gchar *buffer;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4446
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4447
-    if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4448
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4449
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4450
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4451
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4452
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4453
-    // 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
  4454
-    // 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
  4455
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4456
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4457
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4458
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4459
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4460
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4461
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4462
-      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
  4463
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4464
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4465
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4466
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4467
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4468
-  free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4469
+
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4470
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4471
+  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
  4472
+  cmdopts_free(&options);
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
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4476
@@ -2874,7 +3674,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4477
   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
  4478
   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
  4479
   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
  4480
-  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
  4481
+  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
  4482
   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
  4483
   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
  4484
   free_arg_lst(paramlst);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4485
@@ -3290,6 +4090,207 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4486
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4487
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4488
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4489
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4490
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4491
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4492
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4493
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4494
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4495
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4496
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4497
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4498
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4499
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4500
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4501
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4502
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4503
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4504
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4505
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4506
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4507
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4508
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4509
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4510
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4511
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4512
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4513
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4514
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4515
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4516
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4517
+          { CMDOPT_LAST, { .arg = NULL } }, // password
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
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4520
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4521
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4522
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4523
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4524
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4525
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4526
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4527
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4528
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4529
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4530
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4531
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4532
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4533
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4534
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4535
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4536
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4537
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4538
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4539
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4540
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4541
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4542
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4543
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4544
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4545
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4546
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4547
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4548
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4549
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4550
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4551
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4552
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4553
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4554
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4555
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4556
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4557
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4558
+      { "destroy", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4559
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4560
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4561
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4562
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4563
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4564
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4565
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4566
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4567
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4568
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4569
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4570
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4571
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4572
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4573
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4574
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4575
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4576
+        (cmdarg_t[1]){
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 | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4579
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4580
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4581
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4582
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4583
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4584
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4585
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4586
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4587
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4588
+      { "kick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4589
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4590
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4591
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4592
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4593
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4594
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4595
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4596
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4597
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4598
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4599
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4600
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4601
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4602
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4603
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4604
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4605
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4606
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4607
+          // jid
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
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4610
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4611
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4612
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4613
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4614
+      // 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
  4615
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4616
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4617
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4618
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4619
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4620
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4621
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4622
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4623
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4624
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4625
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4626
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4627
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4628
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4629
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4630
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4631
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4632
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4633
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4634
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4635
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4636
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4637
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4638
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4639
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4640
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4641
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4642
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4643
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4644
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4645
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4646
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4647
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4648
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4649
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4650
+      { "bookmark", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4651
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4652
+          { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4653
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4654
+        (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4655
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4656
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4657
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4658
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4659
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4660
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4661
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4662
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4663
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4664
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4665
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4666
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4667
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4668
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4669
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4670
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4671
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4672
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4673
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4674
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4675
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4676
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4677
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4678
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4679
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4680
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4681
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4682
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4683
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4684
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4685
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4686
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4687
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4688
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4689
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4690
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4691
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4692
   gpointer bud;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4693
@@ -3347,7 +4348,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4694
       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
  4695
   } 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
  4696
     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
  4697
-      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
  4698
+      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
  4699
   } 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
  4700
     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
  4701
       room_nick(bud, arg);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4702
@@ -4162,5 +5163,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4703
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4704
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4705
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4706
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4707
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4708
 /* 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
  4709
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
  4710
--- a/mcabber/mcabber/commands.h	Mon Mar 11 21:45:31 2013 +0200
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4711
+++ b/mcabber/mcabber/commands.h	Wed Mar 13 03:21:24 2013 +0200
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4712
@@ -5,32 +5,242 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4713
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4714
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4715
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4716
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4717
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4718
+//  TODO:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4719
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4720
+// * Clustering of options/switches
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4721
+// * Multivalue options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4722
+//   - list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4723
+//     - special checker
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4724
+//     - or run checker multiple times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4725
+//   - or run command several times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4726
+//     - what if there are several of such arguments?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4727
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4728
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4729
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4730
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4731
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4732
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4733
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4734
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4735
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4736
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4737
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4738
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4739
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4740
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4741
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4742
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4743
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4744
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4745
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4746
+//     - percent (numerical, restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4747
+//   - number (result - int)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4748
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4749
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4750
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4751
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4752
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4753
+//   - current_buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4754
+// * Subcommands with fallback to argument?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4755
+// * [+foo|-foo] support?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4756
+// * 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
  4757
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4758
+// * for now we'll do without multi-options.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4759
+// * and without clustering.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4760
+// * checks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4761
+//   - argument type == public struct with name and callbacks, simple!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4762
+//   - command checks should be just single callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4763
+// * now, what checker needs?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4764
+//   - [in] value string (current or default)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4765
+//   - [in] additional input data for some generic checkers (like string2enum wordlist)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4766
+//   - [out] replacement value (not necessary string)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4767
+//     - replacement value may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4768
+//   - [out] error string
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4769
+//     - that may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4770
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4771
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4772
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4773
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4774
+typedef struct cmdarg_type_struct  cmdarg_type_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4775
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4776
+// note, this is called before options are parsed!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4777
+typedef gchar *(*cmd_checker_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4778
+// command function itself
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4779
+typedef gchar *(*cmd_handler_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4780
+// should check arg -> val -> val.arg and replace, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4781
+typedef gchar *(*cmdarg_checker_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4782
+// free resources, used in arg -> val -> val.arg, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4783
+typedef void (*cmdarg_destructor_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4784
+// todo
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4785
+typedef void (*cmdarg_completor_t)(void); // FIXME
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4786
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4787
+typedef union {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4788
+  guint       uint;        // unsigned integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4789
+  gint        sint;        // signed integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4790
+  guint       swc;         // switch count
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4791
+  const gchar *roarg;      // default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4792
+  gchar       *arg;        // string argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4793
+  cmdopts_t   *cmd;        // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4794
+  gpointer    bud;         // buddy data (roster entry)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4795
+  gpointer    ptr;         // anything else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4796
+} cmdarg_value_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4797
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4798
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4799
+  cmd_default     = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4800
+  cmd_safe        = 1<<0,  // command is safe to use in mcabberrc
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4801
+} cmd_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4802
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4803
+  cmdopt_default  = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4804
+  cmdopt_switch   = 1<<0,  // option have no argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4805
+} cmdopt_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4806
+typedef enum {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4807
+  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
  4808
+  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
  4809
+  cmdarg_plain    = 0x0002, // u2p, quotes and escapes are not processed
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4810
+  cmdarg_subcmd   = 0x0004, // u2p, argument is subcommand
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4811
+  cmdarg_check    = 0x0008, // u2p, force checker call on argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4812
+  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
  4813
+  cmdarg_visited  = 0x0020, // p2p, marks initialized arguments
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4814
+  cmdarg_checked  = 0x0040, // p2p, marks checked argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4815
+  cmdarg_freeme   = 0x0080, // c2p, marks argument, that needs freeing
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4816
+  // convenience shortcuts
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4817
+  cmdarg_eol      = 0x0003, // catchall + plain
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4818
+  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
  4819
+  cmdarg_ppclear  = 0x00E0, // pre-parse clear = visited + checked + freeme
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4820
+} cmdarg_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4821
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4822
+struct cmdopts_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4823
+  const char    *name;     // [user,req] command name (error messages, help, subcommands)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4824
+  cmd_flags_t   flags;     // [user,req] safe
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4825
+  cmd_checker_t check;     // [user,req] checker routine
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4826
+  cmd_handler_t handle;    // [user,req] main command processing function
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4827
+  cmdopt_t      *opts;     // [user,req] options
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4828
+  cmdarg_t      *args;     // [user,req] arguments
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4829
+  cmdopts_t     *cmds;     // [user,req] subcommands
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4830
+  gpointer      userdata;  // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4831
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4832
+struct cmdarg_struct {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4833
+  const char     *name;    // [user,req] argument name - errors, help
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4834
+  cmdarg_flags_t flags;    // [user,req] catchall, plain, required, subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4835
+  const char     *defval;  // [user,req] default value
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4836
+  const cmdarg_type_t *type; // [user,req] type cbs - checker and completor
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4837
+  gpointer       chkdata;  // [user] instance data for type checker - eg string2enum list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4838
+  gpointer       userdata; // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4839
+  cmdarg_value_t value;    // [parser,chk] current value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4840
+};
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4841
+struct cmdopt_struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4842
+  char           shortopt; // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4843
+  const char     *longopt; // [user,req]
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4844
+  cmdopt_flags_t flags;    // [user,req] switch
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4845
+  cmdarg_t       arg;      // [user,req]
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4846
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4847
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4848
+struct cmdarg_type_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4849
+  cmdarg_checker_t    check;    // [user,req] check string and set argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4850
+  cmdarg_destructor_t free;     // [user,req] free argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4851
+  cmdarg_completor_t  complete; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4852
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4853
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4854
+void cmd_define (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4855
+void cmd_undef (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4856
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4857
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4858
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4859
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4860
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4861
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4862
+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
  4863
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4864
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4865
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4866
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4867
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4868
+} cmdexe_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4869
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4870
+  cmd_result_ok   = 0,       // all is ok
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4871
+  cmd_result_syntax_error,   // syntax, environment or argument check error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4872
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4873
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4874
+  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
  4875
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4876
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4877
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4878
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4879
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4880
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4881
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4882
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4883
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4884
+// 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
  4885
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4886
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4887
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4888
+// 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
  4889
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4890
+// 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
  4891
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4892
+cmd_result_t process_line(const char *line);
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
+//
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4895
+//  Standard types
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4896
+//
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4897
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4898
 typedef struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4899
-  char name[32];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4900
-  const char *help;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4901
-  guint completion_flags[2];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4902
-  void (*func)(char *);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4903
-  gpointer userdata;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4904
-} cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4905
+  const char *name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4906
+  guint      value;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4907
+} string2enum_t;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4908
 
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4909
-void cmd_init(void);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4910
-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
  4911
-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
  4912
-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
  4913
-char *expandalias(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4914
-#ifdef MODULES_ENABLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4915
-gpointer cmd_del(gpointer id);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4916
-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
  4917
-                 void (*f)(char*), gpointer userdata);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4918
-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
  4919
+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
  4920
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4921
+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
  4922
+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
  4923
+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
  4924
+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
  4925
+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
  4926
+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
  4927
+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
  4928
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4929
+const cmdarg_type_t cmdarg_type_nonspace;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4930
+const cmdarg_type_t cmdarg_type_roster_bjid;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4931
+const cmdarg_type_t cmdarg_type_roster_resource;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4932
+const cmdarg_type_t cmdarg_type_fjid;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4933
+const cmdarg_type_t cmdarg_type_uint;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4934
+const cmdarg_type_t cmdarg_type_statusmask;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4935
+const cmdarg_type_t cmdarg_type_string2enum;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4936
+const cmdarg_type_t cmdarg_type_color;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4937
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4938
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4939
+//  Private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4940
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4941
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4942
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4943
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4944
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4945
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4946
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4947
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4948
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4949
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4950
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4951
+gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4952
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4953
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4954
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4955
+void cmdopts_free(cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4956
 #endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4957
-gboolean cmd_is_safe(const gchar *name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4958
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4959
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4960
+  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
  4961
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4962
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4963
+} msgtype_t;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4964
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4965
 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
  4966
 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
  4967
-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
  4968
-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
  4969
+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
  4970
+                   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
  4971
+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
  4972
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4973
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4974
 
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4975
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
  4976
--- a/mcabber/mcabber/roster.c	Mon Mar 11 21:45:31 2013 +0200
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4977
+++ b/mcabber/mcabber/roster.c	Wed Mar 13 03:21:24 2013 +0200
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4978
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4979
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4980
 // 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
  4981
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4982
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4983
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4984
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4985
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4986
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4987
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4988
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4989
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4990
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4991
     char *found = NULL;
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
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4994
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4995
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4996
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4997
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4998
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4999
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5000
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5001
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5002
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5003
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5004
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5005
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5006
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5007
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5008
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5009
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5010
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5011
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5012
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5013
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5014
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  5015
     }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5016
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
  5017
--- a/mcabber/mcabber/screen.c	Mon Mar 11 21:45:31 2013 +0200
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  5018
+++ b/mcabber/mcabber/screen.c	Wed Mar 13 03:21:24 2013 +0200
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5019
@@ -3630,7 +3630,7 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5020
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5021
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5022
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5023
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5024
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5025
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5026
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5027
   scr_cmdhisto_addline(inputLine);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  5028
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
  5029
--- a/mcabber/mcabber/xmpp_iq.c	Mon Mar 11 21:45:31 2013 +0200
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  5030
+++ b/mcabber/mcabber/xmpp_iq.c	Wed Mar 13 03:21:24 2013 +0200
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5031
@@ -289,10 +289,7 @@
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5032
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5033
         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
  5034
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5035
-          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
  5036
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5037
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5038
-          g_free(status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  5039
+          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
  5040
           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
  5041
           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
  5042
                                               "Status has been changed");