cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Sun, 24 Mar 2013 00:59:26 +0200
changeset 84 6ff846816073
parent 82 06d4a9185902
child 85 93c3cc0d7891
permissions -rw-r--r--
[cmdopts] A bit of progress
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
# HG changeset patch
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
     2
# Parent 1b0b563a81e6425da07c1da7ea4f947c4f3326cb
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     3
[work-in-progress] Unified command option parsing
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
     4
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
     5
  * complete change of commands.h interface
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
     6
    - uses different symbols to make compatibility layer possible
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
     7
  * completion system is broken now
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
     8
  * usable commands:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
     9
    - roster
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    10
    - color
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    11
    - status/status_to
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    12
    - add/del
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    13
    - group
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
    14
    - say/msay/say_to
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
    15
    - buffer
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
    16
    - clear
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
    17
    - info
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    18
  * it does compile, but have not tested at all
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    19
  * privatized say_cmd()
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    20
  * dropped cmd_setstatus()
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    21
  * process_line() still expects line to be in local encoding,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    22
    while cmd_execute() expects utf8 and rw
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    23
  * process_line() can return error values, different from 255
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
    24
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
    25
  ** PREVIOUS ACHIEVEMENTS **
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    27
  * function interface changes:
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    28
    * buddy_search() now expects argument in utf8
68
c2334fb31211 [cmdopts] Convert /status and /status_to
Myhailo Danylenko <isbear@ukrpost.net>
parents: 67
diff changeset
    29
    * cmd_setstatus() now expects separate status and message arguments
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    30
    * say_cmd()'s second argument is now of new type msgtype_t
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    31
    * scr_multi* now store multiline in utf8
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    32
  * /del:
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    33
    * 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
    34
    * -n(--dryrun) switch for debugging purposes
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    35
  * /rename:
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    36
    * -r(--reset) instead of '-'
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    37
    * -j(--jid), -g(--group), -n(--name)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    38
  * /move:
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
    39
    * -j(--jid), -n(--name)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    40
  * misc:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
    41
    * fix help for /buffer date
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
    42
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    43
diff -r 1b0b563a81e6 mcabber/doc/HOWTO_commands.mdwn
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
    45
+++ b/mcabber/doc/HOWTO_commands.mdwn	Sun Mar 24 00:58:15 2013 +0200
82
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
    46
