cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 11 Mar 2013 01:33:26 +0200
changeset 75 17cd00b2e722
parent 74 a879ea179877
child 76 3c8b784f92c7
permissions -rw-r--r--
[cmdopts] Struggling in chaos
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
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
# Parent 92fa48ef53c909928706ab4c51518953339a38e4
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
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    36
diff -r 92fa48ef53c9 mcabber/doc/help/cs/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    37
--- a/mcabber/doc/help/cs/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    38
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Mon Mar 11 01:32:27 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%.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    48
diff -r 92fa48ef53c9 mcabber/doc/help/cs/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    49
--- a/mcabber/doc/help/cs/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    50
+++ b/mcabber/doc/help/cs/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    57
diff -r 92fa48ef53c9 mcabber/doc/help/cs/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    58
--- a/mcabber/doc/help/cs/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    59
+++ b/mcabber/doc/help/cs/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    68
diff -r 92fa48ef53c9 mcabber/doc/help/cs/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    69
--- a/mcabber/doc/help/cs/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    70
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    80
diff -r 92fa48ef53c9 mcabber/doc/help/de/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    81
--- a/mcabber/doc/help/de/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    82
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Mon Mar 11 01:32:27 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
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    92
diff -r 92fa48ef53c9 mcabber/doc/help/de/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    93
--- a/mcabber/doc/help/de/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
    94
+++ b/mcabber/doc/help/de/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   101
diff -r 92fa48ef53c9 mcabber/doc/help/de/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   102
--- a/mcabber/doc/help/de/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   103
+++ b/mcabber/doc/help/de/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   113
diff -r 92fa48ef53c9 mcabber/doc/help/de/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   114
--- a/mcabber/doc/help/de/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   115
+++ b/mcabber/doc/help/de/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   125
diff -r 92fa48ef53c9 mcabber/doc/help/en/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   126
--- a/mcabber/doc/help/en/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   127
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Mon Mar 11 01:32:27 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
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   137
diff -r 92fa48ef53c9 mcabber/doc/help/en/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   138
--- a/mcabber/doc/help/en/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   139
+++ b/mcabber/doc/help/en/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   147
diff -r 92fa48ef53c9 mcabber/doc/help/en/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   148
--- a/mcabber/doc/help/en/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   149
+++ b/mcabber/doc/help/en/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   158
diff -r 92fa48ef53c9 mcabber/doc/help/en/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   159
--- a/mcabber/doc/help/en/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   160
+++ b/mcabber/doc/help/en/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   170
diff -r 92fa48ef53c9 mcabber/doc/help/fr/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   171
--- a/mcabber/doc/help/fr/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   172
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Mon Mar 11 01:32:27 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
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   182
diff -r 92fa48ef53c9 mcabber/doc/help/fr/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   183
--- a/mcabber/doc/help/fr/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   184
+++ b/mcabber/doc/help/fr/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   191
diff -r 92fa48ef53c9 mcabber/doc/help/fr/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   192
--- a/mcabber/doc/help/fr/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   193
+++ b/mcabber/doc/help/fr/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   202
diff -r 92fa48ef53c9 mcabber/doc/help/fr/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   203
--- a/mcabber/doc/help/fr/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   204
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   214
diff -r 92fa48ef53c9 mcabber/doc/help/it/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   215
--- a/mcabber/doc/help/it/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   216
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Mon Mar 11 01:32:27 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
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   226
diff -r 92fa48ef53c9 mcabber/doc/help/it/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   227
--- a/mcabber/doc/help/it/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   228
+++ b/mcabber/doc/help/it/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   235
diff -r 92fa48ef53c9 mcabber/doc/help/it/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   236
--- a/mcabber/doc/help/it/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   237
+++ b/mcabber/doc/help/it/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   246
diff -r 92fa48ef53c9 mcabber/doc/help/it/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   247
--- a/mcabber/doc/help/it/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   248
+++ b/mcabber/doc/help/it/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   258
diff -r 92fa48ef53c9 mcabber/doc/help/nl/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   259
--- a/mcabber/doc/help/nl/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   260
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Mon Mar 11 01:32:27 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
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   270
diff -r 92fa48ef53c9 mcabber/doc/help/nl/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   271
--- a/mcabber/doc/help/nl/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   272
+++ b/mcabber/doc/help/nl/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   279
diff -r 92fa48ef53c9 mcabber/doc/help/nl/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   280
--- a/mcabber/doc/help/nl/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   281
+++ b/mcabber/doc/help/nl/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   290
diff -r 92fa48ef53c9 mcabber/doc/help/nl/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   291
--- a/mcabber/doc/help/nl/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   292
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   302
diff -r 92fa48ef53c9 mcabber/doc/help/pl/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   303
--- a/mcabber/doc/help/pl/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   304
+++ b/mcabber/doc/help/pl/hlp_del.txt	Mon Mar 11 01:32:27 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.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   311
diff -r 92fa48ef53c9 mcabber/doc/help/pl/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   312
--- a/mcabber/doc/help/pl/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   313
+++ b/mcabber/doc/help/pl/hlp_move.txt	Mon Mar 11 01:32:27 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.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   322
diff -r 92fa48ef53c9 mcabber/doc/help/pl/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   323
--- a/mcabber/doc/help/pl/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   324
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   334
diff -r 92fa48ef53c9 mcabber/doc/help/ru/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   335
--- a/mcabber/doc/help/ru/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   336
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Mon Mar 11 01:32:27 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 в текущем буфере (истории переписки)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   346
diff -r 92fa48ef53c9 mcabber/doc/help/ru/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   347
--- a/mcabber/doc/help/ru/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   348
+++ b/mcabber/doc/help/ru/hlp_del.txt	Mon Mar 11 01:32:27 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) из списка контактов, отключает уведомления о его статусе и отключает уведомление пользователя о вашем статусе.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   356
diff -r 92fa48ef53c9 mcabber/doc/help/ru/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   357
--- a/mcabber/doc/help/ru/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   358
+++ b/mcabber/doc/help/ru/hlp_move.txt	Mon Mar 11 01:32:27 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
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   368
diff -r 92fa48ef53c9 mcabber/doc/help/ru/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   369
--- a/mcabber/doc/help/ru/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   370
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Mon Mar 11 01:32:27 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.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   380
diff -r 92fa48ef53c9 mcabber/doc/help/uk/hlp_buffer.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   381
--- a/mcabber/doc/help/uk/hlp_buffer.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   382
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Mon Mar 11 01:32:27 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
  Перейти до вказаної у процентах позиції.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   392
diff -r 92fa48ef53c9 mcabber/doc/help/uk/hlp_del.txt
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
   393
--- a/mcabber/doc/help/uk/hlp_del.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   394
+++ b/mcabber/doc/help/uk/hlp_del.txt	Mon Mar 11 01:32:27 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) зі списку. Також відписатися від його сповіщень про статус і відписати його від ваших.
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   402
diff -r 92fa48ef53c9 mcabber/doc/help/uk/hlp_move.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   403
--- a/mcabber/doc/help/uk/hlp_move.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   404
+++ b/mcabber/doc/help/uk/hlp_move.txt	Mon Mar 11 01:32:27 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", щоб перейти до нового місця контакту контакту.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   414
diff -r 92fa48ef53c9 mcabber/doc/help/uk/hlp_rename.txt
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
   415
--- a/mcabber/doc/help/uk/hlp_rename.txt	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   416
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Mon Mar 11 01:32:27 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 дозволяють перейменовувати об’єкти, відмінні від поточного.
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
   425
diff -r 92fa48ef53c9 mcabber/mcabber/commands.c
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
   426