@@ -0,0 +1,977 @@
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    47
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    48
+**New commands interface for MCabber**
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    49
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    50
+[[!toc levels=2]]
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    51
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    52
+# Overview
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    53
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    54
+New command interface was designed with next goals in mind:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    55
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    56
+ * Share as much argument checking code as possible.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    57
+ * Remove cumbersome parsing code from commands.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    58
+ * Encourage adding options and switches to commands.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    59
+ * Use the same rules, when handling arguments everywhere.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    60
+ * Integrate and improve completion system.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    61
+ * Add common generic stuff, like '--help'.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    62
+ * Try to still be lightweight.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    63
+ * Try to still be readable.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    64
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    65
+It is built around static structure, "command description".  User can add or
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    66
+remove these structures to list of commands.  *FIXME* more
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    67
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    68
+## Command description struct, 'cmdopts_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    69
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    70
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    71
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    72
+typedef struct cmdopts_struct cmdopts_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    73
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    74
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    75
+    cmd_default = 0x0000,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    76
+    cmd_safe    = 0x0001,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    77
+} cmd_flags_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    78
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    79
+struct cmdopts_struct {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    80
+    const char          *name;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    81
+    const cmd_flags_t   flags;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    82
+    const cmd_checker_t check;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    83
+    const cmd_handler_t handle;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    84
+    const cmdopt_t      *opts;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    85
+    const cmdarg_t      *args;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    86
+    const cmdopts_t     *cmds;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    87
+    const gpointer      userdata;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    88
+    size_t              valno;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    89
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    90
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    91
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    92
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    93
+This struct describes command as a whole and links to argument descriptions.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    94
+This struct is also used to describe individual subcommands, as they are quite
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    95
+similar to normal command, because they can have their own options, arguments
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
    96
+and subcommands.  The fields of this struct:
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    97
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    98
+ * 'name' - name of the command or subcommand.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
    99
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   100
+ * 'flags' - currently there's only one flag:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   101
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   102
+    + 'cmd_safe' -  command is safe to execute in main mcabberrc during
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   103
+      initialization.  Have no meaning for subcommands.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   104
+    + 'cmd_default' - default value of no flags enabled.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   105
+ 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   106
+ * 'check' - execution environment checker for command.  This callback is used
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   107
+   to do general checks before even parsing command line.  You can write your
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   108
+   own checker or use standard ones, for example - 'cmd_check_online', that
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   109
+   checks, if you are currently online.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   110
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   111
+ * 'handle' - command function.  It is executed only if command line was
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   112
+   successfully parsed and argument values passed the type checking.  Unused in
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   113
+   subcommands.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   114
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   115
+ * 'opts' - pointer to the array of 'cmdopt_t' structs, describing command-line
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   116
+   options ("-f bar") and switches ("-x"), that this command accepts.  Array
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   117
+   must end with option, that have 0 as short option character.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   118
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   119
+ * 'args' - similarly, pointer to the array of 'cmdarg_t' structs, that describe
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   120
+   command-line positional arguments (in order).  Array must end with argument,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   121
+   that have NULL name.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   122
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   123
+ * 'cmds' - pointer to the array of subcommands of this command (or subcommand).
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   124
+   How parser switches to subcommands we will describe later.  Array must end
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   125
+   with subcommand, that have NULL name.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   126
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   127
+ * 'userdata' - arbitrary pointer, where you can put some data, that should
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   128
+   accompany this command or subcommand.  Unused by parser.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   129
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   130
+ * 'valno' - this is internal value, that is initialized at command definition
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   131
+   time, you should not modify it.  Currently unused in subcommands.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   132
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   133
+## Command function, 'cmd_handler_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   134
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   135
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   136
+
82
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   137
+typedef gchar *(*cmd_handler_t) (const cmdopts_t *command,
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   138
+                                 cmdarg_value_t  *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   139
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   140
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   141
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   142
+Command function is passed it's command definition struct (mainly to give it
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   143
+access to userdata) and dynamically allocated array of parsed argument values.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   144
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   145
+It should return NULL in case all went smoothly, or dynamically allocated error
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   146
+string, that will be g_free()'d after displaying.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   147
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   148
+So, as you can see, command definition should give parser info on what can
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   149
+appear in command line and how to map all these options and arguments to array
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   150
+of values.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   151
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   152
+## Option description struct, 'cmdopt_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   153
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   154
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   155
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   156
+typedef struct {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   157
+    const char stortopt;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   158
+    const char *longopt;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   159
+    cmdarg_t   arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   160
+} cmdopt_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   161
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   162
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   163
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   164
+This struct just adds short option character and long option name to generic
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   165
+argument struct, that we'll look at right now.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   166
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   167
+## Argument description struct, 'cmdarg_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   168
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   169
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   170
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   171
+typedef struct cmdarg_struct cmdarg_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   172
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   173
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   174
+    cmdarg_default  = 0x0000,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   175
+    cmdarg_catchall = 0x0001,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   176
+    cmdarg_plain    = 0x0002,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   177
+    cmdarg_check    = 0x0004,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   178
+    cmdarg_required = 0x0008,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   179
+    cmdarg_subcmd   = 0x0010,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   180
+    cmdarg_switch   = 0x0020,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   181
+    cmdarg_eol      = 0x0003, // catchall + plain
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   182
+    cmdarg_chreq    = 0x000C, // check + required
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   183
+    cmdarg_special  = 0x0030, // subcmd + switch
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   184
+    cmdarg_trigger  = 0x0024, // switch + check
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   185
+} cmdarg_flags_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   186
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   187
+struct cmdarg_struct {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   188
+    const char           *name;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   189
+    const guint          pos;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   190
+    const cmdarg_flags_t flags;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   191
+    const char           *defval;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   192
+    const cmdarg_type    *type;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   193
+    gconstpointer        chkdata;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   194
+    gconstpointer        userdata;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   195
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   196
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   197
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   198
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   199
+This struct stores information about mapping between command-line entity
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   200
+(switch, option, argument, subcommand) and element in 'values' array.  First,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   201
+let's briefly describe fields, and then walk through their use in different
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   202
+entities.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   203
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   204
+Fields:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   205
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   206
+ * 'name' - argument name, mainly used for help (not implemented yet) and error
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   207
+   messages.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   208
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   209
+ * 'pos' - this is the index in 'values' array, where argument value should be
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   210
+   stored.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   211
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   212
+ * 'flags' - various tweaks to parsing process:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   213
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   214
+    + 'catchall' - argument value will catch everything, remaining on command
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   215
+      line, even if unescaped spaces will appear in it.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   216
+    + 'plain' - do not treat backslashes ('\') and quotes ('"') as escaping
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   217
+      characters.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   218
+    + 'check' - call argument value checker (defined in 'type' field), even if
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   219
+      argument was not assigned the value during the parsing process.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   220
+    + 'required' - if mentioned checker will return error, with this flag set,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   221
+      this error will be considered fatal, and command function will not be
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   222
+      called.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   223
+    + 'subcmd' - this argument is subcommand.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   224
+    + 'switch' - this argument is part of option definition, and this option
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   225
+      have no argument (but it still needs to store switch state somewhere).
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   226
+    + 'eol' - shortcut for "rest of command line without modification".
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   227
+    + 'chreq' - shortcut for "argument must have a valid value".
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   228
+    + 'special' - this is special type of argument - subcommand or switch.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   229
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   230
+ * 'defval' - default value for argument in "unchecked" form - i.e., in the form
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   231
+   of string, as it appears on command line (we'll discuss type checkers and
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   232
+   what can they do to value later).  Before parsing command line, parser will
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   233
+   assign this value to corresponding value structure.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   234
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   235
+ * 'type' - pointer to structure, describing argument type.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   236
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   237
+ * 'chkdata' - if type needs some additional info, it is a place to supply it.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   238
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   239
+ * 'userdata' - place for arbitrary info, that should accompany this argument or
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   240
+   option.  Unused by parser.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   241
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   242
+Now, let's discuss general case - option with argument or positional argument.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   243
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   244
+When parser encounters such argument, it checks 'catchall' and 'plain' flags and
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   245
+crops argument value from command line accordingly, then it assigns it to the
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   246
+'value.arg' field of 'cmdarg_value_t' struct in array 'values' with index, given
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   247
+in 'pos'.  Also it marks such value as 'visited' and puts a link to argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   248
+description into value's 'src' field.  More about effect of these actions later,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   249
+in 'cmdarg_value_t' section.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   250
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   251
+However, if argument struct is a part of option description struct, and have
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   252
+flag 'switch' set, parser will not try to parse value.  Instead it will increase
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   253
+the count in 'value.swc' in corresponding 'cmdarg_value_t' struct.  Argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   254
+name for switches is essentially ignored, but for safety sake it is recommended
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   255
+to duplicate switch long option name here.  Flags 'catchall' and 'plain'
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   256
+obviously have no effect.  Flag 'check' makes switch a trigger, that flips
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   257
+between 'on' and 'off' for every occurence of flag on command line.  Flags
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   258
+'required' and 'subcmd' also have no effect for obvious reasons.  Default value
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   259
+is ignored for switches, they always start with count 0 (off).  Since switch is
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   260
+internal type, argument type field is ignored as well.  Flags and source fields
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   261
+of value are updated as usual.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   262
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   263
+If flag 'subcmd' is set for positional argument, parser crops argument value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   264
+according to flags as usual, but instead of assigning it, walks through list of
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   265
+subcommands in command description struct and compares obtained value to
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   266
+subcommand names.  If it finds corresponding subcommand, it assigns pointer to
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   267
+subcommand description struct to 'value.cmd' field of corresponding
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   268
+'cmdarg_value_t' struct and updates it's source and flags.  Then, instead of
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   269
+proceeding with parsing process, it recursively calls parser on remaining part
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   270
+of command line, passing subparser subcommand description.  Note, that if
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   271
+subcommand parser will end parsing before hitting end of command line, parser
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   272
+will proceed with parsing arguments for main command.  Default value and
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   273
+argument type fields are ignored for subcommands.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   274
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   275
+Now let's take a look at value structure, that you'll be dealing with the most
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   276
+in the actual code.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   277
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   278
+## Argument value structure, 'cmdarg_value_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   279
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   280
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   281
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   282
+typedef struct cmdarg_value_struct cmdarg_value_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   283
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   284
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   285
+    cmdval_default = 0x0000,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   286
+    cmdval_visited = 0x0100,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   287
+    cmdval_freeme  = 0x0200,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   288
+} cmdval_flags_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   289
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   290
+struct cmdarg_value_struct {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   291
+    const cmdarg_t *src;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   292
+    cmdval_flags_t flags;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   293
+    union {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   294
+        guint           uint;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   295
+        gint            sint;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   296
+        guint           swc;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   297
+        const gchar     *roarg;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   298
+        gchar           *arg;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   299
+        const cmdopts_t *cmd;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   300
+        struct {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   301
+            gpointer    bud;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   302
+            gchar       *resource;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   303
+        } rjid;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   304
+        gpointer        ptr;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   305
+    } value;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   306
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   307
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   308
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   309
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   310
+Command may happen to be called recursively - i.e., something in command may
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   311
+cause the event, that will cause another call to the same command, thus we
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   312
+cannot store actual values in command/argument definition struct, and have to
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   313
+allocate dynamic memory for them.  This struct is designed exactly for this.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   314
+Let's take a look at it's fields:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   315
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   316
+ * 'src' - this points to the argument description, from which this struct is
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   317
+   holding value right now (note, that value can be initialized several times
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   318
+   during parsing process from different arguments).
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   319
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   320
+ * 'flags' - to hold parser and typechecker marks:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   321
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   322
+    + 'visited' - parser uses this to track values, initialized from command
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   323
+      line as opposed to values, holding default value.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   324
+    + 'freeme' - used by argument type checker to tell parser, that it needs to
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   325
+      call value destructor callback on value.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   326
+ 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   327
+ * 'value' - union, that contains various possible forms of value:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   328
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   329
+    + 'uint'  - generic unsigned integer.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   330
+    + 'sint'  - generic signed integer.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   331
+    + 'swc'   - switch occurence count.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   332
+    + 'roarg' - XXX read-only string - default value or like.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   333
+    + 'arg'   - generic string value (read-write).
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   334
+    + 'cmd'   - pointer to subcommand description struct.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   335
+    + 'rjid'  - roster jid value - pair of roster buddy and resource string.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   336
+    + 'ptr'   - used for anything, that does not fits into these types.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   337
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   338
+To better understand, how these fields are used, let's walk through parsing
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   339
+process.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   340
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   341
+## Parsing
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   342
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   343
+Parser starts by allocating memory for values array, and then initializing it by
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   344
+walking through command description, looking at options and arguments and
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   345
+assigning default values to corresponding entries in array.  It also puts
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   346
+pointer to the argument description into value's 'src' field.  Thus, all used in
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   347
+command description values will have this field initialized, even if they were
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   348
+not specified on command line.  This comes handly later, when checking for
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   349
+reqired value presence.  For switches parser just sets the counter to zero.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   350
+Note, that parser does not descend into subcommands at this stage.  It does the
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   351
+same procedure for subcommand, but later, when it already knows which subcommand
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   352
+is selected.  Also note, that if several arguments have the same value index,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   353
+parser will use latest encountered one to initialize the value.  This is used
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   354
+for default value in "argument clustering", that I'll show you later.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   355
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   356
+Then parser calls command environment checker callback (if present), and if it
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   357
+returns error - terminates the process right now.  Note, that subcommands can
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   358
+also have checkers.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   359
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   360
+Next parser does its job of parsing command line.  Each time it extracts
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   361
+argument value, it into 'value.arg' field of corresponding value entry and
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   362
+pointer to argument description struct into 'src' field.  Also it sets 'visited'
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   363
+flag on value.  At this stage value is still just unchecked string, except for
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   364
+special argument types.  For switch occurence count in 'value.swc' gets
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   365
+increased each time argument was specified.  Note however, that if several
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   366
+switches use the same value index ("clustered switches"), counter gets reset,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   367
+when switches change one another in sequence - i.e. "-e -s -s -s" will count as
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   368
+three "-s", but "-s -s -e -s" will count as only one "-s".  For subcommands
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   369
+parser checks for corresponding subcommand in 'cmds' list, assigns it to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   370
+'value.cmd' and recursively passes the end of command line to be parsed with
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   371
+subcommand description.  Note, that for subcommands parser does "checking on the
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   372
+spot" - if parsed argument value does not match any subcommand, and argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   373
+have 'required' flag set, it raises error immediately (if flag is not set, it
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   374
+merely assigns NULL and proceeds parsing according to current command
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   375
+description).
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   376
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   377
+Then parser walks through array of values and performs value checking.  Note,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   378
+that all values, that need checking at this point should have 'src' field
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   379
+initialized - either set at default value assignment step, or during parsing,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   380
+so, parser knows properties of value's argument.  Parser only pays attention to
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   381
+the values, that either have 'visited' flag set (i.e. provided by user) or that
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   382
+have 'check' flag in argument description (useful for mandatory arguments or
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   383
+default values, that need convesion).  If value corresponds to a switch, and
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   384
+argument have 'check' flag set, switch occurence count is replaced by remainder
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   385
+of division it by 2 (this way switch behaves like trigger).  If it is a
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   386
+subcommand, and it have 'required' flag set, parser checks, if it have non-NULL
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   387
+value.  If it is usual argument (option or positional), and it does have 'type',
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   388
+that have 'check' callback set, parser calls this checker, passing it value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   389
+structure (again, value structure contains pointer to argument description, so,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   390
+checker can access 'chkdata' field, supplied by user).  If checker returns error
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   391
+string and argument have 'required' flag set, parser raises error.  If flag is
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   392
+not set, parser just prints warning and proceeds with checking.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   393
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   394
+If checking was successful, parser calls command function, providing it with
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   395
+command description and values array.  This function can also return error, but
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   396
+at this stage it does not change process, only causes error message to be
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   397
+printed.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   398
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   399
+And finally parser frees allocated resources - walks through values array,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   400
+calling argument type 'free' callback on values, that have 'freeme' flag set and
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   401
+then frees the array itself.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   402
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   403
+## Argument type, 'cmdarg_type_t'
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   404
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   405
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   406
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   407
+typedef struct cmdarg_type_struct cmdarg_type_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   408
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   409
+typedef gchar *(*cmdarg_checker_t) (cmdarg_value_t *value);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   410
+typedef void (*cmdarg_destructor_t) (cmdarg_value_t *value);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   411
+// FIXME: this one is still not designed
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   412
+typedef void (*cmdarg_completor_t) (void);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   413
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   414
+struct cmdarg_type_struct {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   415
+    cmdarg_checker_t    check;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   416
+    cmdarg_destructor_t free;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   417
+    cmdarg_completor_t  complete;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   418
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   419
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   420
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   421
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   422
+As you can see, argument type is nothing more than a set of callbacks:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   423
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   424
+ * 'check' - check parsed argument value for conformance to type rules, possibly
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   425
+   replace with something different, like corresponding integer value or roster
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   426
+   buddy pointer.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   427
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   428
+ * 'free' - if type checker may need to free some data afterwards, this callback
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   429
+   should be set to corresponding function, and each time checker really needs
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   430
+   value to be freed, it should set flag 'freeme' on value.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   431
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   432
+ * 'complete' - *FIXME* not yet designed callback, that will return list of
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   433
+   possible completions according to given prefix.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   434
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   435
+After parsing command line parser performs argument value checking, that's where
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   436
+it calls 'check' callbacks.   Checker is given pointer to value structure, that
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   437
+it needs to check.  Checker can modify value string (except when it is default
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   438
+value, but you have to supply your default values so, that they do not need
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   439
+modifying) or completely replace it with another string or even non-string
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   440
+object.  If checker uses some resources (eg.  allocates memory for replacement
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   441
+value), it can set the flag 'freeme' on value to request call to value
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   442
+destructor, when values array will be freed.  If checker needs some additional
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   443
+data (eg. it is some generic checker, that needs list of valid values or other
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   444
+parameters), these data can be supplied in 'chkdata' field.  Checker function
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   445
+should return NULL on success or error string, that will be g_free()'d by
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   446
+parser.  Take note, that if argument does not have 'reqired' flag set, parser
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   447
+will ignore checker error, so, it is recommended to nullify invalid value before
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   448
+returning error (but it is not required).
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   449
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   450
+# Examples
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   451
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   452
+When writing description for a command, first thing, you have to do - is to
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   453
+determine, which values your command can get from user.  You don't have to be
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   454
+shy - new interface is designed to encourage commands to be as flexible and
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   455
+option-rich as possible.  
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   456
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   457
+Second - consider, which ones are to be specified as positional arguments, and
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   458
+which should become options or switches.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   459
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   460
+Next you will want to decide, which checks and restrictions should you put on
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   461
+values.  Essentially, determine value type.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   462
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   463
+And then you can begin writing command definition.  So, let's start with
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   464
+something simple.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   465
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   466
+## Single-argument no-checks command
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   467
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   468
+Let's look at command like /say, that have only one argument, that should be
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   469
+passed as is, and with no restrictions:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   470
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   471
+    /ex1 message...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   472
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   473
+Definition for such command will look like:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   474
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   475
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   476
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   477
+// command function predeclaration
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   478
+gchar *do_ex1 (const cmdopts_t *command, cmdarg_value_t *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   479
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   480
+// command arguments definition
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   481
+cmdopts_t def_ex1 = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   482
+    "ex1",              // command name
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   483
+    cmd_default,        // flags
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   484
+    NULL,               // checker
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   485
+    do_ex1,             // command function
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   486
+    NULL,               // list of options - none
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   487
+    (cmdarg_t[2]){      // list of arguments
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   488
+        {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   489
+            "message",  // argument name
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   490
+            0,          // value index
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   491
+            // flags:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   492
+            // - plain:    do not interpret quotes and escapes
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   493
+            // - catchall: do not end argument on unescaped spaces
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   494
+            cmdarg_plain | cmdarg_catchall,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   495
+            NULL,       // default value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   496
+            NULL,       // argument type
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   497
+        },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   498
+        {NULL}          // this is an argument list end marker
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   499
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   500
+    NULL,               // list of subcommands - none
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   501
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   502
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   503
+// Command function gets shown above command description (we don't need it) and
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   504
+// argument value list.  Returns error message or NULL.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   505
+gchar *do_ex1 (const cmdopts_t *command, cmdarg_value_t *values)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   506
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   507
+    gchar *message = values[0].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   508
+    // now do something with message:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   509
+    // - check, if message was given at all
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   510
+    if (!message || !*message)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   511
+        // return error, it will be printed, prepended by command name
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   512
+        return g_strdup("You need to specify a message!");
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   513
+    // - use the value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   514
+    scr_log_print (LPRINT_NORMAL, "Got the message: \"%s\".", message);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   515
+    // no error occured
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   516
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   517
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   518
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   519
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   520
+// register our command
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   521
+cmd_define (&def_ex1);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   522
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   523
+// remove command
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   524
+cmd_undef (&def_ex1);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   525
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   526
+
82
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   527
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   528
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   529
+A lot of things to do to achieve a simple goal - does not look quite appealing
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   530
+so far.  Still, let's tweak our example a bit.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   531
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   532
+Remember the third step - decide, which checks should apply to our argument.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   533
+Now, look at our command - we check, if message is NULL or if message is empty.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   534
+But imagine, that user has given us a message " " - it's of no big use to us,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   535
+so, probably, we should also strip leading/trailing spaces before doing the
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   536
+check.  That's where argument types come into play.  We can write argument
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   537
+checker for that! But luckily, we already have built-in standard checker, that
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   538
+does exactly what we need - checks if string contains non-space characters.  All
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   539
+we need to do - to specify '&cmdarg_type_nonspace' as argument type and remove
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   540
+our check inside of the command:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   541
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   542
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   543
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   544
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   545
+cmdopts_t def_ex1 = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   546
+    "ex1",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   547
+    cmd_default,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   548
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   549
+    do_ex1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   550
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   551
+    (cmdarg_t[2]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   552
+        {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   553
+            "message",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   554
+            0,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   555
+            // flags:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   556
+            // - plain: do not interpret quotes and escapes
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   557
+            // - catchall: do not end argument on unescaped spaces
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   558
+            // - check: always invoke checker, even if user omitted the argument
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   559
+            // - required: terminate processing, if checker returns error
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   560
+            // a lot of flags, but we can use shortcuts:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   561
+            // - eol = plain + catchall: get everything to the end of line as is
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   562
+            // - chreq = check + required: argument needs to have a valid value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   563
+            cmdarg_eol | cmdarg_chreq,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   564
+            NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   565
+            // strip spaces, check if result have non-zero length
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   566
+            &cmdarg_type_nonspace,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   567
+        },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   568
+        {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   569
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   570
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   571
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   572
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   573
+gchar *do_ex1 (const cmdopts_t *command, cmdarg_value_t *values)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   574
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   575
+    scr_log_print (LPRINT_NORMAL, "Got the message: \"%s\".",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   576
+                   values[0].value.arg);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   577
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   578
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   579
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   580
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   581
+// --------------------------------------------------------------     """     ]]
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   582
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   583
+Ok, that's a little bit better.  Now let's move on to something more complex.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   584
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   585
+## Switches
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   586
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   587
+Let's add switches '-s' and '-l', that will define, where to print the message
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   588
+to - to log or to screen.  For that we will need another two value indices - one
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   589
+for each switch.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   590
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   591
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   592
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   593
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   594
+cmdopts_t def_ex1 = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   595
+    "ex1",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   596
+    cmd_default,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   597
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   598
+    do_ex1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   599
+    (cmdopt_t[3]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   600
+        {                    // first switch: [-s|--screen]
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   601
+            's',             // short option name
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   602
+            "screen",        // long option name
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   603
+            {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   604
+              "screen",      // argument name - unused
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   605
+              1,             // value position
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   606
+              // flags:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   607
+              // - switch: this is switch
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   608
+              cmdarg_switch,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   609
+              NULL,          // default value - unused
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   610
+              NULL,          // type - unused
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   611
+            }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   612
+        },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   613
+                             // second switch: [-l|--log]
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   614
+        { 'l', "log", { "log", 2, cmdarg_switch, NULL, NULL } },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   615
+        {0}                  // end of list marker
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   616
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   617
+    (cmdarg_t[2]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   618
+        { "message", 0, cmdarg_eol | cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   619
+                                                   &cmdarg_type_nonspace },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   620
+        {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   621
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   622
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   623
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   624
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   625
+gchar *do_ex1 (const cmdopts_t *command, cmdarg_value_t *values)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   626
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   627
+    // default value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   628
+    guint whereto = LPRINT_NORMAL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   629
+    // -s is default, so, check, that it is not set before checking for -l
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   630
+    if (!values[1].value.swc)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   631
+        if (values[2].value.swc)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   632
+            whereto = LPRINT_LOG;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   633
+    scr_log_print (whereto, "Got the message: \"%s\".", values[0].value.arg);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   634
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   635
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   636
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   637
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   638
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   639
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   640
+Ok, that works, but what if user have aliases, and wants last specified option
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   641
+to override the value? Currently, if -s was once specified, -l will not have any
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   642
+effect, regardless of count or position in command line.  Not that good.  Let's
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   643
+use the trick, that I call "argument clustering".  We'll specify the same value
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   644
+index for both switches.  Since 'value' struct have the pointer to the argument,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   645
+it was initialized from last time, we can recognize, which switch was used last.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   646
+By default this pointer points to the last argument with this index in command
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   647
+definition - we can use that to specify default value.  Now, to identify
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   648
+switches we can use argument names, but 'argument' struct contains userdata
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   649
+field, where we can put our LPRINT_* constants and just use it directly.  So,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   650
+with clustered switches, we will have:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   651
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   652
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   653
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   654
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   655
+cmdopts_t def_ex1 = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   656
+    "ex1",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   657
+    cmd_default,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   658
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   659
+    do_ex1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   660
+    (cmdopt_t[3]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   661
+        // Set both argument indices to 1, specify our constants in userdata
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   662
+        // field.  Screen is default value, thus, it goes last.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   663
+        { 'l', "log",    { "log",    1, cmdarg_switch, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   664
+                             (gpointer)LPRINT_LOG    } },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   665
+        { 's', "screen", { "screen", 1, cmdarg_switch, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   666
+                             (gpointer)LPRINT_NORMAL } },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   667
+        {0}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   668
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   669
+    (cmdarg_t[2]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   670
+        { "message", 0, cmdarg_eol | cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   671
+                                                   &cmdarg_type_nonspace },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   672
+        {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   673
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   674
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   675
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   676
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   677
+gchar *do_ex1 (const cmdopts_t *command, cmdarg_value_t *values)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   678
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   679
+    scr_log_print ((guint)values[1].src -> userdata,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   680
+                   "Got the message: \"%s\".", values[0].value.arg);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   681
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   682
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   683
+...
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   684
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   685
+// --------------------------------------------------------------     """     ]]
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   686
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   687
+That's much better.  This trick may be quite useful not only with switches, but
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   688
+also with options, sometimes even clustering options with arguments can be
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   689
+handy.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   690
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   691
+## Options
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   692
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   693
+Options are not much different from normal arguments, except there you'll see
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   694
+'check' and 'required' mostly only in combination with default value - otherwise
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   695
+it defeats the purpose - to be optional.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   696
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   697
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   698
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   699
+// TODO:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   700
+//   example (not really used as of now - were too complex to deal using old
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   701
+//   interface).
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   702
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   703
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   704
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   705
+## Subcommands
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   706
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   707
+Now, let's discuss another internal argument type - subcommand.  Since
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   708
+subcommands are quite common in mcabber, and since they have quite big impact on
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   709
+parsing process, they were made a part of parser.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   710
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   711
+Currently, only positional arguments can be subcommands.  You can have options or
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   712
+other arguments precede them, though in practice there's no examples of that so
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   713
+far.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   714
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   715
+So, to indicate, that argument is a subcommand, you just add flag 'subcmd'.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   716
+When parser will encounter such argument, it will look up command structure with
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   717
+specified name in the list 'cmds' of command definition and proceed parsing,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   718
+using that command definition instead of main one.  A good example of command
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   719
+with several completely different subcommands would be '/color', so, let's look:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   720
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   721
+[[!format c """// --------------------------------------------------------------
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   722
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   723
+static gchar *do_color (const cmdopts_t *command, cmdarg_value_t *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   724
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   725
+// We will put these values in subcommand definition 'userdata' fields
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   726
+// to simplify the task of determining, which subcommand was actually selected.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   727
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   728
+    scmd_color_roster,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   729
+    scmd_color_mucnick,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   730
+    scmd_color_muc,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   731
+} scmd_color_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   732
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   733
+// We define value inedxes as enum to make value access expressions
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   734
+// self-explanatory.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   735
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   736
+    pos_color_scmd          = 0,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   737
+    pos_color_roster_status = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   738
+    pos_color_roster_jid    = 2,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   739
+    pos_color_roster_color  = 3,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   740
+    pos_color_muc_room      = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   741
+    pos_color_muc_mode      = 2,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   742
+    pos_color_nick_nick     = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   743
+    pos_color_nick_color    = 2,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   744
+} pos_color_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   745
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   746
+// This is a helper struct for cmdarg_type_string2enum checker.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   747
+// The checker will compare value to strings and replace value.arg
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   748
+// with corresponding value.uint.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   749
+static const string2enum_t s2e_color_muc[] = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   750
+    { "on",     MC_ALL    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   751
+    { "off",    MC_OFF    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   752
+    { "preset", MC_PRESET },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   753
+    { "-",      MC_REMOVE },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   754
+    { NULL,     0         },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   755
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   756
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   757
+static cmdopts_t def_color = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   758
+    "color",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   759
+    // This command is allowed in main config file during initialization, thus
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   760
+    // it have the 'safe' flag.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   761
+    cmd_safe,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   762
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   763
+    do_color,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   764
+    // no options
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   765
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   766
+    // only one argument - subcommand
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   767
+    (cmdarg_t[2]){{ "subcommand", pos_color_scmd, cmdarg_subcmd | cmdarg_chreq,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   768
+                                                           NULL, NULL },{NULL}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   769
+    // three subcommands
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   770
+    (cmdopts_t[4]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   771
+        // First subcommand - 'roster' with three arguments.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   772
+        {"roster", cmd_default, NULL, NULL, NULL, (cmdarg_t[4]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   773
+              { "statusmask|clear", pos_color_roster_status, cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   774
+                           &cmdarg_type_color_statusmask, (gpointer)"ofdna_?" },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   775
+              { "jidmask",          pos_color_roster_jid,    cmdarg_check, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   776
+                           &cmdarg_type_bjidmask },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   777
+              { "color|-",          pos_color_roster_color,  cmdarg_check, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   778
+                           &cmdarg_type_color    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   779
+              {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   780
+            },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   781
+            // Subcommand can have its own subcommands, but in this case we
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   782
+            // don't have them.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   783
+            NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   784
+            // We use userdata to determine, which subcommand was selected.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   785
+            (gpointer)scmd_color_roster},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   786
+        // Second subcommand - 'muc' with two arguments.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   787
+        {"muc", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   788
+              { "roomjid",         pos_color_muc_room, cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   789
+                           &cmdarg_type_color_roomjid },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   790
+              { "on|off|preset|-", pos_color_muc_mode, cmdarg_chreq, "on",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   791
+                           &cmdarg_type_string2enum, (gpointer)s2e_color_muc },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   792
+              {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   793
+            }, NULL, (gpointer)scmd_color_muc},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   794
+        // Third subcommand - 'mucnick' also with two arguments.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   795
+        {"mucnick", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   796
+              { "nick",    pos_color_nick_nick,  cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   797
+                           &cmdarg_type_nick  },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   798
+              { "color|-", pos_color_nick_color, cmdarg_chreq, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   799
+                           &cmdarg_type_color },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   800
+              {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   801
+            }, NULL, (gpointer)scmd_color_mucnick},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   802
+        {NULL}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   803
+    },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   804
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   805
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   806
+static gchar *do_color (const cmdopts_t *options, cmdarg_value_t *values)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   807
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   808
+    scmd_color_t subcmd =
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   809
+                  (scmd_color_t) (values[pos_color_scmd].value.cmd -> userdata);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   810
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   811
+    if (subcmd == scmd_color_roster) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   812
+        const gchar *status   = values[pos_color_roster_status].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   813
+        const gchar *wildcard = values[pos_color_roster_jid].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   814
+        const gchar *color    = values[pos_color_roster_color].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   815
+        if (!strcmp(status, "clear")) { // Not a color command, clear all
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   816
+            scr_roster_clear_color();
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   817
+            update_roster = TRUE;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   818
+        } else {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   819
+            // Unfortunately, due to "clear" case not taking any arguments,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   820
+            // we cannot check for argument presence using 'required' flag.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   821
+            if ((!wildcard) || (!color)) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   822
+              return g_strdup ("Missing argument.");
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   823
+            } else {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   824
+              update_roster = scr_roster_color(status, wildcard, color) ||
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   825
+                              update_roster;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   826
+            }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   827
+        }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   828
+    } else if (subcmd == scmd_color_muc) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   829
+        scr_muc_color ( values[pos_color_muc_room].value.arg,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   830
+                        values[pos_color_muc_mode].value.uint );
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   831
+    } else { // scmd_color_mucnick
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   832
+        scr_muc_nick_color( values[pos_color_nick_nick].value.arg,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   833
+                            values[pos_color_nick_color].value.arg );
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   834
+    }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   835
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   836
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   837
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   838
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   839
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   840
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   841
+Here you also see a lot of new types:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   842
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   843
+ * 'color_statusmask' - specific to "/color" command wrapper over generic type
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   844
+   'charset'.  This type allows only word "clear" or string, composed of
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   845
+   specified in 'chkdata' field characters, in this case tese are, of course,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   846
+   "ofdna_?".
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   847
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   848
+ * 'bjidmask' - this type only provides completion, otherwise it is the same as
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   849
+   'nonspace'.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   850
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   851
+ * 'color' - checks value to be a valid name of mcabber color.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   852
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   853
+ * 'color_roomjid' - specific to "/color" command wrapper over type 'bjid'.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   854
+   Type allows the string "*" or a valid bare jid.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   855
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   856
+ * 'string2enum' - generic type, that converts string into unsigned integer
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   857
+   value according to given in 'chkdata' dictionary of name-value pairs.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   858
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   859
+ * 'nick' - as 'bjidmask' - only provides completion.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   860
+
82
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   861
+Note, that although here I used value indexes 1 and 2 several times for
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   862
+different arguments, it is not "clustering", as they are used in different
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   863
+subcommands.
06d4a9185902 [cmdopts] Fix documentation errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 81
diff changeset
   864
+
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   865
+## Argument types
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   866
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   867
+Let's take a look at simple checker, that we've encountered first - 'nonspace':
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   868
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   869
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   870
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   871
+// Checker gets parsed value string in 'value.arg', argument description in
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   872
+// 'src' and returns error string or NULL.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   873
+gchar *cmdarg_check_nonspace (cmdarg_value_t *arg)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   874
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   875
+    // current value
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   876
+    gchar *val = arg -> value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   877
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   878
+    // was value given at all?
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   879
+    if (val) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   880
+        // skip leading spaces
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   881
+        while (isspace (*val))
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   882
+            val ++;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   883
+        if (*val) { // valid arg - string contains non-space symbols
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   884
+            // reassing value in case of stripped leading space
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   885
+            arg -> value.arg = val;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   886
+            // strip trailing space
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   887
+            while (*val)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   888
+                val ++;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   889
+            while (isspace (*val))
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   890
+                val --;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   891
+            val ++;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   892
+            // Note: this needs write access, so, default value cannot contain
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   893
+            // trailing spaces!
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   894
+            if (*val)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   895
+                *val = '\0';
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   896
+            // no error, argument is valid
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   897
+            return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   898
+        }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   899
+    }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   900
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   901
+    // Returned error may be ignored by parser, if 'required' flag is not set on
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   902
+    // argument, so, we nullify argument to ensure, that invalid value will not
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   903
+    // be passed to command.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   904
+    arg -> value.arg = NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   905
+    return g_strdup ("Non-space value required.");
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   906
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   907
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   908
+// type definition
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   909
+const cmdarg_type_t cmdarg_type_nonspace = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   910
+    // our checker
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   911
+    cmdarg_check_nonspace,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   912
+    // freeing callabck - no need for that
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   913
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   914
+    // completion callabck - none, we can't know, what string may contain
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   915
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   916
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   917
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   918
+// --------------------------------------------------------------     """     ]]
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   919
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   920
+Quite simple, I hope.  Now, let's look at more complex type - 'fjid':
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   921
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   922
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   923
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   924
+// This checker checks syntax of fjid and expands "current-buddy" expressions
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   925
+// "." and "./resource".
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   926
+gchar *cmdarg_check_fjid (cmdarg_value_t *arg)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   927
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   928
+    gchar *error = NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   929
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   930
+    // We're using nonspace checker to check our value - empty string is not a
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   931
+    // valid jid.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   932
+    if (!(error = cmdarg_check_nonspace(arg))) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   933
+        // Now, we're sure, that we have non-space string
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   934
+        const char *fjid = arg -> value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   935
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   936
+        // We check for "current-buddy" expression.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   937
+        if (fjid[0] == '.' &&
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   938
+                       (fjid[1] == JID_RESOURCE_SEPARATOR || fjid[1] == '\0')) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   939
+            const char *jid;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   940
+            if (!current_buddy) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   941
+              error = g_strdup_printf ("No buddy selected.");
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   942
+            } else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   943
+              error = g_strdup_printf ("Current buddy have no jid.");
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   944
+            } else if (fjid[1] == '\0') {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   945
+              arg -> value.roarg = jid;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   946
+            } else {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   947
+              // We allocate value - we will need to free it, so, we as well set
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   948
+              // 'freeme' flag.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   949
+              arg -> value.arg = g_strdup_printf ("%s%c%s",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   950
+                                         jid, JID_RESOURCE_SEPARATOR, fjid + 2);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   951
+              arg -> flags    |= cmdval_freeme;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   952
+            }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   953
+        // this is jid - check, that it is valid
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   954
+        } else if (check_jid_syntax(fjid)) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   955
+            error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   956
+        }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   957
+    }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   958
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   959
+    // As before, nullify value in case of error
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   960
+    if (error)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   961
+        arg -> value.arg = NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   962
+    return error;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   963
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   964
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   965
+// Free callback will be called only if freeme flag is set, so, we can
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   966
+// just g_free() value without any checks.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   967
+void cmdarg_free_gfree (cmdarg_value_t *arg)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   968
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   969
+    g_free (arg -> value.arg);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   970
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   971
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   972
+const cmdarg_type_t cmdarg_type_fjid = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   973
+    // checker
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   974
+    cmdarg_check_fjid,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   975
+    // freer
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   976
+    cmdarg_free_gfree,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   977
+    // completor, while possible, is not implemented, as whole completion system is
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   978
+    // not yet designed.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   979
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   980
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   981
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   982
+// --------------------------------------------------------------     """     ]]
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   983
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   984
+If possible, you are encouraged to re-use existing checkers - for example, bjid
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   985
+checker uses fjid checker to expand "current-buddy" expressions and check
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   986
+syntax, and only strips resource afterwards:
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   987
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
   988
+[[!format c """// --------------------------------------------------------------
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   989
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   990
+gchar *cmdarg_check_bjid (cmdarg_value_t *arg)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   991
+{
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   992
+    gchar *error = NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   993
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   994
+    if (!(error = cmdarg_check_fjid(arg))) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   995
+        gchar *res = strchr (arg -> value.arg, JID_RESOURCE_SEPARATOR);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   996
+        if (res != NULL)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   997
+            *res = '\0';
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   998
+    }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
   999
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1000
+    // Error can only happen inside fjid callback, that will nullify argument
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1001
+    // for us.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1002
+    return error;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1003
+}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1004
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1005
+const cmdarg_type_t cmdarg_type_bjid = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1006
+    cmdarg_check_bjid,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1007
+    // may need to free value - we're using fjid checker internally
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1008
+    cmdarg_free_gfree,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1009
+    NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1010
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1011
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1012
+// --------------------------------------------------------------     """     ]]
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1013
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1014
+So far we've only modified string in value.  But checkers are not limited to
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1015
+this, for example, uint checker performs atoi() on value and assigns resulting
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1016
+number to value.uint.  Take a look at definition of cmdarg_value_t struct -
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1017
+value is actually a union of different types of value.  If you need something
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1018
+different from existing - you can always allocate your own struct and use
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1019
+value.ptr.  However, if you think, that your case is generic enough - contact
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1020
+mcabber developers, we'll consider adding more variants there.  Maybe we'll even
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1021
+add your argument type to built-in types.
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1022
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1023
+<!-- vim: se ts=4 sw=4 et filetype=markdown tw=80: -->
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1024
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1025
--- a/mcabber/doc/help/cs/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1026
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1027
@@ -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
  1028
  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
  1029
 /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
  1030
  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
  1031
-/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
  1032
+/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
  1033
  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
  1034
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1035
  Přesune se na procentuální pozici n%.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1036
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1037
--- a/mcabber/doc/help/cs/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1038
+++ b/mcabber/doc/help/cs/hlp_del.txt	Sun Mar 24 00:58:15 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
  1039
@@ -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
  1040
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1041
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1042
+ /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
  1043
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1044
 Smaže aktuální kontakt ze seznamu kontaktů (rosteru) a zruší povolení oznamování o stavu daného kontaktu (autorizaci) na obou stranách.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1045
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1046
--- a/mcabber/doc/help/cs/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1047
+++ b/mcabber/doc/help/cs/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1048
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1049
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1050
- /MOVE [skupina]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1051
+ /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
  1052
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1053
 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
  1054
+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
  1055
 Tip: V módu rozhovoru lze použít "/roster alternate" pro skok na přesunutý kontakt.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1056
diff -r 1b0b563a81e6 mcabber/doc/help/cs/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1057
--- a/mcabber/doc/help/cs/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1058
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1059
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1060
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1061
- /RENAME jméno
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1062
+ /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
  1063
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1064
-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
  1065
+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
  1066
+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
  1067
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1068
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1069
--- a/mcabber/doc/help/de/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1070
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1071
@@ -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
  1072
  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
  1073
 /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
  1074
  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
  1075
-/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
  1076
+/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
  1077
  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
  1078
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1079
  Springe zur Position "n" im Chatpuffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1080
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1081
--- a/mcabber/doc/help/de/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1082
+++ b/mcabber/doc/help/de/hlp_del.txt	Sun Mar 24 00:58:15 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
  1083
@@ -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
  1084
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1085
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1086
+ /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
  1087
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1088
 Löscht den gerade ausgewählten Buddy vom Roster. Außerdem werden die automatischen Presence Benachrichtigungen vom/zum Buddy gestoppt.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1089
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1090
--- a/mcabber/doc/help/de/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1091
+++ b/mcabber/doc/help/de/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1092
@@ -1,6 +1,7 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1093
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1094
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1095
+ /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
  1096
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1097
 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
  1098
+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
  1099
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1100
 Tipp: Wenn der Chatmodus aktiviert ist, kannst du "/roster alternate" benutzen um zu dem gerade bewegten Buddy zu springen.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1101
diff -r 1b0b563a81e6 mcabber/doc/help/de/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1102
--- a/mcabber/doc/help/de/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1103
+++ b/mcabber/doc/help/de/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1104
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1105
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1106
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1107
+ /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
  1108
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1109
-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
  1110
+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
  1111
+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
  1112
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1113
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1114
--- a/mcabber/doc/help/en/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1115
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1116
@@ -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
  1117
  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
  1118
 /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
  1119
  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
  1120
-/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
  1121
+/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
  1122
  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
  1123
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1124
  Jump to position %n of the buddy chat buffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1125
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1126
--- a/mcabber/doc/help/en/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1127
+++ b/mcabber/doc/help/en/hlp_del.txt	Sun Mar 24 00:58:15 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
  1128
@@ -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
  1129
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1130
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1131
+ /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
  1132
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1133
-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
  1134
+Delete the current buddy or one, specified with [jid] from our roster, unsubscribe from its presence notification and unsubscribe it from ours.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1135
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1136
--- a/mcabber/doc/help/en/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1137
+++ b/mcabber/doc/help/en/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1138
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1139
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1140
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1141
+ /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
  1142
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1143
 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
  1144
+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
  1145
 Tip: if the chatmode is enabled, you can use "/roster alternate" to jump to the moved buddy.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1146
diff -r 1b0b563a81e6 mcabber/doc/help/en/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1147
--- a/mcabber/doc/help/en/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1148
+++ b/mcabber/doc/help/en/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1149
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1150
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1151
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1152
+ /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
  1153
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1154
-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
  1155
+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
  1156
+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
  1157
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1158
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1159
--- a/mcabber/doc/help/fr/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1160
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1161
@@ -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
  1162
  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
  1163
 /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
  1164
  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
  1165
-/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
  1166
+/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
  1167
  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
  1168
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1169
  Va à la position n% du tampon
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1170
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1171
--- a/mcabber/doc/help/fr/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1172
+++ b/mcabber/doc/help/fr/hlp_del.txt	Sun Mar 24 00:58:15 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
  1173
@@ -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
  1174
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1175
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1176
+ /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
  1177
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1178
 Supprime le contact sélectionné du roster, supprime notre abonnement à ses notifications de présence et supprime son abonnement aux nôtres.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1179
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1180
--- a/mcabber/doc/help/fr/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1181
+++ b/mcabber/doc/help/fr/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1182
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1183
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1184
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1185
+ /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
  1186
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1187
 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
  1188
+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
  1189
 Astuce : si le mode discussion (chatmode) est activé, vous pouvez utiliser "/roster alternate" pour vous positionner sur le contact que vous venez de déplacer.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1190
diff -r 1b0b563a81e6 mcabber/doc/help/fr/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1191
--- a/mcabber/doc/help/fr/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1192
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1193
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1194
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1195
- /RENAME nom
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1196
+ /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
  1197
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1198
-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
  1199
+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
  1200
+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
  1201
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1202
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1203
--- a/mcabber/doc/help/it/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1204
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1205
@@ -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
  1206
  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
  1207
 /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
  1208
  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
  1209
-/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
  1210
+/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
  1211
  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
  1212
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1213
  Salta alla posizione %n del buffer di chat corrente
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1214
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1215
--- a/mcabber/doc/help/it/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1216
+++ b/mcabber/doc/help/it/hlp_del.txt	Sun Mar 24 00:58:15 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
  1217
@@ -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
  1218
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1219
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1220
+ /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
  1221
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1222
 Elimina il contatto corrente dal roster, cancellando la sottoscrizione alle reciproche notifiche della propria presenza.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1223
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1224
--- a/mcabber/doc/help/it/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1225
+++ b/mcabber/doc/help/it/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1226
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1227
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1228
- /MOVE [gruppo]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1229
+ /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
  1230
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1231
 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
  1232
+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
  1233
 Trucco: se la modalità chat è abilitata, puoi usare "/roster alternate" per spostarti sul contatto appena mosso.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1234
diff -r 1b0b563a81e6 mcabber/doc/help/it/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1235
--- a/mcabber/doc/help/it/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1236
+++ b/mcabber/doc/help/it/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1237
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1238
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1239
- /RENAME nome
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1240
+ /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
  1241
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1242
-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
  1243
+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
  1244
+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
  1245
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1246
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1247
--- a/mcabber/doc/help/nl/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1248
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1249
@@ -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
  1250
  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
  1251
 /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
  1252
  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
  1253
-/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
  1254
+/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
  1255
  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
  1256
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1257
  Spring naar positie %n in de buddy chat buffer
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1258
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1259
--- a/mcabber/doc/help/nl/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1260
+++ b/mcabber/doc/help/nl/hlp_del.txt	Sun Mar 24 00:58:15 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
  1261
@@ -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
  1262
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1263
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1264
+ /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
  1265
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1266
 Verwijder de actieve buddy uit ons roster, en zet het wederzijds toezenden van status veranderingen stop.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1267
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1268
--- a/mcabber/doc/help/nl/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1269
+++ b/mcabber/doc/help/nl/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1270
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1271
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1272
- /MOVE [groepsnaam]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1273
+ /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
  1274
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1275
 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
  1276
+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
  1277
 Tip: indien chatmode actief is, kun je "/roster alternate" gebruiken om direct naar de verplaatste buddy te springen.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1278
diff -r 1b0b563a81e6 mcabber/doc/help/nl/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1279
--- a/mcabber/doc/help/nl/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1280
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1281
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1282
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1283
- /RENAME naam
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1284
+ /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
  1285
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1286
-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
  1287
+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
  1288
+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
  1289
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1290
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1291
--- a/mcabber/doc/help/pl/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1292
+++ b/mcabber/doc/help/pl/hlp_del.txt	Sun Mar 24 00:58:15 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
  1293
@@ -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
  1294
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1295
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1296
+ /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
  1297
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1298
 Usuwa aktualnie zaznaczoną osobę z rostera, usuwa subskrypcję powiadomienia dostępności u danej osoby oraz u nas.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1299
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1300
--- a/mcabber/doc/help/pl/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1301
+++ b/mcabber/doc/help/pl/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1302
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1303
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1304
- /MOVE [nazwa grupy]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1305
+ /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
  1306
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1307
 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
  1308
+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
  1309
 Podpowiedź: jeśli jest włączony tryb czatu, możesz użyć "/roster alternate" aby skoczyć do przeniesionej osoby.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1310
diff -r 1b0b563a81e6 mcabber/doc/help/pl/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1311
--- a/mcabber/doc/help/pl/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1312
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1313
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1314
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1315
- /RENAME nazwa
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1316
+ /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
  1317
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1318
-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
  1319
+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
  1320
+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
  1321
+Optionally you can use one of --jid, --group or --name to select object, different from current.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1322
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1323
--- a/mcabber/doc/help/ru/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1324
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1325
@@ -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
  1326
  Перемещает на [n] строк вверх в буфере (истории переписки) (по умолчанию: половина экрана)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1327
 /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
  1328
  Перемещает на [n] строк вниз в буфере (истории переписки) (по умолчанию: половина экрана)
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1329
-/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
  1330
+/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
  1331
  Перемещает в первой строке после определенной даты [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
  1332
 /buffer % n
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1333
  Перемещает на позицию %n в текущем буфере (истории переписки)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1334
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1335
--- a/mcabber/doc/help/ru/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1336
+++ b/mcabber/doc/help/ru/hlp_del.txt	Sun Mar 24 00:58:15 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
  1337
@@ -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
  1338
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1339
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1340
+ /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
  1341
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1342
-Удаляет текущего пользователя из списка контактов, отключает уведомления о его статусе и отключает уведомления пользователя о вашем статусе.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1343
+Удаляет текущего пользователя (или указанного с помощью jid) из списка контактов, отключает уведомления о его статусе и отключает уведомление пользователя о вашем статусе.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1344
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1345
--- a/mcabber/doc/help/ru/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1346
+++ b/mcabber/doc/help/ru/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1347
@@ -1,6 +1,7 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1348
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1349
- /MOVE [groupname]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1350
+ /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
  1351
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1352
 Перемещает пользователя в определенную группу. Если группа не указана, пользователь перещается в группу по умолчанию (default group). Если группа "groupname" не создана, она автоматически создается.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1353
+С помощью параметров --jid и --name можно перемещать контакты, отличные от текущего.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1354
 Полезно: Если включен режим чата (chatmode), Вы можете использовать "/roster alternate" для перехода к перемещенному пользователю.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1355
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1356
diff -r 1b0b563a81e6 mcabber/doc/help/ru/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1357
--- a/mcabber/doc/help/ru/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1358
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1359
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1360
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1361
- /RENAME name
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1362
+ /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
  1363
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1364
- Переименовывает текущего пользователя или группу в заданное имя "name". Если заданное имя имеет значение "-", то заданное ранее имя текущего пользователя или группы удаляется из списка контактов (mcabber будет отображать JID или имя пользователя по умолчанию).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1365
+Переименовывает текущего пользователя или группу в заданное имя "newname".
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1366
+Если указан параметр --reset, "newname" игнорируется, а имя сбрасывается (mcabber будет отображать JID или имя пользователя по умолчанию).
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1367
+Для указания обьекта, отличного от текущего, можно использовать опции --jid, --group и --name.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1368
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_buffer.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1369
--- a/mcabber/doc/help/uk/hlp_buffer.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1370
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Sun Mar 24 00:58:15 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
  1371
@@ -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
  1372
  Посунути буфер вверх на n рядків (якщо не вказано - пів екрану).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1373
 /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
  1374
  Посунути буфер вниз на n рядків (якщо не вказано - пів екрану).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1375
-/buffer date [дата]
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1376
+/buffer date дата
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1377
  Перейти до першого повідомлення після дати (дата вигляду РРРР-ММ-ДД).
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1378
 /buffer % процент
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1379
  Перейти до вказаної у процентах позиції.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1380
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_del.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1381
--- a/mcabber/doc/help/uk/hlp_del.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1382
+++ b/mcabber/doc/help/uk/hlp_del.txt	Sun Mar 24 00:58:15 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
  1383
@@ -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
  1384
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1385
- /DEL
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1386
+ /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
  1387
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1388
-Потерти поточний контакт зі списку. На додачу відписатися від його повідомлень про статус і відписати його від ваших.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  1389
+Потерти поточний контакт (або контакт, що має вказаний jid) зі списку. Також відписатися від його сповіщень про статус і відписати його від ваших.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1390
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_move.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1391
--- a/mcabber/doc/help/uk/hlp_move.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1392
+++ b/mcabber/doc/help/uk/hlp_move.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1393
@@ -1,5 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1394
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1395
- /MOVE [група]
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1396
+ /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
  1397
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1398
-Переносить поточний контакт до вказаної групи. Якщо групу не вказати контакт опиниться у головній групі. Якщо група не існує, її буде створено.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1399
+Переносить поточний контакт до вказаної групи. Якщо групу не вказати контакт опиниться у головній групі. Якщо групи не існує, її буде створено.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1400
+За допомогою опцій --jid та --name можна перемістити контакт, відмінний від поточного.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1401
 Примітка: в режимі розмови можна використати "/roster alternate", щоб перейти до нового місця контакту контакту.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1402
diff -r 1b0b563a81e6 mcabber/doc/help/uk/hlp_rename.txt
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1403
--- a/mcabber/doc/help/uk/hlp_rename.txt	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1404
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Sun Mar 24 00:58:15 2013 +0200
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1405
@@ -1,4 +1,6 @@
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1406
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1407
- /RENAME ім'я
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1408
+ /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
  1409
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1410
 Змінює прізвисько поточного контакту або назву групи.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1411
+За допомогою параметра --reset можна повернути контакту типову назву. При цьому нове ім’я (якщо вказане) ігнорується.
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  1412
+Опції --jid, --group та --name дозволяють перейменовувати об’єкти, відмінні від поточного.
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1413
diff -r 1b0b563a81e6 mcabber/mcabber/commands.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1414
--- a/mcabber/mcabber/commands.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1415
+++ b/mcabber/mcabber/commands.c	Sun Mar 24 00:58:15 2013 +0200
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1416
@@ -19,7 +19,7 @@
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1417
  * USA
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1418
  */
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
-#include <string.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1421
+#include <string.h> // g_memmove
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1422
 #include <stdlib.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1423
 #include <sys/types.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1424
 #include <sys/stat.h>
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1425
@@ -43,512 +43,681 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1426
 #include "xmpp.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1427
 #include "main.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1428
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1429
-#define IMSTATUS_AWAY           "away"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1430
-#define IMSTATUS_ONLINE         "online"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1431
-#define IMSTATUS_OFFLINE        "offline"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1432
-#define IMSTATUS_FREE4CHAT      "free"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1433
-#define IMSTATUS_AVAILABLE      "avail"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1434
-#define IMSTATUS_NOTAVAILABLE   "notavail"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1435
-#define IMSTATUS_DONOTDISTURB   "dnd"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1436
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1437
-# define IMSTATUS_INVISIBLE      "invisible"
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
+//  Pre-declarations
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1440
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1441
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1442
+// for process_line()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1443
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1444
+  scmd_group_unfold = 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1445
+  scmd_group_fold   = 1,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1446
+  scmd_group_toggle = -1,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1447
+} scmd_group_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1448
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1449
+  msgtype_not_set,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1450
+  msgtype_normal,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1451
+  msgtype_headline,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1452
+} msgtype_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1453
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1454
+static void group_cmd (gpointer group, scmd_group_t action);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1455
+static void say_cmd (char *arg, msgtype_t msgtype);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1456
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1457
+//static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1458
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1459
+#define BUILTIN_COUNT 10
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1460
+static cmdopts_t def_roster,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1461
+                 def_color,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1462
+                 def_status,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1463
+                 def_status_to,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1464
+                 def_add,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1465
+                 def_del,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1466
+                 def_group,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1467
+                 def_say,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1468
+                 def_msay,
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1469
+                 def_say_to,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1470
+                 def_buffer,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1471
+                 def_clear,
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1472
+                 def_info;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1473
+#if 0
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1474
+                 def_rename,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1475
+                 def_move,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1476
+                 def_set,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1477
+                 def_alias,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1478
+                 def_bind,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1479
+                 def_connect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1480
+                 def_disconnect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1481
+                 def_rawxml,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1482
+                 def_room,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1483
+                 def_authorization,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1484
+                 def_version,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1485
+                 def_request,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1486
+                 def_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1487
+                 def_help,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1488
+                 def_pgp,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1489
+                 def_iline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1490
+                 def_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1491
+                 def_chat_disable,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1492
+                 def_source,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1493
+                 def_otr,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1494
+                 def_otrpolicy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1495
+                 def_echo,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1496
+                 def_module,
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1497
+                 def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1498
 #endif
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1499
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1500
-// Return value container for the following functions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1501
-static int retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1502
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1503
-// Commands callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1504
-static void do_roster(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1505
-static void do_status(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1506
-static void do_status_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1507
-static void do_add(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1508
-static void do_del(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1509
-static void do_group(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1510
-static void do_say(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1511
-static void do_msay(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1512
-static void do_say_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1513
-static void do_buffer(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1514
-static void do_clear(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1515
-static void do_info(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1516
-static void do_rename(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1517
-static void do_move(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1518
-static void do_set(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1519
-static void do_alias(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1520
-static void do_bind(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1521
-static void do_connect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1522
-static void do_disconnect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1523
-static void do_rawxml(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1524
-static void do_room(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1525
-static void do_authorization(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1526
-static void do_version(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1527
-static void do_request(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1528
-static void do_event(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1529
-static void do_help(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1530
-static void do_pgp(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1531
-static void do_iline(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1532
-static void do_screen_refresh(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1533
-static void do_chat_disable(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1534
-static void do_source(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1535
-static void do_color(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1536
-static void do_otr(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1537
-static void do_otrpolicy(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1538
-static void do_echo(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1539
-static void do_module(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1540
-static void do_exit(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1541
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1542
-static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1543
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1544
-// Global variable for the commands list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1545
-static GSList *Commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1546
-static GSList *safe_commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1547
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1548
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1549
-#include "modules.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1550
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1551
-gpointer cmd_del(gpointer id)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1552
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1553
+//  Main commands mechanics
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
+// Functions to parse mcabber command line and execute commands accordingly.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1556
+// Allows to define commands and remove definitions.
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
+cmdopts_t **cmd_list  = NULL; // command structs list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1559
+gsize       cmd_count = 0;    // number of commands (one less than memory allocated)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1560
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1561
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1562
+void cmd_init (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1563
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1564
-  GSList *sl_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1565
-  if (!id) return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1566
-  for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1567
-    if (sl_cmd -> data == id) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1568
-      cmd *command = (cmd *) sl_cmd->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1569
-      gpointer userdata = command->userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1570
-      Commands = g_slist_delete_link(Commands, sl_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1571
-      compl_del_category_word(COMPL_CMD, command->name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1572
-      g_slice_free(cmd, command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1573
-      return userdata;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1574
+  cmd_list = g_new (cmdopts_t *, BUILTIN_COUNT+1);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1575
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1576
+  cmd_list[0]  = &def_roster;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1577
+  cmd_list[1]  = &def_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1578
+  cmd_list[2]  = &def_status;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1579
+  cmd_list[3]  = &def_status_to;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1580
+  cmd_list[4]  = &def_add;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1581
+  cmd_list[5]  = &def_del;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1582
+  cmd_list[6]  = &def_group;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1583
+  cmd_list[7]  = &def_say;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1584
+  cmd_list[8]  = &def_msay;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1585
+  cmd_list[9]  = &def_say_to;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1586
+  cmd_list[10] = &def_buffer;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1587
+  cmd_list[11] = &def_clear;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1588
+  cmd_list[12] = &def_info;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  1589
+#if 0
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1590
+  cmd_list[13] = &def_rename;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1591
+  cmd_list[14] = &def_move;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1592
+  cmd_list[15] = &def_set;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1593
+  cmd_list[16] = &def_alias;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1594
+  cmd_list[17] = &def_bind;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1595
+  cmd_list[18] = &def_connect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1596
+  cmd_list[19] = &def_disconnect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1597
+  cmd_list[20] = &def_rawxml;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1598
+  cmd_list[21] = &def_room;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1599
+  cmd_list[22] = &def_authorization;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1600
+  cmd_list[23] = &def_version;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1601
+  cmd_list[24] = &def_request;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1602
+  cmd_list[25] = &def_event;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1603
+  cmd_list[26] = &def_help;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1604
+  cmd_list[27] = &def_pgp;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1605
+  cmd_list[28] = &def_iline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1606
+  cmd_list[29] = &def_screen_refresh;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1607
+  cmd_list[30] = &def_chat_disable;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1608
+  cmd_list[31] = &def_source;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1609
+  cmd_list[32] = &def_otr;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1610
+  cmd_list[33] = &def_otrpolicy;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1611
+  cmd_list[34] = &def_echo;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1612
+  cmd_list[35] = &def_module;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1613
+  cmd_list[36] = &def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1614
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1615
+  cmd_list[BUILTIN_COUNT] = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1616
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1617
+  cmd_count = BUILTIN_COUNT;
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
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1621
+void cmd_uninit (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1622
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1623
+  g_free (cmd_list);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1624
+  cmd_list  = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1625
+  cmd_count = 0;
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
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1628
+static size_t cmdopts_count_values (const cmdopts_t *command)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1629
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1630
+  size_t max = -1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1631
+  if (command -> opts) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1632
+    const cmdopt_t *opt;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1633
+    for (opt = command -> opts; opt -> shortopt != 0; opt ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1634
+      if (opt -> arg.pos > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1635
+        max = opt -> arg.pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1636
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1637
+  if (command -> args) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1638
+    const cmdarg_t *arg;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1639
+    for (arg = command -> args; arg -> name != NULL; arg ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1640
+      if (arg -> pos > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1641
+        max = arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1642
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1643
+  if (command -> cmds) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1644
+    const cmdopts_t *scmd;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1645
+    for (scmd = command -> cmds; scmd -> name != NULL; scmd ++) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1646
+      size_t cnt = cmdopts_count_values (scmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1647
+      if (cnt > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1648
+        max = cnt;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1649
     }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1650
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1651
+  return max;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1652
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1653
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1654
+void cmd_define (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1655
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1656
+  size_t n;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1657
+  // we update value count even for existing commands - user may
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1658
+  // have screwed something up in struct.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1659
+  command -> valno = cmdopts_count_values (command) + 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1660
+  // check if command already exists
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1661
+  for (n = cmd_count; n > 0; n --)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1662
+    if (cmd_list[n-1] == command) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1663
+      // raise it's priority
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1664
+      g_memmove(cmd_list+n-1, cmd_list+n, sizeof(cmdopts_t *) * (cmd_count-n-1));
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1665
+      cmd_list[cmd_count-1] = command;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1666
+      return;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1667
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1668
+  // register new command
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1669
+  cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count+2);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1670
+  cmd_list[cmd_count]   = command;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1671
+  cmd_list[cmd_count+1] = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1672
+  cmd_count ++;
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1675
+void cmd_undef (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1676
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1677
+  size_t num = 0;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1678
+  while (num < cmd_count) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1679
+    if (cmd_list[num] == command) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1680
+      g_memmove (cmd_list+num, cmd_list+num+1, sizeof(cmdopts_t *) * (cmd_count-num));
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1681
+      cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1682
+      cmd_count --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1683
+      return;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1684
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1685
+    num ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1686
+  }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1687
+}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1688
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1689
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1690
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1691
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1692
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1693
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1694
+const char *cmdopts_parse_argument(gchar **pr, gchar **er, cmdarg_flags_t flags)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1695
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1696
+  gchar *p = *pr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1697
+  gchar *e = *er;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1698
+  const char *error = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1699
+  gboolean   quotes = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1700
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1701
+  if ((flags & cmdarg_catchall) && (flags & cmdarg_plain)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1702
+    *pr = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1703
+    return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1704
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1705
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1706
+  while (p <= e && error != NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1707
+    if (p == e && quotes) { // end of line in quotes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1708
+      error = "Unfinished quoted argument.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1709
+    } else if ((*p == ' ' && (!quotes) && !(flags & cmdarg_catchall)) || p == e) { // argument ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1710
+      if (*p != '\0') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1711
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1712
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1713
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1714
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1715
+    } else if (*p == '\\' && !(flags & cmdarg_plain)) { // next char escape
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1716
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1717
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1718
+      if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1719
+        error = "Escape at the end of line.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1720
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1721
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1722
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1723
+    } else if (*p == '"' && !(flags & cmdarg_plain)) { // quotation start/end
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1724
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1725
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1726
+      quotes = !quotes;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1727
+    } else { // still argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1728
+      p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1729
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1730
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1731
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1732
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1733
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1734
+  return error;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1735
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1736
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1737
+static cmdarg_value_t *cmdopts_allocate_values (const cmdopts_t *command)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1738
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1739
+  cmdarg_value_t *values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1740
+  size_t         n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1741
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1742
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1743
+    return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1744
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1745
+  values = g_slice_alloc (sizeof(cmdarg_value_t) * n);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1746
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1747
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1748
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1749
+    values[n].src       = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1750
+    values[n].flags     = cmdval_default;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1751
+    values[n].value.arg = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1752
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1753
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1754
+  return values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1755
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1756
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1757
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1758
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1759
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1760
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1761
+// Even in case of error, commanddef should be passed to cmdopts_free().
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1762
+static gchar *cmdopts_parse_internal(gchar **pr, gchar **er, const cmdopts_t *command, cmdarg_value_t *values)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1763
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1764
+  enum {             // Parser state transitions:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1765
+    in_space,        // -> in_space, in_optstart, in_argstart
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1766
+    in_optstart,     // -> in_shortoptend, in_longoptstart, in_argstart ("-")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1767
+    in_shortoptend,  // -> in_space, in_argstart, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1768
+    in_longoptstart, // -> in_longopt, in_space, in_argstart ("---")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1769
+    in_longopt,      // -> in_longopt, in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1770
+    in_argstart,     // -> in_space, error
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1771
+  } state = in_argstart;         // current parser state
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1772
+  gchar    *p            = *pr;  // current pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1773
+  gchar    *e            = *er;  // end of line pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1774
+  gchar    *s;                   // start of current object pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1775
+  gboolean opts_ended   = FALSE; // don't allow options any more
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1776
+  const cmdopt_t *option = NULL; // option, for which argument is currently parsed
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1777
+  size_t   argno        = 0;     // number of current positional argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1778
+  gchar    *error       = NULL;  // error message to return
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1779
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1780
+  // prepare: set default values for arguments and unset some fields
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1781
+  if (error == NULL) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1782
+    size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1783
+    if (command -> opts) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1784
+      for (n = 0; command -> opts[n].shortopt != 0; n ++) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1785
+        const cmdopt_t *opt = command -> opts + n;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1786
+        cmdarg_value_t *val = values + opt -> arg.pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1787
+        // do not overwrite already specified values
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1788
+        if (val -> src == NULL || !(val -> flags & cmdval_visited)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1789
+          if (opt -> arg.flags & cmdarg_switch) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1790
+            val -> value.swc = 0;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1791
+          } else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1792
+            val -> value.roarg = opt -> arg.defval; // XXX ro
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1793
+          }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1794
+          val -> src = &(opt -> arg);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1795
+        }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1796
+      }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1797
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1798
+    if (command -> args) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1799
+      for (n = 0; command -> args[n].name != NULL; n ++) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1800
+        const cmdarg_t *arg = command -> args + n;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1801
+        cmdarg_value_t *val = values + arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1802
+        // do not overwrite already specified values
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1803
+        if (val -> src == NULL || !(val -> flags & cmdval_visited)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1804
+          val -> value.roarg = arg -> defval; // XXX ro
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1805
+          val -> src         = arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1806
+        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1807
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1808
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1809
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1810
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1811
+  // general environment checking
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1812
+  if (command -> check) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1813
+    if ((error = command -> check (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1814
+      gchar *err = error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1815
+      error = g_strdup_printf("%s: %s", command -> name, err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1816
+      g_free (err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1817
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1818
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1819
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1820
+  // we allow parser to do one extra run on final '\0'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1821
+  while (p <= e && error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1822
+    if (state == in_space) { // space between args/options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1823
+      if (*p == ' ' || p == e) { // still space
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1824
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1825
+      } else if (*p == '-' && !opts_ended) { // option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1826
+        state = in_optstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1827
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1828
+      } else { // argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1829
+        if (!option) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1830
+          opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1831
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1832
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1833
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1834
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1835
+    } else if (state == in_optstart) { // long/short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1836
+      if (*p == ' ' || p == e) { // argument '-'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1837
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1838
+        s = p = p - 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1839
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1840
+      } else if (*p == '-') { // long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1841
+        state = in_longoptstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1842
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1843
+      } else { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1844
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1845
+        state = in_shortoptend;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1846
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1847
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1848
+    } else if (state == in_shortoptend) { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1849
+      if (*p == ' ' || p == e) { // option really ended
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1850
+        size_t n;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1851
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1852
+          if (command -> opts[n].shortopt == *s) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1853
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1854
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1855
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1856
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1857
+        if (option != NULL) { // option is known
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1858
+          if (option -> arg.flags & cmdarg_switch) { // it is switch
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1859
+            cmdarg_value_t *val = values + option -> arg.pos;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1860
+            if (val -> src != &(option -> arg)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1861
+              val -> value.swc = 1;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1862
+              val -> src       = &(option -> arg);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1863
+            } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1864
+              val -> value.swc ++;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1865
+            }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1866
+            val -> flags |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1867
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1868
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1869
+            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
  1870
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1871
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1872
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1873
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1874
+          error = g_strdup_printf ("%s: Unknown option -%c.", command -> name, *s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1875
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1876
+      } else { // short option not ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1877
+        // consider it argument (to allow -autojoin)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1878
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1879
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1880
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1881
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1882
+    } else if (state == in_longoptstart) { // long option initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1883
+      if (*p == ' ' || p == e) { // end of options '--'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1884
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1885
+        state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1886
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1887
+      } else if (*p == '-') { // argument, starting with '---'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1888
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1889
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1890
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1891
+      } else { // it is long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1892
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1893
+        state = in_longopt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1894
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1895
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1896
+    } else if (state == in_longopt) { // long option name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1897
+      if (*p == ' ' || p == e) { // long option ended
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1898
+        size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1899
+        *p = '\0';
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1900
+        for (n = 0; command -> opts[n].shortopt != 0; n ++) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1901
+          if (!g_strcmp0(command -> opts[n].longopt, s)) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1902
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1903
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1904
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1905
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1906
+        if (option != NULL) { // option is known
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1907
+          if (option -> arg.flags & cmdarg_switch) { // it is switch
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1908
+            cmdarg_value_t *val = values + option -> arg.pos;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1909
+            if (val -> src != &(option -> arg)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1910
+              val -> value.swc = 1;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1911
+              val -> src       = &(option -> arg);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1912
+            } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1913
+              val -> value.swc ++;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1914
+            }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1915
+            val -> flags |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1916
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1917
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1918
+            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
  1919
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1920
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1921
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1922
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1923
+          error = g_strdup_printf ("%s: Unknown option --%s.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1924
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1925
+      } else { // still long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1926
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1927
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1928
+    } else if (state == in_argstart) { // option/command argument initialization
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1929
+      const char     *err;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1930
+      const cmdarg_t *arg;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1931
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1932
+      if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1933
+        arg = &(option -> arg);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1934
+      } else if (!command -> args || !command -> args[argno].name) { // no need to parse arguments any further
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1935
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1936
+      } else { // normal aurgument
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1937
+        arg = command -> args + argno;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1938
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1939
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1940
+      if ((err = cmdopts_parse_argument (&p, &e, arg -> flags))) { // get argument value
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1941
+        if (!option) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1942
+          error = g_strdup_printf ("%s: Can't parse argument %s (%lu): %s", command -> name, arg -> name, argno + 1, err);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1943
+        } else if (option -> longopt) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1944
+          error = g_strdup_printf ("%s: Can't parse argument for option --%s: %s", command -> name, option -> longopt, err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1945
+        } else {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1946
+          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
  1947
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1948
+      } else {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1949
+        cmdarg_value_t *val = values + arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1950
+        val -> value.arg = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1951
+        val -> src       = arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1952
+        val -> flags    |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1953
+        if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1954
+          option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1955
+        } else { // normal argument
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1956
+          if (arg -> flags & cmdarg_subcmd) { // subcommand
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1957
+            const cmdopts_t *subcmd;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1958
+            for (subcmd = command -> cmds; subcmd -> name != NULL; subcmd ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1959
+              if (!strcmp (s, subcmd -> name))
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1960
+                break;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1961
+            if (subcmd -> name != NULL) { // found subcommand
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1962
+              gchar *err;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1963
+              val -> value.cmd = subcmd;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1964
+              if ((err = cmdopts_parse_internal (&p, &e, subcmd, values))) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1965
+                error = g_strdup_printf("%s %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1966
+                g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1967
+              }
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1968
+            } else if (arg -> flags & cmdarg_required) { // unknown subcommand
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1969
+              error = g_strdup_printf("%s: Unable to find subcommand \"%s\".", command -> name, s);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1970
+            } else { // XXX warning message?
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1971
+              val -> value.cmd = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1972
+            }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1973
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1974
+          argno ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1975
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1976
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1977
+      state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1978
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1979
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1980
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1981
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1982
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1983
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1984
+  return error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1985
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1986
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1987
+// value types:      type               check                 required
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1988
+// - switch          no effect          toboolean()           no effect?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1989
+// - option          check              call checker          fatal check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1990
+// - argument        check              call checker          fatal check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1991
+// - subcommand      no effect          check for required    fail if missing
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1992
+static gchar *cmdopts_check_values (const cmdopts_t *command, cmdarg_value_t *values)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1993
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1994
+  size_t n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1995
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1996
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1997
+    return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1998
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1999
+  // XXX reverse order?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2000
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2001
+    cmdarg_value_t *val = values + n - 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2002
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2003
+    if ((val -> flags & cmdval_visited) || ((val -> src != NULL) && (val -> src -> flags & cmdarg_check))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2004
+      if (val -> src -> flags & cmdarg_subcmd) { // subcommand - fail if required and missing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2005
+        if ((val -> src -> flags & cmdarg_required) && (val -> value.cmd == NULL))
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2006
+          return g_strdup_printf ("%s: Not specified %s.", command -> name, val -> src -> name);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2007
+      } else if (val -> src -> flags & cmdarg_switch) { // switch - toboolean if check
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2008
+        if (val -> src -> flags & cmdarg_check)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2009
+          val -> value.swc %= 2;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2010
+      } else if (val -> src -> type && val -> src -> type -> check) { // typed argument
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2011
+        gchar *err;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2012
+        if ((err = val -> src -> type -> check (val))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2013
+          // FIXME option name
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2014
+          if (val -> src -> flags & cmdarg_required) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2015
+            gchar *error = g_strdup_printf ("Error in argument value \"%s\": %s", val -> src -> name, err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2016
+            g_free (err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2017
+            return error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2018
+          } else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2019
+            scr_log_print (LPRINT_NORMAL, "Warning: %s: Error in argument value \"%s\": %s", command -> name, val -> src -> name, err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2020
+            g_free (err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2021
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2022
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2023
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2024
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2025
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2026
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2027
   return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2028
 }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2029
-#endif
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2030
-
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2031
-//  cmd_add()
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2032
-// Adds a command to the commands list and to the CMD completion list
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2033
-gpointer cmd_add(const char *name, const char *help, guint flags_row1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2034
-                 guint flags_row2, void (*f)(char*), gpointer userdata)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2035
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2036
+//  cmdopts_free ( commanddef )
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2037
+// Free various parser data, used in parsing process
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  2038
+static void cmdopts_free_values (const cmdopts_t *command, cmdarg_value_t *values)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2039
 {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2040
-  cmd *n_cmd = g_slice_new0(cmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2041
-  strncpy(n_cmd->name, name, 32-1);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2042
-  n_cmd->help = help;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2043
-  n_cmd->completion_flags[0] = flags_row1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2044
-  n_cmd->completion_flags[1] = flags_row2;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2045
-  n_cmd->func = f;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2046
-  n_cmd->userdata = userdata;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2047
-  Commands = g_slist_prepend(Commands, n_cmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2048
-  // Add to completion CMD category
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2049
-  compl_add_category_word(COMPL_CMD, name);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2050
-  return n_cmd;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2051
+  size_t n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2052
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2053
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2054
+    return;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2055
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2056
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2057
+    cmdarg_value_t *val = values + n - 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2058
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2059
+    if ((val -> flags & cmdval_freeme) &&
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2060
+        val -> src && val -> src -> type &&
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2061
+        val -> src -> type -> free) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2062
+      val -> src -> type -> free (val);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2063
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2064
+  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2065
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2066
+  g_slice_free1 (sizeof(cmdarg_value_t) * n, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2067
 }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2068
 
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2069
-//  cmd_set_safe(name, safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2070
-// Sets if command can be used in startup configuration file.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2071
-gboolean cmd_set_safe(const gchar *name, gboolean safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2072
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2073
 {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2074
-  GSList *sel;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2075
-  if (!name)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2076
-    return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2077
-  for (sel = safe_commands; sel; sel = sel->next)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2078
-    if (!strcmp((const char *)sel->data, name)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2079
-      if (safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2080
-        return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2081
-      else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2082
-        g_free(sel->data);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2083
-        safe_commands = g_slist_delete_link(safe_commands, sel);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2084
-      }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2085
+  gchar *s = commandline;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2086
+  gchar *p, *e;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2087
+  gchar *freeme = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2088
+  const char *err;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2089
+  gchar      *error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2090
+  cmdopts_t  *command = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2091
+  const char *alias   = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2092
+  cmdarg_value_t *values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2093
+  size_t n;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2094
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2095
+  // skip command indicator and spaces at the beginning
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2096
+  while (*s == COMMAND_CHAR || *s == ' ')
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2097
+    s ++;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2098
+  p = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2099
+  e = s + strlen (s);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2100
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2101
+  // separate first word - command name
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2102
+  if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2103
+    scr_log_print (LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2104
+    return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2105
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2106
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2107
+  // check for quit command
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2108
+  if (!strcmp (s, "quit")) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2109
+    return cmd_result_quit;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2110
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2111
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2112
+  // check if we're in verbatim mode
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2113
+  if ((flags & cmdexe_check_verbatim) && scr_get_multimode () == 2) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2114
+    if (strcmp (s, "msay")) { // it is not msay
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2115
+      return cmd_result_verbatim;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2116
     }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2117
-  if (safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2118
-    safe_commands = g_slist_append(safe_commands, g_strdup(name));
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2119
-  else
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2120
-    return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2121
-  return TRUE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2122
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2123
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2124
+  // check and expand alias
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2125
+  if ((alias = settings_get (SETTINGS_TYPE_ALIAS, s))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2126
+    freeme = s = g_strdup_printf ("%s %s", alias, p);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2127
+    p = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2128
+    e = s + strlen (s);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2129
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2130
+    if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2131
+      scr_log_print (LPRINT_NORMAL, "error: Can't comprehend command name: %s.", err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2132
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2133
+      return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2134
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2135
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2136
+    // check for quit command again
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2137
+    if (!strcmp (s, "quit")) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2138
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2139
+      return cmd_result_quit;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2140
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2141
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2142
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2143
+  // find command with this name (reverse - see cmd_define())
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2144
+  for (n = cmd_count; n > 0; n --) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2145
+    if (!strcmp (s, cmd_list[n-1] -> name)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2146
+      command = cmd_list[n-1];
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2147
+      break;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2148
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2149
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2150
+  if (command == NULL) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2151
+    scr_log_print (LPRINT_NORMAL, "error: Unable to find command \"%s\".", s);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2152
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2153
+    return cmd_result_not_found;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2154
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2155
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2156
+  // check safety
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2157
+  if ((flags & cmdexe_check_safe) && !(command -> flags & cmd_safe)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2158
+    scr_log_print (LPRINT_NORMAL, "error: Command \"%s\" is not safe to execute here.", command -> name);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2159
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2160
+    return cmd_result_not_found;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2161
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2162
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2163
+  // allocate dynamic storage for arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2164
+  values = cmdopts_allocate_values (command);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2165
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2166
+  // parse command line
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2167
+  if ((error = cmdopts_parse_internal (&p, &e, command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2168
+    scr_log_print (LPRINT_NORMAL, "%s", error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2169
+    g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2170
+    cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2171
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2172
+    return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2173
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2174
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2175
+  // do type checking on arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2176
+  if ((error = cmdopts_check_values (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2177
+    scr_log_print (LPRINT_NORMAL, "%s: %s", command -> name, error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2178
+    g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2179
+    cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2180
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2181
+    return cmd_result_value_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2182
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2183
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2184
+  // execute command handler
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2185
+  if (command -> handle) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2186
+    if ((error = command -> handle (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2187
+      scr_log_print (LPRINT_NORMAL, "%s: %s", command -> name, error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2188
+      g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2189
+      cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2190
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2191
+      return cmd_result_runtime_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2192
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2193
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2194
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2195
+  // free resources
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2196
+  cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2197
+  g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2198
+  return cmd_result_ok;
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
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2201
-//  cmd_is_safe(name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2202
-// Returns if command is safe or not
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2203
-gboolean cmd_is_safe(const gchar *name)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2204
+//  process_line(line)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2205
+// Process a command/message line. If this isn't a command, this is a message
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2206
+// and it is sent to the currently selected buddy.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2207
+// Returns 255 if the line is the /quit command, 0 on success and some other
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2208
+// error codes.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2209
+cmd_result_t process_line(const char *line)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2210
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2211
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2212
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2214
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
-    if (!strcmp((const char *)sel->data, name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
-      return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2217
-  return FALSE;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2218
-}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2219
-
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2220
-//  cmd_init()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2221
-// Commands table initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2222
-// !!!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2223
-// After changing commands names and it arguments names here, you must change
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2224
-// ones in init_bindings()!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2225
-//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2226
-void cmd_init(void)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2227
-{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2228
-  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
  2229
-  cmd_add("alias", "Add an alias", 0, 0, &do_alias, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
-  cmd_add("authorization", "Manage subscription authorizations",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
-          COMPL_AUTH, COMPL_JID, &do_authorization, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
-  cmd_add("bind", "Add an key binding", 0, 0, &do_bind, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2233
-  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2234
-          COMPL_BUFFER, 0, &do_buffer, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2235
-  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
  2236
-  cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2237
-  cmd_add("color", "Set coloring options", COMPL_COLOR, 0, &do_color, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2238
-  cmd_add("connect", "Connect to the server", 0, 0, &do_connect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2239
-  cmd_add("del", "Delete the current buddy", 0, 0, &do_del, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2240
-  cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2241
-  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
  2242
-  cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2243
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2244
-  cmd_add("exit",  "Exit mcabber", 0, 0, &do_exit, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2245
-  cmd_add("group", "Change group display settings",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2246
-          COMPL_GROUP, COMPL_GROUPNAME, &do_group, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2247
-  cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2248
-  cmd_add("iline", "Manipulate input buffer", 0, 0, &do_iline, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2249
-  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
  2250
-  cmd_add("module", "Manipulations with modules", COMPL_MODULE, 0, &do_module,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
-  cmd_add("move", "Move the current buddy to another group", COMPL_GROUPNAME,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2253
-          0, &do_move, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2254
-  cmd_add("msay", "Send a multi-lines message to the selected buddy",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2255
-          COMPL_MULTILINE, 0, &do_msay, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2256
-  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
  2257
-  cmd_add("otrpolicy", "Manage OTR policies", COMPL_JID, COMPL_OTRPOLICY,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2258
-          &do_otrpolicy, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2259
-  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
  2260
-  cmd_add("quit", "Exit the software", 0, 0, NULL, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2261
-  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
  2262
-  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
-  cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
-          &do_request, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
-  cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
-  cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
-          &do_roster, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2268
-  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
  2269
-  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
  2270
-          &do_say_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
-  cmd_add("screen_refresh", "Redraw mcabber screen", 0, 0, &do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2272
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2273
-  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
  2274
-  cmd_add("source", "Read a configuration file", 0, 0, &do_source, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2275
-  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
  2276
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2277
-  cmd_add("status_to", "Show or set your status for one recipient",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2278
-          COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2279
-  cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2280
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2281
-  cmd_set_safe("set", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2282
-  cmd_set_safe("bind", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
-  cmd_set_safe("alias", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
-  cmd_set_safe("pgp", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2285
-  cmd_set_safe("source", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2286
-  cmd_set_safe("status", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
-  cmd_set_safe("color", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2288
-  cmd_set_safe("otrpolicy", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2289
-  cmd_set_safe("module", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2290
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2291
-  // Status category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2292
-  compl_add_category_word(COMPL_STATUS, "online");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2293
-  compl_add_category_word(COMPL_STATUS, "avail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2294
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2295
-  compl_add_category_word(COMPL_STATUS, "invisible");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2297
-  compl_add_category_word(COMPL_STATUS, "free");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2298
-  compl_add_category_word(COMPL_STATUS, "dnd");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
-  compl_add_category_word(COMPL_STATUS, "notavail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2300
-  compl_add_category_word(COMPL_STATUS, "away");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2301
-  compl_add_category_word(COMPL_STATUS, "offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2302
-  compl_add_category_word(COMPL_STATUS, "message");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2303
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2304
-  // Roster category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2305
-  compl_add_category_word(COMPL_ROSTER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2306
-  compl_add_category_word(COMPL_ROSTER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2307
-  compl_add_category_word(COMPL_ROSTER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2308
-  compl_add_category_word(COMPL_ROSTER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2309
-  compl_add_category_word(COMPL_ROSTER, "group_prev");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2310
-  compl_add_category_word(COMPL_ROSTER, "group_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2311
-  compl_add_category_word(COMPL_ROSTER, "hide");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2312
-  compl_add_category_word(COMPL_ROSTER, "show");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2313
-  compl_add_category_word(COMPL_ROSTER, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2314
-  compl_add_category_word(COMPL_ROSTER, "display");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2315
-  compl_add_category_word(COMPL_ROSTER, "hide_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2316
-  compl_add_category_word(COMPL_ROSTER, "show_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2317
-  compl_add_category_word(COMPL_ROSTER, "toggle_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2318
-  compl_add_category_word(COMPL_ROSTER, "item_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2319
-  compl_add_category_word(COMPL_ROSTER, "item_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
-  compl_add_category_word(COMPL_ROSTER, "item_toggle_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2321
-  compl_add_category_word(COMPL_ROSTER, "alternate");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2322
-  compl_add_category_word(COMPL_ROSTER, "search");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2323
-  compl_add_category_word(COMPL_ROSTER, "unread_first");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
-  compl_add_category_word(COMPL_ROSTER, "unread_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2325
-  compl_add_category_word(COMPL_ROSTER, "note");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2326
-  compl_add_category_word(COMPL_ROSTER, "resource_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2327
-  compl_add_category_word(COMPL_ROSTER, "resource_unlock");
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
-  // Buffer category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2330
-  compl_add_category_word(COMPL_BUFFER, "clear");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2331
-  compl_add_category_word(COMPL_BUFFER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2332
-  compl_add_category_word(COMPL_BUFFER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2333
-  compl_add_category_word(COMPL_BUFFER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2334
-  compl_add_category_word(COMPL_BUFFER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2335
-  compl_add_category_word(COMPL_BUFFER, "search_backward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2336
-  compl_add_category_word(COMPL_BUFFER, "search_forward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2337
-  compl_add_category_word(COMPL_BUFFER, "readmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2338
-  compl_add_category_word(COMPL_BUFFER, "date");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2339
-  compl_add_category_word(COMPL_BUFFER, "%");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
-  compl_add_category_word(COMPL_BUFFER, "purge");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2341
-  compl_add_category_word(COMPL_BUFFER, "close");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2342
-  compl_add_category_word(COMPL_BUFFER, "close_all");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2343
-  compl_add_category_word(COMPL_BUFFER, "scroll_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2344
-  compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2345
-  compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2346
-  compl_add_category_word(COMPL_BUFFER, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2347
-  compl_add_category_word(COMPL_BUFFER, "save");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2348
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2349
-  // Group category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2350
-  compl_add_category_word(COMPL_GROUP, "fold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2351
-  compl_add_category_word(COMPL_GROUP, "unfold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2352
-  compl_add_category_word(COMPL_GROUP, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2353
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2354
-  // Multi-line (msay) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2355
-  compl_add_category_word(COMPL_MULTILINE, "abort");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2356
-  compl_add_category_word(COMPL_MULTILINE, "begin");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2357
-  compl_add_category_word(COMPL_MULTILINE, "send");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2358
-  compl_add_category_word(COMPL_MULTILINE, "send_to");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2359
-  compl_add_category_word(COMPL_MULTILINE, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
-  compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2361
-  compl_add_category_word(COMPL_MULTILINE, "verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2362
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2363
-  // Room category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2364
-  compl_add_category_word(COMPL_ROOM, "affil");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2365
-  compl_add_category_word(COMPL_ROOM, "ban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2366
-  compl_add_category_word(COMPL_ROOM, "bookmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2367
-  compl_add_category_word(COMPL_ROOM, "destroy");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2368
-  compl_add_category_word(COMPL_ROOM, "invite");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2369
-  compl_add_category_word(COMPL_ROOM, "join");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2370
-  compl_add_category_word(COMPL_ROOM, "kick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2371
-  compl_add_category_word(COMPL_ROOM, "leave");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2372
-  compl_add_category_word(COMPL_ROOM, "names");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2373
-  compl_add_category_word(COMPL_ROOM, "nick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2374
-  compl_add_category_word(COMPL_ROOM, "privmsg");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2375
-  compl_add_category_word(COMPL_ROOM, "remove");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2376
-  compl_add_category_word(COMPL_ROOM, "role");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2377
-  compl_add_category_word(COMPL_ROOM, "setopt");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
-  compl_add_category_word(COMPL_ROOM, "topic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2379
-  compl_add_category_word(COMPL_ROOM, "unban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2380
-  compl_add_category_word(COMPL_ROOM, "unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2381
-  compl_add_category_word(COMPL_ROOM, "whois");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2382
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2383
-  // Authorization category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2384
-  compl_add_category_word(COMPL_AUTH, "allow");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2385
-  compl_add_category_word(COMPL_AUTH, "cancel");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2386
-  compl_add_category_word(COMPL_AUTH, "request");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2387
-  compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2388
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2389
-  // Request (query) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2390
-  compl_add_category_word(COMPL_REQUEST, "last");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2391
-  compl_add_category_word(COMPL_REQUEST, "ping");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2392
-  compl_add_category_word(COMPL_REQUEST, "time");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2393
-  compl_add_category_word(COMPL_REQUEST, "vcard");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2394
-  compl_add_category_word(COMPL_REQUEST, "version");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2395
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2396
-  // Events category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2397
-  compl_add_category_word(COMPL_EVENTS, "accept");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2398
-  compl_add_category_word(COMPL_EVENTS, "ignore");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2399
-  compl_add_category_word(COMPL_EVENTS, "reject");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2400
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2401
-  // PGP category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2402
-  compl_add_category_word(COMPL_PGP, "disable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2403
-  compl_add_category_word(COMPL_PGP, "enable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2404
-  compl_add_category_word(COMPL_PGP, "force");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2405
-  compl_add_category_word(COMPL_PGP, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2406
-  compl_add_category_word(COMPL_PGP, "setkey");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2407
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2408
-  // OTR category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2409
-  compl_add_category_word(COMPL_OTR, "start");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2410
-  compl_add_category_word(COMPL_OTR, "stop");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2411
-  compl_add_category_word(COMPL_OTR, "fingerprint");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2412
-  compl_add_category_word(COMPL_OTR, "smpq");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2413
-  compl_add_category_word(COMPL_OTR, "smpr");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2414
-  compl_add_category_word(COMPL_OTR, "smpa");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2415
-  compl_add_category_word(COMPL_OTR, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2416
-  compl_add_category_word(COMPL_OTR, "key");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2417
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2418
-  // OTR Policy category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2419
-  compl_add_category_word(COMPL_OTRPOLICY, "plain");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2420
-  compl_add_category_word(COMPL_OTRPOLICY, "manual");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2421
-  compl_add_category_word(COMPL_OTRPOLICY, "opportunistic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2422
-  compl_add_category_word(COMPL_OTRPOLICY, "always");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2423
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2424
-  // Color category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2425
-  compl_add_category_word(COMPL_COLOR, "roster");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2426
-  compl_add_category_word(COMPL_COLOR, "muc");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2427
-  compl_add_category_word(COMPL_COLOR, "mucnick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2428
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2429
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2430
-  // Module category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2431
-  compl_add_category_word(COMPL_MODULE, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2432
-  compl_add_category_word(COMPL_MODULE, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2433
-  compl_add_category_word(COMPL_MODULE, "load");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2434
-  compl_add_category_word(COMPL_MODULE, "unload");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2435
-#endif
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2436
-}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2437
-
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2438
-//  expandalias(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2439
-// 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
  2440
-// If no alias is found, returns line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2441
-// Note: if the returned pointer is different from line, the caller should
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2442
-//       g_free() the pointer after use
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2443
-char *expandalias(const char *line)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2444
-{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2445
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2446
-  char *word;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2447
-  const gchar *value;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2448
-  char *newline = (char*)line;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2449
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2450
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2451
-  for (p1 = line ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2452
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2453
-  // Locate the end of the word
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2454
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2455
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2456
-  // Extract the word and look for an alias in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2457
-  word = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2458
-  value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2459
-  g_free(word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2460
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2461
-  if (value)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2462
-    newline = g_strdup_printf("%c%s%s", COMMAND_CHAR, value, p2);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2463
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2464
-  return newline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2465
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2466
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2467
-//  cmd_get
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2468
-// Finds command in the command list structure.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2469
-// 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
  2470
-cmd *cmd_get(const char *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2471
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2472
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2473
-  char *com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2474
-  GSList *sl_com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2475
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2476
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2477
-  for (p1 = command ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2478
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2479
-  // Locate the end of the command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2480
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2481
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2482
-  // Copy the clean command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2483
-  com = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2484
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2485
-  // Look for command in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2486
-  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
  2487
-    if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2488
-      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2490
-  g_free(com);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2491
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2492
-  if (sl_com)       // Command has been found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2493
-    return (cmd*)sl_com->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2494
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2495
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2496
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2497
-//  process_command(line, iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2498
-// Process a command line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2499
-// 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
  2500
-// it is intended to be used for key bindings.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2501
-// 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
  2502
-int process_command(const char *line, guint iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2503
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2504
-  char *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2505
-  char *xpline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2506
-  cmd *curcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2507
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2508
-  if (!line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2509
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2510
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2511
-  // We do alias expansion here
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2512
-  if (iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2513
-    xpline = expandalias(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2514
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2515
-    xpline = (char*)line; // No expansion in verbatim multi-line mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2516
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2517
-  // We want to use a copy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2518
-  if (xpline == line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2519
-    xpline = g_strdup(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2520
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2521
-  // Remove trailing spaces:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2522
-  for (p=xpline ; *p ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2523
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2524
-  for (p-- ; p>xpline && (*p == ' ') ; p--)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2525
-    *p = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2526
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2527
-  // Command "quit"?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2528
-  if ((iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2529
-      && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2530
-    if (!xpline[5] || xpline[5] == ' ') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2531
-      g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2532
-      return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2533
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2534
-  } else if (iscmd && !strncasecmp(xpline, "quit", 4) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2535
-             (!xpline[4] || xpline[4] == ' ')) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2536
-    // 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
  2537
-    // character (usually '/').
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2538
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2539
-    return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2540
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2541
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2542
-  // 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
  2543
-  if (!iscmd && scr_get_multimode() == 2
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2544
-      && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2545
-    // It isn't an /msay command
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2546
-    scr_append_multiline(xpline);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2547
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2548
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2549
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2550
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2551
-  // Commands handling
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2552
-  curcmd = cmd_get(xpline);
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
-  if (!curcmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2555
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized command.  "
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2556
-                 "Please see the manual for a list of known commands.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2557
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2558
-    return 0;
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
-  if (!curcmd->func) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2561
-    scr_LogPrint(LPRINT_NORMAL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2562
-                 "This functionality is not yet implemented, sorry.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2563
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2564
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2565
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2566
-  // Lets go to the command parameters
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2567
-  for (p = xpline+1; *p && (*p != ' ') ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2568
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2569
-  // Skip spaces
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2570
-  while (*p && (*p == ' '))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2571
-    p++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2572
-  // Call command-specific function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2573
-  retval_for_cmds = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2574
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2575
-  if (curcmd->userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2576
-    (*(void (*)(char *p, gpointer u))curcmd->func)(p, curcmd->userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2577
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2578
-    (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2579
-#else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2580
-  (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2581
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2582
-  g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2583
-  return retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2584
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2585
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2586
-//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2587
-// Process a command/message line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2588
-// 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
  2589
-// currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2590
-// Return 255 if the line is the /quit command, or 0.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2591
-int process_line(const char *line)
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
+  gchar *utf8;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2594
+  int retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2595
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2596
   if (!*line) { // User only pressed enter
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2597
     if (scr_get_multimode()) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2598
       scr_append_multiline("");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2599
@@ -556,141 +725,671 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2600
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2601
     if (current_buddy) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2602
       if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2603
-        do_group("toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2604
+        group_cmd (BUDDATA(current_buddy), scmd_group_toggle);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2605
       else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2606
         // Enter chat mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2607
         scr_set_chatmode(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2608
         scr_show_buddy_window();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2609
       }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2610
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2611
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2612
+    return cmd_result_input;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2613
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2614
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2615
-  if (*line != COMMAND_CHAR) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2616
-    // This isn't a command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2617
+  utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2618
+  if (*line != COMMAND_CHAR) { // input line
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2619
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2620
-      scr_append_multiline(line);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2621
+      scr_append_multiline(utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2622
     else
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2623
-      say_cmd((char*)line, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2624
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2625
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2626
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2627
-  /* It is _probably_ a command -- except for verbatim multi-line mode */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2628
-  return process_command(line, FALSE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2629
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2630
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2631
-// Helper routine for buffer item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2632
-// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2633
-static void roster_buddylock(char *bjid, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2634
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2635
-  gpointer bud = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2636
-  bool may_need_refresh = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2637
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2638
-  // Allow special jid "" or "." (current buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2639
-  if (bjid && (!*bjid || !strcmp(bjid, ".")))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2640
-    bjid = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2641
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2642
-  if (bjid) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2643
-    // The JID has been specified.  Quick check...
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2644
-    if (check_jid_syntax(bjid)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2645
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2646
-                   "<%s> is not a valid Jabber ID.", bjid);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2647
-    } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2648
-      // Find the buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2649
-      GSList *roster_elt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2650
-      roster_elt = roster_find(bjid, jidsearch,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2651
-                               ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2652
-      if (roster_elt)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2653
-        bud = roster_elt->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2654
-      else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2655
-        scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2656
-      may_need_refresh = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2657
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2658
-  } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2659
-    // Use the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2660
-    if (current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2661
-      bud = BUDDATA(current_buddy);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2662
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2663
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2664
-  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2665
-  if (bud) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2666
-    if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2667
-      lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2668
-    buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2669
-    if (may_need_refresh) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2670
-      buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2671
-      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
  2672
+      say_cmd(utf8, msgtype_not_set);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2673
+    retval = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2674
+  } else { // command or verbatim multiline message
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2675
+    retval = cmd_execute (utf8, cmdexe_check_verbatim);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2676
+    if (retval == cmd_result_verbatim) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2677
+      g_free(utf8); // buffer has been corrupted by parser
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2678
+      utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2679
+      scr_append_multiline(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2680
+      retval = cmd_result_input;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2681
     }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2682
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2683
+  g_free(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2684
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2685
+  return retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2686
 }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2687
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2688
-static void roster_resourcelock(char *jidres, gboolean lock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2689
-  gpointer bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2690
-  char *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2691
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2692
-  if (!jidres) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2693
-    if (lock) return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2694
-    jidres = ".";
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2695
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2696
+//  Standard types
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2697
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2698
+// This section contains standard argument type definitions, used in built-in
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2699
+// mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2700
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2701
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2702
+// TODO: move to separate file? (and variations with 'required')
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2703
+// + cmdarg_type_roster_bjid     - in roster, with specified types -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2704
+// + 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
  2705
+// * 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
  2706
+// * cmdarg_type_roster_jid      - in roster, with specified types, might have or not have resource -> bud + (resource)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2707
+// * cmdarg_type_roster_group    - in roster, on '.' select group of current buddy -> bud
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2708
+// + cmdarg_type_bjid         - any bjid -> bjid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2709
+// + cmdarg_type_fjid         - any fjid -> fjid
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2710
+// + cmdarg_type_charset      - string -> string
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2711
+// + cmdarg_type_uint         - string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2712
+// + cmdarg_type_nonspace     - strip, space only -> null
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2713
+// * cmdarg_type_bjidmask
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2714
+// + cmdarg_type_color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2715
+// + cmdarg_type_string2enum
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2716
+// * cmdarg_type_nick        - provide completions first from current room, then from all other, nonspace, do not restrict
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2717
+// + cmdarg_type_filename    - expand, convert encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2718
+// + cmdarg_type_date        - YYYYMMDDTHHMMSS -> time_t
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2719
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2720
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2721
+//  command environment checkers
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2722
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2723
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  2724
+gchar *cmd_check_online (const cmdopts_t *command, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2725
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2726
+  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2727
+    return g_strdup ("You are not connected!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2728
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2729
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2730
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2731
+gchar *cmd_check_current_buddy (const cmdopts_t *command, cmdarg_value_t *values)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2732
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2733
+  if (!current_buddy)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2734
+    return g_strdup ("No selected buddy!");
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2735
+  return NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2736
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2737
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2738
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2739
+//  generic value destructors
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2740
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2741
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2742
+void cmdarg_free_gfree (cmdarg_value_t *arg)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2743
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2744
+  g_free (arg -> value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2745
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2746
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2747
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2748
+//  string -> stripspace string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2749
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2750
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2751
+// Strips leading and trailing spaces, checks if anything left.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2752
+// Replaces value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2753
+// Does not need freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2754
+// No trailing spaces in defvalue - needs RW access for that.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2755
+gchar *cmdarg_check_nonspace (cmdarg_value_t *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2756
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2757
+  gchar *val = arg -> value.arg;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2758
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2759
+  if (val) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2760
+    while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2761
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2762
+    if (*val) { // valid arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2763
+      arg -> value.arg = val;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2764
+      while (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2765
+        val ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2766
+      while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2767
+        val --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2768
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2769
+      if (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2770
+        *val = '\0';
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2771
+      return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2772
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2773
   }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2774
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2775
-  if (jidres[0] == '.' &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2776
-      (jidres[1] == '\0' || jidres[1] == JID_RESOURCE_SEPARATOR)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2777
-    //Special jid: . or ./resource
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2778
-    switch (jidres[1]) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2779
-      case JID_RESOURCE_SEPARATOR:
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2780
-        resource = jidres+2;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2781
-      case '\0':
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2782
-        if (current_buddy)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2783
+  // error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2784
+  arg -> value.arg = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2785
+  return g_strdup ("Non-space value required.");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2786
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2787
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2788
+const cmdarg_type_t cmdarg_type_nonspace = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2789
+  cmdarg_check_nonspace,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2790
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2791
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2792
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2793
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2794
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2795
+//  bjid -> bud
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2796
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2797
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2798
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2799
+// Returns buddy roster entry in value.rjid.bud.
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2800
+// Recognizes as current ".", but not "" or NULL - use defvalue.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2801
+// Does not require freeing.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2802
+gchar *cmdarg_check_roster_bjid (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2803
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2804
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2805
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2806
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2807
+    const char *bjid = arg -> value.arg;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2808
+    guint      types = (guint) arg -> src -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2809
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2810
+    if (!strcmp(bjid, ".")) { // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2811
+      if (!current_buddy)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2812
+        error = g_strdup_printf("No buddy selected.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2813
+      else if (buddy_gettype(BUDDATA(current_buddy)) & types)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2814
+        arg -> value.rjid.bud = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2815
+      else // TODO: improve message
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2816
+        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
  2817
+    } else if (!check_jid_syntax(bjid)) { // valid jid specified
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2818
+      GSList *found = roster_find(bjid, jidsearch, types);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2819
+      if (found)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2820
+        arg -> value.rjid.bud = found->data;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2821
+      else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2822
+        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
  2823
+    } else { // jid is invalid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2824
+      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
  2825
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2826
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2827
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2828
+  arg -> value.rjid.resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2829
+  if (error)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2830
+    arg -> value.rjid.bud = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2831
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2832
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2833
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2834
+const cmdarg_type_t cmdarg_type_roster_bjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2835
+  cmdarg_check_roster_bjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2836
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2837
+  NULL,
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2840
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2841
+//  fjid -> bud + resource
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2842
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2843
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2844
+// Uses chkdata as guint with allowed ROSTER_TYPE_*.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2845
+// Returns buddy roster entry in userdata.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2846
+// Returns resource string in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2847
+// Recognizes as current "./res" and "res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2848
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2849
+// 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
  2850
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2851
+//  * merge with roster_bjid and use own flags in chkdata to signify types and resource allowed/required conditions
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2852
+gchar *cmdarg_check_roster_resource (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2853
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2854
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2855
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2856
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2857
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2858
+  if (!(error = cmdarg_check_nonspace(arg))) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2859
+    char  *fjid = arg -> value.arg;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2860
+    guint types = (guint) arg -> src -> chkdata;
75
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
+    if (fjid[0] == '.' && fjid[1] == JID_RESOURCE_SEPARATOR) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2863
+      // current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2864
+      resource = fjid+2;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2865
+    } else if (!check_jid_syntax (fjid) && (resource = strchr (fjid, JID_RESOURCE_SEPARATOR))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2866
+      // valid jid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2867
+      GSList *found;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2868
+      *resource = '\0'; // XXX needs rw
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2869
+      found = roster_find (fjid, jidsearch, types);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2870
+      if (found) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2871
+        bud = found->data;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2872
+        resource ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2873
+      } else
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2874
+        error = g_strdup_printf ("Jid <%s> is not in the roster.", fjid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2875
+    } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2876
+      // jid is invalid - let's consider it resource (XXX)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2877
+      resource = fjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2878
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2879
+    // resource for current buddy
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2880
+    if (error == NULL && resource) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2881
+      if (bud == NULL) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2882
+        if (!current_buddy)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2883
+          error = g_strdup ("No buddy selected.");
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2884
+        else if (buddy_gettype (BUDDATA(current_buddy)) & types)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2885
           bud = BUDDATA(current_buddy);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2886
+        else // TODO: improve message
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2887
+          error = g_strdup("Currently selected buddy is of wrong type.");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2888
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2889
+      if (bud) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2890
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2891
+        gboolean found = FALSE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2892
+        resources = buddy_getresources (bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2893
+        for (p_res = resources; p_res; p_res = g_slist_next(p_res)) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2894
+          if (!g_strcmp0 ((char*)p_res->data, resource))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2895
+            found = TRUE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2896
+          g_free (p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2897
+        }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2898
+        g_slist_free (resources);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2899
+        if (!found)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2900
+          error = g_strdup_printf ("No such resource <%s%c%s>...", buddy_getjid(bud), JID_RESOURCE_SEPARATOR, resource);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2901
+      }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2902
     }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2903
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2904
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2905
+  if (error) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2906
+    arg -> value.rjid.bud      = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2907
+    arg -> value.rjid.resource = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2908
   } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2909
-    char *tmp;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2910
-    if (!check_jid_syntax(jidres) &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2911
-        (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2912
-      //Any other valid full jid
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2913
-      *tmp = '\0'; // for roster search by bare jid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2914
-      resource = tmp+1;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2915
-      GSList *roster_elt;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2916
-      roster_elt = roster_find(jidres, jidsearch,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2917
-          ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2918
+    arg -> value.rjid.bud      = bud;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2919
+    arg -> value.rjid.resource = resource;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2920
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2921
+  return error;
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
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2924
+const cmdarg_type_t cmdarg_type_roster_resource = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2925
+  cmdarg_check_roster_resource,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2926
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2927
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2928
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2929
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2930
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2931
+//  name -> group bud
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2932
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2933
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2934
+// Returns buddy roster entry in value.bud.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2935
+// Recognizes as current ".".
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2936
+// Does not require freeing.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2937
+// XXX:
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2938
+//  * group, named "."?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2939
+//  * group, named " "? is it even possible?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2940
+//  * check only that it is not NULL, and use "" as current?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2941
+gchar *cmdarg_check_roster_group (cmdarg_value_t *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2942
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2943
+  gchar    *error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2944
+  gpointer group  = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2945
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2946
+  if (!(error = cmdarg_check_nonspace(arg))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2947
+    const char *name = arg -> value.arg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2948
+    if (!strcmp (name, ".")) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2949
+      if (current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2950
+        group = buddy_getgroup(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2951
+      else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2952
+        error = g_strdup("Unable to determine current group: "
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2953
+                         "no buddy selected.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2954
+    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2955
+      GSList *roster_elt = roster_find (name, namesearch, ROSTER_TYPE_GROUP);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2956
       if (roster_elt)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2957
-        bud = roster_elt->data;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2958
-      *tmp = JID_RESOURCE_SEPARATOR;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2959
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2960
-    if (!bud) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2961
-      //Resource for current buddy
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2962
-      if (current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2963
-        bud = BUDDATA(current_buddy);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2964
-      resource = jidres;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2965
+        group = buddy_getgroup(roster_elt->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2966
+      else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2967
+        error = g_strdup_printf("Group \"%s\" not found.", name);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2968
     }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2969
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2970
   
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2971
-  if (bud && buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2972
-    if (lock) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2973
-      GSList *resources, *p_res;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2974
-      gboolean found = FALSE;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2975
-      resources = buddy_getresources(bud);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2976
-      for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2977
-        if (!g_strcmp0((char*)p_res->data, resource))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2978
-          found = TRUE;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2979
-        g_free(p_res->data);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2980
+  arg -> value.rjid.bud = group;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2981
+  return error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2982
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2983
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2984
+const cmdarg_type_t cmdarg_type_roster_group = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2985
+  cmdarg_check_roster_group,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2986
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2987
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2988
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2989
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2990
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2991
+//  fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2992
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2993
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2994
+// Returns corrected fjid in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2995
+// Recognizes as current "." and "./res".
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2996
+// Requires freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2997
+// XXX:
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2998
+//  * g_strdup jid?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2999
+gchar *cmdarg_check_fjid (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3000
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3001
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3002
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3003
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3004
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3005
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3006
+    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
  3007
+      const char *jid;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3008
+      if (!current_buddy) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3009
+        error = g_strdup_printf ("No buddy selected.");
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3010
+      } else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3011
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3012
+      } else if (fjid[1] == '\0') {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3013
+        arg -> value.roarg = jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3014
+      } else {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3015
+        arg -> value.arg = g_strdup_printf ("%s%c%s", jid, JID_RESOURCE_SEPARATOR, fjid + 2);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3016
+        arg -> flags    |= cmdval_freeme;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3017
       }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3018
-      g_slist_free(resources);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3019
-      if (!found) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3020
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3021
-        return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3022
+    } else if (check_jid_syntax(fjid)) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3023
+      error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3024
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3025
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3026
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3027
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3028
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3029
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3030
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3031
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3032
+const cmdarg_type_t cmdarg_type_fjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3033
+  cmdarg_check_fjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3034
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3035
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3036
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3037
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3038
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3039
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3040
+//  fjid -> bjid
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3041
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3042
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3043
+// Returns corrected bjid in value.arg.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3044
+// Recognizes as current "." and "./res" (but still removes resource).
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3045
+// Needs RW access to trim the resource - no resources in default values!
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3046
+// Requires freeing (as fjid).
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3047
+gchar *cmdarg_check_bjid (cmdarg_value_t *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3048
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3049
+  gchar *error = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3050
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3051
+  if (!(error = cmdarg_check_fjid(arg))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3052
+    gchar *res = strchr (arg -> value.arg, JID_RESOURCE_SEPARATOR);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3053
+    if (res != NULL)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3054
+      *res = '\0';
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3055
+  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3056
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3057
+  if (error)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3058
+    arg -> value.arg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3059
+  return error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3060
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3061
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3062
+const cmdarg_type_t cmdarg_type_bjid = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3063
+  cmdarg_check_bjid,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3064
+  cmdarg_free_gfree,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3065
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3066
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3067
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3068
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3069
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3070
+//  string -> uint
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3071
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3072
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3073
+// Returns unsigned integer in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3074
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3075
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3076
+//  * 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
  3077
+//  * use flags in chkdata to specify signedness - it only affects two checks
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3078
+gchar *cmdarg_check_uint (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3079
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3080
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3081
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3082
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3083
+    char *s = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3084
+    char *e = s;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3085
+    long n  = strtol(s, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3086
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3087
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3088
+    else if (n < 0)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3089
+      error = g_strdup ("Value must be greater than zero.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3090
+    else if (n > G_MAXUINT)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3091
+      error = g_strdup_printf ("Value %ld is too big.", n);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3092
+    else
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3093
+      arg -> value.uint = (guint) n;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3094
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3095
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3096
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3097
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3098
+  return error;
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
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3101
+const cmdarg_type_t cmdarg_type_uint = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3102
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3103
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3104
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3105
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3106
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3107
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3108
+//  string -> set of valid chars
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3109
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3110
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3111
+// Strips/checks for any non-valid chars in argument.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3112
+// Gets set of valid chars from chkdata.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3113
+// Returns filtered string in value.arg.
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3114
+// Recognizes "*" as glob.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3115
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3116
+// No errors in default vaules - needs RW for that.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3117
+// XXX:
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3118
+//  * check duplicates?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3119
+//    * string2flags?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3120
+//  * canonicize?
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3121
+//    * string2enum?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3122
+//  * g_strdup (valid)?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3123
+gchar *cmdarg_check_charset (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3124
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3125
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3126
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3127
+  if (!(error = cmdarg_check_nonspace(arg)) && arg -> value.arg) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3128
+    const char *valid = arg -> src -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3129
+    if (!strcmp(arg -> value.arg, "*")) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3130
+      arg -> value.roarg = valid;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3131
+    } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3132
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3133
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3134
+      while (p < e) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3135
+        if (strchr (valid, *p)) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3136
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3137
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3138
+          // this is valid use of flag in checker
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3139
+          return g_strdup_printf ("Character '%c' not in set [%s].", *p, valid);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3140
+        } else {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3141
+          scr_log_print (LPRINT_NORMAL, "Warning: Wrong %s character [%c]", arg -> src -> name, *p);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3142
+          g_memmove (p, p+1, e-p-1);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3143
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3144
+        }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3145
       }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3146
-    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3147
-      resource = NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3148
+      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
  3149
+        arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3150
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3151
-    buddy_setactiveresource(bud, resource);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3152
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3153
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3154
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3155
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3156
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3157
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3158
+const cmdarg_type_t cmdarg_type_charset = {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3159
+  cmdarg_check_charset,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3160
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3161
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3162
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3163
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3164
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3165
+//  string -> enum
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3166
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3167
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3168
+// 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
  3169
+// Returns corresponding value in value.uint.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3170
+// Returns 0 if not recognized and not required.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3171
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3172
+// XXX:
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3173
+//  * default value on error?
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3174
+//  * also, print list of possible values on error?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3175
+gchar *cmdarg_check_string2enum (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3176
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3177
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3178
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3179
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3180
+    const string2enum_t *list;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3181
+    for (list = arg -> src -> chkdata; list -> name != NULL; list ++)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3182
+      if (!strcmp(list -> name, arg -> value.arg)) { // found
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3183
+        arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3184
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3185
+      }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3186
+    // not found, error
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3187
+    error = g_strdup_printf ("Value \"%s\" is invalid.", arg -> value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3188
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3189
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3190
+  if (error)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3191
+    arg -> value.uint = 0;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3192
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3193
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3194
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3195
+const cmdarg_type_t cmdarg_type_string2enum = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3196
+  cmdarg_check_string2enum,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3197
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3198
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3199
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3200
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3201
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3202
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3203
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3204
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3205
+static const string2enum_t s2e_color[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3206
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3207
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3208
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3209
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3210
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3211
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3212
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3213
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3214
+  { NULL,      0  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3215
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3216
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3217
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3218
+// Returns color name in value.arg.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3219
+// Does not require freeing.
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3220
+// XXX
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3221
+//  * 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
  3222
+//    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
  3223
+//    * that needs access to ncurses internals, so, probably, this will
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3224
+//      be better done, when moving related command definitions to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3225
+//      corresponding subsystems.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3226
+gchar *cmdarg_check_color (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3227
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3228
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3229
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3230
+  if (!(error = cmdarg_check_nonspace(arg))) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3231
+    char *color = arg -> value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3232
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3233
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3234
+      return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3235
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3236
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3237
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3238
+      color += 6;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3239
+    { // check names
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3240
+      const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3241
+      for (list = s2e_color; list -> name != NULL; list ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3242
+        if (!strcmp (list -> name, color))
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3243
+          return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3244
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3245
+    { // not found, check for numerical value
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3246
+      char *e = color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3247
+      long n  = strtol(color, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3248
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3249
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3250
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3251
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3252
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3253
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3254
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3255
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3256
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3257
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3258
+const cmdarg_type_t cmdarg_type_color = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3259
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3260
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3261
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3262
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3263
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3264
+//
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3265
+//  filename -> expanded local + utf8 filename
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3266
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3267
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3268
+// Recognizes "~/" as $HOME.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3269
+// Returns utf8 and converted to filesystem encoding file name in value.fname.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3270
+// Requires freeing.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3271
+// XXX:
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3272
+//  Should we convert filename at all?
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3273
+//   - it needs extra "big" type in values
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3274
+//   - it is not convenient to pass to function
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3275
+//   - utf8 version needs to be always freed
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3276
+//   - saves a bit of generic code, though.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3277
+gchar *cmdarg_check_filename (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3278
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3279
+  gchar  *error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3280
+  GError *err   = NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3281
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3282
+  if ((error = cmdarg_check_nonspace(value)))
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3283
+    return error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3284
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3285
+  value -> value.fname.utf8  = expand_filename (value -> value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3286
+  value -> value.fname.local = g_filename_from_utf8 (value -> value.fname.utf8,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3287
+                                                          -1, NULL, NULL, &err);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3288
+  if (err) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3289
+    value -> value.fname.utf8 = NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3290
+    error = g_strdup_printf ("Filename charset conversion error: %s",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3291
+                                                                err -> message);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3292
+    g_error_free (err);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3293
+  } else {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3294
+    value -> flags |= cmdval_freeme;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3295
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3296
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3297
+  return error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3298
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3299
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3300
+void cmdarg_free_fname (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3301
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3302
+  g_free (value -> value.fname.utf8);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3303
+  g_free (value -> value.fname.local);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3304
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3305
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3306
+const cmdarg_type_t cmdarg_type_filename = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3307
+  cmdarg_check_color,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3308
+  cmdarg_free_fname,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3309
+  // TODO
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3310
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3311
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3312
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3313
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3314
+//  ISO-8601 date -> epoch
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3315
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3316
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3317
+// Converts "YYYYMMDD[(.|T)HH[:]MM[:]SS[.SSS][(+|-)HH:MM]" to epoch.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3318
+// Returns epoch in value.time.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3319
+// Needs no freeing.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3320
+gchar *cmdarg_check_date (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3321
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3322
+  gchar  *error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3323
+  time_t epoch = 0;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3324
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3325
+  if (!(error = cmdarg_check_nonspace (value))) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3326
+    epoch = from_iso8601 (value -> value.arg, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3327
+    if (!epoch)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3328
+      error = g_strdup_printf ("Invalid date \"%s\".", value -> value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3329
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3330
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3331
+  value -> value.time = epoch;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3332
+  return error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3333
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3334
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3335
+const cmdarg_type_t cmdarg_type_date = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3336
+  cmdarg_check_date,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3337
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3338
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3339
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3340
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3341
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3342
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3343
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3344
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3345
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3346
+// you also have to add it to cmd_init().
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3347
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3348
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3349
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3350
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3351
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3352
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3353
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3354
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3355
+static void roster_buddylock(gpointer bud, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3356
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3357
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3358
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3359
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3360
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3361
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3362
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3363
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3364
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3365
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3366
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3367
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3368
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3369
 // (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
  3370
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3371
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3372
 static void display_and_free_note(struct annotation *note, const char *winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3373
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3374
   gchar tbuf[128];
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3375
@@ -755,41 +1454,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3376
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3377
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3378
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3379
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3380
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3381
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3382
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3383
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3384
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3385
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3386
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3387
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3388
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3389
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3390
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3391
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3392
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3393
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3394
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3395
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3396
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3397
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3398
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3399
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3400
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3401
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3402
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3403
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3404
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3405
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3406
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3407
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3408
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3409
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3410
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3411
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3412
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3413
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3414
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3415
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3416
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3417
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3418
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3419
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3420
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3421
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3422
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3423
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3424
       display_and_free_note(note, bjid);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3425
@@ -800,484 +1473,662 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3426
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3427
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3428
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3429
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3430
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3431
-inline static void roster_updown(int updown, char *nitems)
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3432
+static gchar *do_roster (const cmdopts_t *command, cmdarg_value_t *values);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3433
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3434
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3435
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3436
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3437
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3438
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3439
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3440
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3441
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3442
+  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
  3443
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3444
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3445
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3446
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3447
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3448
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3449
+  pos_roster_scmd         = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3450
+  pos_roster_up_n         = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3451
+  pos_roster_down_n       = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3452
+  pos_roster_search_name  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3453
+  pos_roster_display_mask = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3454
+  pos_roster_itemlock_jid = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3455
+  pos_roster_note_jid     = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3456
+  pos_roster_note_rst     = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3457
+  pos_roster_note_text    = 3,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3458
+  pos_roster_reslock_jid  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3459
+} pos_roster_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3460
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3461
+#define SCMD_ROSTER(NAME, ARGS...) \
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3462
+    { #NAME, cmd_default, NULL, NULL, NULL, ARGS, NULL, (gpointer)scmd_roster_##NAME }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3463
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3464
+  "roster",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3465
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3466
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3467
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3468
+  NULL,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3469
+  (cmdarg_t[2]){{"subcommand", pos_roster_scmd, cmdarg_subcmd | cmdarg_chreq, NULL, NULL},{NULL}},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3470
+  (cmdopts_t[25]){
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3471
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3472
+    SCMD_ROSTER(top,    NULL),
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3473
+    SCMD_ROSTER(up,   (cmdarg_t[2]){{"n", pos_roster_up_n, cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3474
+    SCMD_ROSTER(down, (cmdarg_t[2]){{"n", pos_roster_down_n, cmdarg_chreq, "1", &cmdarg_type_uint},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3475
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3476
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3477
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3478
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3479
+    SCMD_ROSTER(unread_next,  NULL),
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3480
+    SCMD_ROSTER(search, (cmdarg_t[2]){{"name", pos_roster_search_name, cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_nonspace},{NULL}}),
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3481
+    SCMD_ROSTER(display, (cmdarg_t[2]){{"statusmask", pos_roster_display_mask, cmdarg_check, NULL, &cmdarg_type_charset, (gpointer)"ofdna_?"},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3482
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3483
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3484
+    SCMD_ROSTER(toggle_offline, NULL),
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3485
+    SCMD_ROSTER(item_lock,        (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3486
+    SCMD_ROSTER(item_unlock,      (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3487
+    SCMD_ROSTER(item_toggle_lock, (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM)},{NULL}}),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3488
+    { "note", cmd_default, NULL, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3489
+      (cmdopt_t[3]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3490
+        {'r', "reset", {"reset", pos_roster_note_rst, cmdarg_switch, NULL, NULL, NULL}},
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3491
+        {'j', "jid",   {"jid",   pos_roster_note_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT)}},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3492
+        {0}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3493
+      },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3494
+      (cmdarg_t[2]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3495
+        {"text", pos_roster_note_text, cmdarg_eol, NULL, &cmdarg_type_nonspace},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3496
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3497
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3498
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3499
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3500
+    SCMD_ROSTER(notes, NULL),
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3501
+    SCMD_ROSTER(resource_lock,   (cmdarg_t[2]){{"resource|fjid", pos_roster_reslock_jid, cmdarg_chreq, NULL, &cmdarg_type_roster_resource, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)},{NULL}}),
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3502
+    SCMD_ROSTER(resource_unlock, (cmdarg_t[2]){{"jid", pos_roster_reslock_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
  3503
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3504
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3505
+    SCMD_ROSTER(toggle, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3506
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3507
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3508
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3509
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3510
+static gchar *do_roster (const cmdopts_t *options, cmdarg_value_t *values)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3511
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3512
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3513
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3514
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3515
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3516
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3517
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3518
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3519
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3520
-    scr_roster_up_down(updown, nbitems);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3521
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3522
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3523
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3524
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3525
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3526
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3527
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3528
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3529
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3530
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3531
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3532
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3533
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3534
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3535
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3536
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3537
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3538
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3539
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3540
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3541
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3542
-  if (!strcasecmp(subcmd, "top")) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3543
+  scmd_roster_t subcmd = (scmd_roster_t) (values[pos_roster_scmd].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
  3544
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3545
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3546
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3547
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3548
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3549
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3550
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3551
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3552
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3553
+  } else if (subcmd == scmd_roster_up) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3554
+    scr_roster_up_down(-1, values[pos_roster_up_n].value.uint);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3555
+  } else if (subcmd == scmd_roster_down) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3556
+    scr_roster_up_down(1, values[pos_roster_down_n].value.uint);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3557
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3558
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3559
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3560
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3561
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3562
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3563
+  } else if (subcmd == scmd_roster_unread_first) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3564
+    scr_roster_unread_message(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3565
+  } else if (subcmd == scmd_roster_unread_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3566
+    scr_roster_unread_message(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3567
+  } else if (subcmd == scmd_roster_search) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3568
+    scr_roster_search(values[pos_roster_search_name].value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3569
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3570
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3571
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3572
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3573
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3574
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3575
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3576
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3577
+  } else if (subcmd == scmd_roster_display) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3578
+    scr_roster_display(values[pos_roster_display_mask].value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3579
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3580
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3581
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3582
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3583
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3584
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3585
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3586
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3587
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3588
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3589
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3590
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3591
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3592
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3593
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3594
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3595
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3596
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3597
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3598
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3599
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3600
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3601
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3602
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3603
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3604
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3605
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3606
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3607
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3608
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3609
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3610
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3611
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3612
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3613
-      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
  3614
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3615
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3616
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3617
-    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
  3618
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3619
-    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
  3620
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3621
-    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
  3622
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3623
-    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
  3624
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3625
-    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
  3626
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3627
-    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
  3628
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3629
-    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
  3630
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3631
-    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
  3632
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3633
-    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
  3634
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3635
+  } else if (subcmd == scmd_roster_item_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3636
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, 1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3637
+  } else if (subcmd == scmd_roster_item_unlock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3638
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3639
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3640
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, -1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3641
+  } else if (subcmd == scmd_roster_note) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3642
+    roster_note(values[pos_roster_note_jid].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3643
+                values[pos_roster_note_rst].value.swc,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3644
+                values[pos_roster_note_text].value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3645
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3646
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3647
+  } else if (subcmd == scmd_roster_resource_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3648
+    buddy_setactiveresource(values[pos_roster_reslock_jid].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3649
+                            values[pos_roster_reslock_jid].value.rjid.resource);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3650
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3651
+  } else if (subcmd == scmd_roster_resource_unlock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3652
+    buddy_setactiveresource(values[pos_roster_reslock_jid].value.rjid.bud, NULL);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3653
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3654
+  } else if (subcmd == scmd_roster_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3655
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3656
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3657
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3658
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3659
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3660
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3661
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3662
+  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
  3663
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3664
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3665
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3666
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3667
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3668
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3669
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3670
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3671
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3672
+// statusmask + "clear"
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3673
+// Needs status char set in chkdata.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3674
+static gchar *cmdarg_check_color_statusmask (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3675
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3676
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3677
-  char *subcmd;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3678
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3679
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3680
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3681
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3682
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3683
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3684
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3685
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3686
-    return;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3687
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3688
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3689
-  if (!strcasecmp(subcmd, "roster")) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3690
-    char *status, *wildcard, *color;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3691
-    char **arglist = split_arg(arg, 3, 0);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3692
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3693
-    status = *arglist;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3694
-    wildcard = to_utf8(arglist[1]);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3695
-    color = arglist[2];
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3696
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3697
-    if (status && !strcmp(status, "clear")) { // Not a color command, clear all
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3698
+  if (!g_strcmp0 (arg -> value.arg, "clear"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3699
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3700
+  else
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3701
+    return cmdarg_check_charset (arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3702
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3703
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3704
+static const cmdarg_type_t cmdarg_type_color_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3705
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3706
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3707
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3708
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3709
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3710
+// bjid + "*"
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3711
+static gchar *cmdarg_check_color_roomjid (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3712
+{
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3713
+  if (!g_strcmp0 (arg -> value.arg, "*"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3714
+    return NULL;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3715
+  else
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3716
+    return cmdarg_check_bjid (arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3717
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3718
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3719
+static const cmdarg_type_t cmdarg_type_color_roomjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3720
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3721
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3722
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3723
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3724
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3725
+// TODO: completion, that says, which roster jids do match
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3726
+static const cmdarg_type_t cmdarg_type_bjidmask = {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3727
+  cmdarg_check_nonspace,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3728
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3729
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3730
+};
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3731
+
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3732
+// TODO: completion, based on current room nicks
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3733
+static const cmdarg_type_t cmdarg_type_nick = {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3734
+  cmdarg_check_nonspace,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3735
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3736
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3737
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3738
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3739
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3740
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3741
+static gchar *do_color (const cmdopts_t *command, cmdarg_value_t *values);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3742
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3743
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3744
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3745
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3746
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3747
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3748
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3749
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3750
+  pos_color_scmd          = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3751
+  pos_color_roster_status = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3752
+  pos_color_roster_jid    = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3753
+  pos_color_roster_color  = 3,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3754
+  pos_color_muc_room      = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3755
+  pos_color_muc_mode      = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3756
+  pos_color_nick_nick     = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3757
+  pos_color_nick_color    = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3758
+} pos_color_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3759
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3760
+static const string2enum_t s2e_color_muc[] = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3761
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3762
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3763
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3764
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3765
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3766
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3767
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3768
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3769
+  "color",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3770
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3771
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3772
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3773
+  NULL,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3774
+  (cmdarg_t[2]){{ "subcommand", pos_color_scmd, cmdarg_subcmd | cmdarg_chreq, NULL, NULL },{NULL}},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3775
+  (cmdopts_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3776
+    {"roster", cmd_default, NULL, NULL, NULL, (cmdarg_t[4]){
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3777
+        { "statusmask|clear", pos_color_roster_status, cmdarg_chreq, NULL, &cmdarg_type_color_statusmask, (gpointer)"ofdna_?" },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3778
+        { "jidmask",          pos_color_roster_jid,    cmdarg_check, NULL, &cmdarg_type_bjidmask },
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3779
+        { "color|-",          pos_color_roster_color,  cmdarg_check, NULL, &cmdarg_type_color },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3780
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3781
+      }, NULL, (gpointer)scmd_color_roster},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3782
+    {"muc", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3783
+        { "roomjid",         pos_color_muc_room, cmdarg_chreq, NULL, &cmdarg_type_color_roomjid },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3784
+        { "on|off|preset|-", pos_color_muc_mode, cmdarg_chreq, "on", &cmdarg_type_string2enum, (gpointer)s2e_color_muc },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3785
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3786
+      }, NULL, (gpointer)scmd_color_muc},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3787
+    {"mucnick", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3788
+        { "nick",    pos_color_nick_nick,  cmdarg_chreq, NULL, &cmdarg_type_nick },
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3789
+        { "color|-", pos_color_nick_color, cmdarg_chreq, NULL, &cmdarg_type_color },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3790
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3791
+      }, NULL, (gpointer)scmd_color_mucnick},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3792
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3793
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3794
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3795
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3796
+static gchar *do_color (const cmdopts_t *options, cmdarg_value_t *values)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3797
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3798
+  scmd_color_t subcmd = (scmd_color_t) (values[pos_color_scmd].value.cmd -> userdata);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3799
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3800
+  if (subcmd == scmd_color_roster) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3801
+    const gchar *status   = values[pos_color_roster_status].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3802
+    const gchar *wildcard = values[pos_color_roster_jid].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3803
+    const gchar *color    = values[pos_color_roster_color].value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3804
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3805
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3806
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3807
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3808
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3809
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3810
+      if ((!wildcard) || (!color)) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3811
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3812
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3813
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3814
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3815
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3816
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3817
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3818
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3819
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3820
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3821
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3822
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3823
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3824
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3825
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3826
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3827
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3828
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3829
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3830
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3831
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3832
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3833
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3834
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3835
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3836
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3837
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3838
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3839
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3840
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3841
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3842
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3843
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3844
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3845
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3846
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3847
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3848
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3849
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3850
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3851
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3852
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3853
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3854
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3855
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3856
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3857
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3858
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3859
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3860
+  } else if (subcmd == scmd_color_muc) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3861
+    scr_muc_color ( values[pos_color_muc_room].value.arg,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3862
+                    values[pos_color_muc_mode].value.uint );
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3863
+  } else { // scmd_color_mucnick
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3864
+    scr_muc_nick_color( values[pos_color_nick_nick].value.arg,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3865
+                        values[pos_color_nick_color].value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3866
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3867
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3868
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3869
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3870
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3871
-//  cmd_setstatus(recipient, arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3872
-// Set your Jabber status.
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3873
-// - 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
  3874
-// - 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
  3875
-void cmd_setstatus(const char *recipient, const char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3876
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3877
+//  /status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3878
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3879
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3880
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3881
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3882
+// needs corresponding s2e in chkdata
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3883
+static gchar *cmdarg_check_status_status (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3884
 {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3885
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3886
-  char *status;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3887
-  char *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3888
-  enum imstatus st;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3889
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3890
-  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3891
-    scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3892
-  // We do not return now, so that the status is memorized and used later...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3893
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3894
-  // It makes sense to reset autoaway before changing the status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3895
-  // (esp. for FIFO or remote commands) or the behaviour could be
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3896
-  // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3897
-  if (!recipient)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3898
-    scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3899
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3900
-  paramlst = split_arg(arg, 2, 1); // status, message
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3901
-  status = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3902
-  msg = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3903
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3904
-  if (!status) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3905
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3906
-    return;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3907
+  if (!g_strcmp0(arg -> value.arg, "message")) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3908
+    arg -> value.uint = xmpp_getstatus(); // Preserve current status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3909
+    return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3910
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3911
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3912
-  if      (!strcasecmp(status, IMSTATUS_OFFLINE))       st = offline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3913
-  else if (!strcasecmp(status, IMSTATUS_ONLINE))        st = available;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3914
-  else if (!strcasecmp(status, IMSTATUS_AVAILABLE))     st = available;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3915
-  else if (!strcasecmp(status, IMSTATUS_AWAY))          st = away;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3916
+  return cmdarg_check_string2enum (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3917
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3918
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3919
+static const cmdarg_type_t cmdarg_type_status_status = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3920
+  cmdarg_check_status_status,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3921
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3922
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3923
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3924
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3925
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3926
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3927
+static gchar *do_status (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3928
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3929
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3930
+  pos_status_status  = 0,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3931
+  pos_status_jid     = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3932
+  pos_status_message = 2,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3933
+} pos_status_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3934
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3935
+static const string2enum_t s2e_status2[] = {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3936
+  { "away",      away        },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3937
+  { "offline",   offline     },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3938
+  { "online",    available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3939
+  { "avail",     available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3940
+  { "notavail",  notavail    },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3941
+  { "dnd",       dontdisturb },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3942
+  { "free",      freeforchat },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3943
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3944
-  else if (!strcasecmp(status, IMSTATUS_INVISIBLE))     st = invisible;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3945
+  { "invisible", invisible   },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3946
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3947
-  else if (!strcasecmp(status, IMSTATUS_DONOTDISTURB))  st = dontdisturb;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3948
-  else if (!strcasecmp(status, IMSTATUS_NOTAVAILABLE))  st = notavail;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3949
-  else if (!strcasecmp(status, IMSTATUS_FREE4CHAT))     st = freeforchat;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3950
-  else if (!strcasecmp(status, "message")) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3951
-    if (!msg || !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3952
-      // We want a message.  If there's none, we give up.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3953
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3954
-      free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3955
-      return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3956
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3957
-    st = xmpp_getstatus();  // Preserve current status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3958
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3959
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3960
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3961
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3962
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3963
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3964
-  // Use provided message
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3965
-  if (msg && !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3966
-    msg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3967
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3968
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3969
-  // If a recipient is specified, let's don't use default status messages
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3970
-  if (recipient && !msg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3971
-    msg = "";
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3972
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3973
-  xmpp_setstatus(st, recipient, msg, FALSE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3974
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3975
-  free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3976
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3977
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3978
-static void do_status(char *arg)
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3979
+  // XXX ugly
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3980
+  { "show",      imstatus_size},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3981
+  { NULL,        0           },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3982
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3983
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3984
+static cmdopts_t def_status = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3985
+  "status",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3986
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3987
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3988
+  do_status,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3989
+  (cmdopt_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3990
+    { 't', "to",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3991
+           { "jid", pos_status_jid, cmdarg_default, NULL, &cmdarg_type_fjid } },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3992
+    {0}
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3993
+  },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3994
+  (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3995
+    { "status",  pos_status_status,  cmdarg_chreq, "show",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3996
+                 &cmdarg_type_status_status, (gpointer)s2e_status2 },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3997
+    { "message", pos_status_message, cmdarg_eol,   NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3998
+                 &cmdarg_type_nonspace },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3999
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4000
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4001
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4002
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4003
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4004
+static gchar *do_status (const cmdopts_t *options, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4005
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4006
-  if (!*arg) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4007
+  if (values[pos_status_status].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
  4008
     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
  4009
     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
  4010
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4011
                  (sm ? sm : ""));
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4012
-    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4013
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4014
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4015
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4016
+    scr_check_auto_away(TRUE);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4017
+    xmpp_setstatus(values[pos_status_status].value.uint,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4018
+                   values[pos_status_jid].value.arg,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4019
+                   values[pos_status_message].value.arg, FALSE);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4020
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4021
-  arg = to_utf8(arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4022
-  cmd_setstatus(NULL, arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4023
-  g_free(arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4024
+  return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4025
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4026
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4027
-static void do_status_to(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4028
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4029
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4030
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4031
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4032
+static gchar *do_status_to (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4033
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4034
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4035
+  pos_statusto_jid     = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4036
+  pos_statusto_status  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4037
+  pos_statusto_message = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4038
+} pos_statusto_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4039
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4040
+// no "show" here
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4041
+static const string2enum_t s2e_status[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4042
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4043
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4044
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4045
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4046
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4047
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4048
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4049
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4050
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4051
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4052
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4053
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4054
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4055
+static cmdopts_t def_status_to = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4056
+  "status_to",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4057
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4058
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4059
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4060
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4061
+  (cmdarg_t[4]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4062
+    {"jid",     pos_statusto_jid,     cmdarg_chreq, NULL, &cmdarg_type_fjid},
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4063
+    {"status",  pos_statusto_status,  cmdarg_chreq, NULL, &cmdarg_type_status_status, (gpointer)s2e_status},
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4064
+    {"message", pos_statusto_message, cmdarg_eol,   NULL, &cmdarg_type_nonspace},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4065
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4066
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4067
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4068
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4069
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4070
+static gchar *do_status_to (const cmdopts_t *options, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4071
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4072
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4073
-  char *fjid, *st, *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4074
-  char *jid_utf8 = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4075
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4076
-  paramlst = split_arg(arg, 3, 1); // jid, status, [message]
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4077
-  fjid = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4078
-  st = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4079
-  msg = *(paramlst+2);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4080
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4081
-  if (!fjid || !st) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4082
-    scr_LogPrint(LPRINT_NORMAL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4083
-                 "Please specify both a Jabber ID and a status.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4084
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4085
-    return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4086
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4087
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4088
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4089
+  fjid = values[pos_statusto_jid].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4090
+  st   = values[pos_statusto_status].value.uint;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4091
+  msg  = values[pos_statusto_message].value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4092
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4093
+  { // get status name
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4094
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4095
+    for (list = s2e_status; list -> name != NULL; list ++)
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4096
+      if (list -> value == st) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4097
+        stname = list -> name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4098
+        break;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4099
+      }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4100
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4101
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4102
-  // Allow things like /status_to "" away
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4103
-  if (!*fjid || !strcmp(fjid, "."))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4104
-    fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4105
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4106
-  if (fjid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4107
-    // The JID has been specified.  Quick check...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4108
-    if (check_jid_syntax(fjid)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4109
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4110
-                   "<%s> is not a valid Jabber ID.", fjid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4111
-      fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4112
-    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4113
-      // Convert jid to lowercase
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4114
-      char *p = fjid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4115
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4116
-        *p = tolower(*p);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4117
-      fjid = jid_utf8 = to_utf8(fjid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4118
-    }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4119
+  // prevent default status message
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4120
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4121
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4122
+  scr_log_print (LPRINT_LOGNORM, 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4123
+                 "Sending to <%s> /status %s %s", fjid, stname, msg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4124
+  if (!xmpp_is_online())
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4125
+    scr_log_print (LPRINT_NORMAL, "You are currently not connected...");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4126
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4127
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4128
+  return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4129
+}
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4130
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4131
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4132
+//  /add
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4133
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4134
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4135
+static gchar *do_add (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4136
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4137
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4138
+  pos_add_jid  = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4139
+  pos_add_name = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4140
+} pos_add_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4141
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4142
+static cmdopts_t def_add = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4143
+  "add",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4144
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4145
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4146
+  do_add,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4147
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4148
+  (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4149
+    { "jid",  pos_add_jid,  cmdarg_chreq,   ".",  &cmdarg_type_bjid },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4150
+    { "name", pos_add_name, cmdarg_default, NULL, &cmdarg_type_nonspace },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4151
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4152
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4153
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4154
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4155
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4156
+static gchar *do_add (const cmdopts_t *options, cmdarg_value_t *values)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4157
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4158
+  gchar *jid = values[pos_add_jid].value.arg;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4159
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4160
+  // XXX
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4161
+  //mc_strtolower(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4162
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4163
+  xmpp_addbuddy(jid, values[pos_add_name].value.arg, NULL);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4164
+  scr_log_print (LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4165
+                 jid);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4166
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4167
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4168
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4169
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4170
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4171
+//  /del
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4172
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4173
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4174
+static gchar *do_del (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4175
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4176
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4177
+  pos_del_jid    = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4178
+  pos_del_dryrun = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4179
+} pos_del_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4180
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4181
+static cmdopts_t def_del = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4182
+  "del",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4183
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4184
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4185
+  do_del,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4186
+  (cmdopt_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4187
+    { 'n', "dryrun",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4188
+      { "dryrun", pos_del_dryrun, cmdarg_trigger, NULL, NULL } },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4189
+    {0}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4190
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4191
+  (cmdarg_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4192
+    { "jid", pos_del_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4193
+           (gpointer) (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_GROUP) },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4194
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4195
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4196
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4197
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4198
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4199
+static gchar *do_del (const cmdopts_t *options, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4200
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4201
+  gpointer   buddy = values[pos_del_jid].value.rjid.bud;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4202
+  const char *jid  = buddy_getjid (buddy);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4203
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4204
+  if (buddy_gettype(buddy) & ROSTER_TYPE_ROOM)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4205
+    // This is a chatroom
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4206
+    if (buddy_getinsideroom(buddy))
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4207
+      return g_strdup_printf ("You have to leave room <%s> before deleting it!",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4208
+                              jid);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4209
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4210
+  scr_log_print (LPRINT_LOGNORM, "Removing <%s>...", jid);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4211
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4212
+  if (values[pos_del_dryrun].value.swc) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4213
+    scr_log_print (LPRINT_LOGNORM, "... not really.");
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4214
   } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4215
-    // Add the current buddy
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4216
-    if (current_buddy)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4217
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4218
-    if (!fjid)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4219
-      scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4220
+    // Close the buffer
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4221
+    scr_buffer_purge(1, jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4222
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4223
+    xmpp_delbuddy(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4224
+    scr_update_buddy_window();
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4225
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4226
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4227
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4228
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4229
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4230
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4231
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4232
-    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
  4233
-    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
  4234
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4235
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4236
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4237
-    g_free(jid_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4238
-  }
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4239
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4240
+  return NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4241
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4242
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4243
-static void do_add(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4244
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4245
+//  /group
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4246
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4247
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4248
+static void group_cmd (gpointer group, scmd_group_t action) 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4249
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4250
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4251
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4252
-  char *jid_utf8 = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4253
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4254
-  if (!xmpp_is_online()) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4255
-    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4256
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4257
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4258
-
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4259
-  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
  4260
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4261
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4262
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4263
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4264
-    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
  4265
-  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
  4266
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4267
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4268
-  if (id) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4269
-    // The JID has been specified.  Quick check...
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4270
-    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
  4271
-      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
  4272
-                   "<%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
  4273
-      id = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4274
-    } else {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4275
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4276
-      id = jid_utf8 = to_utf8(id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4277
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4278
-  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4279
-    // Add the current buddy
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4280
-    if (current_buddy)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4281
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4282
-    if (!id)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4283
-      scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4284
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4285
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4286
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4287
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4288
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4289
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4290
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4291
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4292
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4293
-                 id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4294
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4295
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4296
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4297
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4298
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4299
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4300
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4301
-static void do_del(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4302
-{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4303
-  const char *bjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4304
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4305
-  if (*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4306
-    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
  4307
-                 "the currently-selected buddy will be deleted.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4308
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4309
-  }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4310
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4311
-  if (!current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4312
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4313
-  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
  4314
-  if (!bjid)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4315
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4316
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4317
-  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
  4318
-    // 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
  4319
-    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
  4320
-      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
  4321
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4322
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4323
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4324
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4325
-  // 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
  4326
-  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
  4327
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4328
-  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
  4329
-  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
  4330
-  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
  4331
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4332
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4333
-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
  4334
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4335
-  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
  4336
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4337
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4338
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4339
-  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
  4340
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4341
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4342
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4343
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4344
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4345
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4346
-  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
  4347
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4348
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4349
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4350
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4351
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4352
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4353
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4354
-    goto do_group_return;   // Should not happen
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4355
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4356
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4357
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4358
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4359
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4360
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4361
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4362
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4363
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4364
-    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
  4365
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4366
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4367
-  if (arg && *arg) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4368
-    GSList *roster_elt;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4369
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4370
-    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
  4371
-    g_free(group_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4372
-    if (roster_elt)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4373
-      group = buddy_getgroup(roster_elt->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4374
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4375
-    group = buddy_getgroup(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4376
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4377
-  if (!group) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4378
-    scr_LogPrint(LPRINT_NORMAL, "Group not found.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4379
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4380
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4381
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4382
   // We'll have to redraw the chat window if we're not currently on the group
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4383
   // entry itself, because it means we'll have to leave the current buddy
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4384
   // chat window.
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4385
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4386
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4387
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4388
-  if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4389
-    scr_LogPrint(LPRINT_NORMAL, "You need to select a group.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4390
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4391
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4392
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4393
-  if (group_state != group_unfold && leave_buddywindow)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4394
+  if (action != scmd_group_unfold &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4395
+      ((!current_buddy) ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4396
+       (group != BUDDATA(current_buddy) &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4397
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4398
     scr_roster_prev_group();
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4399
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4400
-  buddy_hide_group(group, group_state);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4401
+  buddy_hide_group(group, action);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4402
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4403
   buddylist_build();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4404
   update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4405
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4406
-do_group_return:
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4407
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4408
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4409
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4410
+static gchar *do_group (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4411
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4412
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4413
+  pos_group_group  = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4414
+  pos_group_action = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4415
+} pos_group_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4416
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4417
+static const string2enum_t s2e_group_scmd[] = {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4418
+  { "expand", scmd_group_unfold },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4419
+  { "unfold", scmd_group_unfold },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4420
+  { "shrink", scmd_group_fold   },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4421
+  { "fold",   scmd_group_fold   },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4422
+  { "toggle", scmd_group_toggle },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4423
+  { NULL,     0                 },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4424
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4425
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4426
+#define SCMD_GROUP(NAME, REALNAME) \
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4427
+    { #NAME, cmd_default, NULL, NULL, NULL, NULL, NULL, \
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4428
+             (gpointer)scmd_group_##REALNAME }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4429
+static cmdopts_t def_group = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4430
+  "group",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4431
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4432
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4433
+  do_group,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4434
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4435
+  (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4436
+    { "subcommand", pos_group_action, cmdarg_chreq,              NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4437
+                    &cmdarg_type_string2enum, (gpointer)s2e_group_scmd },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4438
+    { "group",      pos_group_group,  cmdarg_chreq | cmdarg_eol, ".",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4439
+                    &cmdarg_type_roster_group },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4440
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4441
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4442
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4443
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4444
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4445
+static gchar *do_group(const cmdopts_t *options, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4446
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4447
+  //if (!current_buddy) // XXX do we need this still?
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4448
+  //  return g_strdup("Command needs selected buddy.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4449
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4450
+  group_cmd (values[pos_group_group].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4451
+             values[pos_group_action].value.uint);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4452
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4453
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4454
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4455
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4456
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4457
+//  /say
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4458
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4459
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4460
+// FIXME: remove excessive checks, simplify this all. Uses:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4461
+// send_message_to():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4462
+// - send_message()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4463
+// - /msay send_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4464
+// - /say_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4465
+// - /room privmsg
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4466
+// send_message():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4467
+// - say_cmd()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4468
+// - /msay send
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4469
+// say_cmd():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4470
+// - process_line()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4471
+// - /say
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4472
+// Probably at least send_message can be removed, and /msay send can use
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4473
+// say_cmd().
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4474
+// 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4475
+// say_cmd() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4476
+// - scr_set_chatmode(TRUE);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4477
+// - scr_show_buddy_window();
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4478
+// - check current buddy presence and type
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4479
+// - buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4480
+// send_message() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4481
+// - check current buddy presence and jid availability (type check should ensure that, I think)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4482
+// - determines active resource of current buddy
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4483
+// send_message_to() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4484
+// - checks online
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4485
+// - checks jid presence
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4486
+// - checks message presence
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4487
+// - checks syntax of jid
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4488
+// - converts message type
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4489
+// - extracts bare jid (for hook)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4490
+// - jumps to window if not quiet
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4491
+// - unsets resource (for hook)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4492
+// - prepares message for hook
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4493
+// - sends message
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4494
+// - checks for encryption error
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4495
+// - calls hook
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4496
+// So, we can make 'activeresource' checker, that will eliminate most of the checks,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4497
+// we can move online check to caller space, we can do chatmode things only when not
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4498
+// quiet. That essentially leaves only send_message_to. However that causes mcabber
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4499
+// not enter chat mode, when on wrong buddy (status/group).
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4500
+// Add '--to' and '--subject' to commands.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4501
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4502
 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
  4503
-                           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
  4504
+                           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
  4505
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4506
   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
  4507
   char *hmsg;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4508
@@ -1285,6 +2136,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4509
   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
  4510
   int isroom;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4511
   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
  4512
+  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
  4513
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4514
   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
  4515
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4516
@@ -1299,11 +2151,15 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4517
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4518
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4519
   if (check_jid_syntax((char*)fjid)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4520
-    scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4521
-                 "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4522
+    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
  4523
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4524
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4525
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4526
+  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
  4527
+    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
  4528
+  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
  4529
+    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
  4530
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4531
   // 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
  4532
   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
  4533
   if (rp)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4534
@@ -1354,8 +2210,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4535
 //  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
  4536
 // 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
  4537
 // the network.
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4538
-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
  4539
-                         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
  4540
+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
  4541
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4542
   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
  4543
   char *jid;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4544
@@ -1378,34 +2233,13 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4545
   else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4546
     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
  4547
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4548
-  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
  4549
+  send_message_to(jid, msg, subj, msgtype, FALSE);
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4550
   g_free(jid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4551
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4552
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4553
-static LmMessageSubType scan_mtype(char **arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4554
-{
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4555
-  // Try splitting it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4556
-  char **parlist = split_arg(*arg, 2, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4557
-  LmMessageSubType result = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4558
-  // Is it a good parameter?
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4559
-  if (parlist && *parlist) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4560
-    if (!strcmp("-n", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4561
-      result = LM_MESSAGE_SUB_TYPE_NORMAL;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4562
-    } else if (!strcmp("-h", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4563
-      result = LM_MESSAGE_SUB_TYPE_HEADLINE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4564
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4565
-    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
  4566
-      *arg += strlen(*arg) - (parlist[1] ? strlen(parlist[1]) : 0);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4567
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4568
-  // Anything found? -> skip it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4569
-  free_arg_lst(parlist);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4570
-  return result;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4571
-}
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4572
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4573
-void say_cmd(char *arg, int parse_flags)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4574
+static void say_cmd(char *arg, msgtype_t msgtype)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4575
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4576
   gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4577
-  LmMessageSubType msgtype = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4578
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4579
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4580
   scr_show_buddy_window();
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4581
@@ -1424,140 +2258,200 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4582
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4583
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4584
   buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4585
-  if (parse_flags)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4586
-    msgtype = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4587
-  arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4588
   send_message(arg, NULL, msgtype);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4589
-  g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4590
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4591
 
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4592
-static void do_say(char *arg) {
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4593
-  say_cmd(arg, 1);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4594
+static gchar *do_say (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4595
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4596
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4597
+  pos_say_msg     = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4598
+  pos_say_msgtype = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4599
+} pos_say_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4600
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4601
+static cmdopts_t def_say = {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4602
+  "say",
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4603
+  cmd_default,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4604
+  NULL,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4605
+  do_say,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4606
+  (cmdopt_t[4]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4607
+    { 'n', "normal",   { "normal",   pos_say_msgtype, cmdarg_switch, NULL, NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4608
+                                     NULL, (gpointer)msgtype_normal}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4609
+    { 'h', "headline", { "headline", pos_say_msgtype, cmdarg_switch, NULL, NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4610
+                                     NULL, (gpointer)msgtype_headline } },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4611
+    { 'd', "default",  { "default",  pos_say_msgtype, cmdarg_switch, NULL, NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4612
+                                     NULL, (gpointer)msgtype_not_set } },
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4613
+    {0}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4614
+  },
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4615
+  (cmdarg_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4616
+    { "message", pos_say_msg, cmdarg_eol | cmdarg_chreq, NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4617
+                                     &cmdarg_type_nonspace },
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4618
+    {NULL}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4619
+  },
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4620
+  NULL,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4621
+};
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4622
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4623
+static gchar *do_say (const cmdopts_t *options, cmdarg_value_t *values)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4624
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4625
+  say_cmd(values[pos_say_msg].value.arg,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4626
+          (msgtype_t) (values[pos_say_msgtype].src -> userdata));
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4627
+  return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4628
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4629
 
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4630
-static void do_msay(char *arg)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4631
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4632
+//  /msay
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4633
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4634
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4635
+static gchar *do_msay (const cmdopts_t *command, cmdarg_value_t *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4636
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4637
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4638
+  scmd_msay_begin, scmd_msay_verbatim,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4639
+  scmd_msay_send, scmd_msay_send_to,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4640
+  scmd_msay_toggle, scmd_msay_toggle_verbatim,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4641
+  scmd_msay_abort,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4642
+} scmd_msay_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4643
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4644
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4645
+  pos_msay_scmd    = 0,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4646
+  pos_msay_subject = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4647
+  pos_msay_jid     = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4648
+  pos_msay_msgtype = 2,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4649
+} pos_msay_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4650
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4651
+static cmdopts_t def_msay = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4652
+  "msay",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4653
+  cmd_default,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4654
+  NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4655
+  do_msay,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4656
+  NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4657
+  (cmdarg_t[2]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4658
+    { "subcommand", pos_msay_scmd, cmdarg_subcmd|cmdarg_chreq, NULL, NULL },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4659
+    {NULL},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4660
+  },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4661
+  (cmdopts_t[8]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4662
+    { "begin", cmd_default, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4663
+      (cmdarg_t[2]){{"subject", pos_msay_subject, cmdarg_eol, NULL, &cmdarg_type_nonspace}, {NULL}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4664
+      NULL, (gpointer)scmd_msay_begin },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4665
+    { "verbatim", cmd_default, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4666
+      (cmdarg_t[2]){{"subject", pos_msay_subject, cmdarg_eol, NULL, &cmdarg_type_nonspace}, {NULL}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4667
+      NULL, (gpointer)scmd_msay_verbatim },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4668
+    { "send", cmd_default, NULL, NULL,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4669
+      (cmdopt_t[4]){
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4670
+        {'n', "normal",   {"normal",   pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_normal}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4671
+        {'h', "headline", {"headline", pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_headline}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4672
+        {'d', "default",  {"default",  pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_not_set}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4673
+        {0}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4674
+      },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4675
+      NULL, NULL, (gpointer)scmd_msay_send, 0 },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4676
+    { "send_to", cmd_default, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4677
+      (cmdopt_t[4]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4678
+        {'n', "normal",   {"normal",   pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_normal}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4679
+        {'h', "headline", {"headline", pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_headline}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4680
+        {'d', "default",  {"default",  pos_msay_msgtype, cmdarg_switch, NULL, NULL, NULL, (gpointer)msgtype_not_set}},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4681
+        {0}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4682
+      },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4683
+      (cmdarg_t[2]){{"jid", pos_msay_jid, cmdarg_chreq, NULL, &cmdarg_type_fjid}, {NULL}}, 
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4684
+      NULL, (gpointer)scmd_msay_send_to },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4685
+    { "toggle", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_msay_toggle },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4686
+    { "toggle_verbatim", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_msay_toggle_verbatim },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4687
+    { "abort", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_msay_abort },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4688
+  },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4689
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4690
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4691
+static gchar *do_msay (const cmdopts_t *command, cmdarg_value_t *values)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4692
 {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4693
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4694
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4695
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4696
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4697
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4698
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4699
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4700
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4701
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4702
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4703
-    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
  4704
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4705
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4706
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4707
-    goto do_msay_return;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4708
+  const char  *msg;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4709
+  scmd_msay_t subcmd = (scmd_msay_t) (values[pos_msay_scmd].src -> userdata);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4710
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4711
+  if (subcmd == scmd_msay_toggle) {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4712
+    if (scr_get_multimode())
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4713
+      subcmd = scmd_msay_send;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4714
+    else
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4715
+      subcmd = scmd_msay_begin;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4716
+  } else if (subcmd == scmd_msay_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
  4717
+    if (scr_get_multimode())
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4718
+      subcmd = scmd_msay_send;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4719
+    else
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4720
+      subcmd = scmd_msay_verbatim;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4721
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4722
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4723
-  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
  4724
-    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
  4725
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4726
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4727
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4728
-  } 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
  4729
-    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
  4730
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4731
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4732
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4733
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4734
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4735
-  if (!strcasecmp(subcmd, "abort")) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4736
+  if (subcmd == scmd_msay_abort) {
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4737
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4738
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4739
     scr_set_multimode(FALSE, NULL);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4740
-    goto do_msay_return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4741
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4742
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4743
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4744
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4745
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4746
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4747
-      verbat = TRUE;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4748
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4749
+  } else if (subcmd == scmd_msay_begin || subcmd == scmd_msay_verbatim) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4750
+    gchar *subject = values[pos_msay_subject].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4751
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4752
+    if (subcmd == scmd_msay_verbatim) {
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4753
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4754
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4755
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4756
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4757
+      scr_set_multimode(1, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4758
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4759
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4760
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4761
-                 verbat ? "VERBATIM " : "");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4762
+                 subcmd == scmd_msay_verbatim ? "VERBATIM " : "");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4763
     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
  4764
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4765
-    if (verbat)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4766
+    if (subcmd == scmd_msay_verbatim)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4767
       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
  4768
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4769
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4770
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4771
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4772
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4773
-    goto do_msay_return;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4774
+    return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4775
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4776
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4777
-  /* send/send_to command */
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4778
+  /* scmd_msay_send or scmd_msay_send_to */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4779
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4780
   if (!scr_get_multimode()) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4781
-    scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4782
+    return g_strdup_printf ("No message to send.  "
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4783
                  "Use \"%s begin\" first.", mkcmdstr("msay"));
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4784
-    goto do_msay_return;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4785
   }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4786
 
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4787
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4788
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4789
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4790
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4791
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4792
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4793
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4794
-    // 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
  4795
-    // 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
  4796
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4797
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4798
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4799
-      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
  4800
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4801
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4802
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4803
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4804
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4805
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4806
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4807
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4808
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4809
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4810
-    if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4811
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4812
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4813
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4814
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4815
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4816
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4817
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4818
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4819
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4820
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4821
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4822
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4823
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4824
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4825
-      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
  4826
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4827
+  if ((msg = scr_get_multiline())) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4828
+    msgtype_t msg_type = (msgtype_t) (values[pos_msay_msgtype].src -> userdata);
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4829
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4830
+    if (subcmd == scmd_msay_send_to) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4831
+      const char *jid = values[pos_msay_jid].value.arg;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4832
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4833
+      // 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
  4834
+      // 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
  4835
+      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
  4836
+                          msg_type, FALSE))
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4837
+        return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4838
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4839
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4840
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4841
+      if (!current_buddy) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4842
+        return g_strdup ("Whom are you talking to?");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4843
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4844
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4845
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4846
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4847
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4848
+        return g_strdup ("This is not a user.");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4849
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4850
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4851
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4852
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4853
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4854
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4855
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4856
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4857
   scr_LogPrint(LPRINT_NORMAL, "You have left multi-line message mode.");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4858
-do_msay_return:
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4859
-  free_arg_lst(paramlst);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4860
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4861
+  return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4862
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4863
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4864
+//
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4865
+//  /say_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4866
+//
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4867
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4868
 //  load_message_from_file(filename)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4869
 // Read the whole content of a file.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4870
 // The data are converted to UTF8, they should be freed by the caller after
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4871
 // use.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4872
-char *load_message_from_file(const char *filename)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4873
+char *load_message_from_file(const char *filename, const char *localfn)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4874
 {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4875
   FILE *fd;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4876
   struct stat buf;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4877
@@ -1566,7 +2460,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4878
   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
  4879
   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
  4880
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4881
-  fd = fopen(filename, "r");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4882
+  fd = fopen(localfn, "r");
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4883
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4884
   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
  4885
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4886
@@ -1632,273 +2526,314 @@
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4887
   return msgbuf_utf8;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4888
 }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4889
 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4890
-static void do_say_to(char *arg)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4891
+static gchar *do_say_to (const cmdopts_t *command, cmdarg_value_t *values);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4892
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4893
+typedef enum {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4894
+  pos_sayto_jid     = 0,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4895
+  pos_sayto_msg     = 1,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4896
+  pos_sayto_msgtype = 2,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4897
+  pos_sayto_quiet   = 3,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4898
+  pos_sayto_esc     = 4,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4899
+  pos_sayto_file    = 5,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4900
+} pos_sayto_t;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4901
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4902
+static cmdopts_t def_say_to = {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4903
+  "say_to",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4904
+  cmd_default,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4905
+  cmd_check_online,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4906
+  do_say_to,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4907
+  (cmdopt_t[7]){
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4908
+    {'n', "normal",   {"normal",   pos_sayto_msgtype, cmdarg_switch,   NULL, NULL, NULL, (gpointer)msgtype_normal}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4909
+    {'h', "headline", {"headline", pos_sayto_msgtype, cmdarg_switch,   NULL, NULL, NULL, (gpointer)msgtype_headline}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4910
+    {'d', "default",  {"default",  pos_sayto_msgtype, cmdarg_switch,   NULL, NULL, NULL, (gpointer)msgtype_not_set}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4911
+    {'q', "quiet",    {"quiet",    pos_sayto_quiet,   cmdarg_trigger,  NULL, NULL}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4912
+    {'e', "escapes",  {"escapes",  pos_sayto_esc,     cmdarg_trigger,  NULL, NULL}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4913
+    {'f', "file",     {"filename", pos_sayto_file,    cmdarg_required, NULL, &cmdarg_type_filename}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4914
+    {0}
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4915
+  },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4916
+  (cmdarg_t[3]){
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4917
+    {"jid",     pos_sayto_jid, cmdarg_chreq, ".",  &cmdarg_type_fjid},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4918
+    {"message", pos_sayto_msg, cmdarg_eol,   NULL, &cmdarg_type_nonspace},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4919
+    {NULL}
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4920
+  },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4921
+  NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4922
+};
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4923
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4924
+static gchar *do_say_to (const cmdopts_t *command, cmdarg_value_t *values)
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4925
 {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4926
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4927
-  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
  4928
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4929
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4930
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4931
-  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
  4932
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4933
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4934
-  bool eval = FALSE;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4935
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4936
-  if (!xmpp_is_online()) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4937
-    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4938
-    return;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4939
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4940
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4941
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4942
-  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
  4943
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4944
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4945
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4946
-    free_arg_lst(paramlst);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4947
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4948
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4949
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4950
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4951
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4952
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4953
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4954
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4955
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4956
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4957
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4958
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4959
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4960
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4961
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4962
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4963
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4964
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4965
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4966
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4967
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4968
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4969
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4970
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4971
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4972
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4973
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4974
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4975
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4976
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4977
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4978
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4979
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4980
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4981
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4982
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4983
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4984
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4985
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4986
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4987
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4988
-
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4989
-  if (fjid[0] == '.') {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4990
-    const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4991
-    if (fjid[1] == '\0') {
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4992
-      fjid = g_strdup(cjid);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4993
-    } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4994
-      char *res_utf8 = to_utf8(fjid+2);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4995
-      fjid = g_strdup_printf("%s%c%s", cjid, JID_RESOURCE_SEPARATOR, res_utf8);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4996
-      g_free(res_utf8);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4997
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4998
-      fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  4999
-  } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5000
-    fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5001
-
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5002
+  char *fjid, *msg, *file;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5003
+  gchar *freeme  = NULL; // fjid
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5004
+  gchar *freeme2 = NULL; // msg
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5005
+  msgtype_t msg_type = (msgtype_t) (values[pos_sayto_msgtype].src -> userdata);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5006
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5007
+  fjid = values[pos_sayto_jid].value.arg;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5008
+  msg  = values[pos_sayto_msg].value.arg;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5009
+  file = values[pos_sayto_file].value.fname.utf8;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5010
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5011
+  // XXX this is not yet in default fjid checker. should we add it there?
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5012
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5013
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5014
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5015
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5016
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5017
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5018
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5019
         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
  5020
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5021
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5022
         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
  5023
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5024
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5025
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5026
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5027
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5028
-  if (check_jid_syntax(fjid)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5029
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5030
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5031
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5032
-    g_free(fjid);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5033
-    return;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5034
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5035
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5036
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5037
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5038
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5039
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5040
+  if (file == NULL) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5041
+    if (values[pos_sayto_esc].value.swc) {
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5042
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5043
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5044
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5045
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5046
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5047
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5048
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5049
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5050
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5051
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5052
   } else {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5053
-    char *filename_xp;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5054
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5055
       scr_LogPrint(LPRINT_NORMAL, "say_to: extra parameter ignored.");
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5056
-    filename_xp = expand_filename(file);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5057
-    msg = msg_utf8 = load_message_from_file(filename_xp);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5058
-    g_free(filename_xp);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5059
-    g_free(file);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5060
+    freeme2 = msg = load_message_from_file(file,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5061
+                                           values[pos_sayto_file].value.fname.local);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5062
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5063
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5064
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5065
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5066
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5067
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5068
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5069
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5070
-  free_arg_lst(paramlst);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5071
+  send_message_to(fjid, msg, NULL, msg_type, values[pos_sayto_quiet].value.swc);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5072
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5073
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5074
+  g_free(freeme2);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5075
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5076
+  return NULL;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5077
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5078
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5079
-//  buffer_updown(updown, nblines)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5080
-// updown: -1=up, +1=down
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5081
-inline static void buffer_updown(int updown, char *nlines)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5082
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5083
+//  /buffer
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5084
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5085
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5086
+// argument type
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5087
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5088
+// Wrapper over uint to check maximum
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5089
+// XXX:
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5090
+//  * use chkdata in uint checker for that?
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5091
+static gchar *cmdarg_check_buffer_percent (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5092
 {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5093
-  int nblines;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5094
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5095
-  if (!nlines || !*nlines)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5096
-    nblines = 0;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5097
-  else
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5098
-    nblines = strtol(nlines, NULL, 10);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5099
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5100
-  if (nblines >= 0)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5101
-    scr_buffer_scroll_up_down(updown, nblines);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5102
+  gchar *error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5103
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5104
+  if (!(error = cmdarg_check_uint (value))) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5105
+    if (value -> value.uint > 100) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5106
+      error = g_strdup_printf ("Percent value %u is greater than 100.", value -> value.uint);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5107
+      value -> value.uint = 0;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5108
+    }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5109
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5110
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5111
+  return error;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5112
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5113
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5114
-static void buffer_search(int direction, char *arg)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5115
+static cmdarg_type_t cmdarg_type_buffer_percent = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5116
+  cmdarg_check_buffer_percent,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5117
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5118
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5119
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5120
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5121
+// command
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5122
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5123
+static gchar *do_buffer (const cmdopts_t *command, cmdarg_value_t *values);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5124
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5125
+typedef enum {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5126
+  scmd_buffer_close, scmd_buffer_close_all,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5127
+  scmd_buffer_clear, scmd_buffer_purge,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5128
+  scmd_buffer_list,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5129
+  scmd_buffer_top, scmd_buffer_bottom, scmd_buffer_up, scmd_buffer_down,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5130
+  scmd_buffer_date, scmd_buffer_percent, scmd_buffer_readmark,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5131
+  scmd_buffer_search_backward, scmd_buffer_search_forward,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5132
+  scmd_buffer_scroll_lock, scmd_buffer_scroll_unlock,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5133
+  scmd_buffer_scroll_toggle,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5134
+  scmd_buffer_save,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5135
+} scmd_buffer_t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5136
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5137
+typedef enum {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5138
+  pos_buffer_scmd      = 0,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5139
+  pos_buffer_jid       = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5140
+  pos_buffer_n         = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5141
+  pos_buffer_date      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5142
+  pos_buffer_percent   = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5143
+  pos_buffer_text      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5144
+  pos_buffer_file      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5145
+} pos_buffer_t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5146
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5147
+static cmdopts_t def_buffer = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5148
+  "buffer",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5149
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5150
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5151
+  do_buffer,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5152
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5153
+  (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5154
+    { "subcommand", pos_buffer_scmd, cmdarg_subcmd|cmdarg_chreq, NULL, NULL },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5155
+    {NULL},
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5156
+  },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5157
+  (cmdopts_t[19]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5158
+    { "close", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5159
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5160
+        { "jid", pos_buffer_jid, cmdarg_required, NULL, &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT|ROSTER_TYPE_SPECIAL) },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5161
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5162
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5163
+      NULL, (gpointer)scmd_buffer_close },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5164
+    { "close_all", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_close_all },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5165
+    { "clear", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_clear },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5166
+    { "purge", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5167
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5168
+        { "jid", pos_buffer_jid, cmdarg_required, NULL, &cmdarg_type_roster_bjid, (gpointer)(ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT|ROSTER_TYPE_SPECIAL) },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5169
+        {0}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5170
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5171
+      NULL, (gpointer)scmd_buffer_purge },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5172
+    { "list", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_list },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5173
+    { "top",    cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_top    },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5174
+    { "bottom", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_bottom },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5175
+    { "up", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5176
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5177
+        { "n", pos_buffer_n, cmdarg_chreq, "0", &cmdarg_type_uint },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5178
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5179
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5180
+      NULL, (gpointer)scmd_buffer_up },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5181
+    { "down", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5182
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5183
+        { "n", pos_buffer_n, cmdarg_chreq, "0", &cmdarg_type_uint },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5184
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5185
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5186
+      NULL, (gpointer)scmd_buffer_down },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5187
+    { "date", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5188
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5189
+        { "date", pos_buffer_date, cmdarg_chreq, "1", &cmdarg_type_date },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5190
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5191
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5192
+      NULL, (gpointer)scmd_buffer_date },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5193
+    { "%", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5194
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5195
+        { "percent", pos_buffer_percent, cmdarg_chreq, "100", &cmdarg_type_buffer_percent },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5196
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5197
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5198
+      NULL, (gpointer)scmd_buffer_percent },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5199
+    { "readmark", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_readmark },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5200
+    { "search_backward", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5201
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5202
+        { "text", pos_buffer_text, cmdarg_chreq, NULL, &cmdarg_type_nonspace },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5203
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5204
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5205
+      NULL, (gpointer)scmd_buffer_search_backward },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5206
+    { "search_forward", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5207
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5208
+        { "text", pos_buffer_text, cmdarg_chreq, NULL, &cmdarg_type_nonspace },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5209
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5210
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5211
+      NULL, (gpointer)scmd_buffer_search_forward },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5212
+    { "scroll_lock",   cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_scroll_lock   },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5213
+    { "scroll_unlock", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_scroll_unlock },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5214
+    { "scroll_toggle", cmd_default, NULL, NULL, NULL, NULL, NULL, (gpointer)scmd_buffer_scroll_toggle },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5215
+    { "save", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5216
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5217
+        { "filename", pos_buffer_file, cmdarg_chreq, NULL, &cmdarg_type_filename },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5218
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5219
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5220
+      NULL, (gpointer)scmd_buffer_save },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5221
+  },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5222
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5223
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5224
+// XXX % command before was able to handle %50
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5225
+static gchar *do_buffer (const cmdopts_t *command, cmdarg_value_t *values)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5226
 {
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5227
-  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
  5228
-    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
  5229
-    return;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5230
+  scmd_buffer_t subcmd = (scmd_buffer_t) (values[pos_buffer_scmd].value.cmd -> userdata);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5231
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5232
+  if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP &&
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5233
+      subcmd != scmd_buffer_close_all) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5234
+    return g_strdup ("Groups have no buffer.");
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5235
   }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5236
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5237
-  scr_buffer_search(direction, arg);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5238
+  if (subcmd == scmd_buffer_close) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5239
+    scr_buffer_purge(1, buddy_getjid(values[pos_buffer_jid].value.rjid.bud));
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5240
+  } else if (subcmd == scmd_buffer_close_all) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5241
+    scr_buffer_purge_all(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5242
+  } else if (subcmd == scmd_buffer_clear) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5243
+    scr_buffer_clear();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5244
+  } else if (subcmd == scmd_buffer_purge) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5245
+    scr_buffer_purge(0, buddy_getjid(values[pos_buffer_jid].value.rjid.bud));
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5246
+  } else if (subcmd == scmd_buffer_list) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5247
+    scr_buffer_list();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5248
+  } else if (subcmd == scmd_buffer_top) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5249
+    scr_buffer_top_bottom(-1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5250
+  } else if (subcmd == scmd_buffer_bottom) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5251
+    scr_buffer_top_bottom(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5252
+  } else if (subcmd == scmd_buffer_up) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5253
+    scr_buffer_scroll_up_down(-1, values[pos_buffer_n].value.uint);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5254
+  } else if (subcmd == scmd_buffer_down) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5255
+    scr_buffer_scroll_up_down(1, values[pos_buffer_n].value.uint);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5256
+  } else if (subcmd == scmd_buffer_date) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5257
+    scr_buffer_date(values[pos_buffer_date].value.time);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5258
+  } else if (subcmd == scmd_buffer_percent) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5259
+    scr_buffer_percent(values[pos_buffer_percent].value.uint);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5260
+  } else if (subcmd == scmd_buffer_readmark) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5261
+    scr_buffer_jump_readmark();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5262
+  } else if (subcmd == scmd_buffer_search_backward) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5263
+    scr_buffer_search(-1, values[pos_buffer_text].value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5264
+  } else if (subcmd == scmd_buffer_search_forward) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5265
+    scr_buffer_search(1, values[pos_buffer_text].value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5266
+  } else if (subcmd == scmd_buffer_scroll_lock) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5267
+    scr_buffer_scroll_lock(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5268
+  } else if (subcmd == scmd_buffer_scroll_unlock) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5269
+    scr_buffer_scroll_lock(0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5270
+  } else if (subcmd == scmd_buffer_scroll_toggle) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5271
+    scr_buffer_scroll_lock(-1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5272
+  } else { // scmd_buffer_save
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5273
+    scr_buffer_dump(values[pos_buffer_file].value.fname.local);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5274
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5275
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5276
+  return NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5277
 }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5278
 
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5279
-static void buffer_date(char *date)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5280
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5281
+//  /clear
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5282
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5283
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5284
+// XXX convert to real alias?
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5285
+static gchar *do_clear (const cmdopts_t *command, cmdarg_value_t *values);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5286
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5287
+static cmdopts_t def_clear = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5288
+  "clear",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5289
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5290
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5291
+  do_clear,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5292
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5293
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5294
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5295
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5296
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5297
+// Alias for "buffer clear"
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5298
+static gchar *do_clear(const cmdopts_t *command, cmdarg_value_t *values)
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5299
 {
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5300
-  time_t t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5301
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5302
-  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
  5303
-    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
  5304
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5305
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5306
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5307
-  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
  5308
-
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5309
-  t = from_iso8601(date, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5310
-  if (t)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5311
-    scr_buffer_date(t);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5312
-  else
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5313
-    scr_LogPrint(LPRINT_NORMAL, "The date you specified is "
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5314
-                 "not correctly formatted or invalid.");
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5315
+  scr_buffer_clear();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5316
+  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
  5317
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5318
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5319
-static void buffer_percent(char *arg1, char *arg2)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5320
-{
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5321
-  // 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
  5322
-  // "%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
  5323
-  // "% 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
  5324
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5325
-  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
  5326
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5327
-    return;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5328
-  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5329
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5330
-  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
  5331
-    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
  5332
-    return;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5333
-  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5334
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5335
-  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
  5336
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5337
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5338
-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
  5339
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5340
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5341
-  char *subcmd;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5342
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5343
-  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
  5344
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5345
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5346
-  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
  5347
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5348
-  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
  5349
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5350
-  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
  5351
-    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
  5352
-    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
  5353
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5354
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5355
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5356
-  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
  5357
-      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
  5358
-    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
  5359
-    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
  5360
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5361
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5362
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5363
-  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
  5364
-    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
  5365
-  } 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
  5366
-    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
  5367
-  } 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
  5368
-    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
  5369
-  } 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
  5370
-    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
  5371
-  } 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
  5372
-    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
  5373
-  } 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
  5374
-    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
  5375
-  } 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
  5376
-    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
  5377
-  } 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
  5378
-    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
  5379
-  } 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
  5380
-    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
  5381
-  } 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
  5382
-    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
  5383
-  } 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
  5384
-    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
  5385
-  } 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
  5386
-    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
  5387
-    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
  5388
-  } 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
  5389
-    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
  5390
-    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
  5391
-  } 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
  5392
-    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
  5393
-  } 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
  5394
-    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
  5395
-  } 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
  5396
-    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
  5397
-  } 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
  5398
-    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
  5399
-  } 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
  5400
-    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
  5401
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5402
-    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
  5403
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5404
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5405
-  free_arg_lst(paramlst);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5406
-}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5407
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5408
-static void do_clear(char *arg)    // Alias for "buffer clear"
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5409
-{
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5410
-  do_buffer("clear");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5411
-}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5412
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5413
-static void do_info(char *arg)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5414
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5415
+//  /info
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5416
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5417
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5418
+static gchar *do_info (const cmdopts_t *command, cmdarg_value_t *values);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5419
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5420
+static cmdopts_t def_info = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5421
+  "clear",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5422
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5423
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5424
+  do_info,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5425
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5426
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5427
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5428
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5429
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5430
+static gchar *do_info (const cmdopts_t *command, cmdarg_value_t *values)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5431
 {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5432
   gpointer bud;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5433
   const char *bjid, *name;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5434
@@ -1906,9 +2841,7 @@
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5435
   char *buffer;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5436
   enum subscr esub;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5437
 
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5438
-  if (!current_buddy)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5439
-    return;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5440
-  bud = BUDDATA(current_buddy);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5441
+  bud    = BUDDATA(current_buddy);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5442
 
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5443
   bjid   = buddy_getjid(bud);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5444
   name   = buddy_getname(bud);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5445
@@ -2031,31 +2964,25 @@
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5446
                                HBB_PREFIX_INFO, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5447
     }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5448
   }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5449
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5450
+  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
  5451
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5452
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5453
+#if 0
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5454
+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
  5455
+  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
  5456
+  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
  5457
+  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
  5458
+  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
  5459
+  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
  5460
+};
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5461
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5462
 // 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
  5463
-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
  5464
+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
  5465
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5466
   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
  5467
   char *buffer;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5468
   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
  5469
-  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
  5470
-         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
  5471
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5472
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5473
-    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
  5474
-      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
  5475
-    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
  5476
-      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
  5477
-    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
  5478
-      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
  5479
-    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
  5480
-      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
  5481
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5482
-      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
  5483
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5484
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5485
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5486
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5487
   // 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
  5488
   scr_set_chatmode(TRUE);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5489
@@ -2075,12 +3002,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5490
     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
  5491
     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
  5492
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5493
-    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
  5494
+    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
  5495
       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
  5496
                (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
  5497
                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
  5498
       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
  5499
-    } 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
  5500
+    } 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
  5501
         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
  5502
         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
  5503
         bool showaffil = (affil != affil_none);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5504
@@ -2096,12 +3023,12 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5505
       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
  5506
                (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
  5507
       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
  5508
-      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
  5509
+      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
  5510
         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
  5511
         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
  5512
                                  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
  5513
       }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5514
-      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
  5515
+      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
  5516
         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
  5517
         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
  5518
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5519
@@ -2145,16 +3072,69 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5520
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5521
 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
  5522
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5523
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5524
+    "rename",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5525
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5526
+      { 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
  5527
+      { 0,             'n', "name",  { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5528
+      { 0,             'g', "group", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5529
+      { CMDOPT_LAST,   'j', "jid",   { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5530
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5531
+    (cmdarg_t[1]){
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5532
+      { 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
  5533
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5534
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5535
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5536
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5537
   const char *bjid, *group;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5538
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5539
   char *newname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5540
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5541
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5542
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5543
+  gboolean reset;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5544
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5545
+  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
  5546
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5547
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5548
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5549
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5550
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5551
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5552
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5553
+  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
  5554
+  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
  5555
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5556
+  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
  5557
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5558
+    srchtype |= ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5559
+    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
  5560
+  } 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
  5561
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5562
+    srchtype = ROSTER_TYPE_GROUP;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5563
+    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
  5564
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5565
+    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
  5566
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5567
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5568
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5569
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5570
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5571
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5572
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5573
+    if (srchtype == ROSTER_TYPE_GROUP)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5574
+      bud = buddy_getgroup(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5575
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5576
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5577
+    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
  5578
+      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
  5579
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5580
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5581
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5582
+    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
  5583
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5584
+      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
  5585
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5586
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5587
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5588
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5589
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5590
+    
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5591
   bjid   = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5592
   group  = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5593
   type   = buddy_gettype(bud);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5594
@@ -2162,11 +3142,13 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5595
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5596
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5597
     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
  5598
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5599
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5600
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5601
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5602
-  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
  5603
+  if (!*newname && !reset) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5604
     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
  5605
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5606
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5607
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5608
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5609
@@ -2181,90 +3163,117 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5610
   //  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5611
   //}
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5612
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5613
-  newname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5614
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5615
   for (p = newname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5616
   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
  5617
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5618
-  strip_arg_special_chars(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5619
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5620
-  name_utf8 = to_utf8(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5621
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5622
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5623
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5624
-    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
  5625
+    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
  5626
     // 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
  5627
     // 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
  5628
     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
  5629
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5630
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5631
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5632
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5633
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5634
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5635
-      /* 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
  5636
-       * 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
  5637
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5638
-      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
  5639
+      // 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
  5640
+      // 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
  5641
+      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
  5642
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5643
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5644
       // 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
  5645
-      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
  5646
+      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
  5647
       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
  5648
           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
  5649
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5650
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5651
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5652
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5653
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5654
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5655
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5656
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5657
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5658
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5659
 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
  5660
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5661
+  cmdopts_t options = {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5662
+    "move",
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5663
+    (cmdopt_t[4]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5664
+      { 0,           'n', "name", { .opt = NULL } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5665
+      { CMDOPT_LAST, 'j', "jid",  { .opt = "." } },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5666
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5667
+    (cmdarg_t[1]){
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5668
+      { 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
  5669
+    },
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5670
+    NULL,
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5671
+  };
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5672
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5673
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5674
   guint type, on_srv;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5675
   char *newgroupname, *p;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5676
-  char *group_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5677
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5678
-  if (!current_buddy)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5679
+  enum findwhat srchwhat = jidsearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5680
+  gchar        *srchterm;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5681
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5682
+  if (cmdopts_parse(arg, &options))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5683
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5684
-  bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5685
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5686
+  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
  5687
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5688
+  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
  5689
+    srchwhat = namesearch;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5690
+    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
  5691
+  } else
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5692
+    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
  5693
+
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5694
+  if (!*srchterm || !strcmp(srchterm, ".")) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5695
+    if (!current_buddy) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5696
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5697
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5698
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5699
+    bud = BUDDATA(current_buddy);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5700
+  } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5701
+    GSList *found;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5702
+    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
  5703
+      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
  5704
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5705
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5706
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5707
+    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
  5708
+                        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
  5709
+    if (!found) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5710
+      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
  5711
+      cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5712
+      return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5713
+    }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5714
+    bud = found -> data;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5715
+  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5716
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5717
   bjid = buddy_getjid(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5718
   name = buddy_getname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5719
   type = buddy_gettype(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5720
   on_srv = buddy_getonserverflag(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5721
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5722
   oldgroupname = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5723
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5724
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5725
     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
  5726
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5727
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5728
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5729
   if (type & ROSTER_TYPE_SPECIAL) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5730
     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
  5731
+    cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5732
     return;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5733
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5734
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5735
-  newgroupname = g_strdup(arg);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5736
   // Remove trailing space
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5737
   for (p = newgroupname; *p; p++) ;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5738
   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
  5739
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5740
-  strip_arg_special_chars(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5741
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5742
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5743
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5744
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5745
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5746
-      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
  5747
+      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
  5748
       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
  5749
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5750
-      /* 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
  5751
-       * 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
  5752
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5753
+      // 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
  5754
+      // 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
  5755
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5756
       // 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
  5757
       guint msgflag;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5758
@@ -2276,7 +3285,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5759
       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
  5760
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5761
         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
  5762
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5763
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5764
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5765
         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
  5766
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5767
@@ -2285,8 +3294,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5768
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5769
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5770
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5771
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5772
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5773
+  cmdopts_free(&options);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5774
   update_roster = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5775
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5776
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5777
@@ -2468,50 +3476,33 @@
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5778
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5779
 static void do_rawxml(char *arg)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5780
 {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5781
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5782
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5783
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5784
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5785
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5786
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5787
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5788
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5789
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5790
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5791
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5792
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5793
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5794
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5795
+        NULL },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5796
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5797
+  };
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5798
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5799
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5800
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5801
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5802
   }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5803
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5804
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5805
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5806
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5807
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5808
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5809
-    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
  5810
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5811
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5812
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5813
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5814
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5815
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5816
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5817
-    gchar *buffer;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5818
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5819
-    if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5820
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5821
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5822
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5823
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5824
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5825
-    // 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
  5826
-    // 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
  5827
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5828
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5829
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5830
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5831
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5832
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5833
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5834
-      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
  5835
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5836
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5837
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5838
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5839
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5840
-  free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5841
+
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5842
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5843
+  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
  5844
+  cmdopts_free(&options);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5845
 }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5846
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  5847
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5848
@@ -2815,6 +3806,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5849
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5850
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5851
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5852
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5853
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5854
 void cmd_room_leave(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5855
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5856
   gchar *roomid, *desc;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5857
@@ -2833,6 +3826,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5858
   g_free(roomid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5859
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5860
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5861
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5862
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5863
 static void room_nick(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5864
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5865
   if (!buddy_getinsideroom(bud)) {
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5866
@@ -2874,7 +3869,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5867
   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
  5868
   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
  5869
   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
  5870
-  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
  5871
+  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
  5872
   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
  5873
   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
  5874
   free_arg_lst(paramlst);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5875
@@ -3052,6 +4047,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5876
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5877
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5878
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5879
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5880
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5881
 //  cmd_room_whois(..)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5882
 // If interactive is TRUE, chatmode can be enabled.
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5883
 // Please note that usernick is expected in UTF-8 locale iff interactive is
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5884
@@ -3146,6 +4143,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5885
     free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5886
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5887
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5888
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5889
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5890
 static void room_bookmark(gpointer bud, char *arg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5891
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  5892
   const char *roomid;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5893
@@ -3290,6 +4289,207 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5894
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5895
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5896
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5897
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5898
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5899
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5900
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5901
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5902
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5903
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5904
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5905
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5906
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5907
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5908
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5909
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5910
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5911
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5912
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5913
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5914
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5915
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5916
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5917
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5918
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5919
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5920
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5921
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5922
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5923
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5924
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5925
+          { CMDOPT_LAST, { .arg = NULL } }, // password
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5926
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5927
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5928
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5929
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5930
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5931
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5932
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5933
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5934
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5935
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5936
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5937
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5938
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5939
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5940
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5941
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5942
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5943
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5944
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5945
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5946
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5947
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5948
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5949
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5950
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5951
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5952
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5953
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5954
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5955
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5956
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5957
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5958
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5959
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5960
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5961
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5962
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5963
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5964
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5965
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5966
+      { "destroy", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5967
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5968
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5969
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5970
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5971
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5972
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5973
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5974
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5975
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5976
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5977
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5978
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5979
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5980
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5981
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5982
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5983
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5984
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5985
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5986
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5987
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5988
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5989
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5990
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5991
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5992
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5993
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5994
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5995
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5996
+      { "kick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5997
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5998
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  5999
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6000
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6001
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6002
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6003
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6004
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6005
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6006
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6007
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6008
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6009
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6010
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6011
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6012
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6013
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6014
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6015
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6016
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6017
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6018
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6019
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6020
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6021
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6022
+      // 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
  6023
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6024
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6025
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6026
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6027
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6028
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6029
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6030
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6031
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6032
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6033
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6034
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6035
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6036
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6037
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6038
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6039
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6040
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6041
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6042
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6043
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6044
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6045
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6046
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6047
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6048
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6049
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6050
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6051
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6052
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6053
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6054
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6055
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6056
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6057
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6058
+      { "bookmark", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6059
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6060
+          { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6061
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6062
+        (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6063
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6064
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6065
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6066
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6067
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6068
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6069
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6070
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6071
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6072
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6073
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6074
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6075
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6076
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6077
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6078
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6079
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6080
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6081
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6082
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6083
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6084
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6085
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6086
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6087
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6088
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6089
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6090
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6091
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6092
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6093
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6094
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6095
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6096
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6097
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6098
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6099
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6100
   gpointer bud;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6101
@@ -3347,7 +4547,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6102
       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
  6103
   } 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
  6104
     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
  6105
-      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
  6106
+      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
  6107
   } 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
  6108
     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
  6109
       room_nick(bud, arg);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6110
@@ -4162,5 +5362,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6111
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6112
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6113
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6114
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6115
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6116
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6117
diff -r 1b0b563a81e6 mcabber/mcabber/commands.h
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6118
--- a/mcabber/mcabber/commands.h	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6119
+++ b/mcabber/mcabber/commands.h	Sun Mar 24 00:58:15 2013 +0200
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6120
@@ -5,32 +5,362 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6121
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6122
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6123
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6124
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6125
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6126
+//  DONE(?):
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6127
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6128
+// * Clustering of options/switches
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6129
+//   - with separate values - just specify the same index
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6130
+//   - use the same flags on all of the clustered options, or result may be a bit unpredictable
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6131
+// * for now we'll do without multi-options.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6132
+// * checks
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6133
+//   - argument type == public struct with name and callbacks, simple!
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6134
+//   - command checks should be just single callbacks
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6135
+//   - argument checker needs:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6136
+//     - [in] value string (current or default)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6137
+//     - [in] additional input data for some generic checkers (like string2enum wordlist)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6138
+//     - [out] replacement value (not necessary string)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6139
+//       - replacement value may need freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6140
+//     - [out] error string
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6141
+//       - that may need freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6142
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6143
+//  TODO:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6144
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6145
+// * checkers can use visited flag to check if value is rw
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6146
+//   - but what if in-checker assigns ro value, like buddy_getjid()?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6147
+//   - maybe need separate flag for that
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6148
+// * now, that we have rjid, merge bjid/fjid checkers into one
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6149
+// * Usable documentation in sources/howto
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6150
+// * Changelog entry
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6151
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6152
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6153
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6154
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6155
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6156
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6157
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6158
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6159
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6160
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6161
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6162
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6163
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6164
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6165
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6166
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6167
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6168
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6169
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6170
+//     - percent (numerical, restrictive)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6171
+//   - number (result - uint)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6172
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6173
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6174
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6175
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6176
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6177
+//   - current_buddy
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6178
+// * Usable subsystem for completion, based on user-supplied completors
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6179
+// * commands:
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6180
+//   - say/msay/say_to/room privmsg/process_line() - sort things out, maybe write special argchecker
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6181
+//   - buffer close now only accepts windows with jid. additional checker, that also allows current 'status' buffer?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6182
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6183
+//  XXX:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6184
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6185
+// * while escaped aliases should not be expanded, we should still unquote them for command search
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6186
+// * allow escaping in options?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6187
+// * merge cmdopt_t and cmdarg_t?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6188
+//   - improve the checker error messages
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6189
+//   - extra NULLs to specify in arg definition
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6190
+//   - inconvenient positioning of shortopt/longopt or argname in sequence
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6191
+//   - merge options/arguments?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6192
+//   - describe values, not opt/args?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6193
+// * command ref and name in special value 0 and indexing starts from 1?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6194
+//   - requires allocation of values always
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6195
+//   - though there's not that many commands without arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6196
+// * command checker is not quite effective
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6197
+//   - I'd like to run it before allocating anything
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6198
+//   - so far only one of them
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6199
+// * unable to put checker before allocation because in many cases it will be in subcommand.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6200
+//   - separate command/subcommand values and use subcommand callbacks?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6201
+//   - ignore command options and always go directly to subcommand parsing if present?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6202
+//     (i.e. subcommand is always first argument and consumes the end of the line
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6203
+// * type name generator callback
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6204
+//   for generic types to construct something like "foo|bar|baz"
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6205
+// * [+foo|-foo] support?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6206
+// * Subcommands with fallback to argument?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6207
+// * Multivalue options
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6208
+//   - list
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6209
+//     - special checker
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6210
+//     - or run checker multiple times
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6211
+//   - or run command several times
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6212
+//     - what if there are several of such arguments?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6213
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6214
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6215
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6216
+//  Type predeclarations
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6217
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6218
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6219
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6220
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6221
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6222
+typedef struct cmdarg_type_struct  cmdarg_type_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6223
+typedef struct cmdarg_value_struct cmdarg_value_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6224
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6225
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6226
+//  Callback type definitions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6227
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6228
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6229
+// Command execution environment check function.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6230
+// Note: This is called before options are parsed, but values are already allocated.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6231
+typedef gchar *(*cmd_checker_t)(const cmdopts_t *command, cmdarg_value_t *args);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6232
+// Command function itself.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6233
+// Command definition is provided for userdata access, should not be modified.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6234
+typedef gchar *(*cmd_handler_t)(const cmdopts_t *command, cmdarg_value_t *args);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6235
+// Should check value -> value.arg and replace, if needed.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6236
+// Can set cmdarg_freeme flag to request type destructor call.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6237
+// Can access argument definition via value -> src (but not modify it).
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6238
+typedef gchar *(*cmdarg_checker_t)(cmdarg_value_t *value);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6239
+// Free resources, used in value, if needed.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6240
+typedef void (*cmdarg_destructor_t)(cmdarg_value_t *value);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6241
+// TODO Return possible completions for given argument.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6242
+typedef void (*cmdarg_completor_t)(void);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6243
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6244
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6245
+//  Data type definitions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6246
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6247
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6248
+// command description flags
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6249
+typedef enum {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6250
+  cmd_default     = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6251
+  cmd_safe        = 0x0001, // command is safe to use in mcabberrc
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6252
+} cmd_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6253
+// argument description flags
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6254
+typedef enum {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6255
+  cmdarg_default  = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6256
+  cmdarg_catchall = 0x0001, // argument consumes the end of command line
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6257
+  cmdarg_plain    = 0x0002, // quotes and escapes are not processed
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6258
+  cmdarg_check    = 0x0004, // forse checker call on argument
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6259
+  cmdarg_required = 0x0008, // checker errors are fatal (checker may use as well)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6260
+  cmdarg_subcmd   = 0x0010, // argument is subcommand
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6261
+  cmdarg_switch   = 0x0020, // option without argument, value is count
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6262
+  // shortcuts:
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  6263
+  cmdarg_eol      = 0x0003, // catchall + plain
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6264
+  cmdarg_chreq    = 0x000C, // check + required
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6265
+  cmdarg_special  = 0x0030, // subcmd + switch
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6266
+  cmdarg_trigger  = 0x0024, // switch + check
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6267
+} cmdarg_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6268
+// argument value flags (internal)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6269
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6270
+  cmdval_default  = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6271
+  cmdval_visited  = 0x0100, // marks initialized arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6272
+  cmdval_freeme   = 0x0200, // marks argument, that needs freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6273
+} cmdval_flags_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6274
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6275
+// command description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6276
+struct cmdopts_struct {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6277
+  const char          *name;     // [user,req] command name (error messages, help, subcommands)
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6278
+  const cmd_flags_t   flags;     // [user,req] safe
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6279
+  const cmd_checker_t check;     // [user,req] checker routine
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6280
+  const cmd_handler_t handle;    // [user,req] main command processing function
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6281
+  const cmdopt_t      *opts;     // [user,req] options
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6282
+  const cmdarg_t      *args;     // [user,req] arguments
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6283
+  const cmdopts_t     *cmds;     // [user,req] subcommands
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6284
+  gconstpointer       userdata;  // [user]
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6285
+  size_t              valno;     // internal, number of values to allocate
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6286
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6287
+// positional/option argument description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6288
+struct cmdarg_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6289
+  const char           *name;    // [user,req] argument name - errors, help (unused for switches, but must be initialized)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6290
+  const size_t         pos;      // [user,req] value positional number
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6291
+  const cmdarg_flags_t flags;    // [user,req] catchall, plain, check, required, subcommand, switch
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6292
+  const char           *defval;  // [user,req] default value (unused for switches)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6293
+  const cmdarg_type_t  *type;    // [user,req] type cbs - checker and completor (unused for switches and subcommands)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6294
+  gconstpointer        chkdata;  // [user] instance data for type checker - eg string2enum list (unused for switches and subcommands)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6295
+  gconstpointer        userdata; // [user]
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6296
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6297
+// option description
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6298
+struct cmdopt_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6299
+  const char           shortopt; // [user,req]
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6300
+  const char           *longopt; // [user,req]
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6301
+  cmdarg_t             arg;      // [user,req]
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6302
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6303
+// argument type description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6304
+struct cmdarg_type_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6305
+  cmdarg_checker_t    check;     // [user,req] check string and set argument value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6306
+  cmdarg_destructor_t free;      // [user,req] free argument value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6307
+  cmdarg_completor_t  complete;  // [user,req]
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6308
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6309
+// argument value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6310
+struct cmdarg_value_struct {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6311
+  const cmdarg_t *src;           // source of value
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6312
+  cmdval_flags_t flags;          // visited, freeme
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6313
+  union {                        // value:
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6314
+    guint           uint;        // - unsigned integer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6315
+    gint            sint;        // - signed integer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6316
+    guint           swc;         // - switch count
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6317
+    const gchar     *roarg;      // - XXX default value
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6318
+    gchar           *arg;        // - string argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6319
+    const cmdopts_t *cmd;        // - subcommand
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6320
+    struct {                     // - roster jid:
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6321
+      gpointer      bud;         //   - buddy struct
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6322
+      gchar         *resource;   //   - resource (optional)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6323
+    } rjid;                      // 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6324
+    struct {                     // - filename
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6325
+      gchar         *utf8;       //   - in utf8
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6326
+      gchar         *local;      //   - in local FS encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6327
+    } fname;                     //
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6328
+    time_t          time;        // - date/time
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6329
+    gpointer        ptr;         // - anything else
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6330
+  } value;                       //
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6331
+};
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6332
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6333
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6334
+//  Public functions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6335
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6336
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6337
+// add command definition
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6338
+void cmd_define (cmdopts_t *command);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6339
+// remove command definition
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6340
+void cmd_undef (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6341
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6342
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6343
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6344
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6345
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6346
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6347
+const char *cmdopts_parse_argument(gchar **pr, gchar **er, cmdarg_flags_t flags);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6348
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6349
+// flags for cmd_execute()
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6350
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6351
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6352
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6353
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6354
+} cmdexe_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6355
+// return codes for cmd_execute() and process_line()
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6356
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6357
+  cmd_result_ok   = 0,       // all is ok
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6358
+  cmd_result_syntax_error,   // syntax or environment check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6359
+  cmd_result_value_error,    // argument value missing or type check error
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6360
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6361
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6362
+  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
  6363
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6364
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6365
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6366
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6367
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6368
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6369
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6370
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6371
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6372
+// 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
  6373
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6374
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6375
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6376
+// Process a command/message line. If this isn't a command, this is a message
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6377
+// and it is sent to the currently selected buddy. The line is converted from
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6378
+// local encoding to utf8.
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6379
+// 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
  6380
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6381
+cmd_result_t process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6382
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6383
+//
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6384
+//  Command checkers
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6385
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6386
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6387
+// checks if connection is available
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6388
+gchar *cmd_check_online (const cmdopts_t *command, cmdarg_value_t *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6389
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6390
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6391
+//  Standard argument types
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6392
+//
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6393
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6394
 typedef struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6395
-  char name[32];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6396
-  const char *help;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6397
-  guint completion_flags[2];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6398
-  void (*func)(char *);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6399
-  gpointer userdata;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6400
-} cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6401
+  const char *name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6402
+  guint      value;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6403
+} string2enum_t;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6404
 
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6405
-void cmd_init(void);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6406
-cmd *cmd_get(const char *command);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6407
-int  process_line(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6408
-int  process_command(const char *line, guint iscmd);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6409
-char *expandalias(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6410
-#ifdef MODULES_ENABLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6411
-gpointer cmd_del(gpointer id);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6412
-gpointer cmd_add(const char *name, const char *help, guint flags1, guint flags2,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6413
-                 void (*f)(char*), gpointer userdata);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6414
-gboolean cmd_set_safe(const gchar *name, gboolean safe);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6415
+// destructor, that g_free()s value.arg
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6416
+void cmdarg_free_gfree (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6417
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6418
+// strips space at the start/end and ensures, that string have non-zero length
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6419
+gchar *cmdarg_check_nonspace        (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6420
+// checks, that jid is in roster and returns buddy
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6421
+gchar *cmdarg_check_roster_bjid     (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6422
+// checks, that jid is in roster and have specified resource, returns buddy and resource
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6423
+gchar *cmdarg_check_roster_resource (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6424
+// checks for group with given name and returns buddy
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6425
+gchar *cmdarg_check_roster_group    (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6426
+// checks correctness of jid syntax
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6427
+gchar *cmdarg_check_fjid            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6428
+// checks correctness of jid syntax, strips resource
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6429
+gchar *cmdarg_check_bjid            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6430
+// transforms to guint
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6431
+gchar *cmdarg_check_uint            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6432
+// checks, that string consists of characters from a given set
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6433
+gchar *cmdarg_check_charset         (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6434
+// checks, that string is from the given list, and returns corresponding guint value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6435
+gchar *cmdarg_check_string2enum     (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6436
+// checks mcabber color name syntax
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6437
+gchar *cmdarg_check_color           (cmdarg_value_t *arg);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6438
+// expands filename and converts encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6439
+gchar *cmdarg_check_filename        (cmdarg_value_t *arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6440
+// destructor, frees both names
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6441
+void cmdarg_free_fname              (cmdarg_value_t *arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6442
+// converts iso-8601 date to epoch
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6443
+gchar *cmdarg_check_date            (cmdarg_value_t *arg);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6444
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6445
+// ready for use standard type descriptions
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6446
+const cmdarg_type_t cmdarg_type_nonspace;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6447
+const cmdarg_type_t cmdarg_type_roster_bjid;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6448
+const cmdarg_type_t cmdarg_type_roster_resource;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6449
+const cmdarg_type_t cmdarg_type_roster_group;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6450
+const cmdarg_type_t cmdarg_type_fjid;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6451
+const cmdarg_type_t cmdarg_type_bjid;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6452
+const cmdarg_type_t cmdarg_type_uint;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6453
+const cmdarg_type_t cmdarg_type_charset;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6454
+const cmdarg_type_t cmdarg_type_string2enum;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6455
+const cmdarg_type_t cmdarg_type_color;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6456
+const cmdarg_type_t cmdarg_type_filename;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6457
+const cmdarg_type_t cmdarg_type_date;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6458
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6459
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6460
+//  Private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6461
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6462
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6463
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6464
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6465
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6466
+#if 0
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6467
+// return highest index for value, used in command
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6468
+size_t cmdopts_count_values (const cmdopts_t *command);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6469
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6470
+// allocate values array to store arguments
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6471
+cmdarg_value_t *cmdopts_allocate_values (const cmdopts_t *command);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6472
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6473
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef, values )
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6474
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6475
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6476
+// string should be considered corrupted by parsing process.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6477
+gchar *cmdopts_parse_internal (gchar **pr, gchar **er, const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6478
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6479
+// perform type checking/conversion on parsed values
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6480
+gchar *cmdopts_check_values (const cmdopts_t *command, cmdarg_value_t *values);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6481
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6482
+//  cmdopts_free_values ( commanddef, values )
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6483
+// Free allocated by checkers resources and values array.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6484
+void cmdopts_free_values (const cmdopts_t *command, cmdarg_value_t *values);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6485
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6486
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6487
+  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
  6488
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6489
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6490
+} msgtype_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6491
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6492
+void say_cmd(char *arg, msgtype_t msgtype);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6493
 #endif
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6494
-gboolean cmd_is_safe(const gchar *name);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6495
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6496
 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
  6497
 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
  6498
-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
  6499
-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
  6500
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6501
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  6502
 
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6503
diff -r 1b0b563a81e6 mcabber/mcabber/hooks.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6504
--- a/mcabber/mcabber/hooks.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6505
+++ b/mcabber/mcabber/hooks.c	Sun Mar 24 00:58:15 2013 +0200
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6506
@@ -638,10 +638,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6507
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6508
   scr_LogPrint(LPRINT_LOGNORM, "Running hook-post-connect...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6509
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6510
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6511
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6512
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6513
+  if (cmd_execute(cmdline, cmd_default) == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6514
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6515
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6516
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6517
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6518
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6519
@@ -665,10 +664,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6520
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6521
   scr_LogPrint(LPRINT_LOGNORM, "Running hook-pre-disconnect...");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6522
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6523
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6524
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6525
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6526
+  if (cmd_execute(cmdline, cmd_default) == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6527
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6528
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6529
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6530
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6531
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6532
diff -r 1b0b563a81e6 mcabber/mcabber/roster.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6533
--- a/mcabber/mcabber/roster.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6534
+++ b/mcabber/mcabber/roster.c	Sun Mar 24 00:58:15 2013 +0200
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6535
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6536
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6537
 // 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
  6538
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6539
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6540
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6541
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6542
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6543
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6544
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6545
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6546
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6547
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6548
     char *found = NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6549
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6550
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6551
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6552
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6553
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6554
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6555
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6556
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6557
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6558
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6559
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6560
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6561
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6562
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6563
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6564
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6565
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6566
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6567
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6568
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6569
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6570
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6571
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6572
     }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6573
diff -r 1b0b563a81e6 mcabber/mcabber/screen.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6574
--- a/mcabber/mcabber/screen.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6575
+++ b/mcabber/mcabber/screen.c	Sun Mar 24 00:58:15 2013 +0200
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6576
@@ -3630,7 +3630,7 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6577
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6578
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6579
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6580
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6581
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6582
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6583
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6584
   scr_cmdhisto_addline(inputLine);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6585
@@ -3802,8 +3802,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6586
 void readline_send_multiline(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6587
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6588
   // Validate current multi-line
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6589
-  if (multimode)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6590
-    process_command(mkcmdstr("msay send"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6591
+  if (multimode) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6592
+    // FIXME - do it without parsing
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6593
+    gchar *cmdline = g_strdup("msay send");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6594
+    cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6595
+    g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6596
+  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6597
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6598
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6599
 void readline_insert(const char *toinsert)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6600
@@ -3883,6 +3887,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6601
 // Initiate or continue a completion...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6602
 static void scr_handle_tab(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6603
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6604
+// FIXME completion
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6605
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6606
   int nrow;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6607
   const char *row;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6608
   const char *cchar;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6609
@@ -3978,6 +3984,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6610
     if (cchar)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6611
       scr_insert_text(cchar);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6612
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6613
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6614
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6615
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6616
 static void scr_cancel_current_completion(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6617
@@ -4098,7 +4105,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6618
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6619
   if (!Curses) return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6620
   // Leave multi-line mode
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6621
-  process_command(mkcmdstr("msay abort"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6622
+  gchar *cmdline = g_strdup("msay abort");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6623
+  cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6624
+  g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6625
   // Same as Ctrl-g, now
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6626
   scr_cancel_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6627
   scr_end_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6628
@@ -4302,10 +4311,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6629
   boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6630
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6631
   if (boundcmd) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6632
-    gchar *cmdline = from_utf8(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6633
+    gchar *cmdline = g_strdup(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6634
     scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6635
-    if (process_command(cmdline, TRUE))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6636
+    if (cmd_execute(cmdline, cmdexe_default) == cmd_result_quit) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6637
+      g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6638
       return 255; // Quit
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6639
+    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6640
     g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6641
     return 0;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6642
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6643
diff -r 1b0b563a81e6 mcabber/mcabber/settings.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6644
--- a/mcabber/mcabber/settings.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6645
+++ b/mcabber/mcabber/settings.c	Sun Mar 24 00:58:15 2013 +0200
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6646
@@ -183,28 +183,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6647
     if ((*line == '\n') || (*line == '\0') || (*line == '#'))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6648
       continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6649
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6650
-    // If we aren't in runtime (i.e. startup) we'll only accept "safe" commands
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6651
-    if (!runtime) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6652
-      const gchar *cmdend = strchr(line, ' ');
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6653
-      gchar *cmdname = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6654
-      gboolean safe;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6655
-      if (cmdend)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6656
-        cmdname = g_strndup(line, cmdend - line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6657
-      safe = cmd_is_safe(cmdname ? cmdname : line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6658
-      g_free(cmdname);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6659
-      if (!safe) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6660
-        scr_log_print(LPRINT_LOGNORM, "Error in configuration file (l. %d): "
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6661
-                      "this command can't be used here", ln);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6662
-        err++;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6663
-        continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6664
-      }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6665
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6666
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6667
-    // Set the leading COMMAND_CHAR to build a command line
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6668
-    // and process the command
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6669
-    *(--line) = COMMAND_CHAR;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6670
-    if (process_command(line, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6671
+    // FIXME: in-buffer conversion? some glib iochannel stuff?
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6672
+    gchar *utf8 = to_utf8(line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6673
+    if (cmd_execute(utf8, runtime ? cmdexe_default : cmdexe_check_safe)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6674
+        == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6675
       mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6676
+    g_free(utf8);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6677
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6678
   g_free(buf);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6679
   fclose(fp);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6680
diff -r 1b0b563a81e6 mcabber/mcabber/xmpp_iq.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6681
--- a/mcabber/mcabber/xmpp_iq.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6682
+++ b/mcabber/mcabber/xmpp_iq.c	Sun Mar 24 00:58:15 2013 +0200
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6683
@@ -71,20 +71,20 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6684
 struct adhoc_status {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6685
   char *name;   // the name used by adhoc
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6686
   char *description;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6687
-  char *status; // the string, used by setstus
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6688
+  enum imstatus status; // corresponding imstatus value
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6689
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6690
 // It has to match imstatus of roster.h!
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6691
 const struct adhoc_status adhoc_status_list[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6692
-  {"offline", "Offline", "offline"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6693
-  {"online", "Online", "avail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6694
-  {"chat", "Chat", "free"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6695
-  {"dnd", "Do not disturb", "dnd"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6696
-  {"xa", "Extended away", "notavail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6697
-  {"away", "Away", "away"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6698
+  {"offline", "Offline", offline},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6699
+  {"online", "Online", available},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6700
+  {"chat", "Chat", freeforchat},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6701
+  {"dnd", "Do not disturb", dontdisturb},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6702
+  {"xa", "Extended away", notavail},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6703
+  {"away", "Away", away},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6704
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6705
-  {"invisible", "Invisible", "invisible"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6706
+  {"invisible", "Invisible", invisible},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6707
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6708
-  {NULL, NULL, NULL},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6709
+  {NULL, NULL, imstatus_size},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6710
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6711
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6712
 static char *generate_session_id(char *prefix)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6713
@@ -289,10 +289,11 @@
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6714
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6715
         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
  6716
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6717
-          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
  6718
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6719
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6720
-          g_free(status);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6721
+          // It makes sense to reset autoaway before changing the status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6722
+          // (esp. for FIFO or remote commands) or the behaviour could be
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6723
+          // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6724
+          scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6725
+          xmpp_setstatus(s->status, NULL, message ? message : "", FALSE);
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6726
           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
  6727
           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
  6728
                                               "Status has been changed");
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6729
diff -r 1b0b563a81e6 mcabber/modules/beep/beep.c
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6730
--- a/mcabber/modules/beep/beep.c	Wed Mar 13 16:11:16 2013 +0200
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6731
+++ b/mcabber/modules/beep/beep.c	Sun Mar 24 00:58:15 2013 +0200
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6732
@@ -31,6 +31,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6733
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6734
 static void beep_init   (void);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6735
 static void beep_uninit (void);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6736
+static gchar *do_beep (const cmdopts_t *command, cmdarg_value_t *values);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6737
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6738
 /* Module description */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6739
 module_info_t info_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6740
@@ -46,9 +47,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6741
         .next            = NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6742
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6743
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6744
-static guint    beep_cid  = 0;  /* Command completion category id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6745
-static gpointer beep_cmid = 0;  /* Command id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6746
-static guint    beep_hid  = 0;  /* Hook handler id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6747
+static guint beep_hid  = 0;  /* Hook handler id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6748
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6749
 /* Event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6750
 static guint beep_hh(const gchar *hookname, hk_arg_t *args, gpointer userdata)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6751
@@ -61,20 +60,42 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6752
   return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6753
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6754
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6755
+static const string2enum_t s2e_onoff[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6756
+  { "on",      1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6757
+  { "off",     0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6758
+  { "enable",  1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6759
+  { "disable", 0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6760
+  { "1",       1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6761
+  { "0",       0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6762
+  { "show",    2  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6763
+  { NULL,      0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6764
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6765
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6766
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6767
+  pos_beep_enable = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6768
+} pos_beep_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6769
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6770
+static cmdopts_t def_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6771
+  "beep",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6772
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6773
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6774
+  do_beep,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6775
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6776
+  (cmdarg_t[2]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6777
+    {"on|off", pos_beep_enable, cmdarg_chreq, "show", &cmdarg_type_string2enum, (gpointer)s2e_onoff},
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6778
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6779
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6780
+  NULL
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6781
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6782
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6783
 /* beep command handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6784
-static void do_beep(char *args)
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6785
+static gchar *do_beep(const cmdopts_t *command, cmdarg_value_t *values)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6786
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6787
   /* Check arguments, and if recognized,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6788
    * set mcabber option accordingly */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6789
-  if (!strcmp(args, "enable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6790
-      !strcmp(args, "on") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6791
-      !strcmp(args, "yes") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6792
-      !strcmp(args, "1"))
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6793
+  if (values[pos_beep_enable].value.uint == 1)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6794
     settings_set(SETTINGS_TYPE_OPTION, "beep_enable", "1");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6795
-  else if (!strcmp(args, "disable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6796
-           !strcmp(args, "off") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6797
-           !strcmp(args, "no") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6798
-           !strcmp(args, "0"))
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6799
+  else if (values[pos_beep_enable].value.uint == 0)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6800
     settings_set(SETTINGS_TYPE_OPTION, "beep_enable", "0");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6801
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6802
   /* Output current state, either if state is
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6803
@@ -83,19 +104,14 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6804
     scr_log_print(LPRINT_NORMAL, "Beep on messages is enabled");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6805
   else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6806
     scr_log_print(LPRINT_NORMAL, "Beep on messages is disabled");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6807
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6808
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6809
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6810
 /* Initialization */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6811
 static void beep_init(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6812
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6813
-  /* Create completions */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6814
-  beep_cid = compl_new_category(COMPL_FLAGS_SORT);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6815
-  if (beep_cid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6816
-    compl_add_category_word(beep_cid, "enable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6817
-    compl_add_category_word(beep_cid, "disable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6818
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6819
   /* Add command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6820
-  beep_cmid = cmd_add("beep", "", beep_cid, 0, do_beep, NULL);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6821
+  cmd_define(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6822
   /* Add handler
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6823
    * We are only interested in incoming message events
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6824
    */
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6825
@@ -109,11 +125,7 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6826
   /* Unregister event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6827
   hk_del_handler(HOOK_POST_MESSAGE_IN, beep_hid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6828
   /* Unregister command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6829
-  cmd_del(beep_cmid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6830
-  /* Give back completion handle */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6831
-  if (beep_cid)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6832
-    compl_del_category(beep_cid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6833
+  cmd_undef(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6834
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6835
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6836
-/* The End */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6837
 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2:  For Vim users... */