--- a/mcabber/mcabber/commands.c	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   427
+++ b/mcabber/mcabber/commands.c	Mon Mar 11 01:32:27 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>
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   437
@@ -43,512 +43,663 @@
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   465
+#define BUILTIN_COUNT 3
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,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   469
+                 def_status_to,
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,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   503
+                 def_exit
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   504
 #endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   505
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   506
-// Return value container for the following functions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   507
-static int retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   508
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   509
-// Commands callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   510
-static void do_roster(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   511
-static void do_status(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   512
-static void do_status_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   513
-static void do_add(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   514
-static void do_del(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   515
-static void do_group(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   516
-static void do_say(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   517
-static void do_msay(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   518
-static void do_say_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   519
-static void do_buffer(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   520
-static void do_clear(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   521
-static void do_info(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   522
-static void do_rename(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   523
-static void do_move(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   524
-static void do_set(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   525
-static void do_alias(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   526
-static void do_bind(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   527
-static void do_connect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   528
-static void do_disconnect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   529
-static void do_rawxml(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   530
-static void do_room(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   531
-static void do_authorization(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   532
-static void do_version(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   533
-static void do_request(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   534
-static void do_event(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   535
-static void do_help(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   536
-static void do_pgp(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   537
-static void do_iline(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   538
-static void do_screen_refresh(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   539
-static void do_chat_disable(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   540
-static void do_source(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   541
-static void do_color(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   542
-static void do_otr(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   543
-static void do_otrpolicy(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   544
-static void do_echo(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   545
-static void do_module(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   546
-static void do_exit(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   547
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   548
-static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   549
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   550
-// Global variable for the commands list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   551
-static GSList *Commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   552
-static GSList *safe_commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   553
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   554
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   555
-#include "modules.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   556
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   557
-gpointer cmd_del(gpointer id)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   558
+                 ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   559
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   560
+static cmd_handler_t do_roster,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   561
+                     do_color,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   562
+                     do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   563
+                     do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   564
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   565
+                     do_add,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   566
+                     do_del,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   567
+                     do_group,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   568
+                     do_say,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   569
+                     do_msay,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   570
+                     do_say_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   571
+                     do_buffer,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   572
+                     do_clear,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   573
+                     do_info,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   574
+                     do_rename,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   575
+                     do_move,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   576
+                     do_set,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   577
+                     do_alias,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   578
+                     do_bind,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   579
+                     do_connect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   580
+                     do_disconnect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   581
+                     do_rawxml,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   582
+                     do_room,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   583
+                     do_authorization,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   584
+                     do_version,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   585
+                     do_request,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   586
+                     do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   587
+                     do_help,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   588
+                     do_pgp,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   589
+                     do_iline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   590
+                     do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   591
+                     do_chat_disable,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   592
+                     do_source,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   593
+                     do_otr,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   594
+                     do_otrpolicy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   595
+                     do_echo,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   596
+                     do_module,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   597
+                     do_exit
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   598
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   599
+                     ;
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
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   602
+//  Main commands mechanics
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
+// Functions to parse mcabber command line and execute commands accordingly.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   605
+// Allows to define commands and remove definitions.
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
+cmdopts_t **cmd_list  = NULL; // command structs list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   608
+gsize       cmd_count = 0;    // number of commands (one less than memory allocated)
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
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   611
+void cmd_init (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   612
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   613
-  GSList *sl_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   614
-  if (!id) return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   615
-  for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   616
-    if (sl_cmd -> data == id) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   617
-      cmd *command = (cmd *) sl_cmd->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   618
-      gpointer userdata = command->userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   619
-      Commands = g_slist_delete_link(Commands, sl_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   620
-      compl_del_category_word(COMPL_CMD, command->name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   621
-      g_slice_free(cmd, command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   622
-      return userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   623
+  cmd_list = g_new ((cmdopts_t *), BUILTIN_COUNT+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   624
+  cmd_list[0]  = def_roster;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   625
+  cmd_list[1]  = def_color;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   626
+  cmd_list[2]  = def_status;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   627
+  cmd_list[3]  = def_status_to;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   628
+#if 0
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   629
+  cmd_list[4]  = def_add;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   630
+  cmd_list[5]  = def_del;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   631
+  cmd_list[6]  = def_group;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   632
+  cmd_list[7]  = def_say;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   633
+  cmd_list[8]  = def_msay;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   634
+  cmd_list[9]  = def_say_to;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   635
+  cmd_list[10] = def_buffer;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   636
+  cmd_list[11] = def_clear;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   637
+  cmd_list[12] = def_info;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   638
+  cmd_list[13] = def_rename;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   639
+  cmd_list[14] = def_move;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   640
+  cmd_list[15] = def_set;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   641
+  cmd_list[16] = def_alias;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   642
+  cmd_list[17] = def_bind;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   643
+  cmd_list[18] = def_connect;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   644
+  cmd_list[19] = def_disconnect;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   645
+  cmd_list[20] = def_rawxml;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   646
+  cmd_list[21] = def_room;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   647
+  cmd_list[22] = def_authorization;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   648
+  cmd_list[23] = def_version;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   649
+  cmd_list[24] = def_request;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   650
+  cmd_list[25] = def_event;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   651
+  cmd_list[26] = def_help;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   652
+  cmd_list[27] = def_pgp;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   653
+  cmd_list[28] = def_iline;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   654
+  cmd_list[29] = def_screen_refresh;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   655
+  cmd_list[30] = def_chat_disable;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   656
+  cmd_list[31] = def_source;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   657
+  cmd_list[32] = def_otr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   658
+  cmd_list[33] = def_otrpolicy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   659
+  cmd_list[34] = def_echo;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   660
+  cmd_list[35] = def_module;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   661
+  cmd_list[36] = def_exit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   662
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   663
+  cmd_list[BUILTIN_COUNT] = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   664
+  cmd_count = BUILTIN_COUNT;
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   667
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   668
+void cmd_uninit (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   669
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   670
+  g_free (cmd_list);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   671
+  cmd_list  = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   672
+  cmd_count = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   673
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   674
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   675
+void cmd_define (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   676
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   677
+  cmd_list = g_renew ((cmdopts_t *), cmd_list, cmd_count+2);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   678
+  g_memmove(cmd_list, cmd_list+1, sizeof(cmdopts_t *) * cmd_count+1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   679
+  cmd_list[0] = command;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   680
+  cmd_count ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   681
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   682
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   683
+void cmd_undef (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   684
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   685
+  gsize num = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   686
+  while (num < cmd_count) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   687
+    if (cmd_list[num] == command) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   688
+      g_memmove (cmd_list+num, cmd_list+num+1, sizeof(cmdopts_t *) * (cmd_count-num));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   689
+      cmd_list = g_renew ((cmdopts_t *), cmd_list, cmd_count);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   690
+      cmd_count --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   691
+      return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   692
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   693
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   694
+    num ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   695
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   696
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   697
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   698
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   699
-//  cmd_add()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   700
-// 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
   701
-gpointer cmd_add(const char *name, const char *help, guint flags_row1,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   702
-                 guint flags_row2, void (*f)(char*), gpointer userdata)
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
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   705
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   706
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   707
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   708
+// updated.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   709
+const char *cmdopts_parse_argument(gchar **pr, gchar *er, cmdarg_flags_t flags)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   710
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   711
-  cmd *n_cmd = g_slice_new0(cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   712
-  strncpy(n_cmd->name, name, 32-1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   713
-  n_cmd->help = help;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   714
-  n_cmd->completion_flags[0] = flags_row1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   715
-  n_cmd->completion_flags[1] = flags_row2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   716
-  n_cmd->func = f;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   717
-  n_cmd->userdata = userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   718
-  Commands = g_slist_prepend(Commands, n_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   719
-  // Add to completion CMD category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   720
-  compl_add_category_word(COMPL_CMD, name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   721
-  return n_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   722
+  gchar *p = *pr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   723
+  gchar *e = *er;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   724
+  const char *error = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   725
+  gboolean   quotes = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   726
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   727
+  if ((flags & cmdarg_catchall) && (flags & cmdarg_plain)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   728
+    *pr = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   729
+    return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   730
+  }
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
+  while (p <= e && error != NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   733
+    if (p == e && quotes) { // end of line in quotes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   734
+      error = "Unfinished quoted argument.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   735
+    } else if ((*p == ' ' && (!quotes) && !(flags & cmdarg_catchall)) || p == e) { // argument ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   736
+      if (*p != '\0') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   737
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   738
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   739
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   740
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   741
+    } else if (*p == '\\' && !(flags & cmdarg_plain)) { // next char escape
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   742
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   743
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   744
+      if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   745
+        error = "Escape at the end of line.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   746
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   747
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   748
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   749
+    } else if (*p == '"' && !(flags & cmdarg_plain)) { // quotation start/end
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   750
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   751
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   752
+      quotes = !quotes;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   753
+    } else { // still argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   754
+      p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   755
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   756
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   757
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   758
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   759
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   760
+  return error;
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
-//  cmd_set_safe(name, safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   764
-// Sets if command can be used in startup configuration file.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   765
-gboolean cmd_set_safe(const gchar *name, gboolean safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   766
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   767
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   768
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   769
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   770
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   771
+static gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   772
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   773
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   774
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   775
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   776
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   777
-    if (!strcmp((const char *)sel->data, name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   778
-      if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   779
-        return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   780
-      else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   781
-        g_free(sel->data);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   782
-        safe_commands = g_slist_delete_link(safe_commands, sel);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   783
+  enum {             // Parser state transitions:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   784
+    in_space,        // -> in_space, in_optstart, in_argstart
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   785
+    in_optstart,     // -> in_shortoptend, in_longoptstart, in_argstart ("-")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   786
+    in_shortoptend,  // -> in_space, in_argstart, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   787
+    in_longoptstart, // -> in_longopt, in_space, in_argstart ("---")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   788
+    in_longopt,      // -> in_longopt, in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   789
+    in_argstart,     // -> in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   790
+  } state = in_argstart;     // current parser state
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   791
+  gchar    *p        = *pr;  // current pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   792
+  gchar    *e        = *er;  // end of line pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   793
+  gchar    *s;               // start of current object pointer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   794
+  gboolean opts_ended = FALSE; // don't allow options any more
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   795
+  cmdopt_t *option   = NULL; // option, for which argument is currently parsed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   796
+  gsize    argno     = 0;    // number of current positional argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   797
+  gchar    *error    = NULL; // error message to return
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   798
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   799
+  // general environment checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   800
+  if (command -> check) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   801
+    if ((error = command -> check (command))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   802
+      gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   803
+      error = g_strdup_printf("%s: %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   804
+      g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   805
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   806
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   807
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   808
+  // prepare: set default values for arguments and unset some fields
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   809
+  if (error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   810
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   811
+    if (command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   812
+      for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   813
+        cmdopt_t *opt = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   814
+        opt -> arg.val.arg = opt -> arg.defval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   815
+        opt -> cnt = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   816
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   817
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   818
-  if (safe)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   819
-    safe_commands = g_slist_append(safe_commands, g_strdup(name));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   820
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   821
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   822
-  return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   823
+    if (command -> args) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   824
+      for (n = 0; command -> args[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   825
+        cmdarg_t *arg = command -> args[n]; 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   826
+        arg -> value.roarg = arg -> defval;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   827
+        arg -> flags &= ~(cmdarg_visited|cmdarg_checked);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   828
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   829
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   830
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   831
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   832
+  // we allow parser to do one extra run on final '\0'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   833
+  while (p <= e && error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   834
+    if (state == in_space) { // space between args/options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   835
+      if (*p == ' ' || p == e) { // still space
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   836
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   837
+      } else if (*p == '-' && !opts_ended) { // option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   838
+        state = in_optstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   839
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   840
+      } else { // argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   841
+        if (!option) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   842
+          opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   843
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   844
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   845
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   846
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   847
+    } else if (state == in_optstart) { // long/short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   848
+      if (*p == ' ' || p == e) { // argument '-'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   849
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   850
+        s = p = p - 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   851
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   852
+      } else if (*p == '-') { // long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   853
+        state = in_longoptstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   854
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   855
+      } else { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   856
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   857
+        state = in_shortoptend;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   858
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   859
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   860
+    } else if (state == in_shortoptend) { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   861
+      if (*p == ' ' || p == e) { // option really ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   862
+        gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   863
+        for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   864
+          if (command -> opts[n] -> shortopt == *s) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   865
+            option = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   866
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   867
+          }
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
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   870
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   871
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   872
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   873
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   874
+            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
   875
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   876
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   877
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   878
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   879
+          error = g_strdup_printf ("%s: Unknown option -%c.", command -> name, *s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   880
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   881
+      } else { // short option not ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   882
+        // consider it argument (to allow -autojoin)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   883
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   884
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   885
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   886
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   887
+    } else if (state == in_longoptstart) { // long option initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   888
+      if (*p == ' ' || p == e) { // end of options '--'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   889
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   890
+        state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   891
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   892
+      } else if (*p == '-') { // argument, starting with '---'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   893
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   894
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   895
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   896
+      } else { // it is long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   897
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   898
+        state = in_longopt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   899
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   900
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   901
+    } else if (state == in_longopt) { // long option name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   902
+      if (*p == ' ' || p == e) { // long option ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   903
+        gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   904
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   905
+        for (n = 0; command -> opts[n] != NULL; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   906
+          if (!g_strcmp0(command -> opts[n] -> longopt, s)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   907
+            option = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   908
+            break;
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
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   911
+        if (option != NULL) { // option is known
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   912
+          if (option -> flags & cmdopt_switch) { // it is switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   913
+            option -> arg.value.swc ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   914
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   915
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   916
+            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
   917
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   918
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   919
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   920
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   921
+          error = g_strdup_printf ("%s: Unknown option --%s.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   922
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   923
+      } else { // still long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   924
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   925
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   926
+    } else if (state == in_argstart) { // option/command argument initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   927
+      cmdarg_flags_t flags;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   928
+      const char     *err;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   929
+      cmdarg_t       *arg;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   930
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   931
+      if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   932
+        arg = &(option -> arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   933
+      } else if (!command -> args || !command -> args[argno]) { // no need to parse arguments any further
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   934
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   935
+      } else { // normal aurgument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   936
+        arg = command -> args[argno];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   937
+      }
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 ((err = cmdopt_parse_argument(&p, &e, arg -> flags))) { // get argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   940
+        if (!option) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   941
+          error = g_strdup_printf ("%s: Can't parse argument %s (%u): %s", command -> name, arg -> name, argno + 1, err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   942
+        else if (option -> shortopt) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   943
+          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
   944
+        } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   945
+          error = g_strdup_printt ("%s: Can't parse argument for option --%s: %s", command -> name, option -> longopt, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   946
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   947
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   948
+        arg -> value.arg = s;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   949
+        arg -> flags  |= cmdarg_visited;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   950
+        if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   951
+          option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   952
+        } else { // normal argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   953
+          if (argument -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   954
+            cmdopts_t *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   955
+            gsize     n; // XXX put command list into chkdata
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   956
+            for (n = 0; command -> cmds[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   957
+              if (!strcmp (s, command -> cmds[n] -> name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   958
+                subcmd = command -> cmds[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   959
+                break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   960
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   961
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   962
+            if (subcmd != NULL) { // found subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   963
+              arg -> value.cmd = subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   964
+              if ((error = cmdopts_parse_internal (&p, &e, subcmd))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   965
+                gchar *err = error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   966
+                error = g_strdup_printf("%s %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   967
+                g_free (err);
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
+            } else { // wrong subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   970
+              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
   971
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   972
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   973
+          argno ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   974
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   975
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   976
+      state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   977
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   978
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   979
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   980
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   981
+  *er = e;
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
+  // perform option argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   984
+  if (error == NULL && command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   985
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   986
+    for (n = 0; command -> opts[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   987
+      cmdopt_t *opt = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   988
+      if (!(opt -> flags & cmdopt_switch)) { // not a switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   989
+        // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   990
+        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
   991
+          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
   992
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
   993
+            opt -> arg.flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   994
+            if ((err = opt -> arg.type -> check (&(opt -> arg)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   995
+              if (opt -> arg.flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   996
+                if (opt -> shortopt) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   997
+                  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
   998
+                } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
   999
+                  error = g_strdup_printt ("%s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1000
+                }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1001
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1002
+                break;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1003
+              } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1004
+                if (opt -> shortopt) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1005
+                  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
  1006
+                } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1007
+                  scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument for option --%s: %s", command -> name, opt -> longopt, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1008
+                }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1009
+                g_free (err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1010
+              }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1011
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1012
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1013
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1014
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1015
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1016
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1017
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1018
+  // perform positional argument checking
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1019
+  if (error == NULL && command -> args) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1020
+    gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1021
+    for (n = 0; command -> args[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1022
+      cmdarg_t *arg = command -> args[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1023
+      // needs checking and not checked already
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1024
+      if ((arg -> flags & (cmdarg_check | cmdarg_visited)) && !(arg -> flags & cmdarg_checked)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1025
+        if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1026
+          if (!arg -> value.cmd) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1027
+            if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1028
+              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
  1029
+              break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1030
+            } else { // XXX more prefixes
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1031
+              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
  1032
+            }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1033
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1034
+        } else { // normal argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1035
+          if (arg -> type && arg -> type -> check) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1036
+            gchar *err;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1037
+            arg -> flags |= cmdarg_checked;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1038
+            if ((err = arg -> type -> check (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1039
+              if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1040
+                error = g_strdup_printf ("%s: Error in argument %s (%u): %s", command -> name, arg -> name, n, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1041
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1042
+                break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1043
+              } else { // XXX more prefixes
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1044
+                scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument %s (%u): %s", command -> name, arg -> name, n, err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1045
+                g_free (err);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1046
+              }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1047
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1048
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1049
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1050
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1051
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1052
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1053
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1054
+  return error;
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
-//  cmd_is_safe(name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1058
-// Returns if command is safe or not
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1059
-gboolean cmd_is_safe(const gchar *name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1060
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1061
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1062
+static void cmdopts_free(cmdopts_t *command)
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
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1065
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1066
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1067
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1068
-    if (!strcmp((const char *)sel->data, name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1069
-      return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1070
-  return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1071
+  gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1072
+  if (command -> opts) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1073
+    for (n = 0; command -> opts[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1074
+      cmdopt_t *opt = command -> opts[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1075
+      if (!(opt -> flags & cmdopt_switch)) { // not switch
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1076
+        if (opt -> arg.flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1077
+          opt -> arg.flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1078
+          if (opt -> arg.type && opt -> arg.type -> free) { // need to free something
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1079
+            opt -> arg.type -> free (&(opt -> arg));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1080
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1081
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1082
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1083
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1084
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1085
+  if (command -> args) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1086
+    for (n = 0; command -> args[n]; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1087
+      cmdarg_t *arg = command -> args[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1088
+      if (arg -> flags & cmdarg_subcmd) { // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1089
+        if (arg -> value.cmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1090
+          cmdopts_free (arg -> value.cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1091
+          arg -> value.cmd = NULL;
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
+      } else { // normal argument
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1094
+        if (arg -> flags & cmdarg_freeme) { // can free something
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1095
+          arg -> flags &= ~cmdarg_freeme;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1096
+          if (arg -> type && arg -> type -> free) { // need to free something
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1097
+            arg -> type.free (arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1098
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1099
+        }
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
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1102
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1103
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1104
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1105
-//  cmd_init()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1106
-// Commands table initialization
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
-// After changing commands names and it arguments names here, you must change
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1109
-// ones in init_bindings()!
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
-void cmd_init(void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1112
+cmd_result_t cmd_execute_internal (gchar *commandline, cmdexe_flags_t flags)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1113
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1114
-  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
  1115
-  cmd_add("alias", "Add an alias", 0, 0, &do_alias, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1116
-  cmd_add("authorization", "Manage subscription authorizations",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1117
-          COMPL_AUTH, COMPL_JID, &do_authorization, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1118
-  cmd_add("bind", "Add an key binding", 0, 0, &do_bind, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1119
-  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1120
-          COMPL_BUFFER, 0, &do_buffer, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1121
-  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
  1122
-  cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1123
-  cmd_add("color", "Set coloring options", COMPL_COLOR, 0, &do_color, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1124
-  cmd_add("connect", "Connect to the server", 0, 0, &do_connect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1125
-  cmd_add("del", "Delete the current buddy", 0, 0, &do_del, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1126
-  cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1127
-  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
  1128
-  cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1129
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1130
-  cmd_add("exit",  "Exit mcabber", 0, 0, &do_exit, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1131
-  cmd_add("group", "Change group display settings",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1132
-          COMPL_GROUP, COMPL_GROUPNAME, &do_group, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1133
-  cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1134
-  cmd_add("iline", "Manipulate input buffer", 0, 0, &do_iline, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1135
-  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
  1136
-  cmd_add("module", "Manipulations with modules", COMPL_MODULE, 0, &do_module,
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("move", "Move the current buddy to another group", COMPL_GROUPNAME,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1139
-          0, &do_move, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1140
-  cmd_add("msay", "Send a multi-lines message to the selected buddy",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1141
-          COMPL_MULTILINE, 0, &do_msay, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1142
-  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
  1143
-  cmd_add("otrpolicy", "Manage OTR policies", COMPL_JID, COMPL_OTRPOLICY,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1144
-          &do_otrpolicy, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1145
-  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
  1146
-  cmd_add("quit", "Exit the software", 0, 0, NULL, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1147
-  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
  1148
-  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1149
-  cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1150
-          &do_request, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1151
-  cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1152
-  cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1153
-          &do_roster, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1154
-  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
  1155
-  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
  1156
-          &do_say_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1157
-  cmd_add("screen_refresh", "Redraw mcabber screen", 0, 0, &do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1158
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1159
-  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
  1160
-  cmd_add("source", "Read a configuration file", 0, 0, &do_source, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1161
-  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
  1162
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1163
-  cmd_add("status_to", "Show or set your status for one recipient",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1164
-          COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1165
-  cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1166
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1167
-  cmd_set_safe("set", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1168
-  cmd_set_safe("bind", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1169
-  cmd_set_safe("alias", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1170
-  cmd_set_safe("pgp", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1171
-  cmd_set_safe("source", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1172
-  cmd_set_safe("status", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1173
-  cmd_set_safe("color", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1174
-  cmd_set_safe("otrpolicy", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1175
-  cmd_set_safe("module", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1176
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1177
-  // Status category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1178
-  compl_add_category_word(COMPL_STATUS, "online");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1179
-  compl_add_category_word(COMPL_STATUS, "avail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1180
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1181
-  compl_add_category_word(COMPL_STATUS, "invisible");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1182
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1183
-  compl_add_category_word(COMPL_STATUS, "free");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1184
-  compl_add_category_word(COMPL_STATUS, "dnd");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1185
-  compl_add_category_word(COMPL_STATUS, "notavail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1186
-  compl_add_category_word(COMPL_STATUS, "away");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1187
-  compl_add_category_word(COMPL_STATUS, "offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1188
-  compl_add_category_word(COMPL_STATUS, "message");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1189
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1190
-  // Roster category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1191
-  compl_add_category_word(COMPL_ROSTER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1192
-  compl_add_category_word(COMPL_ROSTER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1193
-  compl_add_category_word(COMPL_ROSTER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1194
-  compl_add_category_word(COMPL_ROSTER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1195
-  compl_add_category_word(COMPL_ROSTER, "group_prev");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1196
-  compl_add_category_word(COMPL_ROSTER, "group_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1197
-  compl_add_category_word(COMPL_ROSTER, "hide");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1198
-  compl_add_category_word(COMPL_ROSTER, "show");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1199
-  compl_add_category_word(COMPL_ROSTER, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1200
-  compl_add_category_word(COMPL_ROSTER, "display");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1201
-  compl_add_category_word(COMPL_ROSTER, "hide_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1202
-  compl_add_category_word(COMPL_ROSTER, "show_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1203
-  compl_add_category_word(COMPL_ROSTER, "toggle_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1204
-  compl_add_category_word(COMPL_ROSTER, "item_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1205
-  compl_add_category_word(COMPL_ROSTER, "item_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1206
-  compl_add_category_word(COMPL_ROSTER, "item_toggle_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1207
-  compl_add_category_word(COMPL_ROSTER, "alternate");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1208
-  compl_add_category_word(COMPL_ROSTER, "search");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1209
-  compl_add_category_word(COMPL_ROSTER, "unread_first");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1210
-  compl_add_category_word(COMPL_ROSTER, "unread_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1211
-  compl_add_category_word(COMPL_ROSTER, "note");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1212
-  compl_add_category_word(COMPL_ROSTER, "resource_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1213
-  compl_add_category_word(COMPL_ROSTER, "resource_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1214
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1215
-  // Buffer category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1216
-  compl_add_category_word(COMPL_BUFFER, "clear");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1217
-  compl_add_category_word(COMPL_BUFFER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1218
-  compl_add_category_word(COMPL_BUFFER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1219
-  compl_add_category_word(COMPL_BUFFER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1220
-  compl_add_category_word(COMPL_BUFFER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1221
-  compl_add_category_word(COMPL_BUFFER, "search_backward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1222
-  compl_add_category_word(COMPL_BUFFER, "search_forward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1223
-  compl_add_category_word(COMPL_BUFFER, "readmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1224
-  compl_add_category_word(COMPL_BUFFER, "date");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1225
-  compl_add_category_word(COMPL_BUFFER, "%");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1226
-  compl_add_category_word(COMPL_BUFFER, "purge");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1227
-  compl_add_category_word(COMPL_BUFFER, "close");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1228
-  compl_add_category_word(COMPL_BUFFER, "close_all");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1229
-  compl_add_category_word(COMPL_BUFFER, "scroll_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1230
-  compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1231
-  compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1232
-  compl_add_category_word(COMPL_BUFFER, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1233
-  compl_add_category_word(COMPL_BUFFER, "save");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1234
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1235
-  // Group category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1236
-  compl_add_category_word(COMPL_GROUP, "fold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1237
-  compl_add_category_word(COMPL_GROUP, "unfold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1238
-  compl_add_category_word(COMPL_GROUP, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1239
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1240
-  // Multi-line (msay) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1241
-  compl_add_category_word(COMPL_MULTILINE, "abort");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1242
-  compl_add_category_word(COMPL_MULTILINE, "begin");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1243
-  compl_add_category_word(COMPL_MULTILINE, "send");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1244
-  compl_add_category_word(COMPL_MULTILINE, "send_to");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1245
-  compl_add_category_word(COMPL_MULTILINE, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1246
-  compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1247
-  compl_add_category_word(COMPL_MULTILINE, "verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1248
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1249
-  // Room category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1250
-  compl_add_category_word(COMPL_ROOM, "affil");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1251
-  compl_add_category_word(COMPL_ROOM, "ban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1252
-  compl_add_category_word(COMPL_ROOM, "bookmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1253
-  compl_add_category_word(COMPL_ROOM, "destroy");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1254
-  compl_add_category_word(COMPL_ROOM, "invite");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1255
-  compl_add_category_word(COMPL_ROOM, "join");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1256
-  compl_add_category_word(COMPL_ROOM, "kick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1257
-  compl_add_category_word(COMPL_ROOM, "leave");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1258
-  compl_add_category_word(COMPL_ROOM, "names");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1259
-  compl_add_category_word(COMPL_ROOM, "nick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1260
-  compl_add_category_word(COMPL_ROOM, "privmsg");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1261
-  compl_add_category_word(COMPL_ROOM, "remove");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1262
-  compl_add_category_word(COMPL_ROOM, "role");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1263
-  compl_add_category_word(COMPL_ROOM, "setopt");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1264
-  compl_add_category_word(COMPL_ROOM, "topic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1265
-  compl_add_category_word(COMPL_ROOM, "unban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1266
-  compl_add_category_word(COMPL_ROOM, "unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1267
-  compl_add_category_word(COMPL_ROOM, "whois");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1268
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1269
-  // Authorization category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1270
-  compl_add_category_word(COMPL_AUTH, "allow");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1271
-  compl_add_category_word(COMPL_AUTH, "cancel");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1272
-  compl_add_category_word(COMPL_AUTH, "request");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1273
-  compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1274
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1275
-  // Request (query) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1276
-  compl_add_category_word(COMPL_REQUEST, "last");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1277
-  compl_add_category_word(COMPL_REQUEST, "ping");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1278
-  compl_add_category_word(COMPL_REQUEST, "time");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1279
-  compl_add_category_word(COMPL_REQUEST, "vcard");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1280
-  compl_add_category_word(COMPL_REQUEST, "version");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1281
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1282
-  // Events category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1283
-  compl_add_category_word(COMPL_EVENTS, "accept");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1284
-  compl_add_category_word(COMPL_EVENTS, "ignore");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1285
-  compl_add_category_word(COMPL_EVENTS, "reject");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1286
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1287
-  // PGP category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1288
-  compl_add_category_word(COMPL_PGP, "disable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1289
-  compl_add_category_word(COMPL_PGP, "enable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1290
-  compl_add_category_word(COMPL_PGP, "force");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1291
-  compl_add_category_word(COMPL_PGP, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1292
-  compl_add_category_word(COMPL_PGP, "setkey");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1293
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1294
-  // OTR category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1295
-  compl_add_category_word(COMPL_OTR, "start");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1296
-  compl_add_category_word(COMPL_OTR, "stop");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1297
-  compl_add_category_word(COMPL_OTR, "fingerprint");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1298
-  compl_add_category_word(COMPL_OTR, "smpq");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1299
-  compl_add_category_word(COMPL_OTR, "smpr");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1300
-  compl_add_category_word(COMPL_OTR, "smpa");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1301
-  compl_add_category_word(COMPL_OTR, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1302
-  compl_add_category_word(COMPL_OTR, "key");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1303
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1304
-  // OTR Policy category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1305
-  compl_add_category_word(COMPL_OTRPOLICY, "plain");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1306
-  compl_add_category_word(COMPL_OTRPOLICY, "manual");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1307
-  compl_add_category_word(COMPL_OTRPOLICY, "opportunistic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1308
-  compl_add_category_word(COMPL_OTRPOLICY, "always");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1309
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1310
-  // Color category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1311
-  compl_add_category_word(COMPL_COLOR, "roster");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1312
-  compl_add_category_word(COMPL_COLOR, "muc");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1313
-  compl_add_category_word(COMPL_COLOR, "mucnick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1314
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1315
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1316
-  // Module category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1317
-  compl_add_category_word(COMPL_MODULE, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1318
-  compl_add_category_word(COMPL_MODULE, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1319
-  compl_add_category_word(COMPL_MODULE, "load");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1320
-  compl_add_category_word(COMPL_MODULE, "unload");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1321
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1322
+  gchar *s = commandline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1323
+  gchar *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1324
+  gchar *e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1325
+  gchar *freeme = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1326
+  const char *err;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1327
+  gchar *error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1328
+  cmdopts_t *command = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1329
+  const char *alias = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1330
+  gsize n;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1331
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1332
+  // skip command indicator and spaces at the beginning
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1333
+  while (*s == COMMAND_CHAR || *s == ' ')
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1334
+    s ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1335
+  gchar *p = s;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1336
+  gchar *e = s + strlen (s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1337
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1338
+  // separate first word - command name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1339
+  if ((err = cmdopts_parse_argument(&p, &e, cmdarg_default))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1340
+    scr_log_print(LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1341
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1342
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1343
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1344
+  // check for quit command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1345
+  if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1346
+    return cmd_result_quit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1347
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1348
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1349
+  // check if we're in verbatim mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1350
+  if ((flags & cmdexe_check_verbatim) && scr_get_multimode() == 2) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1351
+    if (strcmp(s, "msay")) { // it is not msay
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1352
+      return cmd_result_verbatim;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1353
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1354
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1355
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1356
+  // check and expand alias
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1357
+  if ((alias = settings_get(SETTINGS_TYPE_ALIAS, s))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1358
+    freeme = s = g_strdup_printf ("%s %s", alias, p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1359
+    p = s;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1360
+    e = s + strlen (s);
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
+    if ((err = cmdopts_parse_argument(&p, &e, cmdarg_default))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1363
+      scr_log_print(LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1364
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1365
+      return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1366
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1367
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1368
+    // check for quit command again
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1369
+    if (!strcmp (s, "quit")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1370
+      g_free (freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1371
+      return cmd_result_quit;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1372
+    }
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
+  // find command with this name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1376
+  for (n = 0; n < cmd_count; n ++) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1377
+    if (!strcmp(s, cmd_list[n] -> name)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1378
+      command = cmd_list[n];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1379
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1380
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1381
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1382
+  if (command == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1383
+    scr_log_print(LPRINT_NORMAL, "error: Unable to find command \"%s\".", s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1384
+    g_free(freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1385
+    return cmd_result_not_found;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1386
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1387
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1388
+  // check safety
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1389
+  if ((flags & cmdexe_check_safe) && !(command -> flags & cmd_safe)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1390
+    scr_log_print(LPRINT_NORMAL, "error: Command \"%s\" is not safe to execute here.", command -> name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1391
+    g_free(freeme);
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
+  // parse command line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1396
+  if ((error = cmdopts_parse_internal (&p, &e, command))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1397
+    scr_log_print(LPRINT_NORMAL, "%s", error);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1398
+    g_free(error);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1399
+    cmdopts_free (command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1400
+    g_free(freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1401
+    return cmd_result_syntax_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1402
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1403
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1404
+  // execute command handler
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1405
+  if (command -> handler) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1406
+    if ((error = command -> handler(command))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1407
+      scr_log_print(LPRINT_NORMAL, "%s: %s", command -> name, error);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1408
+      g_free(error);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1409
+      cmdopts_free (command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1410
+      g_free(freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1411
+      return cmd_result_runtime_error;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1412
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1413
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1414
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1415
+  // free resources
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1416
+  cmdopts_free(command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1417
+  g_free(freeme);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1418
+  return cmd_result_ok;
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
-//  expandalias(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1422
-// 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
  1423
-// If no alias is found, returns line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1424
-// Note: if the returned pointer is different from line, the caller should
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1425
-//       g_free() the pointer after use
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1426
-char *expandalias(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1427
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1428
+// 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
  1429
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1430
+// 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
  1431
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1432
+cmd_result_t process_line(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1433
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1434
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1435
-  char *word;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1436
-  const gchar *value;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1437
-  char *newline = (char*)line;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1438
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1439
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1440
-  for (p1 = line ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1441
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1442
-  // Locate the end of the word
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1443
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1444
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1445
-  // Extract the word and look for an alias in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1446
-  word = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1447
-  value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1448
-  g_free(word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1449
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1450
-  if (value)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1451
-    newline = g_strdup_printf("%c%s%s", COMMAND_CHAR, value, p2);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1452
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1453
-  return newline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1454
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1455
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1456
-//  cmd_get
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1457
-// Finds command in the command list structure.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1458
-// 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
  1459
-cmd *cmd_get(const char *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1460
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1461
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1462
-  char *com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1463
-  GSList *sl_com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1464
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1465
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1466
-  for (p1 = command ; *p1 == COMMAND_CHAR ; p1++)
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
-  // Locate the end of the command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1469
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1470
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1471
-  // Copy the clean command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1472
-  com = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1473
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1474
-  // Look for command in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1475
-  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
  1476
-    if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1477
-      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1478
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1479
-  g_free(com);
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
-  if (sl_com)       // Command has been found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1482
-    return (cmd*)sl_com->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1483
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1484
-}
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
-//  process_command(line, iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1487
-// Process a command line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1488
-// 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
  1489
-// it is intended to be used for key bindings.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1490
-// 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
  1491
-int process_command(const char *line, guint iscmd)
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
-  char *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1494
-  char *xpline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1495
-  cmd *curcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1496
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1497
-  if (!line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1498
-    return 0;
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
-  // We do alias expansion here
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1501
-  if (iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1502
-    xpline = expandalias(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1503
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1504
-    xpline = (char*)line; // No expansion in verbatim multi-line mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1505
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1506
-  // We want to use a copy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1507
-  if (xpline == line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1508
-    xpline = g_strdup(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1509
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1510
-  // Remove trailing spaces:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1511
-  for (p=xpline ; *p ; p++)
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
-  for (p-- ; p>xpline && (*p == ' ') ; p--)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1514
-    *p = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1515
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1516
-  // Command "quit"?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1517
-  if ((iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1518
-      && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1519
-    if (!xpline[5] || xpline[5] == ' ') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1520
-      g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1521
-      return 255;
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
-  } else if (iscmd && !strncasecmp(xpline, "quit", 4) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1524
-             (!xpline[4] || xpline[4] == ' ')) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1525
-    // 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
  1526
-    // character (usually '/').
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
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1531
-  // 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
  1532
-  if (!iscmd && scr_get_multimode() == 2
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1533
-      && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1534
-    // It isn't an /msay command
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1535
-    scr_append_multiline(xpline);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1536
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1537
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1538
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1539
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1540
-  // Commands handling
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1541
-  curcmd = cmd_get(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1542
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1543
-  if (!curcmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1544
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized command.  "
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1545
-                 "Please see the manual for a list of known commands.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1546
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1547
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1548
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1549
-  if (!curcmd->func) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1550
-    scr_LogPrint(LPRINT_NORMAL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1551
-                 "This functionality is not yet implemented, sorry.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1552
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1553
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1554
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1555
-  // Lets go to the command parameters
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1556
-  for (p = xpline+1; *p && (*p != ' ') ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1557
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1558
-  // Skip spaces
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1559
-  while (*p && (*p == ' '))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1560
-    p++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1561
-  // Call command-specific function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1562
-  retval_for_cmds = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1563
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1564
-  if (curcmd->userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1565
-    (*(void (*)(char *p, gpointer u))curcmd->func)(p, curcmd->userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1566
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1567
-    (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1568
-#else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1569
-  (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1570
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1571
-  g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1572
-  return retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1573
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1574
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1575
-//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1576
-// Process a command/message line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1577
-// 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
  1578
-// currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1579
-// Return 255 if the line is the /quit command, or 0.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1580
-int process_line(const char *line)
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
+  gchar *utf8;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1583
+  int retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1584
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1585
   if (!*line) { // User only pressed enter
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1586
     if (scr_get_multimode()) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1587
       scr_append_multiline("");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1588
@@ -556,141 +707,509 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1589
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1590
     if (current_buddy) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1591
       if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1592
-        do_group("toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1593
+        group_cmd (BUDDATA(current_buddy), scmd_group_toggle);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1594
       else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1595
         // Enter chat mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1596
         scr_set_chatmode(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1597
         scr_show_buddy_window();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1598
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1599
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1600
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1601
+    return cmd_result_input;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1602
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1603
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1604
-  if (*line != COMMAND_CHAR) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1605
-    // This isn't a command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1606
+  utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1607
+  if (*line != COMMAND_CHAR) { // input line
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1608
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1609
-      scr_append_multiline(line);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1610
+      scr_append_multiline(utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1611
     else
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1612
-      say_cmd((char*)line, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1613
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1614
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1615
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1616
-  /* It is _probably_ a command -- except for verbatim multi-line mode */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1617
-  return process_command(line, FALSE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1618
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1619
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1620
-// Helper routine for buffer item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1621
-// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1622
-static void roster_buddylock(char *bjid, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1623
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1624
-  gpointer bud = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1625
-  bool may_need_refresh = FALSE;
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
-  // Allow special jid "" or "." (current buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1628
-  if (bjid && (!*bjid || !strcmp(bjid, ".")))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1629
-    bjid = NULL;
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
-  if (bjid) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1632
-    // The JID has been specified.  Quick check...
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1633
-    if (check_jid_syntax(bjid)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1634
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1635
-                   "<%s> is not a valid Jabber ID.", bjid);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1636
-    } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1637
-      // Find the buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1638
-      GSList *roster_elt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1639
-      roster_elt = roster_find(bjid, jidsearch,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1640
-                               ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1641
-      if (roster_elt)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1642
-        bud = roster_elt->data;
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
-        scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1645
-      may_need_refresh = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1646
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1647
-  } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1648
-    // Use the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1649
-    if (current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1650
-      bud = BUDDATA(current_buddy);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1651
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1652
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1653
-  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1654
-  if (bud) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1655
-    if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1656
-      lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1657
-    buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1658
-    if (may_need_refresh) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1659
-      buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1660
-      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
  1661
+      say_cmd(utf8, msgtype_not_set);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1662
+    retval = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1663
+  } else { // command or verbatim multiline message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1664
+    retval = cmd_execute_internal (utf8, cmdexe_check_verbatim);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1665
+    if (retval == cmd_result_verbatim) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1666
+      g_free(utf8); // buffer has been corrupted by parser
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1667
+      utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1668
+      scr_append_multiline(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1669
+      retval = cmd_result_input;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1670
     }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1671
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1672
+  g_free(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1673
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1674
+  return retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1675
 }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  1676
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1677
-static void roster_resourcelock(char *jidres, gboolean lock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1678
-  gpointer bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1679
-  char *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1680
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1681
-  if (!jidres) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1682
-    if (lock) return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1683
-    jidres = ".";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1684
-  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1685
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1686
-  if (jidres[0] == '.' &&
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1687
-      (jidres[1] == '\0' || jidres[1] == JID_RESOURCE_SEPARATOR)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1688
-    //Special jid: . or ./resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1689
-    switch (jidres[1]) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1690
-      case JID_RESOURCE_SEPARATOR:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1691
-        resource = jidres+2;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1692
-      case '\0':
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1693
-        if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1694
-          bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1695
-    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1696
-  } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1697
-    char *tmp;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1698
-    if (!check_jid_syntax(jidres) &&
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1699
-        (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1700
-      //Any other valid full jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1701
-      *tmp = '\0'; // for roster search by bare jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1702
-      resource = tmp+1;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1703
-      GSList *roster_elt;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1704
-      roster_elt = roster_find(jidres, jidsearch,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1705
-          ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1706
-      if (roster_elt)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1707
-        bud = roster_elt->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1708
-      *tmp = JID_RESOURCE_SEPARATOR;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1709
-    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1710
-    if (!bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1711
-      //Resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1712
-      if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1713
-        bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1714
-      resource = jidres;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1715
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1716
+//  Standard types
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1717
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1718
+// This section contains standard argument type definitions, used in built-in
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1719
+// mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1720
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1721
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1722
+// TODO: (and variations with 'required')
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1723
+// + cmdarg_type_roster_bjid     - in roster, with specified types -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1724
+// + 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
  1725
+// * 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
  1726
+// * 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
  1727
+// * cmdarg_type_bjid         - any bjid -> bjid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1728
+// + cmdarg_type_fjid         - any fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1729
+// + cmdarg_type_statusmask   - string -> string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1730
+// + cmdarg_type_uint         - string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1731
+// + cmdarg_type_nonspace     - strip, space only -> null
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1732
+// * cmdarg_type_bjidmask
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1733
+// + cmdarg_type_color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1734
+// + cmdarg_type_string2enum
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1735
+// * 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
  1736
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1737
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1738
+//  common methods
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1739
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1740
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1741
+static void cmdarg_free_gfree (optarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1742
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1743
+  g_free (arg -> value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1744
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1745
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1746
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1747
+//  string -> stripspace string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1748
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1749
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1750
+// Strips leading and trailing spaces, checks if anything left.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1751
+// Replaces value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1752
+// Does not need freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1753
+// No trailing spaces in defvalue - needs RW access for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1754
+static gchar *cmdarg_check_nospace (optarg_t *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1755
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1756
+  gchar *val = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1757
+  if (val) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1758
+    while (isspace(*val))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1759
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1760
+    if (*val) { // valid arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1761
+      arg -> value.arg = val;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1762
+      // XXX requires RW access. default values must not contain trailing space
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1763
+      while (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1764
+        val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1765
+      while (isspace(*val))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1766
+        val --;
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)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1769
+        *val = '\0';
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1770
+      return NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1771
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1772
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1773
-  
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1774
-  if (bud && buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1775
-    if (lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1776
-      GSList *resources, *p_res;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1777
-      gboolean found = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1778
-      resources = buddy_getresources(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1779
-      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
  1780
-        if (!g_strcmp0((char*)p_res->data, resource))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1781
-          found = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1782
-        g_free(p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1783
+  // error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1784
+  arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1785
+  return g_strdup("Non-space value required.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1786
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1787
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1788
+cmdarg_type_t cmdarg_type_nospace = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1789
+  cmdarg_check_nospace,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1790
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1791
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1792
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1793
+
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
+//  bjid -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1796
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1797
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1798
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1799
+// Returns buddy roster entry in value.bud.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1800
+// Recognizes as current ".", but not "" or NULL - use defvalue.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1801
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1802
+static gchar *cmdarg_check_roster_bjid (optarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1803
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1804
+  gchar *error = NULL;
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
+  if (!(error = cmdarg_check_nospace_required(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1807
+    const char *bjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1808
+    guint      types = (guint) arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1809
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1810
+    if (!strcmp(bjid, ".")) { // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1811
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1812
+        error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1813
+      else if (buddy_gettype(BUDDATA(current_buddy)) & types)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1814
+        arg -> value.bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1815
+      else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1816
+        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
  1817
+    } else if (!check_jid_syntax(bjid)) { // valid jid specified
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1818
+      GSList *found = roster_find(bjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1819
+      if (found)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1820
+        arg -> value.bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1821
+      else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1822
+        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
  1823
+    } else { // jid is invalid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1824
+      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
  1825
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1826
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1827
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1828
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1829
+    arg -> value.bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1830
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1831
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1832
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1833
+cmdarg_type_t cmdarg_type_bjid = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1834
+  cmdarg_check_roster_bjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1835
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1836
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1837
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1838
+
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
+//  fjid -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1841
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1842
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1843
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1844
+// Returns buddy roster entry in userdata.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1845
+// Returns resource string in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1846
+// Recognizes as current "./res" and "res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1847
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1848
+// 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
  1849
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1850
+//  * 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
  1851
+//  * allow bjids and '.'
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1852
+//  * merge with roster_bjid and use own flags in chkdata to signify types and resource allowed/required conditions
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1853
+//  * it is rather check_roster_resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1854
+static gchar *cmdarg_check_roster_resource(optarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1855
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1856
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1857
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1858
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1859
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1860
+  if (!(error = cmdarg_check_nospace(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1861
+    const char *fjid     = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1862
+    guint      types     = (guint) arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1863
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1864
+    if (fjid[0] == '.' && fjid[1] == JID_RESOURCE_SEPARATOR) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1865
+      // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1866
+      resource = fjid+2;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1867
+    } else if (!check_jid_syntax(fjid) && (resource = strchr(fjid, JID_RESOURCE_SEPARATOR))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1868
+      // valid jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1869
+      GSList *found;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1870
+      *resource = '\0'; // XXX needs rw
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1871
+      found = roster_find(fjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1872
+      if (found) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1873
+        bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1874
+        resource ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1875
+      } else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1876
+        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
  1877
+    } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1878
+      // jid is invalid - let's consider it resource (XXX)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1879
+      resource = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1880
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1881
+    // resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1882
+    if (error == NULL && resource) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1883
+      if (bud == NULL) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1884
+        if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1885
+          error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1886
+        else if (buddy_gettype(BUDDATA(current_buddy)) & types)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1887
+          bud = BUDDATA(current_buddy);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1888
+        else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1889
+          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
  1890
       }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1891
-      g_slist_free(resources);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1892
-      if (!found) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1893
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1894
-        return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1895
+      if (bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1896
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1897
+        gboolean found = FALSE;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1898
+        resources = buddy_getresources(bud);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1899
+        for (p_res = resources; p_res; p_res = g_slist_next(p_res)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1900
+          if (!g_strcmp0((char*)p_res->data, resource))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1901
+            found = TRUE;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1902
+          g_free(p_res->data);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1903
+        }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1904
+        g_slist_free(resources);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1905
+        if (!found)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1906
+          error = g_strdup_printf("No such resource <%s%c%s>...", buddy_getjid(bud), JID_RESOURCE_SEPARATOR, resource);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1907
       }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1908
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1909
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1910
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1911
+  if (error) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1912
+    arg -> userdata  = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1913
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1914
+  } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1915
+    arg -> userdata  = bud;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1916
+    arg -> value.arg = resource;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1917
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1918
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1919
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1920
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1921
+cmdarg_type_t cmdarg_type_roster_resource = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1922
+  cmdarg_check_roster_resource,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1923
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1924
+  NULL,
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1927
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1928
+//  fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1929
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1930
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1931
+// Returns corrected fjid in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1932
+// Recognizes as current "." and "./res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1933
+// Requires freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1934
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1935
+//  * destructor is rather generic g_freer, publish?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1936
+static gchar *cmdarg_check_fjid(optarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1937
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1938
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1939
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1940
+  if (!(error = cmdarg_check_nospace(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1941
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1942
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1943
+    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
  1944
+      const char *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1945
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1946
+        error = g_strdup_printf ("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1947
+      else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1948
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1949
+      } else if (fjid[1] == '\0') {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1950
+        arg -> value.arg = jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1951
+      } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1952
+        arg -> value.arg = g_strdup_printf ("%s%c%s", jid, JID_RESOURCE_SEPARATOR, fjid + 2);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1953
+        arg -> flags |= cmdarg_freeme;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1954
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1955
+    } else if (check_jid_syntax(fjid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1956
+      error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1957
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1958
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1959
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1960
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1961
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1962
+  return error;
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
+cmdarg_type_t cmdarg_type_fjid = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1966
+  cmdarg_check_fjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1967
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1968
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1969
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1970
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1971
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1972
+//  string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1973
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1974
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1975
+// Returns unsigned integer in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1976
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1977
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1978
+//  * 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
  1979
+//  * use flags in chkdata to specify signedness - it only affects two checks
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1980
+static gchar *cmdarg_check_uint (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1981
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1982
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1983
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1984
+  if (!(error = cmdarg_check_nospace(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1985
+    const char *e = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1986
+    const char *s = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1987
+    long n = strtol(s, &e, 0);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1988
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1989
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1990
+    else if (n < 0)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1991
+      error = g_strdup ("Value must be greater than zero.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1992
+    else if (n > G_MAXUINT)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1993
+      error = g_strdup ("Value %d is too big.", n);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1994
+    else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1995
+      arg -> value.uint = (guint) n;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1996
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1997
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1998
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1999
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2000
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2001
+}
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
+cmdarg_type_t cmdarg_type_uint = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2004
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2005
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2006
+  NULL,
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2009
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2010
+//  string -> statusmask
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2011
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2012
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2013
+// Strips/checks for any non-valid status chars in mask.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2014
+// Returns mask in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2015
+// Recognizes "*" as glob.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2016
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2017
+// No errors in default vaules - needs RW for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2018
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2019
+//  * check duplicates?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2020
+//    * string2flags?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2021
+//  * canonicize?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2022
+//    * string2enum?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2023
+//  * common strchr callback with valid chars in chkdata?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2024
+//    * Then argument name should go into cmdarg struct - message would be too generic
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2025
+static gchar *cmdarg_check_statusmask (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2026
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2027
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2028
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2029
+  if (!(error = cmdarg_check_nospace(arg)) && arg -> value.arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2030
+    const char *valid = "foand_?";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2031
+    if (!strcmp(arg -> value.arg, "*")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2032
+      arg -> value.arg = g_strdup (valid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2033
+      arg -> flags    |= cmdarg_freeme;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2034
     } else {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2035
-      resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2036
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2037
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2038
+      while (p < e) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2039
+        if (strchr(valid, *p)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2040
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2041
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2042
+          // this is valid use of flag in checker
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2043
+          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
  2044
+        } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2045
+          scr_log_print (LPRINT_NORMAL, "Warning: Wrong %s character [%c]", arg -> name, *p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2046
+          memmove (p, p+1, e-p-1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2047
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2048
+        }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2049
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2050
+      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
  2051
+        arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2052
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2053
-    buddy_setactiveresource(bud, resource);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2054
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2055
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2056
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2057
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2058
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2059
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2060
+cmdarg_type_t cmdarg_type_statusmask = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2061
+  cmdarg_check_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2062
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2063
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2064
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2065
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2066
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2067
+//  string -> enum
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2068
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2069
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2070
+typedef struct {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2071
+  const char *name;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2072
+  guint      value;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2073
+} string2enum_t;
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
+// 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
  2076
+// Returns corresponding value in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2077
+// Returns 0 if not recognized and not required.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2078
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2079
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2080
+//  * also, print list of possible values on error?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2081
+static gchar *cmdarg_check_string2enum (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2082
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2083
+  gchar *error;
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
+  if (!(error = cmdarg_check_nospace(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2086
+    string2enum_t *list = arg -> chkdata;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2087
+    gsize i;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2088
+    for (i = 0; list[i] -> name != NULL; i ++) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2089
+      if (!strcmp(list[i] -> name, arg -> value.arg)) { // found
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2090
+        arg -> value.uint = list[i] -> value;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2091
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2092
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2093
+      list ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2094
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2095
+    // not found, error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2096
+    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
  2097
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2098
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2099
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2100
+    arg -> value.uint = 0; // XXX default value?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2101
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2102
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2103
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2104
+cmdarg_type_t cmdarg_type_string2enum = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2105
+  cmdarg_check_string2enum,
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
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2108
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2109
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2110
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2111
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2112
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2113
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2114
+static string2enum_t s2e_color[] = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2115
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2116
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2117
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2118
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2119
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2120
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2121
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2122
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2123
+  { NULL,      0  },
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2126
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2127
+// Returns color name in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2128
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2129
+// XXX
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2130
+//  * 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
  2131
+//    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
  2132
+//    * that needs access to ncurses internals, so, probably, this will
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2133
+//      be better done, when moving related command definitions to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2134
+//      corresponding subsystems.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2135
+static gchar *cmdarg_check_color (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2136
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2137
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2138
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2139
+  if (!(error = cmdarg_check_nospace(arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2140
+    const char *color = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2141
+    gsize i;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2142
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2143
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2144
+      return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2145
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2146
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2147
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2148
+      color += 6;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2149
+    // check names
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2150
+    for (i = 0; s2e_color[i] -> name != NULL; i ++) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2151
+      if (!strcmp (s2e_color[i] -> name, color)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2152
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2153
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2154
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2155
+    { // not found, check for numerical value
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2156
+      const char *e = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2157
+      long n = strtol(color, &e, 0);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2158
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2159
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
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
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2162
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2163
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2164
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2165
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2166
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2167
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2168
+cmdarg_type_t cmdarg_type_color = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2169
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2170
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2171
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2172
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2173
+
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
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2176
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2177
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2178
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2179
+// you also have to add it to cmd_init().
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
+
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
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2184
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2185
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2186
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2187
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2188
+static void roster_buddylock(gpointer bud, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2189
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2190
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2191
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2192
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2193
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2194
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2195
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2196
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2197
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2198
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2199
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2200
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2201
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2202
 // (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
  2203
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2204
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2205
 static void display_and_free_note(struct annotation *note, const char *winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2206
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2207
   gchar tbuf[128];
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2208
@@ -755,41 +1274,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2209
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2210
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2211
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2212
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2214
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2217
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2218
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2219
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2220
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2221
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2222
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2223
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2224
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2225
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2226
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2227
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2228
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2229
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2233
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2234
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2235
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2236
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2237
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2238
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2239
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2240
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2241
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2242
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2243
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2244
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2245
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2246
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2247
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2248
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2249
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2250
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2253
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2254
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2255
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2256
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2257
       display_and_free_note(note, bjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2258
@@ -800,194 +1293,273 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2259
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2260
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2261
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2262
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
-inline static void roster_updown(int updown, char *nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2268
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2269
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2270
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2272
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2273
+  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
  2274
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2275
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2276
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2277
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2278
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2279
+#define SCMD_ROSTER(NAME, ARGS) \
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2280
+    { #NAME, NULL, NULL, NULL, ARGS, NULL, (gpointer)scmd_roster_##NAME }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2281
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2282
+  "roster",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2285
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2286
+  {{"subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL}, NULL},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
+  {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2288
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2289
+    SCMD_ROSTER(top,    NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2290
+    SCMD_ROSTER(up,   {{"n", cmdarg_chreq, "1", cmdarg_type_uint}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2291
+    SCMD_ROSTER(down, {{"n", cmdarg_chreq, "1", cmdarg_type_uint}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2292
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2293
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2294
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2295
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
+    SCMD_ROSTER(unread_next,  NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2297
+    SCMD_ROSTER(search, {{"name", cmdarg_eol|cmdarg_required, NULL, cmdarg_type_nonspace}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2298
+    SCMD_ROSTER(display, {{"statusmask", cmdarg_check, NULL, cmdarg_type_statusmask}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2300
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2301
+    SCMD_ROSTER(toggle_offline, NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2302
+    SCMD_ROSTER(item_lock,        {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2303
+    SCMD_ROSTER(item_unlock,      {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2304
+    SCMD_ROSTER(item_toggle_lock, {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2305
+    { "note", NULL, NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2306
+      {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2307
+        {cmdopt_switch,  'r', "reset", {"reset", cmdarg_default, NULL, NULL, NULL}},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2308
+        {cmdopt_default, 'j', "jid",   {"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT)}},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2309
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2310
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2311
+      {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2312
+        {cmdarg_eol, NULL, cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2313
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2314
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2315
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2316
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2317
+    SCMD_ROSTER(notes, NULL),
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2318
+    SCMD_ROSTER(resource_lock,   {{"resource|fjid", cmdarg_chreq, NULL, cmdarg_type_roster_resource, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)}, NULL}),
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2319
+    SCMD_ROSTER(resource_unlock, {{"jid", cmdarg_chreq, ".", cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)}, NULL}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2321
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2322
+    SCMD_ROSTER(toggle, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2323
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2325
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2326
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2327
+static gchar *do_roster(cmdopts_t *options)
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
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2330
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2331
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2332
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2333
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2334
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2335
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2336
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2337
-    scr_roster_up_down(updown, nbitems);
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
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2341
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2342
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2343
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2344
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2345
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2346
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2347
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2348
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2349
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2350
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2351
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2352
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2353
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2354
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2355
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2356
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2357
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2358
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2359
-  if (!strcasecmp(subcmd, "top")) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
+  scmd_roster_t subcmd = (scmd_roster_t) (options -> args[0] -> value.cmd -> userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2361
+  cmdarg_t      *arg   = NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2362
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2363
+  if (options -> args[0] -> value.cmd -> args)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2364
+    arg = options -> args[0] -> value.cmd -> args[0];
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2365
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2366
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2367
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2368
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2369
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2370
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2371
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2372
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2373
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2374
+  } else if (subcmd == scmd_roster_up) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2375
+    scr_roster_up_down(-1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2376
+  } else if (subcmd == scmd_roster_down) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2377
+    scr_roster_up_down(1, arg -> value.uint);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2379
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2380
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2381
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2382
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2383
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2384
+  } else if (subcmd == scmd_roster_unread_first) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2385
+    scr_roster_unread_message(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2386
+  } else if (subcmd == scmd_roster_unread_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2387
+    scr_roster_unread_message(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2388
+  } else if (subcmd == scmd_roster_search) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2389
+    scr_roster_search(arg -> value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2390
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2391
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2392
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2393
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2394
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2395
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2396
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2397
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2398
+  } else if (subcmd == scmd_roster_display) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2399
+    scr_roster_display(arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2400
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2401
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2402
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2403
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2404
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2405
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2406
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2407
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2408
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2409
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2410
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2411
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2412
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2413
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2414
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2415
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2416
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2417
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2418
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2419
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2420
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2421
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2422
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2423
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2424
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2425
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2426
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2427
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2428
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2429
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2430
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2431
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2432
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2433
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2434
-      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
  2435
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2436
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2437
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2438
-    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
  2439
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2440
-    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
  2441
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2442
-    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
  2443
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2444
-    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
  2445
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2446
-    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
  2447
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2448
-    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
  2449
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2450
-    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
  2451
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2452
-    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
  2453
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2454
-    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
  2455
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2456
+  } else if (subcmd == scmd_roster_item_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2457
+    roster_buddylock(arg -> value.bud, 1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2458
+  } else if (subcmd == scmd_roster_item_unlock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2459
+    roster_buddylock(arg -> value.bud, 0);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2460
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2461
+    roster_buddylock(arg -> value.bud, -1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2462
+  } else if (subcmd == scmd_roster_note) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2463
+    roster_note(options -> cmds[18] -> opts[1] -> value.bud,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2464
+                options -> cmds[18] -> opts[0] -> value.swc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2465
+                arg -> value.arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2466
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2467
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2468
+  } else if (subcmd == scmd_roster_resource_lock) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2469
+    buddy_setactiveresource(arg -> userdata, arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2470
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2471
+  } else if (subcmd == scmd_roster_resource_unlock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2472
+    buddy_setactiveresource(arg -> value.bud, NULL);
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_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2475
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2476
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2477
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2478
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  2479
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2480
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2481
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2482
+  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
  2483
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  2484
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2485
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2486
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2487
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2488
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2490
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2491
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2492
+// statusmask + "clear"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2493
+static gchar *cmdarg_check_color_statusmask (cmdarg_t *arg)
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
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2496
-  char *subcmd;
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
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2499
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2500
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2501
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2502
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2503
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2504
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2505
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2506
+  if (!g_strcmp0(arg -> value.arg, "clear"))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2507
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2508
+  else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2509
+    return cmdarg_check_statusmask (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2510
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2511
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2512
+static cmdarg_type_t cmdarg_type_color_statusmask = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2513
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2514
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2515
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2516
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2517
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2518
+// bjid + "*"
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2519
+// Returns string, not buddy.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2520
+static gchar *cmdarg_check_color_roomjid (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2521
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2522
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2523
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2524
+  if (!g_strcmp0(arg -> value.arg, "*"))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2525
+    return NULL;
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
+  arg -> chkdata = (gpointer) ROSTER_TYPE_ROOM;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2528
+  if (!(error = cmdarg_check_roster_bjid (arg))) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2529
+    arg -> value.roarg = buddy_getjid (arg -> value.bud); // XXX strdup?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2530
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2531
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2532
-  if (!strcasecmp(subcmd, "roster")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2533
-    char *status, *wildcard, *color;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2534
-    char **arglist = split_arg(arg, 3, 0);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2535
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2536
-    status = *arglist;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2537
-    wildcard = to_utf8(arglist[1]);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2538
-    color = arglist[2];
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2539
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2540
-    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
  2541
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2542
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2543
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2544
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2545
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2546
+static cmdarg_type_t cmdarg_type_color_roomjid = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2547
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2548
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2549
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2550
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2551
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2552
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2553
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2554
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2555
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2556
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2557
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2558
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2559
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2560
+static string2enum_t s2e_color_muc[] = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2561
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2562
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2563
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2564
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2565
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2566
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2567
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2568
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2569
+  "color",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2570
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2571
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2572
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2573
+  {{ "subcommand", cmdarg_subcmd | cmdarg_check, NULL, NULL }, NULL},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2574
+  {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2575
+    {"roster", NULL, NULL, NULL, {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2576
+        { "statusmask|clear", cmdarg_chreq, NULL, cmdarg_type_color_statusmask },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2577
+        { "jidmask", cmdarg_default, NULL, cmdarg_type_bjidmask         },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2578
+        { "color|-", cmdarg_default, NULL, cmdarg_type_color            },
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2579
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2580
+      }, NULL, (gpointer)scmd_color_roster},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2581
+    {"muc", NULL, NULL, NULL, {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2582
+        { "roomjid", cmdarg_chreq, NULL, cmdarg_type_color_roomjid },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2583
+        { "on|off|preset|-", cmdarg_chreq, "on", cmdarg_type_string2enum, (gpointer)s2e_color_muc},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2584
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2585
+      }, NULL, (gpointer)scmd_color_muc},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2586
+    {"mucnick", NULL, NULL, NULL {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2587
+        { "nick", cmdarg_chreq, NULL, cmdarg_type_nick  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2588
+        { "color|-", cmdarg_chreq, NULL, cmdarg_type_color },
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2589
+        NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2590
+      }, NULL, (gpointer)scmd_color_mucnick},
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2591
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2592
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2593
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2594
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2595
+static gchar *do_color(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2596
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2597
+  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
  2598
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2599
+  if (subcmd == scmd_color_roster) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2600
+    const gchar *status   = options -> cmds[0] -> args[0] -> value.arg;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2601
+    const gchar *wildcard = options -> cmds[0] -> args[1] -> value.arg;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2602
+    const gchar *color    = options -> cmds[0] -> args[2] -> value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2603
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2604
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2605
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2606
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2607
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2608
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2609
+      if (!wildcard || !*wildcard || !color || !*color) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2610
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2611
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2612
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2613
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2614
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2615
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2616
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2617
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2618
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2619
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2620
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2621
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2622
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2623
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2624
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2625
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2626
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2627
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2628
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2629
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2630
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2631
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2632
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2633
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2634
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2635
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2636
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2637
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2638
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2639
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2640
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2641
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2642
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2643
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2644
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2645
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2646
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2647
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2648
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2649
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2650
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2651
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2652
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2653
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2654
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2655
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2656
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2657
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  2658
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2659
+  } else if (subcmd == scmd_color_muc) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2660
+    scr_muc_color ( options -> cmds[1] -> args[0] -> value.arg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2661
+                    options -> cmds[1] -> args[1] -> value.uint );
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2662
+  } else { // scmd_color_mucnick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2663
+    scr_muc_nick_color( options -> cmds[2] -> args[0] -> value.arg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2664
+                        options -> cmds[2] -> args[1] -> value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2665
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2666
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2667
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2668
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  2669
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2670
-//  cmd_setstatus(recipient, arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2671
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2672
+//  /status
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2673
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2674
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2675
+// 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
  2676
+//  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
  2677
 // Set your Jabber status.
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2678
-// - 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
  2679
-// - 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
  2680
-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
  2681
+// 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
  2682
+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
  2683
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2684
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2685
-  char *status;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2686
-  char *msg;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2687
   enum imstatus st;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2688
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2689
   if (!xmpp_is_online())
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2690
@@ -1000,15 +1572,15 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2691
   if (!recipient)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2692
     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
  2693
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2694
-  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
  2695
-  status = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2696
-  msg = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2697
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2698
   if (!status) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2699
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2700
     return;
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
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2703
+  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2704
+  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2705
+    msg = NULL;
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
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2708
   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
  2709
   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
  2710
   else if (!strcasecmp(status, IMSTATUS_AVAILABLE))     st = available;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2711
@@ -1020,229 +1592,347 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2712
   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
  2713
   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
  2714
   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
  2715
-    if (!msg || !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2716
+    if (!msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2717
       // 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
  2718
       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
  2719
-      free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2720
       return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2721
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2722
     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
  2723
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2724
     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
  2725
-    free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2726
     return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2727
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2728
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2729
-  // Use provided message
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2730
-  if (msg && !*msg) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2731
-    msg = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2732
-  }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2733
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2734
   // 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
  2735
   if (recipient && !msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2736
     msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2737
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2738
   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
  2739
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2740
-  free_arg_lst(paramlst);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2741
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2742
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2743
-static void do_status(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2744
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2745
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2746
+// XXX status|message|show -> status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2747
+static string2enum_t s2e_status2[] = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2748
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2749
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2750
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2751
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2752
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2753
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2754
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2755
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2756
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2757
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2758
+  { "show",      imstatus_size},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2759
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2760
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2761
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2762
+// needs corresponding s2e in chkdata
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2763
+static gchar *cmdarg_check_status_status (cmdarg_t *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2764
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2765
-  if (!*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2766
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2767
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2768
+  if (!g_strcmp0(arg, "message")) {
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2776
+static cmdarg_type_t cmdarg_type_status_status = {
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2784
+cmdopts_t def_status = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2785
+  "status",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2786
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2787
+  do_status,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2788
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2789
+  {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2790
+    {"status", cmdarg_default, NULL, cmdarg_type_status_status, (gpointer)s2e_status2},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2791
+    {"message", cmdarg_eol, NULL, cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2792
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2793
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2794
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2795
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2796
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2797
+static gchar *do_status(cmdopts_t *options)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2798
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2799
+  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
  2800
     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
  2801
     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
  2802
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2803
                  (sm ? sm : ""));
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2804
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2805
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2806
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2807
+    scr_check_auto_away(TRUE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2808
+    xmpp_setstatus(options -> args[0] -> value.uint, NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2809
+                   options -> args[1] -> value.arg, FALSE);
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
+  return 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
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2814
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2815
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2816
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2817
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2818
+// no "show" here
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2819
+static string2enum_t s2e_status[] = {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2820
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2821
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2822
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2823
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2824
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2825
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2826
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2827
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2828
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2829
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2830
+  { NULL,        0           },
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
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2833
+cmdopts_t def_status_to = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2834
+  "status_to",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2835
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2836
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2837
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2838
+  {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2839
+    {"jid", cmdarg_chreq, NULL, cmdarg_type_fjid},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2840
+    {"status", cmdarg_chreq, NULL, cmdarg_type_status_status, (string2enum_t)s2e_status},
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2841
+    {"message", cmdarg_eol,   NULL, cmdarg_type_nonspace},
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2842
+    NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2843
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2844
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2845
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2846
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2847
+static gchar *do_status_to(cmdopts_t *options)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2848
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2849
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2850
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2851
+  gsize i;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2852
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2853
+  fjid = options -> args[0] -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2854
+  st   = options -> args[1] -> value.uint;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2855
+  msg  = options -> args[2] -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2856
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2857
+  for (i = 0; s2e_status[i] -> name != NULL; i++) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2858
+    if (s2e_status[i] -> value == st) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2859
+      stname = s2e_status[i] -> name;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2860
+      break;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2861
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2862
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2863
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2864
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2865
+  scr_LogPrint(LPRINT_LOGNORM, 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2866
+               "Sending to <%s> /status %s %s", fjid, stname, msg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2867
+  if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2868
+    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2869
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2870
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2871
+  return NULL
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2872
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2873
+  
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2874
+#if 0
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2875
+static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2876
+{
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2877
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2878
+    "add",
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2879
+    NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2880
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2881
+      // jid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2882
+      { 0,                                            { .arg = "."  } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2883
+      // rostername
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2884
+      { 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
  2885
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2886
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2887
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2888
+  gchar *jid, *nick;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2889
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2890
+  if (!xmpp_is_online()) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2891
+    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2892
     return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2893
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2894
-  arg = to_utf8(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2895
-  cmd_setstatus(NULL, arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2896
-  g_free(arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2897
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2898
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2899
-static void do_status_to(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2900
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2901
-  char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2902
-  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
  2903
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2904
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2905
-  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
  2906
-  fjid = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2907
-  st = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2908
-  msg = *(paramlst+2);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2909
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2910
-  if (!fjid || !st) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2911
-    scr_LogPrint(LPRINT_NORMAL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2912
-                 "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
  2913
-    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
  2914
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2915
+  if (cmdopts_parse(arg, &options))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2916
     return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2917
-  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2918
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2919
-  // Allow things like /status_to "" away
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2920
-  if (!*fjid || !strcmp(fjid, "."))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2921
-    fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2922
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2923
-  if (fjid) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2924
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2925
+  jid  = options.args[0].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2926
+  nick = options.args[1].value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2927
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2928
+  if (jid && (!*jid || !strcmp(jid, ".")))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2929
+    jid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2930
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2931
+  if (jid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2932
     // The JID has been specified.  Quick check...
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2933
-    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
  2934
-      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
  2935
-                   "<%s> is not a valid Jabber ID.", fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2936
-      fjid = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2937
+    if (check_jid_syntax(jid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2938
+      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
  2939
+      jid = NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2940
     } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2941
-      // Convert jid to lowercase
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2942
-      char *p = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2943
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2944
-        *p = tolower(*p);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2945
-      fjid = jid_utf8 = to_utf8(fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2946
+      mc_strtolower(jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2947
     }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2948
   } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2949
     // Add the current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2950
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2951
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2952
-    if (!fjid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2953
+      jid = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2954
+    if (!jid)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2955
       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
  2956
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2957
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2958
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2959
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2960
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2961
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2962
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2963
-    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
  2964
-    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
  2965
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2966
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2967
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2968
-    g_free(jid_utf8);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2969
+  if (jid) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2970
+    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2971
+    xmpp_addbuddy(jid, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2972
+    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2973
+                 jid);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2974
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2975
-  free_arg_lst(paramlst);
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
+  cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2978
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2979
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2980
-static void do_add(char *arg)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2981
+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
  2982
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2983
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2984
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2985
-  char *jid_utf8 = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2986
+  cmdopts_t options = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2987
+    "del",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2988
+    (cmdopt_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2989
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'n', "dryrun", { .swc = 0 } },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2990
+    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2991
+    (cmdarg_t[1]){
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2992
+      { 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
  2993
+    },
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2994
+    NULL,
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  2995
+  };
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2996
+  gchar *jid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2997
+  gpointer buddy;
69
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
   if (!xmpp_is_online()) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3000
     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
  3001
     return;
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
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3004
-  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
  3005
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3006
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3007
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3008
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3009
-    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
  3010
-  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
  3011
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3012
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3013
-  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
  3014
+  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
  3015
+    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3016
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3017
+  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
  3018
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3019
+  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
  3020
+    jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3021
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3022
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3023
     // 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
  3024
-    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
  3025
-      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
  3026
-                   "<%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
  3027
-      id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3028
+    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
  3029
+      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
  3030
+      jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3031
     } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3032
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3033
-      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
  3034
+      GSList *found;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3035
+      mc_strtolower(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3036
+      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
  3037
+                          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
  3038
+      if (!found) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3039
+        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
  3040
+        jid = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3041
+      } else {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3042
+        buddy = found -> data;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3043
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3044
     }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3045
   } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3046
-    // 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
  3047
+    // Use current buddy
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3048
     if (current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3049
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3050
-    if (!id)
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3051
+      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
  3052
+    if (!jid)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3053
       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
  3054
+    else
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3055
+      buddy = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3056
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3057
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3058
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3059
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3060
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3061
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3062
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3063
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3064
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3065
-                 id);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3066
+  if (jid) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3067
+    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
  3068
+      // This is a chatroom
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3069
+      if (buddy_getinsideroom(buddy)) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3070
+        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
  3071
+        cmdopts_free(&options);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3072
+        return;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3073
+      }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3074
+    }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3075
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3076
+    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
  3077
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3078
+    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
  3079
+      // Close the buffer
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3080
+      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
  3081
+
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3082
+      xmpp_delbuddy(jid);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3083
+      scr_update_buddy_window();
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3084
+    }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3085
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3086
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3087
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3088
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3089
-  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
  3090
+  cmdopts_free(&options);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3091
 }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3092
 
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3093
-static void do_del(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3094
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3095
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3096
+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
  3097
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3098
-  const char *bjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3099
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3100
-  if (*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3101
-    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
  3102
-                 "the currently-selected buddy will be deleted.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3103
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3104
-  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3105
+  // 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
  3106
+  // 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
  3107
+  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3108
+  if (action != scmd_group_unfold &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3109
+      ((!current_buddy) ||
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3110
+       (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3111
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3112
+    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3113
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3114
+  buddy_hide_group(group, action);
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
+  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3117
+  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3118
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3119
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3120
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3121
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3122
+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
  3123
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3124
+  scmd_group_t subcmd;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3125
+  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
  3126
+    "group",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3127
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3128
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3129
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3130
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3131
+    // all of them have one argument - group name
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3132
+#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
  3133
+      { #NAME, NULL, (cmdarg_t[1]){ \
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3134
+          { 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
  3135
+        }, 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
  3136
+    (cmdopts_t[5]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3137
+      GROUP_SUBCMD(expand, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3138
+      GROUP_SUBCMD(unfold, unfold, 0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3139
+      GROUP_SUBCMD(shrink, fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3140
+      GROUP_SUBCMD(fold,   fold,   0),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3141
+      GROUP_SUBCMD(toggle, toggle, CMDOPT_LAST),
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3142
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3143
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3144
+  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
  3145
+  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
  3146
+  guint leave_buddywindow;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3147
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3148
   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
  3149
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3150
-  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
  3151
-  if (!bjid)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3152
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3153
+  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
  3154
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3155
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3156
-  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
  3157
-    // 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
  3158
-    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
  3159
-      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
  3160
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3161
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3162
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3163
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3164
-  // 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
  3165
-  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
  3166
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3167
-  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
  3168
-  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
  3169
-  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
  3170
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3171
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3172
-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
  3173
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3174
-  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
  3175
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3176
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3177
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3178
-  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
  3179
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3180
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3181
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3182
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3183
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3184
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3185
-  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
  3186
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3187
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3188
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3189
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3190
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3191
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3192
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3193
-    goto do_group_return;   // Should not happen
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3194
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3195
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3196
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3197
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3198
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3199
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3200
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3201
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3202
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3203
-    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
  3204
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3205
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3206
-  if (arg && *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3207
+  
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3208
+  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
  3209
+  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
  3210
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3211
+  if (name && *name) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3212
     GSList *roster_elt;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3213
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3214
-    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
  3215
-    g_free(group_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3216
+    roster_elt = roster_find(name, namesearch, ROSTER_TYPE_GROUP);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3217
     if (roster_elt)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3218
       group = buddy_getgroup(roster_elt->data);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3219
   } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3220
@@ -1253,31 +1943,19 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3221
     goto do_group_return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3222
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3223
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3224
-  // 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
  3225
-  // 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
  3226
-  // chat window.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3227
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3228
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3229
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3230
   if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3231
     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
  3232
     goto do_group_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3233
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3234
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3235
-  if (group_state != group_unfold && leave_buddywindow)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3236
-    scr_roster_prev_group();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3237
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3238
-  buddy_hide_group(group, group_state);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3239
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3240
-  buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3241
-  update_roster = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3242
+  group_cmd (group, subcmd);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3243
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3244
 do_group_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3245
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3246
+  cmdopts_free(&options);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3247
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3248
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3249
 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
  3250
-                           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
  3251
+                           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
  3252
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3253
   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
  3254
   char *hmsg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3255
@@ -1285,6 +1963,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3256
   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
  3257
   int isroom;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3258
   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
  3259
+  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
  3260
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3261
   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
  3262
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3263
@@ -1299,11 +1978,15 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3264
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3265
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3266
   if (check_jid_syntax((char*)fjid)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3267
-    scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3268
-                 "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3269
+    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
  3270
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3271
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3272
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3273
+  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
  3274
+    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
  3275
+  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
  3276
+    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
  3277
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3278
   // 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
  3279
   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
  3280
   if (rp)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3281
@@ -1354,8 +2037,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3282
 //  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
  3283
 // 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
  3284
 // the network.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3285
-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
  3286
-                         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
  3287
+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
  3288
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3289
   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
  3290
   char *jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3291
@@ -1378,34 +2060,13 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3292
   else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3293
     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
  3294
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3295
-  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
  3296
+  send_message_to(jid, msg, subj, msgtype, FALSE);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3297
   g_free(jid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3298
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3299
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3300
-static LmMessageSubType scan_mtype(char **arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3301
-{
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3302
-  // Try splitting it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3303
-  char **parlist = split_arg(*arg, 2, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3304
-  LmMessageSubType result = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3305
-  // Is it a good parameter?
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3306
-  if (parlist && *parlist) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3307
-    if (!strcmp("-n", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3308
-      result = LM_MESSAGE_SUB_TYPE_NORMAL;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3309
-    } else if (!strcmp("-h", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3310
-      result = LM_MESSAGE_SUB_TYPE_HEADLINE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3311
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3312
-    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
  3313
-      *arg += strlen(*arg) - (parlist[1] ? strlen(parlist[1]) : 0);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3314
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3315
-  // Anything found? -> skip it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3316
-  free_arg_lst(parlist);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3317
-  return result;
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
-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
  3321
+void say_cmd(char *arg, msgtype_t msgtype)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3322
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3323
   gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3324
-  LmMessageSubType msgtype = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3325
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3326
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3327
   scr_show_buddy_window();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3328
@@ -1424,80 +2085,131 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3329
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3330
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3331
   buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3332
-  if (parse_flags)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3333
-    msgtype = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3334
-  arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3335
   send_message(arg, NULL, msgtype);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3336
-  g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3337
 }
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
 static void do_say(char *arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3340
-  say_cmd(arg, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3341
+  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
  3342
+    "say",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3343
+    (cmdopt_t[2]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3344
+      { CMDOPT_SWITCH,               'n', "normal",   { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3345
+      { CMDOPT_SWITCH | CMDOPT_LAST, 'h', "headline", { .swc = 0 } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3346
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3347
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3348
+      { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_REQUIRED | CMDOPT_LAST,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3349
+        { .arg = NULL } },
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
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3352
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3353
+  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
  3354
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3355
+  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
  3356
+    return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3357
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3358
+  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
  3359
+    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
  3360
+  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
  3361
+    msgtype = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3362
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3363
+  say_cmd(options.args[0].value.arg, msgtype);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3364
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3365
+  cmdopts_free(&options);
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
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3368
 static void do_msay(char *arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3369
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3370
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3371
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3372
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3373
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3374
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3375
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3376
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3377
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3378
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3379
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3380
-    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
  3381
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3382
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3383
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3384
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3385
+  enum msay_scmd_t {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3386
+    msay_scmd_begin, msay_scmd_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3387
+    msay_scmd_send, msay_scmd_send_to,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3388
+    msay_scmd_toggle, msay_scmd_toggle_verbatim,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3389
+    msay_scmd_abort,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3390
+  } subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3391
+  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
  3392
+    "msay",
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3393
+    NULL,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3394
+    (cmdarg_t[1]){
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3395
+      // subcommand
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3396
+      { CMDOPT_SUBCOMMAND | CMDOPT_REQUIRED | CMDOPT_LAST, { .cmd = NULL } },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3397
+    },
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3398
+    (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
  3399
+      { "begin", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3400
+        (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
  3401
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3402
+          { 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
  3403
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3404
+        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
  3405
+      { "verbatim", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3406
+        (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
  3407
+          // subject
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3408
+          { 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
  3409
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3410
+        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
  3411
+      { "send",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3412
+        (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
  3413
+          { 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
  3414
+          { 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
  3415
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3416
+        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
  3417
+      { "send_to",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3418
+        (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
  3419
+          { 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
  3420
+          { 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
  3421
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3422
+        (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
  3423
+          // jid
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3424
+          { 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
  3425
+        }, 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3426
+        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
  3427
+      { "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
  3428
+      { "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
  3429
+        (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
  3430
+      { "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
  3431
+    },
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3432
+  };
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3433
+  const char *msg;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3434
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3435
+  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
  3436
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3437
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3438
+  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
  3439
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3440
+  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
  3441
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3442
+      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
  3443
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3444
+      subcmd = msay_scmd_begin;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3445
+  } 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
  3446
+    if (scr_get_multimode())
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3447
+      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
  3448
+    else
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3449
+      subcmd = msay_scmd_verbatim;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3450
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3451
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3452
-  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
  3453
-    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
  3454
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3455
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3456
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3457
-  } 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
  3458
-    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
  3459
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3460
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3461
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3462
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3463
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3464
-  if (!strcasecmp(subcmd, "abort")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3465
+  if (subcmd == msay_scmd_abort) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3466
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3467
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3468
     scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3469
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3470
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3471
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3472
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3473
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3474
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3475
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3476
-      verbat = TRUE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3477
+  } 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
  3478
+    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
  3479
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3480
+    if (subcmd == msay_scmd_verbatim) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3481
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3482
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3483
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3484
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3485
+      scr_set_multimode(1, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3486
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3487
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3488
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3489
-                 verbat ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3490
+                 subcmd == msay_scmd_verbatim ? "VERBATIM " : "");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3491
     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
  3492
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3493
-    if (verbat)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3494
+    if (subcmd == msay_scmd_verbatim)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3495
       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
  3496
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3497
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3498
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3499
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3500
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3501
     goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3502
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3503
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3504
-  /* send/send_to command */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3505
+  /* msay_scmd_send or msay_scmd_send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3506
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3507
   if (!scr_get_multimode()) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3508
     scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3509
@@ -1508,49 +2220,47 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3510
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3511
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3512
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3513
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3514
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3515
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3516
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3517
-    // 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
  3518
-    // 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
  3519
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3520
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3521
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3522
-      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
  3523
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3524
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3525
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3526
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3527
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3528
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3529
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3530
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3531
-    gchar *msg_utf8;
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 (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3534
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3535
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3536
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3537
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3538
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3539
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3540
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3541
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3542
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3543
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3544
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3545
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3546
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3547
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3548
-      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
  3549
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3550
+  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
  3551
+    msgtype_t msg_type = msgtype_not_set;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3552
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3553
+    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
  3554
+      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
  3555
+    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
  3556
+      msg_type = msgtype_headline;
70
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
+    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
  3559
+      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
  3560
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3561
+      // 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
  3562
+      // 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
  3563
+      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
  3564
+                          msg_type, FALSE))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3565
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3566
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3567
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3568
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3569
+      if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3570
+        scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3571
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3572
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3573
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3574
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3575
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3576
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3577
+        scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3578
+        goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3579
+      }
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
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3582
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3583
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3584
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3585
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3586
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3587
   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
  3588
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3589
 do_msay_return:
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3590
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3591
+  cmdopts_free(&options);
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
 //  load_message_from_file(filename)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3595
@@ -1566,7 +2276,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3596
   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
  3597
   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
  3598
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3599
-  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
  3600
+  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
  3601
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3602
   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
  3603
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3604
@@ -1634,130 +2344,103 @@
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3605
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3606
 static void do_say_to(char *arg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3607
 {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3608
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3609
-  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
  3610
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3611
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3612
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3613
-  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
  3614
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3615
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3616
-  bool eval = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3617
+  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
  3618
+    "say_to",
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3619
+    (cmdopt_t[5]){
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3620
+      { CMDOPT_SWITCH, 'n', "normal",   { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3621
+      { CMDOPT_SWITCH, 'h', "headline", { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3622
+      { CMDOPT_SWITCH, 'e', "escapes",  { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3623
+      { CMDOPT_SWITCH, 'q', "quiet",    { .swc = 0 }    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3624
+      { CMDOPT_LAST,   'f', "file",     { .opt = NULL } },
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
+    (cmdarg_t[2]){
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3627
+      // jid
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3628
+      { CMDOPT_REQUIRED,                              { .arg = NULL } },
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3629
+      // message
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3630
+      { CMDOPT_LAST | CMDOPT_PLAIN | CMDOPT_CATCHALL, { .arg = NULL } },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3631
+    },
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3632
+    NULL,
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3633
+  };
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3634
+  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
  3635
+  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
  3636
+  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
  3637
+  msgtype_t msg_type = msgtype_not_set;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3638
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3639
   if (!xmpp_is_online()) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3640
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3641
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3642
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3643
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3644
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3645
-  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
  3646
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3647
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3648
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3649
-    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
  3650
+  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
  3651
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3652
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3653
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3654
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3655
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3656
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3657
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3658
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3659
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3660
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3661
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3662
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3663
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3664
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3665
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3666
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3667
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3668
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3669
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3670
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3671
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3672
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3673
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3674
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3675
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3676
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3677
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3678
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
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
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3681
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3682
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3683
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3684
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3685
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3686
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3687
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3688
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3689
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3690
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3691
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3692
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3693
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3694
+  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
  3695
+    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
  3696
+  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
  3697
+    msg_type = msgtype_headline;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  3698
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3699
+  fjid = options.args[0].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3700
+  msg  = options.args[1].value.arg;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3701
+  file = options.opts[4].value.opt;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3702
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3703
+  // ideally, this should go to commandline parsing subsystem
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3704
   if (fjid[0] == '.') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3705
     const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3706
     if (fjid[1] == '\0') {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3707
-      fjid = g_strdup(cjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3708
+      fjid = (char *)cjid; // FIXME
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3709
     } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3710
       char *res_utf8 = to_utf8(fjid+2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3711
-      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
  3712
+      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
  3713
       g_free(res_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3714
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3715
-      fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3716
-  } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3717
-    fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3718
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3719
+    }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3720
+  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3721
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3722
+  // ditto
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3723
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3724
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3725
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3726
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3727
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3728
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3729
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3730
         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
  3731
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3732
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3733
         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
  3734
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3735
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3736
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3737
   }
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
+  // as well
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3740
   if (check_jid_syntax(fjid)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3741
     scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3742
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3743
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3744
-    g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3745
+    g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3746
     return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3747
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3748
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3749
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3750
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3751
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3752
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3753
+  if (file == NULL) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3754
+    if (options.opts[2].value.swc) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3755
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3756
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3757
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3758
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3759
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3760
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3761
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3762
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3763
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3764
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3765
   } else {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3766
     char *filename_xp;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3767
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3768
       scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3769
     filename_xp = expand_filename(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3770
-    msg = msg_utf8 = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3771
+    freeme2 = msg = load_message_from_file(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3772
     g_free(filename_xp);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3773
-    g_free(file);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3774
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3775
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3776
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3777
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3778
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3779
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3780
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3781
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3782
-  free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3783
+  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
  3784
+
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3785
+  cmdopts_free(&options);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3786
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3787
+  g_free(freeme2);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3788
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3789
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  3790
 //  buffer_updown(updown, nblines)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3791
@@ -1775,27 +2458,10 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3792
     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
  3793
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3794
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3795
-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
  3796
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3797
-  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
  3798
-    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
  3799
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3800
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3801
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3802
-  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
  3803
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3804
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3805
 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
  3806
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3807
   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
  3808
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3809
-  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
  3810
-    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
  3811
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3812
-  }
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
-  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
  3815
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3816
   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
  3817
   if (t)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3818
     scr_buffer_date(t);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3819
@@ -1804,98 +2470,156 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3820
                  "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
  3821
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3822
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3823
-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
  3824
+// 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
  3825
+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
  3826
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3827
-  // 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
  3828
-  // "%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
  3829
-  // "% 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
  3830
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3831
-  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
  3832
-    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
  3833
+  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
  3834
+    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
  3835
+    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
  3836
+    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
  3837
+    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
  3838
+    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
  3839
+    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
  3840
+    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
  3841
+    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
  3842
+    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
  3843
+  } subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3844
+  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
  3845
+    "buffer",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3846
+    NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3847
+    (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
  3848
+      { 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
  3849
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3850
+    (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
  3851
+      { "close",
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3852
+        (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
  3853
+          { 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
  3854
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3855
+        (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
  3856
+          { 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
  3857
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3858
+        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
  3859
+      { "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
  3860
+      { "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
  3861
+      { "purge", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3862
+        (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
  3863
+          { 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
  3864
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3865
+        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
  3866
+      { "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
  3867
+      { "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
  3868
+      { "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
  3869
+      { "up", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3870
+        (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3871
+          { 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
  3872
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3873
+        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
  3874
+      { "down", NULL,
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]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3876
+          { 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
  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_down, 0 },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3879
+      { "date", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3880
+        (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
  3881
+          // date
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3882
+          { 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
  3883
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3884
+        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
  3885
+      { "%", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3886
+        (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
  3887
+          { 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
  3888
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3889
+        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
  3890
+      { "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
  3891
+      { "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
  3892
+        (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
  3893
+          { 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
  3894
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3895
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3896
+        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
  3897
+      { "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
  3898
+        (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
  3899
+          { 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
  3900
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3901
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3902
+        NULL, (gpointer)buffer_scmd_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
  3903
+      { "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
  3904
+        (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
  3905
+      { "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
  3906
+        (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
  3907
+      { "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
  3908
+        (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
  3909
+      { "save", NULL,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3910
+        (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
  3911
+          { 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
  3912
+            { .arg = NULL } },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3913
+        },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3914
+        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
  3915
+    },
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3916
+  };
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3917
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3918
+  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
  3919
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3920
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3921
+  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
  3922
+    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3923
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3924
+  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
  3925
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3926
+  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
  3927
+    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
  3928
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3929
+  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
  3930
+      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
  3931
+    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
  3932
+    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
  3933
     return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3934
   }
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
-  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
  3937
-    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
  3938
-    return;
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3939
+  if (subcmd == buffer_scmd_close) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3940
+    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
  3941
+  } else if (subcmd == buffer_scmd_close_all) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3942
+    scr_buffer_purge_all(1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3943
+  } else if (subcmd == buffer_scmd_clear) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3944
+    scr_buffer_clear();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3945
+  } else if (subcmd == buffer_scmd_purge) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3946
+    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
  3947
+  } else if (subcmd == buffer_scmd_list) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3948
+    scr_buffer_list();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3949
+  } 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
  3950
+    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
  3951
+  } 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
  3952
+    scr_buffer_top_bottom(1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3953
+  } else if (subcmd == buffer_scmd_up) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3954
+    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
  3955
+  } else if (subcmd == buffer_scmd_down) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3956
+    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
  3957
+  } else if (subcmd == buffer_scmd_date) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3958
+    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
  3959
+  } else if (subcmd == buffer_scmd_percent) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3960
+    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
  3961
+  } else if (subcmd == buffer_scmd_readmark) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3962
+    scr_buffer_jump_readmark();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3963
+  } else if (subcmd == buffer_scmd_search_backward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3964
+    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
  3965
+  } else if (subcmd == buffer_scmd_search_forward) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3966
+    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
  3967
+  } 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
  3968
+    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
  3969
+  } 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
  3970
+    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
  3971
+  } 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
  3972
+    scr_buffer_scroll_lock(-1);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3973
+  } 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
  3974
+    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
  3975
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3976
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3977
-  scr_buffer_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
  3978
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3979
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3980
-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
  3981
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3982
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3983
-  char *subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3984
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3985
-  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
  3986
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3987
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3988
-  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
  3989
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3990
-  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
  3991
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3992
-  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
  3993
-    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
  3994
-    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
  3995
-    return;
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
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3998
-  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
  3999
-      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
  4000
-    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
  4001
-    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
  4002
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4003
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4004
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4005
-  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
  4006
-    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
  4007
-  } 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
  4008
-    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
  4009
-  } 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
  4010
-    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
  4011
-  } 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
  4012
-    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
  4013
-  } 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
  4014
-    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
  4015
-  } 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
  4016
-    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
  4017
-  } 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
  4018
-    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
  4019
-  } 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
  4020
-    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
  4021
-  } 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
  4022
-    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
  4023
-  } 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
  4024
-    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
  4025
-  } 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
  4026
-    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
  4027
-  } 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
  4028
-    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
  4029
-    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
  4030
-  } 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
  4031
-    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
  4032
-    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
  4033
-  } 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
  4034
-    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
  4035
-  } 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
  4036
-    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
  4037
-  } 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
  4038
-    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
  4039
-  } 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
  4040
-    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
  4041
-  } 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
  4042
-    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
  4043
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4044
-    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
  4045
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4046
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4047
-  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
  4048
+  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
  4049
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4050
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4051
 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
  4052
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4053
-  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
  4054
+  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
  4055
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4056
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4057
 static void do_info(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4058
@@ -2033,29 +2757,20 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4059
   }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4060
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4061
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4062
+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
  4063
+  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
  4064
+  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
  4065
+  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
  4066
+  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
  4067
+  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
  4068
+};
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
 // 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
  4071
-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
  4072
+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
  4073
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4074
   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
  4075
   char *buffer;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4076
   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
  4077
-  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
  4078
-         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
  4079
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4080
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4081
-    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
  4082
-      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
  4083
-    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
  4084
-      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
  4085
-    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
  4086
-      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
  4087
-    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
  4088
-      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
  4089
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4090
-      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
  4091
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4092
-    }
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
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4095
   // 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
  4096
   scr_set_chatmode(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4097
@@ -2075,12 +2790,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4098
     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
  4099
     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
  4100
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4101
-    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
  4102
+    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
  4103
       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
  4104
                (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
  4105
                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
  4106
       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
  4107
-    } 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
  4108
+    } 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
  4109
         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
  4110
         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
  4111
         bool showaffil = (affil != affil_none);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4112
@@ -2096,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
  4113
       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
  4114
                (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
  4115
       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
  4116
-      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
  4117
+      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
  4118
         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
  4119
         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
  4120
                                  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
  4121
       }
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 == style_detail) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4123
+      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
  4124
         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
  4125
         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
  4126
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4127
@@ -2145,16 +2860,69 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4128
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4129
 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
  4130
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4131
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4132
+    "rename",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4133
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4134
+      { 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
  4135
+      { 0,             'n', "name",  { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4136
+      { 0,             'g', "group", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4137
+      { CMDOPT_LAST,   'j', "jid",   { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4138
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4139
+    (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4140
+      { 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
  4141
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4142
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4143
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4144
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4145
   const char *bjid, *group;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4146
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4147
   char *newname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4148
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4149
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4150
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4151
+  gboolean reset;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4152
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4153
+  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
  4154
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4155
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4156
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4157
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4158
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4159
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4160
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4161
+  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
  4162
+  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
  4163
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4164
+  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
  4165
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4166
+    srchtype |= ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4167
+    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
  4168
+  } 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
  4169
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4170
+    srchtype = ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4171
+    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
  4172
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4173
+    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
  4174
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4175
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4176
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4177
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4178
+      return;
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
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4181
+    if (srchtype == ROSTER_TYPE_GROUP)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4182
+      bud = buddy_getgroup(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4183
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4184
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4185
+    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
  4186
+      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
  4187
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4188
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4189
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4190
+    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
  4191
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4192
+      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
  4193
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4194
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4195
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4196
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4197
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4198
+    
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4199
   bjid   = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4200
   group  = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4201
   type   = buddy_gettype(bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4202
@@ -2162,11 +2930,13 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4203
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4204
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4205
     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
  4206
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4207
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4208
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4209
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4210
-  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
  4211
+  if (!*newname && !reset) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4212
     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
  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
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4217
@@ -2181,90 +2951,117 @@
72
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
   //}
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4220
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4221
-  newname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4222
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4223
   for (p = newname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4224
   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
  4225
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4226
-  strip_arg_special_chars(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4227
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4228
-  name_utf8 = to_utf8(newname);
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 (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4231
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4232
-    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
  4233
+    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
  4234
     // 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
  4235
     // 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
  4236
     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
  4237
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4238
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4239
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4240
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4241
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4242
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4243
-      /* 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
  4244
-       * 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
  4245
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4246
-      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
  4247
+      // 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
  4248
+      // 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
  4249
+      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
  4250
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4251
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4252
       // 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
  4253
-      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
  4254
+      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
  4255
       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
  4256
           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
  4257
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4258
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4259
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4260
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4261
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4262
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4263
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4264
   update_roster = TRUE;
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
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4267
 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
  4268
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4269
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4270
+    "move",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4271
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4272
+      { 0,           'n', "name", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4273
+      { CMDOPT_LAST, 'j', "jid",  { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4274
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4275
+    (cmdarg_t[1]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4276
+      { 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
  4277
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4278
+    NULL,
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
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4281
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4282
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4283
   char *newgroupname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4284
-  char *group_utf8;
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
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4287
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4288
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4289
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4290
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4291
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4292
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4293
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4294
+  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
  4295
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4296
+  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
  4297
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4298
+    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
  4299
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4300
+    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
  4301
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4302
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4303
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4304
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4305
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4306
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4307
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4308
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4309
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4310
+    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
  4311
+      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
  4312
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4313
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4314
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4315
+    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
  4316
+                        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
  4317
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4318
+      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
  4319
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4320
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4321
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4322
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4323
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4324
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4325
   bjid = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4326
   name = buddy_getname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4327
   type = buddy_gettype(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4328
   on_srv = buddy_getonserverflag(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4329
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4330
   oldgroupname = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4331
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4332
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4333
     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
  4334
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4335
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4336
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4337
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4338
     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
  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
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4343
-  newgroupname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4344
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4345
   for (p = newgroupname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4346
   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
  4347
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4348
-  strip_arg_special_chars(newgroupname);
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
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4351
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4352
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4353
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4354
-      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
  4355
+      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
  4356
       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
  4357
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4358
-      /* 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
  4359
-       * 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
  4360
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4361
+      // 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
  4362
+      // 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
  4363
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4364
       // 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
  4365
       guint msgflag;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4366
@@ -2276,7 +3073,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4367
       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
  4368
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4369
         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
  4370
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4371
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4372
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4373
         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
  4374
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4375
@@ -2285,8 +3082,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4376
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4377
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4378
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4379
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4380
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4381
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4382
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4383
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  4384
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4385
@@ -2468,50 +3264,33 @@
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4386
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4387
 static void do_rawxml(char *arg)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4388
 {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4389
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4390
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4391
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4392
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4393
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4394
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4395
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4396
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4397
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4398
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4399
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4400
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4401
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4402
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4403
+        NULL },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4404
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4405
+  };
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
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4408
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4409
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4410
   }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4411
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4412
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4413
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4414
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4415
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4416
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4417
-    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
  4418
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4419
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4420
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4421
     return;
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
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4424
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4425
-    gchar *buffer;
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 (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4428
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4429
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4430
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4431
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4432
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4433
-    // 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
  4434
-    // 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
  4435
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4436
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4437
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4438
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4439
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4440
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4441
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4442
-      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
  4443
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4444
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4445
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
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
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4448
-  free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4449
+
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4450
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4451
+  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
  4452
+  cmdopts_free(&options);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4453
 }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4454
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  4455
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4456
@@ -2874,7 +3653,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4457
   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
  4458
   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
  4459
   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
  4460
-  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
  4461
+  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
  4462
   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
  4463
   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
  4464
   free_arg_lst(paramlst);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4465
@@ -3290,6 +4069,207 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4466
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4467
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4468
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4469
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4470
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4471
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4472
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4473
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4474
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4475
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4476
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4477
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4478
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4479
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4480
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4481
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4482
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4483
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4484
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4485
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4486
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4487
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
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
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4490
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4491
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4492
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4493
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4494
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4495
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4496
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4497
+          { CMDOPT_LAST, { .arg = NULL } }, // password
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4498
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4499
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4500
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4501
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4502
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4503
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4504
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4505
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4506
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4507
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4508
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4509
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4510
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4511
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4512
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4513
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4514
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4515
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4516
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4517
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4518
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4519
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4520
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4521
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4522
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4523
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4524
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4525
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4526
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4527
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4528
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4529
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4530
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4531
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4532
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4533
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4534
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4535
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4536
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4537
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4538
+      { "destroy", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4539
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4540
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4541
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4542
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4543
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4544
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4545
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4546
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4547
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4548
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4549
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4550
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4551
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4552
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4553
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4554
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4555
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4556
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4557
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4558
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4559
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4560
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4561
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4562
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4563
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4564
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4565
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4566
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4567
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4568
+      { "kick", 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
+          // jid
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
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4575
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4576
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4577
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4578
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4579
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4580
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4581
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4582
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4583
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4584
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4585
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4586
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4587
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4588
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4589
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4590
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4591
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4592
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4593
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4594
+      // 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
  4595
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4596
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4597
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4598
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4599
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4600
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4601
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4602
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4603
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4604
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4605
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4606
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4607
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4608
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4609
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4610
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4611
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4612
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4613
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4614
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4615
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4616
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4617
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4618
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4619
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4620
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4621
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4622
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4623
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4624
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4625
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4626
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4627
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4628
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4629
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4630
+      { "bookmark", 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[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4635
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4636
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4637
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4638
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4639
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4640
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4641
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4642
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4643
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4644
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4645
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4646
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4647
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4648
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4649
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4650
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4651
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4652
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4653
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4654
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4655
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4656
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4657
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4658
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4659
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4660
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4661
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4662
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4663
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4664
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4665
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4666
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4667
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4668
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4669
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4670
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4671
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4672
   gpointer bud;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4673
@@ -3347,7 +4327,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4674
       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
  4675
   } 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
  4676
     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
  4677
-      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
  4678
+      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
  4679
   } 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
  4680
     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
  4681
       room_nick(bud, arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4682
@@ -4162,5 +5142,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4683
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4684
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4685
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4686
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4687
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4688
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4689
diff -r 92fa48ef53c9 mcabber/mcabber/commands.h
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4690
--- a/mcabber/mcabber/commands.h	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4691
+++ b/mcabber/mcabber/commands.h	Mon Mar 11 01:32:27 2013 +0200
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4692
@@ -5,32 +5,214 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4693
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4694
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4695
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4696
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4697
-typedef struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4698
-  char name[32];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4699
-  const char *help;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4700
-  guint completion_flags[2];
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4701
-  void (*func)(char *);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4702
-  gpointer userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4703
-} cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4704
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4705
+//  TODO:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4706
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4707
+// * Clustering of options/switches
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4708
+// * Multivalue options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4709
+//   - list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4710
+//     - special checker
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4711
+//     - or run checker multiple times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4712
+//   - or run command several times
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4713
+//     - what if there are several of such arguments?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4714
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4715
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4716
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4717
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4718
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4719
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4720
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4721
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4722
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4723
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4724
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4725
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4726
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4727
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4728
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4729
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4730
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4731
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4732
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4733
+//     - percent (numerical, restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4734
+//   - number (result - int)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4735
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4736
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4737
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4738
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4739
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4740
+//   - current_buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4741
+// * Subcommands with fallback to argument?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4742
+// * [+foo|-foo] support?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4743
+// * Usable subsystem for completion, based on user-supplied completors
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4744
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4745
-void cmd_init(void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4746
-cmd *cmd_get(const char *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4747
-int  process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4748
-int  process_command(const char *line, guint iscmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4749
-char *expandalias(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4750
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4751
-gpointer cmd_del(gpointer id);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4752
-gpointer cmd_add(const char *name, const char *help, guint flags1, guint flags2,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4753
-                 void (*f)(char*), gpointer userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4754
-gboolean cmd_set_safe(const gchar *name, gboolean safe);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4755
+// * for now we'll do without multi-options.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4756
+// * and without clustering.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4757
+// * checks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4758
+//   - argument type == public struct with name and callbacks, simple!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4759
+//   - command checks should be just single callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4760
+// * now, what checker needs?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4761
+//   - [in] value string (current or default)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4762
+//   - [in] additional input data for some generic checkers (like string2enum wordlist)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4763
+//   - [out] replacement value (not necessary string)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4764
+//     - replacement value may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4765
+//   - [out] error string
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4766
+//     - that may need freeing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4767
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4768
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4769
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4770
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4771
+typedef struct cmdarg_value_struct cmdarg_value_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4772
+typedef struct cmdarg_type_struct  cmdarg_type_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4773
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4774
+// note, this is called before options are parsed!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4775
+typedef gchar *(*cmd_checker_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4776
+// command function itself
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4777
+typedef gchar *(*cmd_handler_t)(cmdopts_t *opts);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4778
+// should check arg -> val -> val.arg and replace, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4779
+typedef gchar *(*cmdarg_checker_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4780
+// free resources, used in arg -> val -> val.arg, if needed
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4781
+typedef void (*cmdarg_destructor_t)(cmdarg_t *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4782
+// todo
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4783
+typedef void (*cmdarg_completor_t)(void); // FIXME
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4784
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4785
+typedef union {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4786
+  guint       uint;        // unsigned integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4787
+  gint        sint;        // signed integer
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4788
+  guint       swc;         // switch count
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4789
+  const gchar *roarg;      // default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4790
+  gchar       *arg;        // string argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4791
+  cmdopts_t   *cmd;        // subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4792
+  gpointer    bud;         // buddy data (roster entry)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4793
+  gpointer    ptr;         // anything else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4794
+} cmdarg_value_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4795
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4796
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4797
+  cmd_default     = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4798
+  cmd_safe        = 1<<0,  // command is safe to use in mcabberrc
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4799
+} cmd_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4800
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4801
+  cmdopt_default  = 0,     // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4802
+  cmdopt_switch   = 1<<0,  // option have no argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4803
+} cmdopt_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4804
+typedef enum {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4805
+  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
  4806
+  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
  4807
+  cmdarg_plain    = 0x0002, // u2p, quotes and escapes are not processed
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4808
+  cmdarg_subcmd   = 0x0004, // u2p, argument is subcommand
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4809
+  cmdarg_check    = 0x0008, // u2p, force checker call on argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4810
+  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
  4811
+  cmdarg_visited  = 0x0020, // p2p, marks initialized arguments
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4812
+  cmdarg_checked  = 0x0040, // p2p, marks checked argument
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4813
+  cmdarg_freeme   = 0x0080, // c2p, marks argument, that needs freeing
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4814
+  // convenience shortcuts
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4815
+  cmdarg_eol      = 0x0003, // catchall + plain
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4816
+  cmdarg_chreq    = 0x0018, // check + required
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4817
+} cmdarg_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4818
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4819
+struct cmdopts_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4820
+  const char    *name;     // [user,req] command name (error messages, help, subcommands)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4821
+  cmd_flags_t   flags;     // [user,req] safe
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4822
+  cmd_checker_t check;     // [user,req] checker routine
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4823
+  cmd_handler_t handle;    // [user,req] main command processing function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4824
+  cmdopt_t      **opts;    // [user,req] options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4825
+  cmdarg_t      **args;    // [user,req] arguments
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4826
+  cmdopts_t     **cmds;    // [user,req] subcommands
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4827
+  gpointer      userdata;  // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4828
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4829
+struct cmdopt_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4830
+  cmdopt_flags_t flags;    // [user,req] switch
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4831
+  char           shortopt; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4832
+  const char     *longopt; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4833
+  cmdarg_t       arg;      // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4834
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4835
+struct cmdarg_struct {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4836
+  const char     *name;    // [user,req] argument name - errors, help
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4837
+  cmdarg_flags_t flags;    // [user,req] catchall, plain, required, subcommand
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4838
+  const char     *defval;  // [user,req] default value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4839
+  cmdarg_type_t  *type;    // [user,req] type cbs - checker and completor
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4840
+  gpointer       chkdata;  // [user] instance data for type checker - eg string2enum list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4841
+  gpointer       userdata; // [user]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4842
+  cmdarg_value_t value;    // [parser,chk] current value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4843
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4844
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4845
+struct cmdarg_type_struct {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4846
+  cmdarg_checker_t    check;    // [user,req] check string and set argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4847
+  cmdarg_destructor_t free;     // [user,req] free argument value
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4848
+  cmdarg_completor_t  complete; // [user,req]
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4849
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4850
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4851
+void cmd_define (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4852
+void cmd_undef (cmdopts_t *command);
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
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4855
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4856
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4857
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4858
+// updated.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4859
+const char *cmdopts_parse_argument(gchar **pr, gchar *er, cmdarg_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4860
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4861
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4862
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4863
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4864
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4865
+} cmdexe_flags_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4866
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4867
+  cmd_result_ok   = 0,       // all is ok
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4868
+  cmd_result_syntax_error,   // syntax, environment or argument check error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4869
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4870
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4871
+  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
  4872
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4873
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4874
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4875
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4876
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4877
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4878
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4879
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4880
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4881
+// 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
  4882
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4883
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4884
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4885
+// 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
  4886
+// and it is sent to the currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4887
+// 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
  4888
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4889
+cmd_result_t process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4890
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4891
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4892
+//  Private
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4895
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4896
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4897
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4898
+#if 0
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4899
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4900
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4901
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4902
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4903
+// Even in case of error, commanddef should be passed to cmdopts_free().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4904
+gchar *cmdopts_parse_internal(gchar **pr, gchar **er, cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4905
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4906
+//  cmdopts_free ( commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4907
+// Free various parser data, used in parsing process
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4908
+void cmdopts_free(cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4909
 #endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4910
-gboolean cmd_is_safe(const gchar *name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4911
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4912
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4913
+  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
  4914
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4915
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4916
+} msgtype_t;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4917
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4918
 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
  4919
 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
  4920
-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
  4921
-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
  4922
+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
  4923
+                   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
  4924
+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
  4925
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4926
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4927
 
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4928
diff -r 92fa48ef53c9 mcabber/mcabber/roster.c
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4929
--- a/mcabber/mcabber/roster.c	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4930
+++ b/mcabber/mcabber/roster.c	Mon Mar 11 01:32:27 2013 +0200
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4931
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4932
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4933
 // 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
  4934
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4935
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4936
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4937
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4938
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4939
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4940
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4941
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4942
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4943
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4944
     char *found = NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4945
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4946
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4947
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4948
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4949
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4950
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4951
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4952
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4953
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4954
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4955
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4956
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4957
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4958
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4959
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4960
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4961
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4962
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4963
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4964
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4965
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4966
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4967
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  4968
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4969
diff -r 92fa48ef53c9 mcabber/mcabber/screen.c
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4970
--- a/mcabber/mcabber/screen.c	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4971
+++ b/mcabber/mcabber/screen.c	Mon Mar 11 01:32:27 2013 +0200
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4972
@@ -3626,7 +3626,7 @@
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4973
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4974
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4975
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4976
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4977
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4978
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4979
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4980
   scr_cmdhisto_addline(inputLine);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4981
diff -r 92fa48ef53c9 mcabber/mcabber/xmpp_iq.c
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4982
--- a/mcabber/mcabber/xmpp_iq.c	Sun Jan 27 00:40:37 2013 +0200
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4983
+++ b/mcabber/mcabber/xmpp_iq.c	Mon Mar 11 01:32:27 2013 +0200
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4984
@@ -289,10 +289,7 @@
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4985
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4986
         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
  4987
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4988
-          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
  4989
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4990
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4991
-          g_free(status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4992
+          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
  4993
           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
  4994
           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
  4995
                                               "Status has been changed");